Ich hab hier: http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Eing.C3.A4nge_.28Wie_kommen_Signale_in_den_.C2.B5C.29 nicht kapiert, was der Unterschied zwischen PIND und PORTD sein soll, weil ja mit PORTD auch gelesen werden kann!?
Gast
#346923
nein PORTD kannst du zwar auslesen, da wird aber nur das drin stehen was du vorher rein geschrieben hast. PIND ist um den tatsächlichen port status ein zu lesen.
Gast
#346924
ja, PORTD kann auch gelesen werden. Allerdings steht da drin, was du auch in PORTD reingeschrieben hast. In PIND steht das drin, was an den Port-Pins anliegt, wenn diese per DDRD als Eingang geschaltet wurden. Dann steht in PORTD der Zustand der internen Pull-Up-Widerstände.
Gast
#346925
PIND benuztst du wenn der PIN als Eingang funktuiniert, und ud möchtest die Status lesen. PORTD benutzst du wenn es ist ein Ausgang und du möchtest lesen was hast du im PORTD geschriben. Wenn ein PIN als eingang konfiguriert ist, mit PORTD.x = 1, du aktivierst ein pull-up Wiederstand in der PIN. Ich hoffe es hilft.
Gast
#346926
PORTD ist das Portregister, das den Zustand der Ausgangstreiber enthält, völlig unabhängig davon, was an dem Pin (extern) wirklich passiert. PIND ist kein Register, sondern nur eine Adresse im IO-Space, an der der aktuelle Zustand des Pins gelesen werden kann.
Oh weia! Wenn ich ein Display anschließe, und dort dann 8 pins lesen will - muss ich dann "DDRD - was'n das??" auf "Eingang" schalten, dann mit PIND lesen, und wieder auf "Ausgang" schalten?
Gast
#346928
DDR = Data Direktions Register. 1 = Ausgang, 0 = Eingang
Gast
#346929
Genau so isses. Zum schreiben den Port als Ausgang (DDRD.x = 1), Daten in PORTD.x schreiben, und zum lesen als Eingang (DDRD.x = 0) und die Daten über PIND einlesen. Vor dem Einlesen sollte man natürlich noch das Portregister in einen definierten Zustand bringen (da die üblichen LCDs aktive Ausgänge haben, sollte man dann PORTD.x = 0 setzen [Pull-Ups ausgeschaltet], und zwar am besten vor dem Umschalten der Datenrichtung).