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.



