AVR ATmega162: Ports lassen sich nicht als Ausgang deklarieren

Gast #1387046
Lesenswert?
• ▲
▼
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
Angehängte Dateien:
Gast #1387071
Lesenswert?
• ▲
▼
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.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.