- Dział: arts -
elektronika/ds1302_asm
Komunikacja DS1302 z attiny3113
Firmware ver 0.1
Pierwsza robocza wersja oporogramowania komunikacji, celem tej wersji jest sprawdenie poprawności wysyłanych danych przez mikrokontroler.
Dizałanie firwaru ogranicza się do przeprowadzenia 3 działań:
- Odblokowanie flagi zapisu
- Odblokowanie zegara, czyli włączenie go
- Odczyt sekund
Uwaga! obiektem testu jest poprawność wysłanych danych, odbieranie danych będzie opracowywany w dalszych wersjach.
Podłoczenie
Rys 1 prezentuje schemat podłączenia układów. Podłoczenie nie zostało jeszcze wykonane! Ma ono jedynie harakter orientacyjny. Niebieskie linie to progrmator, Purpura - CE Pomarańcz- I/O Zieleń - SCLK
firmware w działaniu
Oto test działania firmware ver0.1. Obserwacji danych dokonano przy użyciu AVT389 przy frekwencji 2MHz, zapis uruchamiało pierwszy stan wysoki lini CE.
UWAGA: układ DS1302 nie był podłączony do mikrokontrolera podczas testu.
Czerwone linie wydzielają 3 komunikaty:
- usuniecie flagi WP
- usuniecie flagi CH
- oraz odczyt sekund
Każdy z komunikatów dzieli się na 2 części:
- Command Data - adres do odczytu/zapisu
- Data - informacje odczytane/zapisane
Szczegółowy opis znajduje się w dokunentacji.
I. usunięcie flagi zapisu
Aby móc dokonywać zapisu do RAM/ZEGARA musimy najpierw usunąc flagę WP.
WP - w stanie niskim oznacza możliwość zapisu.
WP - w stanie wysokim oznacza zakaz zapisu.
Flaga WP znajduje się na 7 bicie pod adresem(8F,8E)
Aby to zrobić musimy wyslać do zegara:
- COMMAND BYTE z adresem flagi WP [zobacz Tab 3a]
odczyt (hex) zapis (hex) Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 8F 8E WP 0 0 0 0 0 0 0 Dokonamy zapisu tak więc interesuje nas adres: 0x8E(hex) = 0b01110001(bin). [zobacz Tab 3b]
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 0 1 1 1 0 0 0 1 - DATA wartość zero: 0x00h = 0b00000000
Nie jestem pewien czy tak ma wyglądać, tego kroku nie ma opisanego w dokumentacji. Staram się ustawić 7Bit na zero wartość 0x00 = 0b00000000
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 0 0 0 0 0 0 0 0
II. usunięcie flagi stopu zegara
Aby zegar, 'tykał' musimy go o to poprosić. Odbywa się to przez usunięcie flagi CH (Clock Halt Flag) CH - w stanie wysokim oznacza że zegar stoi CH - w stanie niskim zegar tyka Flaga CH znajduje się na 7 bicie pod adresem (81h,80h)
Aby ustawić flage CH musimy wyslać do zegara:
- COMMAND BYTE z adresem flagi CH:
odczyt (hex) zapis (hex) Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 81 80 CH 10 Seconds Seconds Dokonamy zapisu tak więc interesuje nas adres: 0x80(hex) = 0b10000000(bin).
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 1 0 0 0 0 0 0 0 - DATA wartość 0: 0x00(hex) = 0b00000000
Aby wyzerować Bit7,wysyłam wartość 0.
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 0 0 0 0 0 0 0 0
II. odczyt
Dla testu działania program odczyta sekundy. Sekundy są zapidane na bicie6,7,4 oraz 3,2,1,0 pod adresem(81h,80h) Aby je odczytać musimy wyslać do zegara:
- COMMAND BYTE z adresem flagi CH:
odczyt (hex) zapis (hex) Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 81 80 CH 10 Seconds Seconds Dokonamy zapisu tak więc interesuje nas adres: 0x80(hex) = 0b10000000(bin).
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 1 0 0 0 0 0 0 0 - DATA wartość: tę wartość powinien podać na DS1302
wartość odczytaną, narazie pomijamy gdyż DS1302 nie był podłączony.