Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 I²C-Timing-Problem? Kategorie: Programmierung ASM (von Michael - 18.04.2005 22:09)
Michael nutzt:  CC1-Station V1.1, CC1-Station V2.0
Hallo,

ich habe diverse Probleme mit dem I²C-Bus in ASM. Ich verwende die CC-I-Station (ich muss aber nachsehen, welche Version es ist). Dabei versuche ich auf dem üblichen Weg, den I²C-Bus auf zwei Ausgangsports zu emulieren.

Ich möchte einen Zählbaustein (I2C-CNT8) über einen 8574 anzusprechen. Unter Basic habe ich es schon hinbekommen. Jetzt versuche ich Stück für Stück, die Basicroutinen durch Assemblerroutinen zu ersetzen. Dazu habe ich mir entsprechende vorgegebene Programme angesehen. Aber diese funktionieren bei mir nicht. Wie ich feststellte, scheitert es schon beim Pulsen. Ich musste die Routine umschreiben:

pulse   bset clock,bpdir          ; clock als Ausgang
        bset clock,bport          ; clock 1 setzen
        nop                       ; 9 nops sind zu wenig
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        bclr clock,bport          ; clock 0 setzen
        rts

Wie dort steht: wenn ich weniger nops nehme, reagiert der 8574 nicht (er schickt kein ACK).

Ein anderes Problem hatte ich mit der GetAck-Routine.

I2C_WRITE    lda basic_io         ; zu sendendes Byte holen
...            
             bset daten,bport     ; Bus wieder hochsetzen
             rts                  ; zurueck ins Basic

Wenn ich die bset-Zeile weglasse, bekomme ich auf dem Datenport ein Low, wenn ich ihn als Eingang umschalte. Dann bekomme ich Phantom-ACKs, d.h. beim Scannen (über den Bereich 0x7*) bekomme ich lauter angeblich angeschlossene Geräte.

Die CC-Station hat ja interne Pull-Up-Widerstände, sodass ich keine weiteren Widerstände an SCL/SDA gehängt habe.

Liegt da irgendwo ein Fehler?

Michael

 Antwort schreiben

Bisherige Antworten:

Re: I²C-Timing-Problem? (von Dierk - 19.04.2005 10:05)