mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR + DISPLAY + I²C = PROBLEM *** AVR übertrgt das Protokoll nicht richtig


Autor: Alex Fxxxx (electronicfox)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.
.def vol       = r24
.def bass      = r25
.def treble    = r26
.def sreg_save = r27
; ...
.def  i2cdelay= r24      ; Delay loop variable
.def  i2cdata  = r25      ; I2C data transfer register
.def  i2cadr  = r26      ; I2C address and direction register
.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.

Autor: Alex Fxxxx (electronicfox)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Alex Fxxxx (electronicfox)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Alex Fxxxx (electronicfox)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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 ;-)

Autor: Alex Fxxxx (electronicfox)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier die richtigen Datein.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.