Guten Tag, ich habe einen ATmega162, und wollte alle I/O Ports als Ausgang deklarieren und auf high setzen (meine persönliche Art der Funktionsprüfung). Habe, wie es sich gehört, alle DDRx-Register und alle PORTx-Register auf high gesetzt (Nebenbei: JTAG habe ich abgeschaltet, um diese Ports auch nutzen zu können). Nun das Problem: Die DDRx-Register sind zwar mit 0xff beschrieben, also auf high, dennoch sind die Ports nicht als Ausgang deklariert. Es sind lediglich die Pull-Ups eingeschaltet. Dies ist nur bei den Ports PA, PB, PC und PD so, der Port PE funktioniert. Habe es auch mit einem Bau- und Typgleichen Controller – also auch ATmega162 – versucht, bei dem genau das gleiche. Woran liegt das und was muss ich machen? Der Source-Code ist, wie ihr sehen könnt, sehr einfach. ------------------------------------------------------------------------ --- ;ATmega162__Port-Output-Test ;Alle Ports sind als Ausgang deklariert und führen High-Pegel ;_______________________________________________________________________ _ ;-----------------------------------Boot-------------------------------- --- .include "m162def.inc" .cseg rjmp start .org 0x038 start: ;----------------------------Stapelzeiger_laden------------------------- --- ldi r16,high(ramend) out sph,r16 ldi r16,low(ramend) out spl,r16 ;----------------------------Ausgänge_definieren------------------------ --- ldi r23,0b11111111 out ddra,r16 out ddrb,r16 out ddrc,r16 out ddrd,r16 ldi r23,0b00000111 out ddre,r16 ;-----------------------------JTAG_abschalten--------------------------- --- in r16,mcucsr ;MCU Control and Status Register in r16 laden sbr r16,1<<jtd out mcucsr,r16 ;Bit7 (JTD) setzen nop out mcucsr,r16 ;Bit7 (JTD) setzen ;_______________________________________________________________________ _ ;------------------------------Haupt-Programm--------------------------- --- ldi r16,0b11111111 out porta,r16 out portb,r16 out portc,r16 out portd,r16 ldi r16,0b00000111 out porte,r16 loop: nop rjmp loop .exit
Das hast du schon mal gepostet. Wieso jetzt noch mal? Quellcodes hängt man nicht als Bild an sondern als Text!
Hi > ldi r23,0b11111111 > out ddra,r16 > out ddrb,r16 > out ddrc,r16 > out ddrd,r16 > ldi r23,0b00000111 > out ddre,r16 Fällt dir was auf? MfG Spess
Ja, ursprünglich war dies das Problem mit dem „Portspannung am ATmega bricht ein“. Ich habe aber nun – wie oben geschrieben – herausgefunden, dass einfach die DDRx-Register nicht gesetzt sind. @spess53: Was mir auffallen soll, ist natürlich das Register r23. Aber ich habe es so gemacht, wie im Bild-Anhang. Für diesen Fehler bitte ich um Entschuldigung.
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.