Hi, schaut euch mal folgenden Code an: #include <avr/io.h> int main(void) { DDRB = 0b00000001; PORTB = 0b00000001; return 1; } Ich habe an PB0 eine LED mit Vorwiderstand angeschlossen. Wenn ich Minus der LED an PB0 und Plus der LED an +5V anschließe passiert gar nichts obwohl das auch so im Assemblertutorial eingezeichnet ist; drehe ich die LED d.h. Plus der LED kommt an PB0 und Minus der LED an GND leuchtet sie. Habe ich da was falsch verstanden? Geht das nicht auch andersrum?
Also ich finde es OK wenn die das minus der LED an den GND angeschlosse ist. Wo ist es denn anders dargestellt?
Schau mal hier: http://www.mikrocontroller.net/articles/AVR-Tutorial:_IO-Grundlagen und scheinbar soll das auch gehen.
Da wird aber auch ein anderer Wert in PortB geschrieben
1 | ldi r16, 0b11111100 ; 0b11111100 in r16 laden |
2 | out PORTB, r16 ; r16 ins IO-Register PORTB ausgeben |
Da wird der Port auf Low gesetzt, also muß die LED nach VCC, du setzt den Port auf High -> anderer LED Pin auf GND damit die LED leuchtet.
Werde ich ausprobieren, danke. Aber wenn du DDRB = 0b00000001 setzt ist er doch auf Ausgang gesetz oder? Wie kann ich dann den PORTB = 0b00000000 (LOW also Minus?) setzen, widerspricht sich das nicht irgendwie?
wulga schrieb: > widerspricht sich das nicht irgendwie? nein weil ein ausgang auch 2 zustände anehmen kann, einmal liefert er strom und einmal kann er welchen aufnehmen. Schau dir doch mal das BLockschaltbild von den IO-Anschlüssen das Atmels an.
@Mike S. danke ich habs jetzt glaube ich verstanden. Muss das nur selber nochmal testen, damit es sitzt.
Das DDRB setzt die Richtung (Eingang oder Ausgang) während du mit PORTB die einzelnen Pins HIGH oder LOW schalten kannst. Ist bei deinem Link unter Pullup-Widerstand eigentlich sehr schön erklärt.
>return 1;
Wohin soll denn das Programm zurückkehren?
Mach mal nen while(1); draus.
> Ich habe an PB0 eine LED mit Vorwiderstand angeschlossen. > Minus der LED an PB0 und Plus der LED an +5V Das ist eine active low Schaltung: Die LED leuchtet, wenn PB0 einen LOW Pegel hat. > DDRB = 0b00000001; > PORTB = 0b00000001; Das erzeugt einen HIGH Pegel an PB0.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.