Hallo Leute. Bin neu hier und habe auch Probleme mit dem I2C Bus
Hab mich schonmal theoretisch damit beschäftigt und hier auch einiges dazu gelesen. Dies führte allerdings zu immer mehr Verwirrung.
Arbeite mit Bascom (siehe Signatur) und habe I2CSEND und I2CRECEIVE benutzt.
Der Mega8 ist der MASTER und der 8535 sollte der SLAVE sein.
Nun lese ich, dass man 2 Chips garnicht so einfach miteinander verbinden kan, weil die i2c.lib nicht vorhanden ist bzw. diese mit I2CSEND/I2CRECEIVE nicht funktioniert.
Was muss ich tun?
Hier noch ein paar konkrete Fragen dazu:
1. Ich lese immer nur was von der Arbeitsweise des MASTERS. Wie bringe ich aber einem anderen Bauteil bei, dass es ein SLAVE sein soll, woher weiß es das?
2. Ich habe eine einfache Routine zum Ausprobieren der Befehle I2CSEND/I2CRECEIVE geschrieben. Wie ich weiß, stehen Daten+Adresse im TWDR. Wenn ich mit Bascom simuliere ändert sich allerdings rein garnix in irgend einem TW-Register. Woran kann das liegen?
(Wie kann ich hier in soeinen Post so ein Fenster mit entsprechendem Quellcode einbinden?)
Viele Fragen, ich weiß. Aber jeder muss mal klein anfangen.
Hier der Code vorerst in dieser "unpraktischen" Form
'Deklarationen + Initialisationen:
$regfile = "m8def.dat"
$crystal = 8000000
Config Portb = Output 'damit LEDs zur Kontrolle leuchten koennen
Config Sda = Portc.4 'laut Datenblat des mega8
Config Scl = Portc.5
Dim X As Byte
Dim Slave As Word
Portb = &H00 'alle LEDs anschalten
On Int0 Senden 'Senden=Sprungmarke
On Int1 Empfang 'empfangen = Sprungmarke
Enable Int0
Enable Int1
Enable Interrupts
X = 0
Do
Print X
Loop
Senden:
Portb.0 = Not Portb.0 'nur zur Kontrolle, das Int funktioniert
I2cinit
Slave = &H80
X = 50
I2csend Slave , X
Return
Empfang:
Portb.0 = Not Portb.0 'nur zur Kontrolle, das Int funktioniert
I2cinit
Slave = &H81
I2creceive Slave , X
If X = 50 Then Portb = Not Portb
Return
End







Zitieren

Lesezeichen