www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik I2C Read Byte Problem in ASM


Autor: Neuling (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo allerseits.
Als neues Lernprojekt habe ich mir zum Ziel gesetzt mal was mit einem 
DS1621 zu machen. Da sich dort die Fehlersuche aber imho schwierig 
gestaltet, habe ich mit der Porterweiterung PCF8574 angefangen.
Schreiben auf den Baustein funktioniert. Die Lesefunktion hängt noch. 
Problem an der Stelle:
Die Wertigkeit der Pins ist um 1 Bit verschoben:
- An P0 lese ich 2 aus
- P1 gibt 4 zurück
- P2 gibt 8 zurück usw ...
- P1 + P2 gleichzeitig ergibt 6 (2+4 ...)
Also im Ansatz liege ich wohl richtig. Ich finde nur nicht wo sich 
dieses verlorene Bit versteckt hat :-/

Im Anhang ist der komplette I2C-Code. Mir ist bewusst, dass es dort noch 
sehr viel Verbessrungspotential gibt. (Z.B. etliche delays 
rausschmeissen ...)

Hier mal direkt die Lesefunktion:
I2C_read:
      push  tmp3          ; Working Registers
      push  temp2

      ldi    temp1, 0x00      ; Ausgabevariable initialisieren.
      ldi    temp2, 0x08        ; Schleifenzähler

      in    tmp3, SDADIR      ; SDA-Direction auf Eingang
      andi  tmp3, 0b11111101
      out    SDADIR, tmp3
      nop
      ;--------------------------------------------------
I2C_loop3:  rcall  I2C_ClockPulse    
      clc                ; Carry löschen
      sbic  SDAREAD, SDA      ; Wenn SDA=0 überspringe den SEC Befehl
      sec                ; SDA=1? Dann setzte Carry Flag. Anm.: Durch den folgenden ROL Befehl wird das ggf gesetzte Carry Flag zum Bit0 des einzulesenden Wertes!
      rol    temp1          ; Ausgabevar um 1 Bit nach oben schieben
      dec    temp2          ; Schleifenzähler - 1
      brne  I2C_loop3        ; Schon bei 0 angekommen ?
      ;--------------------------------------------------

      in    tmp3, SDADIR      ; SDA-Direction auf Ausgang
      ori    tmp3, 0b11111111
      out    SDADIR, tmp3

      pop    temp2
      pop    tmp3
      
      rcall  I2C_Stop
      
      ret                ; Abrage der Daten ist beendet


Es würde mich sehr freuen, wenn sich Jemand mal den Code anschauen würde 
und mir hoffentlich sagen kann an welcher Stelle ich ein Brett vorm Kopf 
hatte/ habe.

Grüße,
Alexander

Autor: Neuling (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zusatzinfo:
Der verwendete Controller ist ein ATiny2313 @ 4 MHz
Pull-ups für I2C-Bus sind 4k7

Autor: Neuling (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Der komplette Code war nach der Vorschaufunktion leider nicht mehr im 
Dateianhang.
Hier ist er.

Autor: Spess53 (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Im Anhang eine alte AppNote von Atmel. Vielleicht hilft es.

MfG Spess

Autor: Spess53 (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Noch die psssende PDF.

MfG Spess

Autor: Neuling (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die olle App-Note.
Hab' sie gerade angepasst und ausprobiert. Der PCF8574 gehorcht aufs Bit 
genau :-)
Leider habe ich meinen Fehler immer noch nicht gefunden. Egal. Treu nach 
dem Motto: Is ja nur'n Bug. Der will ja auch nur leben ~~
Ich wende mich nun schöneren Sachen (DS1621) zu.

Grüße,
Alexander

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.