Hallo Ich mach gerade das AVR GCC Tutorial von dieser Seite durch Ich habe ein STK500 mit einen ATmega8515 uC Aktuell hab ich schon ein Verständnisproblem in Zeile 4. In Zeile 3 Schalte ich meinen Port B als Ausgang. In der Zeile 4 aktiviere ich meine Ausgänge, es sollten nach meiner Auffasung also LED 0 (Port B Pin 0) und LED 1 (Port B Pin 1) leuchten. Leider ist genau das Gegenteil der Fall. LED 0 & 1 leuchten nicht dafür aber der Rest. Hoffe ihr könnt mir erklären wieso das so ist . Anbei die Codezeilen mit Erklärung: int main (void) { // (2) DDRB = 0xFF; // (3) PORTB = 0x03; // (4) while(1) { // (5) /* "leere" Schleife*/ // (6) } // (7) /* wird nie erreicht */ return 0; // (8) } Zu 3. Da per Definition (Datenblatt) alle gesetzten Bits in einem Datenrichtungsregister den entsprechenden Anschluss auf Ausgang schalten, werden mit DDRB=0xff alle Anschlüsse des Ports B als Ausgänge eingestellt. Zu 4. Die den ersten beiden Bits des Ports zugeordneten Anschlüsse (PB0 und PB1) werden 1, alle anderen Anschlüsse des Ports B (PB2-PB7) zu 0. Aktivierte Ausgänge (logisch 1 oder "high") liegen auf Betriebsspannung (VCC, meist 5 Volt), nicht aktivierte Ausgänge führen 0 Volt (GND, Bezugspotential).
>Leider ist genau das Gegenteil der Fall. >LED 0 & 1 leuchten nicht dafür aber der Rest. > >Hoffe ihr könnt mir erklären wieso das so ist . Die LEDs am STK500 hängen mit der Anode an 5V und die Kathode wird geschaltet. Eine LED geht also bei 0V an.
Michael B. schrieb: > PORTB = 0x03; // (4) Ginge dann mit PORTB = ~ 0x03; Der ~ Operator invertiert bitweise. Wird halt lästig, wenn man das an vielen Stellen im Programm hat und während der Entwicklung auf dem STK die LEDs 'korrekt' sehen will, in der Anwendung dann aber alles invers aktiv sein soll. Man könnte auch einmalig z.B. schreiben: #define STK ~ und dann in den Zeilen der Portausgaben PORTB = STK 0x03; Wenn du jetzt auf die Zielhardware mit umgekehrten Verhalten gehen willst, dann änderst du das #define in #define STK und kompilierst nochmal.
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.