
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
||
|
Hallo Jörg, wenn du einen eigenen I2C-Bus betreiben möchtest, musst du wirklich ALLES selber machen. Ich habe ein SHTxx im Einsatz. Dieser arbeitet mit einem I2C-Protokoll, aber ohne Adressierungsmöglichkeit (daher ein extra Bus). Vielleicht kannst du die Schreib und Lese-Routinen für dich benutzen. DEFINE SHTclock PORT[7] DEFINE SHTdata PORT[8] define tbyte as byte '-------------------------------------------------------------------------------- ' Benutzung der Funktionen SHTstart() SHTwrite(adresse) SHTwrite(befehl) lesen=SHTread(1) '-------------------------------------------------------------------------------- sub SHTinit() 'Initialisiere DEACT SHTdata SHTclock = 0 FOR i = 0 TO 10 PULSE SHTclock NEXT i end sub '-------------------------------------------------------------------------------- sub SHTstart() 'Start-Sequenz SHTclock = -1 SHTdata = 0 SHTclock = 0 SHTclock = -1 DEACT SHTdata SHTclock = 0 end sub '-------------------------------------------------------------------------------- sub SHTwrite(TH as byte) 'Sende Daten an Sensor FOR i = 0 TO 7 IF ((TH SHL i) AND 80h)<>0 THEN DEACT SHTdata ELSE SHTdata = 0 END IF PULSE SHTclock NEXT i DEACT SHTdata SHTclock = -1 TByte = (SHTdata = 0) SHTclock = 0 RETURN TByte end sub '-------------------------------------------------------------------------------- Sub SHTread(ACK as byte) Tbyte = 0 'TW 'TH TByteLo FOR i = 0 TO 7 SHTclock = -1 Tbyte = ((Tbyte SHL 1) OR (SHTdata AND 1)) SHTclock = 0 NEXT i IF ACK<>0 THEN SHTdata = 0 ELSE DEACT SHTdata END iF PULSE SHTclock DEACT SHTdata RETURN Tbyte end sub oder funktionieren die I2C-Micro-Routinen (SDA/SCL durch deine Ports ersetzen). Die Micro hat ja kein eigenes IIC-Objekt. FUNCTION IICSTART() SDA=off SCL=off END FUNCTION FUNCTION IICSTOP() SDA=off SCL=on SDA=on END FUNCTION FUNCTION IICSEND(DATA as byte) define MASK as byte MASK=80h #OUTSHIFT SDA=(DATA and MASK) SCL=on SCL=off MASK=MASK shr 1 if MASK<>0 then goto OUTSHIFT '---- 9th CLOCK FOR ACKNOWLEDGE ---------- #ACKN deact SDA SCL=on SCL=off SDA=off END FUNCTION FUNCTION IICREAD() define MASK as byte deact SDA DATABYTE=0 MASK=80h #INSHIFT SCL=on if SDA=on then DATABYTE=(DATABYTE or MASK) SCL=off MASK=MASK shr 1 if MASK <>0 then goto INSHIFT '---- 9th CLOCK FOR ACKNOWLEDGE ---------- deact SDA SCL=on SCL=off SDA=off END FUNCTION Aber wie gesagt alles nur so zusammengesammelt. Ich denke mal versuche ersteinmal die Micro-Routinen. Gruß Jörg > Hallo Jörg, > > besten Dank für die schnelle Antwort. Das Problem ist, das Die Platine schon fix und fertig ist und mit den ursprünglich 3 LED-Anzeigen ja auch funktioniert. Eine Änderung der Hardware/Platine ist mir zu teuer. > > Ebenfalls Grüße Jörg > > > > Hallo Profjs, > > > > wie wäre es denn mit einem I2C-Multiplexer? Ich denke das ist die elegantere Lösung zwischen mehreren I2C-Bussen umzuschalten. > > guckst du bei ccTools > > > > Grüße Jörg > > > > > > > > > Hallo Profis, > > > ich habe folgendes Problem. Ich muss im Moment über den iic-Bus 5 LED Module betreiben, der SA1064 lässt jedoch nur 4 Adressen zu. > > > > > > Daher meine Überlegung, einen 2ten IIC-Bus z.B. an Port 7 und 8 zu erstellen. Jedoch habe ich bisher noch keine Möglichkeit gefunden, diesen 2ten Bus anzusprechen. > > > Die Function sendbuff scheint fest auf Port 9 und 10 'verdrahtet' zu sein. > > > Kann ich die Function irgendwie erweitern oder modifizieren?? > > > > > > Bin für jede Anregung zu haben und Bedanke mich schon mal im Voraus. |
| Antwort schreiben |