Witam!
Po wszelakich próbach obsługi układu PCF8574 byłem zmuszony założyć nowy temat na forum.
Otóż mój problem leży w błędnym odczycie przycisków podłączonych do portów P0...P2. Z tego co wyczytałem, to przed odczytem danych portów trzeba je ustawić w stan wysoki, tak też robię, tzn. wysyłam ciąg 00000111, dalej odczytuję stan portów. Jako wyznacznik stanów użyłem diody LED która mryga odpowiednią ilość razy zależną od odczytanych danych.
Oto źródło programu:
Przy przytrzymaniu przycisku podłączonego do portu P0, dioda mryga 6 (B110) razy, i tak odpowiednio P1 - 5 (B101) razy i P2 - 3 (B011) razy.
A powinno być kolejno: B001, B010 i B100. Nie mam pojęcia dlaczego tak się dzieje.
Adresowanie sprawdzałem kilka razy. Trzy porty adresowe mam podłączone do plusa. Porty P0...P2 są podciągnięte do plusa przez rezystory, a przyciski podłączone do masy.
Czy ktoś ma jakiś pomysł w czym leży problem?
Po wszelakich próbach obsługi układu PCF8574 byłem zmuszony założyć nowy temat na forum.
Otóż mój problem leży w błędnym odczycie przycisków podłączonych do portów P0...P2. Z tego co wyczytałem, to przed odczytem danych portów trzeba je ustawić w stan wysoki, tak też robię, tzn. wysyłam ciąg 00000111, dalej odczytuję stan portów. Jako wyznacznik stanów użyłem diody LED która mryga odpowiednią ilość razy zależną od odczytanych danych.
Oto źródło programu:
Config Sda = P3.5
Config Scl = P3.4
Dim Keys As Byte
Dim I As Byte
Dim A As Byte
Declare Sub Flashled(a As Byte)
Declare Sub Ledblink
Keys = 0
Do
I2csend &H4E , &B00000111
I2creceive &H4F , Keys
If Keys <> 0 Then Call Flashled(keys)
Wait 2
Loop
End
Sub Flashled(a As Byte)
For I = 1 To A
Call Ledblink
Next
End Sub
Sub Ledblink
Reset P1.4
Wait 1
Set P1.4
Waitms 225
End Sub
Przy przytrzymaniu przycisku podłączonego do portu P0, dioda mryga 6 (B110) razy, i tak odpowiednio P1 - 5 (B101) razy i P2 - 3 (B011) razy.
A powinno być kolejno: B001, B010 i B100. Nie mam pojęcia dlaczego tak się dzieje.
Adresowanie sprawdzałem kilka razy. Trzy porty adresowe mam podłączone do plusa. Porty P0...P2 są podciągnięte do plusa przez rezystory, a przyciski podłączone do masy.
Czy ktoś ma jakiś pomysł w czym leży problem?