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ę

Problem z I2C

Wlosy
-
-
Posty:7
Rejestracja:20 kwie 2004, o 21:48
Problem z I2C

Postautor: Wlosy » 27 kwie 2004, o 10:12

Witam!Buduje zegar elektroniczny i mam problem z polaczeniem AT89S8252 z ukladem PCF8583.
pisze taki krutki programik:

$crystal = 11059200
Config Lcd = 16 * 2
Config Lcdpin = Pin , Rs = P2.5 , E = P2.4 , Db4 = P2.3 , Db5 = P2.2 , Db6 = P2.1 , Db7 = P2.0
Config Sda = P3.4
Config Scl = P3.5

Cls
Cursor Off

Dim Sekundy As Byte
Dim Minuty As Byte
Dim Godziny As Byte
Dim Dni As Byte
Dim Miesiace As Byte

Declare Sub Odczytaj_dane

Do
Cls

Call Odczytaj_dane

Lcd "Godzina "
Lcd Godziny
Lcd ":"
Lcd Minuty
Lcd ":"
Lcd Sekundy

Loop

Sub Odczytaj_dane
I2cstart
I2cwbyte 162
I2cwbyte 2
I2cstart
I2cwbyte 163
I2crbyte Sekundy , Ack
I2crbyte Minuty , Ack
I2crbyte Godziny , Ack
I2crbyte Dni , Ack
I2crbyte Miesiace , Nack
I2cstop
Sekundy = Makedec(sekundy)
Minuty = Makedec(minuty)
Godziny = Makedec(godziny)
Dni = Makedec(dni)
Miesiace = Makedec(miesiace)
End Sub

End

i na wyswietlaczu pojawia mi sie napis - Godzina 165:165
Co moge z tym zrobic? Pomocy!!

Awatar użytkownika
Kamilkozi
-
-
Posty:229
Rejestracja:19 mar 2004, o 11:48
Lokalizacja:Gdańsk
Kontaktowanie:

Postautor: Kamilkozi » 27 kwie 2004, o 15:45

Program jest na moje oko ok. Trzeba więc po kolei sprawdzić komunikację uP z peryferiami (PCFem i LCD). Proponuję zaremować Odczytaj_dane i wpisać, przed Do, do zmiennych (godzina ,minuta , sekunda) jakieś normalne wartości. Pozwoli to sprawdzić czy między LCD a uP jest wszystko jak należy. Jeśli jest to znaczy, że problem leży w PCFie. Najpierw sprawdził bym czy procek wogóle widzi ten układ, za pomocą programiku wyszukującego urządzenia na I2C. Jeśli tak to trzeba spróbować coś odzytać, np. jeden rejestr i wyswietlić. Sprawdziłbym też czy te Makedec działają poprawnie.

A tak wogóle to teraz patrzę, że End jest nie tam gdzie powinno jak dobrze pamiętam to End stawiamy po programie głównym (przed procedurami).

Wlosy
-
-
Posty:7
Rejestracja:20 kwie 2004, o 21:48

Postautor: Wlosy » 27 kwie 2004, o 18:41

Z LCD sobie poradzilem (w koncu). Pisalem proste programy do wyswietlania i wyswietla wszystko prawidlowo. Myslalem ze moze PCF jest uszkodzony wiec kupilem nowy (niestety bylo tosamo co na pierwszym). Wnioskuje z tad ze to magistrala I2C ale nie mam pojecia jak to poprawic!

Awatar użytkownika
Kamilkozi
-
-
Posty:229
Rejestracja:19 mar 2004, o 11:48
Lokalizacja:Gdańsk
Kontaktowanie:

Postautor: Kamilkozi » 27 kwie 2004, o 19:47

Niezauważyłem tego wcześniej - nie masz pull-upów na I2C! a to ważne, podłącz rezystory 4,7 - 10k do SDA i SCL i do plusa zasilania. To powinno pomóc.

mw
-
-
Posty:242
Rejestracja:23 lut 2003, o 23:22
Lokalizacja:Busko Zdrój
Kontaktowanie:

Postautor: mw » 27 kwie 2004, o 21:06

Zgadza sie, musza byc dolaczone zewnetrzne rezystory.

GasM
-
-
Posty:92
Rejestracja:4 lut 2004, o 11:57

Postautor: GasM » 28 kwie 2004, o 06:53

czy to znaczy że ci już chodzi?? port P0 niema wewnętrznych rezystorów natomiast P3 ma i nie muszą być.

Druga sprawa to nie męcz tak ciągle wyświetlacza w pętli instrukcją CLS.

Jak nadal ci nie chodzi to wpierw zapisz tam jakiś czas i przeczytaj czy niema czegoś takiego jak uruchomienie zegara (rejestry PCF'a).

Ja używam DS1307 ma zegar na 99 lat a nie na 4.

i używaj małego kwarca zegarkowego (walec), bo ten duży chyba spalił mi układ - wiem że już nie ruszył.

Wróć do „Projektowanie PCB, programy EDA, CAD, narzędziowe”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 16 gości