Przejdź do głównej zawartości

Programowanie AVR cz. 4: ATtiny2313 + PCF8583P + AT24C04 + I2C,czyli... zabrakło pamięci, ale jest zegar nastawiany "w locie".

Kontynuując zabawę z magistralą I2C (patrz: poprzedni artykuł o programowaniu AVR) i grzebanie w elektronicznym złomie, natknąłem się na niepozorny układ scalony PCF8583P, zamontowany wraz z - jak się domyśliłem - odpowiednim oscylatorem kwarcowym na prehistorycznej płytce uruchomieniowej, jeszcze chyba z czasów AT89C4051. Układ ten to zegar czasu rzeczywistego (RTC) wraz z kalendarzem i obsługa alarmów, zarządzany (programowanie, odczyt) poprzez magistralę I2C. Nie zastanawiając się długo postanowiłem dołączyć ten układ do systemu z poprzedniego wpisu, żeby stworzyć wypasiony zegar, kalendarz, budzik... Niestety, szybko okazało się, że mój ulubiony mikrokontroler ATtiny2313 ma zbyt mało pamięci FLASH, żeby pomieścić finezyjny kod, który zaczął mi wychodzić (żaliłem się już w moim streamie Google+). Dlatego też ograniczyłem program demonstracyjny do samego zegara - jedyny ficzer, jaki się pojawił, to nastawianie godziny i minuty "w locie" za pomocą dwóch przycisków. Oznacza to, że każda zmiana godziny czy minuty (zmiana w górę, czyli inkrementacja) powoduje natychmiastową aktualizację ustawień zegara PCF8583P. Oczywiście aktualny czas jest wyświetlany na jednowierszowym LCD.
Początkowo program działał dziwnie, udało mi się jednak - częściowo w oparciu o analizę, częściowo metodą doświadczalną - zapanować nad tą niestabilnością i teraz wszystko jest OK. Zachęcam do przejrzenia kodu źródłowego, mimo, że nie zawiera jakichś specjalnych wodotrysków, ech...


Całość uruchamiana była w układzie zawierającym na magistrali I2C również wspomnianą pamięć EEPROM, a ponieważ PCF8583 jest poniekąd modyfikacją pamięci z dołożoną ekstra funkcjonalnością (posiada np. taką samą jak AT24C04, zaszytą "preambułę" adresu), musiałem ustalić na nowo adresy sprzętowe slave'ów. Być może powodem niestabilnego działania układu (w pewnych warunkach) było zachwianie parametrów elektrycznych magistrali, nie pozwalające na poprawną transmisję danych? Nie wgłębiałem się, więc jest to sprawa do zbadania.
Poniżej schemat całego układu demonstracyjnego. Niestety, nie udało się zaprogramować i wykorzystać wszystkich jego możliwości - chyba pora przerzucić się na którąś z ATmeg...

Na koniec krótka konkluzja. Chcąc zbudować zegarek na ATtiny2313 nie musimy angażować do tego celu specjalizowanych układów, których programowa obsługa zaśmieci niepotrzebnie cenną pamięć mikrokontrolera - mamy przecież w naszym procesorku timer, który może generować przerwanie co jedną sekundę... ;-) Jednak zaletą zastosowania oddzielnego układu jest to, że zapewniając mu zasilanie (podtrzymanie) bateryjne, możemy mieć ciągły pomiar czasu nawet po wyłączeniu zasilania systemu mikroprocesorowego. Rozwiązanie takie zastosował kolega dołączając do RaspberryPi moduł zegara bazujący na bliźniaczym układzie PCF8563P - opis znajdziemy na jego blogu.

ERRATA:

Proszę koniecznie zajrzeć do wpisu: Programowanie AVR cz. 4,5: Poprawki związane z drobnym przeoczeniem.

Komentarze

Popularne posty z tego bloga

Niesamowicie prosty czujnik zmierzchowy.

Tym razem zero programowania, będzie natomiast nostalgiczno-wspomnieniowy układzik, lekko zmodyfikowany. Otóż kilka dni temu rozmawialiśmy w gronie znajomych o różnego rodzaju czujnikach zmierzchowych i czujnikach ruchu. Ponieważ należę do tych wariatów, co to hołdują jeszcze owej przestarzałej i kompletnie odrealnionej dziś zasadzie: "po co kupować, gdy można zrobić", stwierdziłem, że poskładam takie coś (czujnik zmierzchowy; sensor ruchu faktycznie lepiej nabyć, choćby ze względu na rozmiary ;)) i być może podłączę do jakiegoś mikrokontrolera. Przypomniało mi się też przy okazji, że znalazłem ostatnio w elektronicznych śmieciach stary fotorezystor (dla niewtajemniczonych: element zmieniający rezystancję, czyli opór elektryczny, pod wpływem działania strumienia światła) RPP130, jeden z kilku pozostałych po montowanych wieki temu układach tranzystorowych do zdalnego sterowania pracą urządzeń za pomocą latarki... No OK, nie było to specjalnie rozbudowane zdalne sterowanie ;)

Płytka prototypowa na bazie ESP8266 (ESP-01)

To nie jest kolejny artykuł traktujący od początku do... nieco dalej (bo na pewno nie do końca) o płytkach ESP8266 . Żeby się dowiedzieć, co to takiego, odwiedźcie proszę np. tę stronę (oraz wiele innych – poproście o pomoc Waszą ulubioną wyszukiwarkę): http://www.esp8266.com/wiki/doku.php?id=esp8266-module-family . No ale żeby nie było, ESP8266 to układ zawierający na pokładzie wydajny mikrokontroler z rdzeniem RISC-owym, taktowany zegarem 40MHz (wersja, o której jest ten wpis) lub 80MHz, 512KB pamięci flash i podsystem komunikacji przez sieć WiFi . Jest powszechnie wykorzystywany jako swego rodzaju karta sieciowa do połączeń bezprzewodowych naszych urządzeń IoT , które budujemy w zaciszu domowych laboratoriów (i nie tylko). Układ montowany jest na płytkach występujących w kilku wersjach, różniących się przede wszystkim liczbą wyprowadzeń uniwersalnych, czyli GPIO – im większa liczba, tym większe możliwości wykorzystania układu (więcej urządzeń peryferyjnych itp.). Są też pewne

Programowanie AVR cz.8: Przetwornik analogowo-cyfrowy oraz modulacja szerokości impulsu.

Dziś kolejny wgląd w wyposażenie mikrokontrolera ATmega48P - tym razem przyglądamy się wbudowanemu w układ przetwornikowi analogowo-cyfrowemu oraz - dostępnej również w modelach ATtiny - modulacji szerokości impulsu realizowanej przez timery. Artykuł ten jest w pewnym sensie wstępem do następnego, który pojawi się już wkrótce, a którego tematykę zdradziłem na końcu. Przetwornik A-C (skrót spotykany w anglojęzycznej literaturze to ADC od Analog to Digital Converter ) to układ pozwalający na zamianę wartości napięcia (elektrycznego sygnału analogowego ;-)) na liczbę. W przypadku mojej ATmegi przetwornik ma rozdzielczość 10-bitową, co oznacza, że wartość napięcia podawanego na wejście przetwornika może być po konwersji zapisana jako liczba z przedziału od 0 do 1023 (musimy użyć zmiennej word do zapamiętania tej liczby). Jeśli jesteśmy w posiadaniu mikrokontrolera w obudowie PDIP 28-wyprowadzeniowej, to mamy do dyspozycji sześć kanałów (niezależnych wejść) przetwornika A-C, przyporzą