
Aktyw Forum
Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.
Sprawdź punkty Zarejestruj sięI2C jak zapytać o adres urządzenia
Moderatorzy:Jacek Bogusz, robertw, k.pawliczak, Moderatorzy
Witam wszystkich
Mam takie pytanie jak można zapytać o adres urządzeń podłączonych do magistrali I2C. Prosiłbym o odpowiedź.
Pozdrawiam wszystkich
Mam takie pytanie jak można zapytać o adres urządzeń podłączonych do magistrali I2C. Prosiłbym o odpowiedź.
Pozdrawiam wszystkich
No jeśli piszesz w Bascomie, to on generuje zmienną ERR. Jesli pojawia sie jakiś błąd, to ta zmienna przyjmuje wartość jeden. A więc, odpytujesz wszystkie adresy po kolei po szynie i za każdym razem sprawdzasz wartość zmienej: jeśli 0 to jest w systemie układ o takim adresie, jesli ! to nie ma. Jeśli programujesz w innym jezyku i nie ma tam podobnych ułatwień, to układy I2C odpowiadają na wywołanie swojego adresu i musisz sprawdzać, czy ta odpowiedź się pojawia, czy nie. A;e do tego, to już musisz poczytać specyfikację protokołu I2C
Dzięki
Dzięki za podpowiedź. Postaram się to wieczorem sprawdzić. Zobaczę czy mi to pomoże. Jak coś to jutro dam znać.
Pozdrawiam
Pozdrawiam
Czy to jest poprawme
Napisałem taką procedurę odpytywania czy jest to poprawne. Proszę o odpowiedź.
Dim I As Long
For I = 1 To 500
I2csend I
Waitms 10
If Err = 0 Then
Cls
Lcd "Adres:" ; I ; ":" ; Err
End If
Next I
Pozdrawiam
Dim I As Long
For I = 1 To 500
I2csend I
Waitms 10
If Err = 0 Then
Cls
Lcd "Adres:" ; I ; ":" ; Err
End If
Next I
Pozdrawiam
Proponuję taką wersję:
Config Lcd = 16 * 1a : Cursor Off
Dim I As Byte
For I = 0 To 255
I2cstart
I2cwbyte I
Cls : Lcd "adres " ; I ; " ERR = " ; Err
I2cstop
Wait 1
Next I
End
Pisane z głowy, więc może wymagać jakichś drobnych poprawek (nie testowałem w uP). Adresy wystarczy przeszukiwać od 0 do 255, bo adresy układów i2c są ośmiobitowe.
I pamiętaj, że układy I2C mają dwa poprawne adresy różniące się o jeden. Pod jednym adresem można czytać z układu, a pod drugim zapisywać.
Config Lcd = 16 * 1a : Cursor Off
Dim I As Byte
For I = 0 To 255
I2cstart
I2cwbyte I
Cls : Lcd "adres " ; I ; " ERR = " ; Err
I2cstop
Wait 1
Next I
End
Pisane z głowy, więc może wymagać jakichś drobnych poprawek (nie testowałem w uP). Adresy wystarczy przeszukiwać od 0 do 255, bo adresy układów i2c są ośmiobitowe.
I pamiętaj, że układy I2C mają dwa poprawne adresy różniące się o jeden. Pod jednym adresem można czytać z układu, a pod drugim zapisywać.
Dzięki
Dzięki za odpowiedź. Ja zrobiłe to w ten sposób.
Dim I As Long
Config Scl = Portb.7
Config Sda = Portb.6
Config I2cdelay = 100
Cls
Lcd "Trwa odczyt:"
Wait 1
For I = 1 To 500
I2cstart 'warunek startu
I2cwbyte I 'wyťlij adres uk¦adu
I2cstop 'warunek stopu
Waitms 10
If Err = 0 Then
Cls
Lcd "Adres:" ; I
Wait 2
End If
Next I
Przetestowałem to i działa bez żadnych zarzutów. Tylko że na jednej z pamięci mam aż 4 adresy.
Pozdrawiam Wszystkich
Dim I As Long
Config Scl = Portb.7
Config Sda = Portb.6
Config I2cdelay = 100
Cls
Lcd "Trwa odczyt:"
Wait 1
For I = 1 To 500
I2cstart 'warunek startu
I2cwbyte I 'wyťlij adres uk¦adu
I2cstop 'warunek stopu
Waitms 10
If Err = 0 Then
Cls
Lcd "Adres:" ; I
Wait 2
End If
Next I
Przetestowałem to i działa bez żadnych zarzutów. Tylko że na jednej z pamięci mam aż 4 adresy.
Pozdrawiam Wszystkich
PCF
Nie wiem tylko czemu wykryło mi adresy z zakresu 450 jak tą procedurką odpytywałem układ PCF. Nie miałem jeszcze czasu tego dokładniej sprawdzić ale jak to zrobię to dam znać. W poprzednim przypadku jak odpytywałem EEprom to otrzymałem adrsy 160 i 161
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 1 gość