Klick jetzt mal auf das blaue "Servo" und schaust welchen Servo du hast und schließt die signal leitung an scl und hier steht was zum port definieren
Code:
Port definieren
Für jeden port gibt es drei register, in denen jeweils 8 bit gespeichert werden. sinnvollerweise steht immer das nullte bit für den nullten pin, das erste bit für den ersten usw. bis zum siebten bit für den siebten pin. es gibt (zumindest rein auf informatischer ebene =) weder ein achtes bit noch einen achten port =)
als beispiel nehme ich port D, für alle anderen ports muss nur jeweils der großbuchstabe geändert werden.
die drei register heissen
DDRA,DDRB,DDRC,DDRD für die RICHTUNG
-für jedes bit gilt, 1=ausgang,0=eingang
PORTA,PORTB,PORTC,PORTD für den ausgangspegel oder die pullups(später)
1=strom an, 0 = aus ODER 1=pullup an, 0=aus
PINA,PINB,PINC,PIND für das eingangssignal.
1 gelesen = strom von aussen ist an, 0=aus
wenn ich also PD2 zum beispiel einschalten möchte, dass 5v spannung ausgegeben werden, muss ich
zuerst in das richtungsregister an die entsprechende stelle eine 1 schreiben. damit die anderen bits nicht verändert werden, wird das ganze mit einer ODER-bedingung verknüpft.
damit man nicht immer alle bitwerte in hex-zahlen umrechnen muss (was aber durchaus möglich ist) wird einfach nur eine 1 verschoben, wie recht weit obern geschrieben mit dem << - operator.
für pd2:
DDRD |= (1<<2);
also im register DDRD wird das zweite bit gesetzt. der pin ist jetzt ein ausgang.
jetzt wollen wir strom anlegen, dafür ist das register PORTD da. hier muss eine 1 gesetzt werden zum einschalten oder eine null zum ausschalten. aber um eine null zu setzen, muss man umdenken: man verschiebt eine 1 an die entsorechende stelle, (00000100) invertiert das ganze mit dem ~ operator (11111011) und verknüpft das ganze mit dem und-operator.
PORTD |= (1<<2); //eingeschaltet
PORTD &= ~(1<<2); //ausgeschaltet.
damit kannst du zb schon leds anschalten usw, du kannst ja einfach im schaltplan rausfinden an welchem pin die jeweilige led angeschlossen ist.
um einen pin als eingang zu nutzen, zb um einen taster auszulesen, muss der taster gegen masse an den pin angeschlossen werden.
also GND --- taster --- atmega
dann schaltest du dein pin auf eingang:
DDRD &= ~(1<<2);
und den pullup-widerstand ein. das ist nötig um festzuegen dass der pin solange high ist bis der taster gedrückt wird.
PORTD |= (1<<2); //das gleiche register wie für den ausgangpegel, aber hier für den pullupverwenndet
wenn du jetzt wissen willst ob der taster gedrückt wurde, mach folgendes
unsigned char test;
test = PIND & (1<<2);
wenn test >0 ist, dann wurde die taste NICHT gedrückt, wenn test gleich null ist, wurde die taste gedrückt.
Lesezeichen