Sie befinden sich hier: Lego® - Bauanleitungen - AVR- Mikrokontroller (ATmega8)

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


My AVR Board mit Lego mindstorms NXT 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


TWI- Hardwaremodul

'********************************************************************
'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
    wurde Taster1 betätigt
    • Lampe an PortA blinkt 4sec
    wurde der Enter Button betätigt
    • 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.