Forum: Mikrocontroller und Digitale Elektronik Bascom I2C Anfangsschwierigkeiten


von Wolfgang R. (woru)


Lesenswert?

Da ich neu bin in der Materie, brauche ich Hilfestellung:
Ich möchte einen Baustein (PCF8574 oder PCF8583) über I2C ansprechen. 
Ich benutzt  das Atmel Starterkit von Pollin und ein Atmega16 mit 8 MHz. 
Die weiteren Bausteine sind auf einer Zusatzplatine, die über etwa  50 
cm FB-Leitung angeschlossen ist. Die Leitungen des I2C-Buses sind mit je 
4K7 abgeschlossen. Die Bausteine sind mit 100nF Abblockkonensatoren 
versehen. Das Bitmuster von SLC und SDA  ist am Baustein nachvollziehbar 
(Osci).
Bei der Software habe ich verschiedene Möglichkeiten ausprobiert:
I2cstart                 oder        I2cinit
I2cwbyte                             I2csend
I2cstop



Jedesmal wird beim Senden eines Bytes (I2cwbyte oder I2csend) die 
Variable "ERR" auf 1 gesetzt und der Baustein reagiert nicht.
Wahrscheinlich ist das nur eine kleine Sache, aber als Anfänger hat man 
so seine Schwierigkeiten.

Ich bedanke mich schon mal für die Hilfe
wolfgang

von Metaller (Gast)


Lesenswert?

Ich kenne mich nicht mit Bascom aus, aber im Prinzip sieht die 
Vorgehensweise wie folgt aus (Ich gehe mal davon aus, dass Du die 
Bausteine richtig verdrahtet hast):

1. Initialisierung
2. Startbedingung senden
3. Slave-Lese- oder Slave-Schreibadresse senden, danach ACK abfragen
4. Daten versenden bzw. empfangen, danach ACK senden bzw. abfragen
5. entweder noch mehr Daten versenden bzw. empfangen oder weiter mit n.
n. Stopbedingung senden
...
(n+1.) bei Punkt 2 wieder einsteigen, wenn wieder ein Transfer 
stattfinden soll.

So sieht ein Datentransfer per I2C aus. Nun kannst Du es mal mit Deinem 
Programm vergleichen. Ich hoffe, dass es Dir einwenig weiter hilft.

von Marko (Gast)


Lesenswert?

Die Bascom Start-Sequenz  I2CSTART ist aber mit Vorsicht zu behandeln,
ich hatte mal den Fall, das ein Baustein nicht wollte wegen dem
Befehl, weil Bascom intern ne Restart Sequenz generiert.
Andere Bausteine brauchten genau das zur Funktion ... ein Hoch der
Deutschen Industrienorm :o(

von Sebastian (Gast)


Lesenswert?

Nein, ein Hoch dem Bascom :-)

von inoffizieller WM-Rahul (Gast)


Lesenswert?

>ein Hoch der Deutschen Industrienorm :o(

was hat die mit I²C zu tun?

von Peter D. (peda)


Lesenswert?

Marko wrote:
> ich hatte mal den Fall, das ein Baustein nicht wollte wegen dem
> Befehl, weil Bascom intern ne Restart Sequenz generiert.
> Andere Bausteine brauchten genau das zur Funktion ... ein Hoch der
> Deutschen Industrienorm :o(


Huch was solln das sein (Restart Sequenz), kann man das essen ?


Es gibt ein Repeat-Start, was z.B. EEPROMs zum Lesen brauchen, aber das 
entspricht voll und ganz der I2C-Norm.

Erzähl dochmal, welche ICs Deiner Meinung nach von der Norm abweichen 
sollen.

Mir sind bisher keine untergekommen.


Ich mache meinen Single-Master allerdings grundsätzlich in Software, das 
ist einfacher, weniger Code, universeller und funktioniert immer.


Peter

von HansHans (Gast)


Lesenswert?

Bascom PCF8474 Beispiel siehe:
\BASCOM-AVR\SAMPLES\I2C.bas

Auszug :
'-------- now write to a PCF8474 I/O expander -------
I2csend &H40 , 255                             'all outputs high
I2creceive &H40 , B1                           'retrieve input
Print "Received data " ; B1                    'print it


Gruß HansHans

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.