
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
Hallo Reinhard, wenn die CC1-OS-internen I2C-Routinen verwendet werden, wird davon ausgegangen, dass das I2C-EEProm auch tatsächlich zur Verfügung steht. Beim warten auf ein ACK-Signal vom I2C-Device führt das in eine Endlosschleife, wenn das I2C-Device eben NICHT da ist. Ich habe das mit eigenen I2C-Routinen gelöst (Nur Low-Level, also Start/Stop, Read/Write, Ack/Nack) und zu beginn meines Programms ein Unterprogramm gebastelt, das den I2C-Bus nach entsprechenden Devices scannt (nach dem Motto: "guck mal welche PCF8574 an welcher Adresse am I2C-Bus hängen"). Das Ergebnis speichere ich in einem Byte (gehen ja nur 8 Devices an den I2C-Bus) und kann dann gezielt die aktiven Devices ansprechen. Es gibt ja mehrere I2C-Bus Implementierungen über Digiports. Ich habe eigentlich nur eine "Besonderheit" bei mir eingebaut, nähmlich, daß meine ACK-Routine mit einem Timeout versehen ist und eine entsprechende Rückmeldung ans BASIC zurück gibt (in einer Byte[1]). Das sieht ungefähr so aus... ... Sys I2C_Start ' Bus starten Devices = 0 ' bisher keine Devices For i = 0 to 7 ' Adressen 0-7 (kompletten I2C-Bus) scannen IO = BaseAdr + i ' Basis-Adresse des Device-Typen + Sub-Adresse (wird vom I2C_WRITE gelesen) Sys I2C_WRITE ' Device auf LESEN einstellen Sys I2C_GETACK ' kommt ein ACK? (wenn JA ->IO=0, sonst IO=255) If IO = 255 then goto Notfound ' kein ACK innerhalb 0,5s -> Bit in Devices auf 0 lassen Devices = Devices Or (1 SHL i) ' passendes Bit in Devices auf 1 setzen #Notfound Sys I2C_STOP ' Bus wieder anhalten Next i ... Ich hab das aus dem Kopf getippert, daher könnte es nicht völlig korrekt sein. Bei Bedarf einfach kurzes Mail an mich und ich sende Dir die "echten" Basic-Sourcen zu. Grüße, Paul > Hallo, > > wenn ich einen Teilnehmer am I2C-Bus anspreche, der z.Zt. nicht bereit ist > (während der Testphase, kein Strom etc.), dann stürzt mein Programm ab, > bzw. die I2C-Routinen kehren nicht zurück (ist auch irgendwo dokumentiert). > > Kann man das irgendwie abfangen? Mit so einer Art I2CReady-Flag oder so? > > Ich nutze die CCTools-Routinen (und diese wohl die internen). > > Thx: - Reinhard - > |
| Antwort schreiben |