Hey Leute!
Hab mich in den letzten Wochen etwas mit Mikrocontrollern und Bascom beschäftigt..
Nun will ich mich an ein I2C Bus-System zwischen zwei ATMega16 wagen und habe folgende Frage: Wie kann ich einen der ATMega als Slave definieren und ihm eine I2C Adresse zuweisen?
Ich danke euch im Voraus für euer Bemühen!
mfg. Marko
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Danke erstmal für deine Antwort!
Hab mir die Seite durchgelesen. Muss man bei den Bespielen keine Lib einbinden?
Über welche Pins läuft eig. der TWI Bus? Muss man da erst welche Pins definieren?
Oder läuft der Code für einen Slave so:
Code:$regfile = "m16def.dat" ' the used chip $crystal = 7372800 ' frequency used ' $baud = 9600 ' keine baud rate angeben ! Config Portd = Output ' kompletter PortD als Ausgang Dim Twi_control As Byte ' Controlregister lokale kopie Dim Twi_status As Byte Dim Twi_data As Byte Dim Neuesbyte As Byte ' Bytemerker Declare Sub Twi_init_slave Twi_data = 0 Call Twi_init_slave ' TWI aktivieren ' alle LEDs ein Portd = 0 ' Hauptschleife Do ' Merker zurücksetzen Neuesbyte = 0 ' schauen ob TWINT gesetzt ist Twi_control = Twcr And &H80 ' Bit7 von Controlregister If Twi_control = &H80 Then Twi_status = Twsr And &HF8 ' Status ' wurde ein Byte geschickt If Twi_status = &H80 Or Twi_status = &H88 Then Twi_data = Twdr ' neue Daten merken Neuesbyte = 1 ' merken das ein neues Byte da ist End If ' TWINT muss immer gelöscht werden, damit es auf dem Bus weiter geht Twcr = &B11000100 ' TWINT löschen, erzeugt ACK End If ' wenn ein neues Byte gekommen ist, dieses an PortD ausgeben If Neuesbyte <> 0 Then Portd = Twi_data ' Daten auf PortD ausgeben End If Loop End ' Unterprogramme ' TWI als slave aktivieren Sub Twi_init_slave Twsr = 0 ' status und Prescaler auf 0 Twdr = &HFF ' default Twar = &H40 ' Slaveadresse setzen Twcr = &B01000100 ' TWI aktivieren, ACK einschalten End Sub
Hallo Marco,
wenn du Hardware-TWI nutzt, brauchst du keine Lib einbinden. TWI läuft auf den Pins C.0 (SCL) und C.1 (SDA). Die Adresse des Slaves legst du im Unterprogramm Twi_init_slave mit Twar = &H40 (oder beliebige andere Adresse) fest.
Gruß, Stefan
Ok.. danke.. langsam geht das Lichtlein auf..
Muss ich den TWI-Bus (wie z.B. I2C) mi +5V incl. Wiederstand (zb. 1K) versorgen?
Hallo Marco,
Pullups müssen rein. TWI ist nur ein anderer Name für I2C bei den Atmel-Prozessoren! (Hat glaub' ich irgendwelche Lizenzgründe).
Gruß, Stefan
hey danke für die antwort! Habs hinbekommen! Es funktioniert einwandfrei!
Eine Frage hab ich allerdings noch:
Wenn ich einen chip, der den I2C bus unterstützt, ansteuern/auslesen möchte, kann ich da anstatt dessen einfach den twi bus verwenden?
P.s. Und allen hilfesuchenden in sachen twi kann ich meinen fertigen und funktionierenden code via pm schicken..
JaWenn ich einen chip, der den I2C bus unterstützt, ansteuern/auslesen möchte, kann ich da anstatt dessen einfach den twi bus verwenden?
Wenn das Herz involviert ist, steht die Logik außen vor! \/
Hallo Marco,
und wenn du mit
die Library einfügst, kannst du mit den Bascom-HochbefehlenCode:$lib "i2c_twi.lbx"
wie I2cstart, I2cwByte und I2cstop das Hardware-TWI auf dem Master benutzen.
Gruß, Stefan
thx an alle!
Klappt jetzt alles prima!
mfg.
PS. Wie kann ich einen Beitrag als gelöst markieren?
Lesezeichen