Przejdź do głównej zawartości

Posty

Wyświetlam posty z etykietą EEPROM

Programowanie AVR cz. 4,5: Poprawki związane z drobnym przeoczeniem.

Parę dni temu, tuż po publikacji poprzedniego wpisu (na temat zegara PCF8583P ) zorientowałem się - przypadkowo, jak to zwykle bywa, ale też na skutek poczynionych obserwacji - że użyłem w układzie prototypowym egzemplarza mikrokontrolera z fusebitami ustawionymi domyślnie. Głównie chodzi tu o bity dotyczące częstotliwości taktowania i używanego generatora. Zaglądając w okienko pokazujące stan fusebitów zauważyłem, że mikrokontroler używa ciągle wewnętrznego generatora 8MHz z podziałem częstotliwości przez 8, czyli jest taktowany przebiegiem o częstotliwości efektywnej 1MHz. Do sprawdzenia stanu fusebitów skłonił mnie pomiar czasu pomiędzy kolejnymi przerwaniami timera nr 1 - skonfigurowałem go w pisanym właśnie programie jako timer, który powinien generować przerwanie co 1 sekundę. Jednak sekunda ta trwała nieco dłużej... Na obrazku poniżej pokazane zostały prawidłowe wartości fusebitów dla układu taktowanego sygnałem z generatora stabilizowanego zewnętrznym kwarcem 4MHz, czyli ...

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...

Programowanie AVR cz. 3: ATtiny2313, EEPROM AT24C04C i magistrala I2C. Oraz krótko o pewnej zapomnianej obietnicy.

000 wstęp Głównym bohaterem tego posta jest magistrala I2C , zwana również interfejsem dwuprzewodowym (ang. Two-wire lub 2-wire interface ). To proste łącze wykorzystywane jest w wielu ciekawych układach mogących współpracować z mikrokontrolerami i nie tylko. Można tu wspomnieć - żeby nie było, że użyłem słowa "wielu" bez pokrycia - choćby o układach pamięci, zegarach czasu rzeczywistego, przetwornikach AC/CA... Co prawda "małe" mikrokontrolery nie mają dedykowanych linii dla I2C, ale dzięki środowiskom i bibliotekom dla programistów, zapewniającym pełną implementację m. in. protokołu I2C, mamy możliwość bezproblemowego wykorzystania dobrodziejstw tej magistrali posługując się uniwersalnymi liniami wejścia - wyjścia. Można też podjąć się samodzielnej implementacji obsługi tej magistrali - jeśli ktoś lubi takie wyzwania. Na początek jednak warto przyjrzeć się samej idei i koncepcji magistrali I2C: I2C w Wikipedii ...