mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem externer Bus bei ATmega64


Autor: Joachim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Ich setze das erste Mal den externen Bus des ATmega64 ein und habe 
massive Probleme damit.
Laut ATMEL muss man nur das Bit SRE in MCUCR auf 1 setzen und einen 
Schreib/Lesezugriff auf Adressen höher als 0x1100 machen.
Das Problem: Zwar messe ich an ALE einen Takt, nicht aber an RD oder WR.
Die bleiben ständig auf H.
Ich probiere seit Tagen, ein Signal aus RD oder WR herauszubekommen - 
ohne Erfolg. Habe alle möglichen Programmvarianten versucht (C, 
Assembler) und in einer Schleife alle Adressen von 0x1100 bis 0xFFFF 
angesprochen.
Die Signale bleiben tot.
Wenn ich "mit Gewalt" R30 und R31 z.B. mit 0xFF beschreibe und z.B. R24 
mit 0xA5, und dann den Befehl ST Z, R24 ausführe, dann müsste doch ein 
Schreibvorgang an Adresse 0xFFFF, Data 0xA5 ausgelöst werden. Versteh 
ich nicht..
Zuletzt habe ich noch gemerkt, dass alle neuen Bauteine defaultmäßig die 
Fuse "103 Kompatibilität" gesetzt haben.
Diese gelöscht brachte auch keinen Erfolg. Nun war auch das Signal ALE 
tot.
Ich habe im Internet nach Hinweisen oder Problemen durchsucht.
Aber scheinbar bin ich der einzige mit diesem Problem.
Gibt es jemanden, der mit dem externen Bus arbeitet und wenn, gibt es da 
einen Punkt, den ich übersehen habe?
Ich weiss nicht mehr weiter.

Danke.

Joachim

Autor: Michael U. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

normalerweise nur SRE in MCUCR setzen, um das Interface einzuschalten.
Ansonsten eben 74HC(T)373 und passenden Ram ran und fertig.
Hatte ich noch nie Probleme mit, daß da was nicht ging, auch nicht mit 
LCD-Modul als Memory-Mapped usw.

Allerdings habe ich da noch nie gemessen, ging eben. ;)

Gruß aus Berlin

Autor: Joachim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist bei Dir die Fuse "103" 0 oder 1?
Ich habe nun einen neuen Test gemacht, und PORTG als normalen Port 
angesprochen. Alle Ports wechseln zwischen 0 und 1. Nur Port G bleibt 
davon unberührt (SRE = 0).
Ich dreh langsam echt durch.

Joachim

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Fuse muss 1 sein. Wobei die 1 gelöscht bedeutet.
Vieleicht spielt dein Prommerprogramm dir einen Streich.
Anklicken heisst programmieren, und damit 0 (gesetzt).
Negative Logik !

Autor: Joachim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also Haken weg = Kompatibilitätsmodus aus.
Soviel hab ich nun verstanden.
Trotzdem bleiben die Signale tot. Habe alle möglichen Kombinationen 
versucht. Mit und ohne Waitstates, SRE 1 oder 0 (Ports versucht, als IO 
direkt anzusprechen).
Es nutzt nichts, Ports F und G bleiben tot. Egal was ich mache.
Alle anderen funktionieren einwandfrei.

Ich gebs jetzt erstmal auf.. nach 5 Stunden Probiererei für heute die 
Nase voll.

Trotzdem Danke.

Joachim

Autor: gtf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi  Joachim ,
 hast du auch AVCC mit der Versorgungsspanung verbunden,  hab mal gehört 
dass der PortF beim m64 vom AVCC versorgt wird?

Autor: gtf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
JTAG Fuse auf Eis gelegt? :- )
Beim m16 lassen sich alle JTAG Pinns nicht ändern wenn JTAG an ist.

Autor: Joachim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So, Lösungsansatz gefunden.
Das Problem scheint nicht am Bus zu liegen, sondern am C-Compiler.
Die Port- und CPU-settings wurden über ein Unterprogramm aufgerufen.
Nun habe ich mal ein "Spaghetti" Programm geschrieben und keine CALLs 
benutzt.
Und plötzlich läufts!
Vermutlich wird der Stackpointer falsch initialisiert (laut Listfile auf 
0x10FF). Jedenfalls liegt es definitiv an Unterprogrammaufrufen.
Verwende den ICC Compiler und habe bisher mit Mega8 nie Probleme gehabt.
Vielleicht ist die Startup-Prozedur für den Mega64 falsch.
Alle bisherigen Messungen und Laufverhalten waren also nur Zufall.

Wieder ein Grund mehr für mich, künftig ausschließlich in Assembler zu 
programmieren.
Da sucht man 2 Tage lang nach irgendeinem eingebauten Compiler-Mist :-(
Von "effektiverem" Programmieren kann da keine Rede sein. Pure 
Zeitverschwendung.
Grrr!!

Trotzdem Danke für die Tips.

Joachim

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.