Forum: Mikrocontroller und Digitale Elektronik Frequenzanzeige und LM7001 mit ATTiny2313 macht mir Probleme..


von Mediafox F. (mediafox_f)


Angehängte Dateien:

Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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
von Mediafox F. (mediafox_f)


Lesenswert?

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.

von S. L. (sldt)


Lesenswert?

1
    ldi zl, low(digit_table)
2
    ldi zh, high(digit_table)
Muss an den drei Stellen nicht jeweils *2 stehen?

von Wastl (hartundweichware)


Lesenswert?

Mediafox F. schrieb:
> Es geht um den ATTiny2313.
> ..............
> ..............
> Alles in Allen keine gr0ßartige komplizierte Schaltung.

Schaltpläne in Prosa sind echt scheisse.

von Mario M. (thelonging)


Lesenswert?

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.

von S. L. (sldt)


Lesenswert?

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.

von Volker B. (Firma: L-E-A) (vobs)


Lesenswert?

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
von Mario M. (thelonging)


Lesenswert?

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.

von S. L. (sldt)


Lesenswert?

In der Tat - bei drei Tagen Fehlersuche hätte er sich doch an diesen 
Sachverhalt erinnern müssen.

von Volker B. (Firma: L-E-A) (vobs)


Lesenswert?

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