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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren