Forum: Mikrocontroller und Digitale Elektronik ATMEGA 16 verhält sich absolut rätselhaft


von A. W. (wiwil)


Lesenswert?

Hallo zusammen,

Ich habe schon einige Schaltungen mit AVRs erfolgreich zum Laufen
gebracht, aber was mir im Moment passiert, kapiere ich nicht
ansatzweise.

Also ich habe einen ATMega16 und möchte den PORTC als Datenport für ein
Display benutzen. Nachdem es mit Beispielcode nicht klappte habe ich mal
von vorne angefangen und die Pinne einzeln durchgemessen und überprüft.
Ich habe dann das Display abgekoppelt und den Port auf High, bzw Low
gesetzt. Das klappte nicht wie erwartet. Also gut, ich konnte nicht
aussschließen, dass ich beim Port was zerstört hatte. Also 2 neue
Atmegas besorgt. Zweiter IC, gleiches Spiel. Beim dritten habe ich dann
nur die Stromversorgungspinne, die ich natürlich auch nachgemessen habe,
in der Fassung gelassen. Alle anderen Beine sind frei. Am PORTC gibt es
aber immer das gleiche Spiel. Ist der Port auf low gesetzt, oder ist
der ATmega gänzlich unprogrammiert, so kann man an den Pinnen 00101100
messen, Setzt man den kompletten Port auf high ergibt sich 11101111. An
einem anderen Port kann ich eine LED blinken lassen, der Prozessor läuft
also. Wie gesagt, die Pinne von PORTC haben keine Verbindung zu
irgendeiner Schaltung.
Auch der Code könnte einfacher ja nicht sein und funktioniert im
Simulator. Mit einem C-Compiler habe ich es auch probiert, immer das
gleiche Ergebnis.

.include "m16def.inc"

.def temp1 = r16

.org 0x000
rjmp main

.org 0x00E
main:

  LDI temp1, HIGH(RAMEND) ; Oberes Byte
      OUT SPH,temp1 ; an Stapelzeiger
      LDI temp1, LOW(RAMEND) ; Unteres Byte
      OUT SPL,temp1 ; an Stapelzeiger

  ldi temp1, 0b11111111
        out DDRC, temp1

  ldi temp1, 0b11111111
        out PORTC, temp1

loop:
      rjmp loop


Nun bin ich sehr ratlos, sowas ist mir noch nicht passiert. Hat einer
eine Idee, was das sein könnte? Die ATMegas sind auch von
unterschiedlichen Lieferanten, ein Hardware-Fehler scheint also
ausgeschlossen.

In der Hoffnung auf neue Ideen, schöne Grüße

Andreas

von Ssss S. (sssssss)


Lesenswert?

Hi!

JTAG Fuse noch aktiv ?
Ich glaub da stolpert jeder drüber g

http://www.atmel.com/dyn/resources/prod_documents/doc2466.pdf
Seite 59

Gruss,
Simon

von Hannes L. (hannes)


Lesenswert?

JTAG kann man auch ohne Fusebit-Veränderung deaktivieren.

In der Reset-Routine (nach Stackpointer-Init):

 in wl,mcucsr               ;JTAG-
 sbr wl,1<<jtd              ;Interface
 out mcucsr,wl              ;deaktivieren
 out mcucsr,wl              ;(PortC aktivieren)

Und schon sind die Portpins verfügbar...

...

von A. W. (wiwil)


Lesenswert?

Vielen Dank!!!

Ist zwar schon peinlich, aber das hat mich eine ganze Woche Suchen
gekostet. Jetzt funktioniert es ohne Probleme!
An JTAG habe ich überhaupt nicht gadacht, hatte vorher nur AVRs, die
das nicht unterstützen. Ich dachte die alternativen Portfunktionen
gehen nur wenn man sie explizit einschaltet, und nicht dass man sie
ausschalten muss.
Auch mit der Forensuche hatte ich es probiert, aber wenn man nicht weiß
wonach man suchen muss ;-)
Auf jeden Fall wieder was entscheidendes gelernt und nochmal herzlichen
Dank!

Gruß
Andreas

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
Noch kein Account? Hier anmelden.