příkaz pro zapnutí 1 pinu - program

Zdravím nejsem si jist, zadli jsem název napsal správně. Stáhl jsem si pár kódů, ale nedaří se mi přijít nato, jak se určí pin, který se má zapnout. Jendná se konkrétně o ATmegu8

přiložím krátký kód, nekonečné blikání led

[code]#define F_CPU 1000000

#include <avr/io.h>
#include <util/delay.h>

int main(void)
{
DDRC = 0xFF;
while(1)
{
PORTC = 0xFF;
_delay_ms(1000);
PORTC = 0x00;
_delay_ms(1000);
}
}[/code]

PORTC = 0xFF; //tohle přivede VCC na všechny porty C
jak by to vypadalo, aby to přivedlo VCC jen na port třeba C3? to by měl být pin 26
a jak by to vypadalo, kdyby to mělo přivést VCC na port C3 a zároveň i na port D3?

Chtěl bych si zkusit naprogramovat jeden sedmisegmentový display, tak aby zobrazoval od 0 až do 9 se spožděním 1sec. Bohužel nechápu zapínání jednotlivých pinů.

Díky za ochotu a pomoc.

Takže za 1.) ATmega8 je procesor z rodiny AVR (výrobca ATMEL, dnes už MICROCHIP) a pre túto rodinu tu je vytvorená téma, nepatrí do tejto , poprosím adminov o presun do správnej …

A ZA 2.)

PIN C3 nastavíš tak, že zapíšeš jednotku len priamo na PIN C3.

 PORTC |= (1<<PC3)     //nastaví PIN C3 do log1 

Pre port D to je adekvátne, len pracuješ s portom D:

PORTD |= (1<<PD3) //nastaví PIN D3 do log1 - samozrejme musí byť nastavený ako výstupný.

K portu C (alebo D) pripočítaš logickým súčtom 1 na danom PINe, pričom ti to neovplivní ostatné PINy daného portu.

Pre nulovanie to je podobné:

PORTC &= ~(1<<PC3);          //nastaví PIN C3 do log0
PORTD &= ~(1<<PD3);          //nastaví PIN D3 do log0

Port (C alebo D) vynásobíš bitovým násobkom, kde všetky bity budú v log 1, iba bit, ktorý potrebuješ vynulovať bude v log 0.

Toto sú základy bitových operácii v jazyku C. Odporúčam naštudovať základy jazyka C napríklad v knihe od HEROUTa…

Díky moc, pěkně vysvětlený :slight_smile:

Příště už to snad hodím do správné kategorie