Strona Domowa

Dawida Urbanskiego

- Dział: arts -

< Go Back to List

elektronika/ds1302_asm

Komunikacja DS1302 z attiny3113

autor: Dawid napiano:2010-wrzesnia-23

Cel

Obługa zegara czasu rzeczywistego przez DS1302 marki Dallas. Komunikacja układu DS1302 z mikrokontrolerem Attiny2313.

DS1302 - informacje

komunikacja: 3-Wire interface - interface własny (to nie TWI-Two wire interface) ograniczenia: bedzie działac do 2100r -40°C do +85°C pamięc ram: 31x8b zasilania: 2.0 - 5.0V zamiennik: ds1202

DS1302 - protokół 3-Wire

Zaprezentuje tu moje wypociny związane ze zrozumieniem dokumentacji. DS1302 kożysta z protokół 3-Wire opracowanego w celu ułatwienia komunikacji z układem.

TŁUMACZENIE DOKUMENTACJI

EN: "DATA OUTPUT" "Following the eight SCLK cycles that input a read command byte, a data byte is output on the falling edge of the next eight SCLK cycles." "Note that the first data bit to be transmitted occurs on the first falling edge after the last bit of the command byte is written." "Additional SCLK cycles retransmit the data bytes should they inadvertently occur so long as CE remains high. " "This operation permits continuous burst mode read capability." "Also, the I/O pin is tri-stated upon each rising edge of SCLK." "Data is output starting with bit 0." PL: WYSYŁANIE DANYCH przez DS1302 Po ośmiu cyklach SCLK w których układ czyta bajt polecenia, wysyłany jest bajt danych na kolejnych ośmiu opadajacych zboczach cyklu SCLk. Zauważ że pierwszy wysyłany przez układ bit danych pojawia się na pierwszym opadajacym zboczu po zapisaniu ostatniego bitu bajtu polecenia. Dodaktowo cykle SCLK "retransmit" bajt danych powinny "inadvertently occur" tak długo jak CE pozostaje w stanie wysokim. Ta operacja pozwala na zgodność z trybem "burst". także, pin I/O jest 3-stanowy przy każdym wzrastającym zboczu SCLk. Bajt danych wysyłany jest zaczynając od bitu zerowego.

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. Schemat podłączenie DS1302 do Attint2313 podłączenie DS1302 do Attint2313 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. Przedstawia podgląd działania firmware w wersji 0.1.

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.

Firmware ver 0.5

Druga wersja robocza z poprawionymi zasadami zapisu odczytu.

[Output] Zapis bitu do zegara: Zegar czyta z linii I/O bit na rosnącym zboczu SCLK, Output (z dokumentacji)

[input] Odczyt danych z zegara: Zegar wysyła bit na linii I/O na opadającym zboczu SCLK. Input (z dokumentacji)

firmware w działaniu

Podgląd działania ujawnia znaczne problemy: Układ zawsze odpowiada 0xFF(hex)=0b11111111 niezależnie od COMMAND BYTE.

odczyt: odczyt

timing(opis czasów) timing

Z obserwacji wiem że jego odłączenie DS1302 od attiny2313 sprawia brak Sygnału/odczytu na lini I/O, to dobrze gdyż dzięki temu wiem że sygnał pochodzi z DS1302. Sygnał pojawia się nawet przy braku zasilania dla zegara! To dziwne, moze swiadczyć o tym że jest to komunikat błędu, może odmowy zapisu? Po wymianie na nowy nadal istnieje ten sam problem tak wiec wiem juz że to robie coś źle. Przypuszczam że może to być: zle podłąone zasilanie do DS1302, złe podłączenie układów, brak usunięcia flagi WP, lub bład w kodzie związany z odczytem.

Firmware ver 1.0

Pierwsza sprawna wersja interfacu. Pozwala na zapis i odczyt danych

UWAGA: układ podczas pracy grzeje się można to wyczuć ręką.

Na obrazku widać podłączony układ. poprawna metoda połączenia DS1302 do Attint2313

timming

dowód działania dla częstotliwości pracy 1Mhz: timing ver1.0

download

Wersja napisana dla attiny2313 w AVR Studio. Zezwalam na dowolne wykożystanie. Jeżeli Ci to pomoże, powiedz mi o tym. pobierz: ver 1.0

Firmware ver 1.1

zmiany

Naprawiłem procedure odczytu danych (był błąd w zapisywaniu do rejestru) Teraz dane prezentowane są na ekranie segmentowym

; ******** #16 ************ ;zapisz wyslane dane push j in j,DS1302_PIN; todo: zamien na DS1302_Port-?? ;czytaj ;SBRS j,DS1302_IO ;jeżeli bit jest wyzerowany ;CBR data_byte,7 ;wyzeruj SBRC j,DS1302_IO ;jeżeli bit jest ustawiony SBR data_byte,0b10000000 ;to go ustaw ;UWAGA: a nie: "SBR data_byte,7" ;przesun bity w lewo(ten już odczytano) ;(przeskocz ten krok w ostatnim kroku) ldi j,1 CPSE i,j LSR data_byte ;---------- pop j ;--------------

działanie

  • test podłączenia ekranow (a,b,c,d,e,f,g,pd)
  • usuniecie flagi 'Clock Halt'
  • usuniecie flagi 'Write Protection'
  • ustawienie czasu: godziny, minuty, sekundy
  • odczyt: godziny, minuty, sekundy
  • wyświetlenie wartośći na 8ekranach sementowych w kolejnosci: godziny, minuty, sekundy

układ w działaniu

Działanie: Test w nocy:

źródła

DS1302:

Attiny2313:

Assembler:

Zakup układu:

Tu uzyskałem pomoc:

Pobierz kod w asm:

Back to List


komentarze

  • gość
    Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /home/dawidurb2/domains/dawidurbanski.pl/public_html/engine/framework/smarty/libs/plugins/modifier.date_format.php on line 53
    Apr 19, 2018
    Tu podaj treść
  • gość
    Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /home/dawidurb2/domains/dawidurbanski.pl/public_html/engine/framework/smarty/libs/plugins/modifier.date_format.php on line 53
    Dec 24, 2018
    I am ltonser. I need help. What can i do it?
  • gosc
    Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /home/dawidurb2/domains/dawidurbanski.pl/public_html/engine/framework/smarty/libs/plugins/modifier.date_format.php on line 53
    Apr 30, 2021
    Como se llamo esto i am from SPAIN

dodaj komntarz

tools

qrcode:
qrcode
-

code by: Dawid Urbanski

Copyright © by Dawid Urbanski 2010 - 2020