PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bascom I2CStart nicht I2C-konform?



Vitis
25.07.2006, 14:07
Hi Forum,

ich bin an nem Projekt, bei dem ich per
Bascom I2C-Routinen ne Kamera ansprechen will,
doch die sacht einfach nix.
Ich hab dann mal die Kommunikation mitgeschnitten
per Digi-Oszi und mir ist da was merkwürdiges aufgefallen.

rot=SDA, blau=SCL, der Mitschnitt ist vom Code:

i2cstart
i2cwbyte &HC0

http://www.mcselec.com/components/com_forum/files/twi2_278.jpg

es scheint so, das vor dem I2C-Start die SCL low gezogen wird, obwohl
das in meinem Code nirgends steht. Mir scheint, das dieser Zustand
Meinen Baustein durcheinander bringt, kann das sein?

Und wenn das möglich ist, wie kann ich den SCL-Puls abstellen?

Oder kann ich einen sauberen TWI-Start nur per ASM bewerkstelligen?

PicNick
25.07.2006, 15:00
Ja, der Bascom (Soft-I2C) startet wie von dir beschrieben.
(übrigens auch das STOP)
Als Single-Master ist das normalerweise egal, aber eben nur da.

https://www.roboternetz.de/wissen/index.php/Bascom_Inside-Code#I2C_Software


(liegt u.A. daran, daß Bascom Start und RepStart gleich behandelt )

PicNick
25.07.2006, 15:35
Du kannst das in die I2c.LIB (vorn) einfügen


[MY_I2C_START]
MY_I2C_START:
$external _I2C
* cbi _sclDDR,_SCL ; release SCL
* cbi _SdaDDR,_SDA ; release SDA
rcall _i2c_hp_delay ; half period delay
* Sbi _sdaDDR,_sda ; force SDA low
Rjmp _i2c_hp_delay
[END]

dann im Bascom bei Tools->LibManager I2c.lib Compilieren

In deiner Bascom Source einfügen

$external MY_I2C_START


Und dann statt "I2CSTART"

sagst du "Gosub MY_I2C_START"


das wäre dann ein konformer Start.


Mal sehen, ob es daran überhaupt liegt

Vitis
25.07.2006, 20:07
Es lag tatsächlich am I2CSTART GRRRRRRRR

Also, meine Lösung:

In der Lib steht was von

*sbi _sclDDR,_SCL ; force SCL low ...

Da hab ich dann ein ; reingetan auf:

;*sbi _sclDDR,_SCL ; force SCL low

und schon marschiert das Gerät ... das ist doch zum Mäusemelken
und ich hab da 2 Nächte mit rumgewerkelt und kam nicht drauf.

Vielen herzlichen Dank für die Hilfe !!!

Rage_Empire
25.07.2006, 20:25
Ist die Lib von Bascom dann Fehlerhaf oder wie darf man das dann Verstehen?

Vitis
26.07.2006, 02:40
nunja, für diesen speziellen Fall und Baustein
ist die lib nicht geeignet, da sie die
Start als Restart-Variante benutzt.
In anderen Fällen wie z.B. eeprom
hat die Geschichte einwandfrei funktioniert,
nur eben hier nicht und das macht das
Fehler suchen ziemlich aufwendig.
Ich hab nun 2 Nächte dran gesessen
und habs schlussendlich mit Hilfe des
Forum und nem Speicheroszi dann rausbekommen,
aber ohne die Hilfsmittel
währ ich ziemlich auf dem Schlauch gestanden
muss ich gestehen.
Ich finds auch schade, das die I2C-Routinen
die vorhandenen Hardware TWI Resourcen
nicht mit benutzt 8-[

PicNick
26.07.2006, 08:29
Ich finds auch schade, das die I2C-Routinen
die vorhandenen Hardware TWI Resourcen
nicht mit benutzt
Wenn du HW-TWI eingebaut hast, mußt du
$LIB "I2C_TWI.LBX"
einfügen , dann verwendet Bascom das Zeugs