PIC16F877, DS1307 i I2C...



Masz problem? Zapytaj na forum elektroda.pl

Poprzedni Następny
Wiadomość
Spis treści
From: "Jacek Domański" <jadoone_at_nospam_polbox.com>
Subject: PIC16F877, DS1307 i I2C...
Date: Tue, 10 Jul 2001 22:56:35 GMT


Witam! :-))
Zajmuje sie ostatnio oprogramowywaniem ukladu DS1307 Dallas'a na procesor
PIC 16F877.
Procesorek ma wbudowany hardware'owy port I2C i za jego posrednictwem
odwoluje sie do sprzetu.
Na podstawie not aplikacyjnych Microchip'a i innych zrodel z internetu
napisalem procedurki obslugujace I2C - jedna dziala na przerwaniach, druga
zas na zasadzie polling'u . Obie dzialaja owszem, ale gdy chce odczytac
wieksza ilosc bajtow za jednym zamachem dzieje sie dziwna rzecz - zamiast
odczytac np. 4 kolejne bajty z DS1307 i umiescic je w 4 komorkach bufora -
system odczytuje tylko 2 bajty i umieszcza je dwukrotnie w kolejnych parach
komorek pamieci.
Czyli zamiast odczytanych komorek 1,2,3,4 mam odczytane 1,1,2,2. Przy
odczytywaniu komorek pojedynczo (i adresowaniu ich odpowiednio przed
odczytem) wszystko dziala OK. Wyglada to tak jakby wewnetrzny
licznik-pointer DS1307 nie inkrementowal sie po kazdym odczycie, a dopiero
po dwoch.
Przegladalem kod kilka razy, zmienialem fragmenty, nawet napisalem procedury
dzialajace na polling'u (bo najpierw byly te na przerwaniach) - ale efekt
jest ten sam.
Co to moze byc?... czy ktos moze zetknal sie z podobnym problemem?....
Moge co prawda przerobic procedure tak zeby odczytywala co drugi bajt
odebrany z DS1307, ale to jest jakas proteza a nie rozwiazanie problemu.
(ostatecznosc).
Ktos ma doswiadczenia z DS1307?


Pozdrawiam.


Jacek Domanski.




Poprzedni Następny
Wiadomość
Spis treści
From: "Jacek Domański" <jadoone_at_nospam_polbox.com>
Subject: Re: PIC16F877, DS1307 i I2C...
Date: Fri, 13 Jul 2001 10:00:29 GMT



Użytkownik "MrWebsky" <mrwebsky_at_nospam_poczta.wp.pl> napisał w wiadomości
news:3B4E18EB.5023794_at_nospam_poczta.wp.pl...
Proszę dokładnie przeczytać specyfikacje chip'a Dallas.
Jeśli podejrzewa Pan problemy z komunikacją to sugeruje rozpracować
najpierw
komunikacje ze zwykłym EEPROM'em szeregowym ktory na pewno ma
autoinkrementacje. Jeśli to zadziała Dallas też musi.
W ostateczności proszę skombinować gdzieś oscyloskop z pamięcią i
zobaczyć czy PIC generuje poprawną sekwencje dostępu po I2C.


Tak tez bede musial zrobic - myslalem ze moze ten problem to jest jakis "PIC
specific lub Dallas specific problem"...
Najprawdopodobniej jest to jakis blad programu, (na cos nie czekam tylko np.
dwa razy odczytuje tan sam bajt zanim on sie zmieni) lub tez zwiazane ze
sprzetowym SSP PIC'a....
Nie wiem np. co w praktyce oznacza opcja "slew rate" w PIC'u.... Mam
wlaczona - moze to ma jakis wplyw?

--

Pozdrawiam...

Jacek Domanski.

**************************************************
mailto:j.domanski_at_nospam_chello.pl
http://jadoon.republika.pl
http://www.draconia.it.pl/zlotnik.html
ICQ:8921549
**************************************************





Poprzedni Następny
Wiadomość
Spis treści
From: "Jacek Domański" <jadoone_at_nospam_polbox.com>
Subject: Re: PIC16F877, DS1307 i I2C...
Date: Fri, 13 Jul 2001 11:16:57 GMT



Ha...udalo mi sie dojsc o co chodzi.....:-)))

Okazuje sie ze nota aplikacyjna Microchip'a AN735 dotyczaca I2C ma blad
(ktory przynajmniej sie ujawnia podczas wspolpracy z DS1307 - nie wiem jak z
innymi ukladami).
W przykladzie tym, po wyslaniu ACK'a przez PIC'a do slave'a jest testowany
bit ACKEN, ktory po zakonczeniu sekwencji ACK powinien przybrac wartosc
zero - wtedy uklad SSP PIC'a jest w stanie idle i mozna inicjowac dalsze
odbieranie danych (ustawiajac RCEN=1). Taka jest przynajmniej teoria -
jednakze nie do konca sie jak widac ona sprawdza....
Widocznie jednak PIC nie jest w stanie IDLE w tym momencie (choc tak wynika
rowniez z opisu scalaczka i to powinno zadzialac).
Jednoczesnie z wyzerowaniem ACKEN jest ustawiany bit SSPIF (teoretycznie
rownoczesnie, ale w praktyce musi sie to dziac ciut pozniej, co ma
znaczenie) i dopiero testowanie tej flagi (a nie ACKEN jak to jest w nocie
aplikacyjnej) gwarantuje poprawny odczyt danych z DS1307.

Czyli generalnie - testujmy zawsze bit SSPIF, olewajac inne bity, ktore jak
widac nie do konca dobrze dzialaja.

Moze to jest zwiazane np. z tym ze procesorek napedzam kwarcem 16MHz a nie
standardowym 4MHz ?... Wszystko sie 4 razy szybciej dzieje? :-)))


--

Pozdrawiam...

Jacek Domanski.

**************************************************
mailto:j.domanski_at_nospam_chello.pl
http://jadoon.republika.pl
http://www.draconia.it.pl/zlotnik.html
ICQ:8921549
**************************************************