
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
||
|
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 |