Hallo! Im vorhinein, dies ist ein Umschulungsprojekt welches ich fertig stellen wollte, allerdings ist da der Wurm drin. Die sache äußert sich dadurch, dass feste werte sauber übertragen werden, aber VOL, BASS, TREBLE und Daten aus dem internen EEPROM des AVRs nicht ankommen. Pull-Ups sind 1k-Widerstände, interner Takt des µC 4MHz, der Bus ist schon gedrosselt, da ich zuerst dachte, der wäre zu schnell und verursacht das Problem, was alerdings nicht der Fall war. Fehlercodes gibt es auch keine, hab extra dafür ein Script geschrieben, das am Display anzeigt ob der Bus blockiert ist oder der jeweilige IC am Bus nicht antwortet. Das heißt der Bus ist frei und die ICs geben Antwort. Da ich DAC0 vom TDA8444 als 0 / +5V PIN nutze, sah ich, das der Kanal gesteuert wird, nur die anderen nicht. Der Display macht eigentlich genau das was ich will. Wahrscheinlich habe ich einen Topfen im Script eingebaut, finde allerdings den Fehler nicht. Der Bus ist aber am arbeiten und weil ich noch in der Testphase bin ist alles am Steckbrett drauf und keine Leitung länger als 5cm. Im Anhang ist die Assemblerfile, nicht das Beste, aber ich hab versucht es Übersichtlich zu gestalten. Ich hoffe da kann mir einer weiter helfen.
22.5K fremden Assemblercode mit spärlichen Kommentaren und ohne Struktogramm debuggen ist stramm. Verdächtig erscheint mir, dass sich Variablen mit R24-R27 überlappen. Genau die Variablen mit denen du Probleme hast.
1 | .def vol = r24 |
2 | .def bass = r25 |
3 | .def treble = r26 |
4 | .def sreg_save = r27 |
5 | ; ... |
6 | .def i2cdelay= r24 ; Delay loop variable |
7 | .def i2cdata = r25 ; I2C data transfer register |
8 | .def i2cadr = r26 ; I2C address and direction register |
9 | .def i2cstat = r27 ; I2C bus status register |
Tipp #1: Erläutere die Grundarbeitsweise deines Programms und wie genau der Fehler hervorgerufen wird. Kürze wenn möglich Teile raus, aber so, dass der Fehler bestehen bleibt. Tipp #2: Ergänze den Quelltext. Jede Funktion bekommt einen Anfangskommentar und da steht drin, * welche Register als Eingabe benutzt werden * welche Register als Ausgabe benutzt werden * welche Register intern benutzt werden, d.h. verschmutzt sind Tipp #3: Die .def variable = register sind gut und schön, machen aber die Sache etwas unübersichtlicher. Ich würde zumindest beim Debuggen den Registernamen mitführen (ala bass_r25 o.ä.). Mit Suchen&Ersetzen ganzer Worte und Groß-/Kleinschreibung ist das schnell erledigt und ggf. wieder einfach rückgängig zu machen.
Hallo Stefan! Hab jetzt die Registergeändert und siehe da, es geht. Ich muss wohl blind gewesen sein. Jeden Falls vielen Dank für die Hilfe. Im Anhang der geänderte Code.
Hier noch einige Pics vom fliegenden Aufbau. So schaut das Teil aus wenn es funktioniert ;-) Der Display ist von Batron, die Kontrastplatte davor von einem ausgedienten VCR. Die TDAs sind aus alten TV-Geräten.
Hallo! Von Stefan bekam ich einen guten Tipp für das EEPROM. Nun habe ich das so geändert, das immer erst das EEPROM beschrieben wird, wenn nur die Lautstärke geändert wird. Auf die Frage warum der TDA8444 dran hängt, der TDA8444 dient als Analogausgabe von Bässe, Höhen, Lautstärke, festen Remoteausgang und LED-Treiber für die Klangfarbenanzeige. Das Teil kommt, wenns mal auf der Platine ist, in ein Auto zwischen Autoradio-Lineout und Breitbandendstufe und Subwooferendstufe. Freigegeben werden die Endstufen erst dann, wenn alles initialisiert ist und das Plppen ist auch dann weg. Vorne am Amaturenbrett sitz dann der Display und das Bedienteil. Hinten bei den Endstufen findet man später die Klangfarbenstatus-LEDs und TDA8444. Falls 3m zulang für den I²C-Bus sein sollten, plane ich jetzt schon mal einen Pegelwandler an ;-). Fotos folgen dann ;-)
Hier die richtigen Datein.
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.