Sprzętowa obsługa PCF8583

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
Awatar użytkownika
Aro
Użytkownik
Posty: 677
Rejestracja: 30 paź 2006, 18:49
Lokalizacja: Świerczyniec | Wrocław
Kontakt:

Sprzętowa obsługa PCF8583

Post autor: Aro » 19 maja 2007, 15:17

Witam, Czy są jakieś różnice między TWI a I2C? Dotychczas we wszystkich programach, z którymi się spotkałem obsługa PCF8583 była realizowana programowo, mimo że procesor posiadał TWI.

ZbeeGin

Post autor: ZbeeGin » 19 maja 2007, 17:31

TWI jest nieco bardziej zaawansowane niż I2C. Posiada parę dodatkowych właściwości - jest to ten drugi powód, że nie nazwa się I2C (pierwszy to prawa licencyjne firmy Philips). TWI obsługuje pełen zbiór funkcji I2C zatem kompatybilność wsteczna jest zachowana. Choć obecnie pojawiła się nowa specyfikacja I2C rozszerzająca zakres adresów na szynie (10bitów).

Myślę, że TWI jest nowością, zatem wszyscy idą "na skróty" wykorzystując sprawdzone i działające procedury emulacji programowej.

Awatar użytkownika
Aro
Użytkownik
Posty: 677
Rejestracja: 30 paź 2006, 18:49
Lokalizacja: Świerczyniec | Wrocław
Kontakt:

Post autor: Aro » 19 cze 2007, 13:59

Skorzystałem z takiego "skrótu". Procedury przepisane z książki. Mam jedno "ale". Taki program nie działa:

Kod: Zaznacz cały

	start_PCF();
	write_PCF(0xa0);
	write_PCF(adr);
	start_PCF();
	write_PCF(0xa1);
		czas[2]=read_PCF(1); //czytaj sekundy, wyślij ACK
		czas[1]=read_PCF(1); //czytaj minuty, wyślij ACK
		czas[0]=read_PCF(0); //czytaj godziny, nie wysyłaj ACK
	stop_PCF();
Z układu odczytane zostają tylko sekundy. Zeby wszystko odczytac, muszę osobno dla każdego rejestru podawac adres. W czym może tkwic problem?

Npn
-
Posty: 35
Rejestracja: 19 maja 2007, 3:09
Lokalizacja: Kraków

Post autor: Npn » 20 cze 2007, 2:40

Co zawiera zmienna 'adr'? Prawdopodobnie cała ta procedura działa po poszerzeniu o jej resztę (przeczytaj dokładnie tą książkę). Generalnie układy RTC na I2C działają na zasadzie: wyślij rozkaz odczytu+nr. rejestru (sekund/minut/itp.) - odczytaj wartość (sekund/minut/itp.). W drugą stronę działa to oczywiście jako ustawianie zegara, alarmu itp. Jeśli chodzi o odpowiednie adresy, to wysyłam do karty katalogowej danego układu.

Awatar użytkownika
Aro
Użytkownik
Posty: 677
Rejestracja: 30 paź 2006, 18:49
Lokalizacja: Świerczyniec | Wrocław
Kontakt:

Post autor: Aro » 20 cze 2007, 7:52

Więc tak, adr=2, jest to adres do rejesrtu sekund. W książce pisze że po każdym odczycie i potwierdzeniu tego bitem ACK inkrementuje się adres rejestru w PCF8583. Następne rejestry to minuty, godziny itd.

ODPOWIEDZ