I2C-Adressen suchen

Hier können Sie ihre eigenen Projekte vorstellen
Antworten
Heinrichs
Beiträge: 173
Registriert: Do 21. Okt 2010, 18:31

I2C-Adressen suchen

Beitrag von Heinrichs » Do 3. Jan 2013, 13:41

Manchmal stößt man auf ein I2C-Gerät mit unbekannter Adresse. Mit einem einfachen BASCOM-Programm (s. u. ) kann man den Attiny die Adressen angeschlossener I2C-Geräte ermitteln lassen. Entscheidende Ideen sind:

1. Wenn ein I2C-Gerät korrekt adressiert wird, sendet es ein Acknowledge-Bit. In BASCOM kann man dieses über die Systemvariable Err abfragen.

2. Wenn ein I2C-Gerät im Readmodus adressiert wird (ungerade Adresse), dann stellt es einen Ausgabewert bereit. Dieser muss mit dem Parameter NACK ausgelesen werden.

Hier das Programm:

Code: Alles auswählen

' Attiny-Platine von E. Eube, G. Heinrichs und U. Ihlefeldt
' Sucht die Adressen aller angeschlossenen I2C-Geräte und gibt sie auf LCD aus.
' Pull-Up-Widerstände nicht vergessen!
'----------------------------------------------------------------------------

$regfile = "attiny2313.dat"                                 'Attiny2313
$crystal = 4000000                                          '4 MHz

'**********************************************************
'******************* Deklarationen ************************

Dim Fehler As Byte
Dim Adresse As Byte
Dim Dummy As Byte
Dim Typ As Byte

'****************** Initialisierung ***********************

Ddrb = &B11111111                                           'Port B als Ausgangsport
Ddrd = &B01110000                                           'D4, D5, D6 als Ausgang; Rest als Eingang
Portd = &B10001111                                          'Eingänge auf high legen


Waitms 50                                                   'u. A. zum Aufladen des Kondensators bei Ta0

Config Lcd = 16 * 2                                         'LCD konfigurieren
Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.4 , Rs = Portb.6
Cursor Off

Config Scl = Portb.7                                        'Konfigurieren von I2C
Config Sda = Portb.5
                                       

'**********************************************************
'******************** Hauptprogramm ***********************

Cls
Lcd "I2C-Adr."
Locate 2 , 1
Lcd "suchen"
Wait 2
Cls

For Adresse = 0 To 255
  Cls
  Lcd Adresse
  I2cstart
  I2cwbyte Adresse
  If Err = 0 Then
    Locate 1 , 1
    Lcd Adresse
    Locate 2 , 1
    Typ = Adresse Mod 2
    If Typ = 0 Then                                         'Write-Gerät
      Lcd "Write"
    Else                                                    'Read-Gerät
      I2crbyte Dummy , Nack                                 'Kein Acknowledge
      Lcd "Read"                                            'Read-Baustein erwartet Lesevorgang
    End If
    Wait 5
  End If
  I2cstop
  Waitms 10
Next Adresse
Cls
Lcd "Suchen"
Locate 2 , 1
Lcd "beendet"

End

Antworten