Frequenzanzeige und LM7001 mit ATTiny2313 macht mir Probleme..

OP #7901143
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.

Angehängte Dateien:
#7901151
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.

OP #7901157
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.

(Firma: L-E-A) #7901225
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

(Firma: L-E-A) #7901445
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 :-)

(Firma: 1984now) #7901784
Lesenswert?

Volker B. schrieb:

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?

Weil im .cseg alle Label Wortadressen sind. Das merkt man auch sofort, wenn man nur testweise mal eine ungerade Zahl Bytes zwischen zwei Labeln platziert, dann setzt es nämlich eine Warnung, dass automatisch gepaddet (d.h.: ein Nullbyte eingefügt) wurde.

Volker (der aus genau diesen Gründen lieber bei C bleibt :-)

Ach watt, in C ist der Hassel mit den Adressräumen des AVR fast noch schlimmer. Aber letztlich ist's genau so, wie in Assembler auch: man muß die einschlägige Syntax lernen. Das ist übrigens, streng genommen, nicht mal "C" und es gibt obendrein mehr als nur eine...

Komplizierter als Assembler wird das in C eigentlich vor allem dadurch, dass der Scheiß letztlich genauso wenig typsicher ist wie Assembler. Das fällt besonders dann auf, wenn irgendwo mal das Attribut für den Speicherbereich vergißt. Der Compiler bemeckert das je nach Einstellung entweder garnicht oder nur mit einer Warnung. Es kommt aber letztlich genauso kaputter Code raus wie in diesem unsäglichen Assembler-Probestück.

Fazit: man muss halt einfach wissen, was man tut. Ganz egal in welcher Sprache man programmiert.

(Firma: L-E-A) #7901819
Lesenswert?

Ob S. schrieb:

Weil im .cseg alle Label Wortadressen sind.

Danke! Mit etwas nachdenken ist's auch logisch, denn der Assembler weiß ja nicht, was mit der Adresse geschehen soll, die in ein Registerpaar geladen wird. Dann muss es ggf. die Programmiererin konvertieren.

Dann klingt's logisch, dass beim TO die Ausgabe der Bytekonstanten aus dem Code-ROM nicht den Erwartungen entspricht.

Und meine Glaskugel meint, das Problem "Teilerverhältnis zum LM7001 schaut auch nicht OK aus", liegt an der ClkDiv8 Fuse.
Wenn dann Klagen über falsche Daten im EEPROM kommen, wissen wir auch, dass er den Brown-Out Detektor nicht aktiviert hat.

Grüßle, Volker

#7902025
Lesenswert?

Peter D. schrieb:

Assembler sind recht schmerzbefreit, die assemblieren Dir selbst den größten Mist.

Fehlermeldungen da kontrollieren nur, ob grobe Syntaxschnitzer gemacht wurden, sonst nichts. Bzw. der 2313 braucht beim lpm noch den tst auf Null. Oder kann kein Postincrement. Da muss dann immer noch adiw rein. beim 4313 gehts ohne den String. Ist beim def.inc die "falsche" aber fast richtig aussehende Datei genommen worden, gehts auch nicht. also tn2313def.inc oder nur 2313def.inc. Solche "Schnitzer" bewirken dann Fehlermeldungen.

ciao gustav

(Firma: matzetronics) #7902047
Lesenswert?

Ist das nicht Sparsamkeit an der falschen Stelle? Mit der ganzen nötigen Zusatzhardware (soger ein HC139 konnte sich der TE nicht verkneifen) wäre man doch mit dem Mega 328 aus der ersten Zeile des Programms gar nicht schlecht bedient. Man spart sich dann auch die Doppelbelegung von Pins zum HC595 und der PLL. Ich bin jedenfalls mit dem Mega 48/88/168 mit LCD und dem LM7001 immer gut gefahren.

OP #7903733
Lesenswert?

Ich hab alles neu zusammen geschrieben. Scheine es nun mit dem ATMEGA8 geschafft zu haben. Anzeige geht, sogar mit ZF-Offset und Programmspeicher, kein Flackern im Display und die Daten zum LM7001 schauen auch vernüftig aus. Sicher kann man noch was verbessern. Jetzt noch den passenden Tuner suchen und schauen ob dann alles geht.

Angehängte Dateien:
OP #7903824
Lesenswert?

Karl B. schrieb:

Klar, aber programmiert werden muss das externee IC doch noch. Und darum ging's in diesem Thread hier hauptsächlich. Gibt aber auch preiswerte "fertige" UKW/FM-Empfänger-Bausätze, ohne "Programmierarbeit".

Ohne Programmieren wärs doch langweilig. Einen Bausatz zu kaufen und zusammen zu bauen, mit einem Allerweltshalbleiter, wäre heute nichts mehr für mich.

OP #7904328
Lesenswert?

Matthias S. schrieb:

Viel interessanter ist es doch, einen UKW Sender zu bauen statt einem Radio :-P Dafür habe ich den LM7001 gerne benutzt.

Ja, hab ich auch schon gemacht, nur mit LC7215 aus einem alten analogen SAT-Receiver. War alles auf einer eigenen Modulplatine aufgebaut, deshalb konnte ich das Modul verwenden. Die Schaltung fand ich deshalb so interessant, weil auch viele TTL-ICs drauf waren. Ganz nach dem Motto von damals: "Je mehr TTL, desto besser, gell!"

Angesteuert mit AT90S1200 ohne Display und nur für 3 Kanäle mit DIP-Schaltern.

Angehängte Dateien:
(Firma: matzetronics) #7904424
Lesenswert?

Mediafox F. schrieb:

hab ich auch schon gemacht

Ach du meine Nase, das sieht sehr aufwendig aus :-P Das schöne am LM7001 ist ja, das sowas mit lediglich 2 ICs (PLL und MC) geht und nur noch den VCO zusätzlich braucht. Für den VCO habe ich ein Design aus dem 'Satellite, Cable & TV Handbook' von Plessey benutzt, der bis zu 2GHz spielt mit Standardbauteilen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren