MyAVR-Board mit Lego mindstorms NXT:
Daten über I2C (TWI- Hardwaremodul) zwischen AVR- Mikrocontroller und Lego mindstorms NXT senden/ empfangen.
NXT ist der Master; MyAVR- Board ist der Slave
Schaltungsaufbau
Verbindungen auf MyAVR- Board: - Taster1 --> Port-D.2 - LED-Rot --> Port-B.0 - LED-Gelb --> Port-B.1 - LED-Grün --> Port-B.2 Verbindungen MyAVR- Board zu mindstorms NXT: |
|
MyAVR Board MK2 an Lego mindstorms NXT |
Programmierung
Bascom Quellcode für ATmega8
'******************************************************************** 'Daten zwischen ATmega8 und Lego mindstorms NXT senden/ empfangen 'mit TWI-Hardwaremodul '2011-07 '******************************************************************** $regfile = "m8def.dat" $crystal = 1000000 Dim Twi_control As Byte ' Controlregister lokale kopie Dim Twi_status As Byte Dim Twi_data As Byte Dim Neuesbyte As Byte ' Taster Config Portd.2 = Input Portd.2 = 1 Taster Alias Pind.2 ' LED's Config Portb = Output Portb = 0 Declare Sub Twi_init_slave '---- Werte zurücksetzen ---- Twi_data = 0 Call Twi_init_slave ' TWI aktivieren '**** Hauptschleife **** Do ' 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 ' will der Master ein Byte haben If Twi_status = &HA8 Or Twi_status = &HB8 Then If Taster = 0 Then 'Taster wurde betätigt Twdr = &H2 Else Twdr = &HFF End If End If ' TWINT muss immer gelöscht werden, damit es auf dem Bus weiter geht Twcr = &B11000100 ' TWINT löschen, mit ACK End If '---- wurde ein Byte geschickt ---- If Neuesbyte <> 0 Then ' mit dem Wert &H1 If Twi_data = &H1 Then Portb.0 = 1 Waitms 200 Portb.0 = 0 Waitms 200 Portb.1 = 1 Waitms 200 Portb.1 = 0 Waitms 200 Portb.2 = 1 Waitms 200 Portb.2 = 0 Else Portb = 0 End If 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
Test Programm mit LabVIEW2009
- Lampe an PortA
- MyAVR- Board an Input1
- NXT sendet an ATmega8 &h1
- LED-Rot an/ aus
- LED-Gelb an/ aus
- LED-Grün an/ aus
- Lampe an PortA blinkt 4sec
- LED-Rot an/ aus
- LED-Gelb an/ aus
- LED-Grün an/ aus
Ich kann keinerlei Haftung für die Schaltungen übernehmen und auch keine Funktionsfähigkeit garantieren. Der Nachbau und Einsatz der hier veröffentlichten Schaltungen erfolgt auf eigene Gefahr. Ich übernehme keinerlei Garantie. Die VDE-Vorschriften sind zu beachten.