Problem externer Bus bei ATmega64

Gast #528598
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
Gast #528601
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
Gast #528626
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
Gast #528634
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 !
Gast #528679
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
Gast #529219
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

Eine eigene Frage? Dieser Thread ist über 19 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.