Hallo! Ich wollte mein altes Radio-Projekt wieder zum Leben erwecken und musste feststellen, das mein ATTiny2313 einen defekt hatte. Tausch kein Problem, aber ich konnte alleranschein nach nicht das passende Programm mehr richtig rekonstruieren. Die Alte ASM-Datei hatte einen kleinen Fehler, welcher sich nun im AVR äußert. Das Programm konnte compiliert werden im AVR-Studio mit 0 Fehler und 0 Warnungen, Jetzt steht im Display nur _. statt der Frequenzanzeige und das Teilerverhältnis zum LM7001 schaut auch nicht OK aus. Ich suche den Fehler schon seit 3 Tagen und komme einfach nicht weiter. Erkennt jemand, was in dem Code falsch läuft? Ich bedanke mich schon mal vorher.
Mediafox F. schrieb: > .INCLUDE "tn2313def.inc" ; Befehlsliste des ATMega328P Du solltest Dich erstmal entscheiden, welcher Typ. Und ohne Schaltplan wird das eh nichts. Wir sind nicht so die Hellseher. Mediafox F. schrieb: > Das Programm konnte compiliert > werden im AVR-Studio mit 0 Fehler und 0 Warnungen Das bedeutet gar nichts. Assembler sind recht schmerzbefreit, die assemblieren Dir selbst den größten Mist. Wenn Du eh keine Interrupts benutzt, dann erspar uns den ganzen Vectorschrunz. Fang einfach bei 0x0000 mit dem Main an.
:
Bearbeitet durch User
Es geht um den ATTiny2313. An PORTD angeschlossen sind: PD0 = AO vom 74HC139 für die Stellen PD1 = A1 vom 74HC139 für die Stellen PD2 = Oszillatorausgang 4MHz PD3 = DATA vom 74HC164 und LM7001 PD4 = CLK vom 74HC164 und LM7001 PD5 = LE vom LM7001 PD6 = LE vom 74HC573 An PORTB angeschlossen sind: PB0 = Taste LOW-Aktiv Frequenz runter PB1 = Taste LOW-Aktiv Frequenz rauf PB2 = Taste LOW-Aktiv Sender Speichern PB4 bis PB7 - Binäreingänge vom Empfänger / HEX-Schalter für die 16 Programmplätze. Die 7-Seg-Anzeige mit gemeinsamer Anode hängt am 74HC573, Q0 - Q7 entsprechen a-g, DP. An D0 bis D7 hängt das 74HC164. Hätte auch einen 4094 nehmen können, war damals nicht verfügbar. Q0 bis Q3 vom 74HC139 hänge die Anoden der Anzeige. A0 und A1 werden vom ATTiny2313 angesteuert, /CS liegt an GND. Der LM7001 ist standardmäßig angeschlossen. Alles in Allen keine gr0ßartige komplizierte Schaltung.
1 | ldi zl, low(digit_table) |
2 | ldi zh, high(digit_table) |
Muss an den drei Stellen nicht jeweils *2 stehen?
Mediafox F. schrieb: > Es geht um den ATTiny2313. > .............. > .............. > Alles in Allen keine gr0ßartige komplizierte Schaltung. Schaltpläne in Prosa sind echt scheisse.
S. L. schrieb: > ldi zl, low(digit_table) > > ldi zh, high(digit_table) > > Muss an den drei Stellen nicht jeweils *2 stehen? Wo soll "mal zwei" stehen. Die Digit-Tabelle besteht aus Bytes und selbst wenn nicht muss der Tabellenanfang unverändert geladen werden.
digit_table ist eine Wortadresse, lpm benötigt eine Byteadresse. Aus dem 'AVR Instruction Set Manual' unter lpm: "The Program memory is organized in 16-bit words while the Z-pointer is a byte address." Siehe auch das dortige Beispiel.
Mediafox F. schrieb: > Tausch kein > Problem, aber ich konnte alleranschein nach nicht das passende Programm > mehr richtig rekonstruieren. Hast Du Fuses auch richtig programmiert? Was "richtig" ist, kann ich Dir aber ohne Schaltplan nicht sagen. Default ist wohl ClkDiv8 aktiv, interner 8-MHz-RC-Oszillator aktiv und Brown-Out deaktiviert. Grüßle, Volker
:
Bearbeitet durch User
S. L. schrieb: > digit_table ist eine Wortadresse, lpm benötigt eine Byteadresse. Danke für die Erklärung. Dieses Detail der AVR-Programmierung war mir entgangen. Dann ist es ja komisch, dass der TO behauptet, das Programm hätte schon mal funktioniert.
In der Tat - bei drei Tagen Fehlersuche hätte er sich doch an diesen Sachverhalt erinnern müssen.
S. L. schrieb: > digit_table ist eine Wortadresse, lpm benötigt eine Byteadresse. Sicher, dass der Assembler das genauso sieht? Schließlich hat er offensichtlich die .db Anweisung verstanden. Warum sollte er das Label dann als Wort-Adresse interpretieren? Grüßle, Volker (der aus genau diesen Gründen lieber bei C bleibt :-)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.