logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[BASCOM AVR][ATMEGA168V] Zegar DS1337, prośba o sprawdzenie poprawności sch.+kod

kbw24 27 Kwi 2012 16:39 3454 19
REKLAMA
  • #1 10838337
    kbw24
    Poziom 14  
    Witam!

    Jak w temacie...czyli chciałbym uprzejmie prosić osoby, które posiadają większą wiedzę ode mnie o sprawdzenie poprawności kodu w Bascomie, jak i schematu.

    [BASCOM AVR][ATMEGA168V] Zegar DS1337, prośba o sprawdzenie poprawności sch.+kod

    Opierając się na kodzie źródłowym pewnego zegarka binarnego, skonstruowanego przez jednego z forumowiczów(Link), skleiłem sobie kod do zegara z wyświetlaczem siedmiosegmentowym LED oraz z obsługą kalendarza. Wyświetlacz ma wspólne katody. Sposób jego multipleksacji wymyśliłem sam, jednak żeby zachować sensowną kolejność, będzie on nieco niżej.

    Moje pytanie dotyczy najważniejszych części kodu, co do których działania nie mam pewności.

    Cały program jest oparty na podprogramach, czyli tajemnicze elementy bez "Call" to właśnie odwołania do nich ;)

    Wszystkie zmienne obsługi DS-a są typu BYTE.

    Sposób odczytywania czasu niewiele zmieniłem, zostało dodane tylko dzielenie sekund na dziesiątki i jedności, więc tu mam pewność, że kod działa.

    Inaczej ma się już kod odczytu daty, który sam wymyśliłem, jak i kod zapisywania danych.

    Odczyt daty:
    Kod: text
    Zaloguj się, aby zobaczyć kod


    Zapis wszystkich danych:
    Kod: text
    Zaloguj się, aby zobaczyć kod


    Może się pojawić pytanie: czym są tajemnicze funkcje warunkowe odnoszące się do zmiennej Month_century(zawiera informację o miesiącu i w skrajnym przypadku o kolejnym wieku)? Otóż, zgodnie z datasheetem układu:

    Cytat:
    The century bit (bit 7 of the month register) is toggled when the years register overflows from 99–00.


    w takim wypadku do liczby miesięcy dodaje mi się liczba 80. Jest to więc jakby maskowanie i spożytkowanie tego bitu. Umożliwia mi to ustawienie roku 21**, chociaż pewnie ten zegar tyle nie przetrwa. ;) Ys to setki roku.

    Jeżeli o niczym nie zapomniałem, to poniżej daję kod odpowiedzialny za multipleksację.

    Kod: text
    Zaloguj się, aby zobaczyć kod


    Przy czym Multiplex_delay_us = Const i wynosi 250 .
    Zmienne Digit, Numb i Dpen są koordynatami podprogramu Displ_case.

    To chyba tyle, jeżeli chodzi o kod.

    Rezystory segmentów wyświetlacza mają wartość 200Ω każdy. Zasilanie bateryjne 3V CR2032.
    Zasada działania jest dosyć prosta: Reset układu powoduje odczyt i wyświetlenie(przycisk SHOW). Przycisk SET jest użyteczny przy ustawianiu zegara.

    Do schematu mam jedno pytanie...:
    http://mirekk36.blogspot.com/2012/04/mikrokontroler-prawidowe-zasilanie.html
    Czy naprawdę muszę podłączyć jeszcze pin AVCC :?: :O

    Dziękuję każdemu za odpowiedź i pozdrawiam.
    I przepraszam, że się tak rozpisałem. :D

    kbw24
  • REKLAMA
  • #2 10838872
    Mol
    Poziom 30  
    Kondensator C2 równolegle na switch-a , bo po włączeniu zasilania układ ci sie nie będzie resetować . AVCC jest do zasilania portu analogowego , ale jak go będziesz urzywać jako wejścia/wyjścia cyfrowe to bez tego może nie działać.
  • REKLAMA
  • #3 10838971
    xamrex
    Poziom 28  
    Mam pytanie odnośnie tego Switacha,
    Dlaczego kolega programowo go nie podciąga do VCC, tylko przez rezystory?
    Przecież wystarczy do PD6 podłączyć tylko Switch a z drugiej strony do masy, nie widzę tu potrzeby stosowania 10k i podciągania tego do VCC.
  • #4 10845819
    kbw24
    Poziom 14  
    Witam

    Przepraszam za przerwę, jestem na wakacjach :D

    Kondensator C2 nie jest tu do resetowania układu, pełni funkcję redukowania odbić styku przycisku.

    Dobry pomysł z tym wewnętrznym rezystorem, moje pytanie tylko: jak go włączyć?

    Pozdrawiam
    kbw24
  • #5 10846180
    xamrex
    Poziom 28  
    Przecież to podstawy!
    PORTD |=(1<<PD6);
  • #6 10846373
    gaskoin
    Poziom 38  
    Kolega pisze w bascomie.

    Jeśli chcesz tłumić drgania tego przycisku to musisz go dać równolegle do niego. Poza tym, jeśli filtrujesz już tak ten przycisk to daj też rezystor szeregowo do resetu jakiś mały (100-300Ω). Rezystor do resetu jest ciut za duży, ja bym tam dał 10k

    AVCC też musi być podłączone (z kondziolem)! Aref tak samo musi mieć filtr. Kondensator filtrujący ma być przy każdej nóżce do której doprowadzasz zasilanie (czyli w tym przypadku co najmniej jeszcze 2). W przeciwnym wypadku możesz ich nie dawać w ogóle i zastanawiać się czemu nie działa :)
  • #7 10846609
    kbw24
    Poziom 14  
    W Bascomie można niby implementować nieco ASM, lecz nie wiem w jakim stopniu...

    Co do niwelowana drgań styku, to może zacznijmy najpierw od ustalenia, czy jest sens to robić. ;)

    Włączenie kondensatora równolegle do przycisku chyba nie zmieni za dużo, w każdym razie szukam najlepszego rozwiązania. Z kolei TU widać, że nie ma żadnego kondensatora.

    Do projektu dodałem jeszcze jeden kondensator 100n przy procku i już więcej nie zmieszczę, mam nadzieję, że starczy. (ten pierwszy jest umieszczony przy DS-ie)
    AVCC podłączone do VCC.

    Nie wspominałem chyba jednej kluczowej rzeczy: nie mam możliwości sprawdzenia poprawności działania układu, a w momencie zamówienia płytki w firmie - możliwości modyfikacji. Prototypu testowego nie ma. Czyli muszę sobie wyobrazić i mieć pewność, że od razu zadziała. :P

    Pozdrawiam
    kbw24
  • REKLAMA
  • #8 10846621
    xamrex
    Poziom 28  
    W bascomie to masz tak:
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #9 10846808
    kbw24
    Poziom 14  
    No to jeżeli tak to działa, to tak mam, z tym, że jako Input ;) Czyli ten rezystor przy przycisku "do kosza"?
  • #10 10846855
    xamrex
    Poziom 28  
    Przepraszam, rzeczywiście ma być input.
    Pomyliło mi się.

    Dodano po 22 [sekundy]:

    kbw24 napisał:
    Czyli ten rezystor przy przycisku "do kosza"?

    Tak, Nie jest on potrzebny.
  • #11 10846911
    gaskoin
    Poziom 38  
    Kondensator przy resecie nie jest wymagany, a i uwierz mi - jeden kondziol na ten procesor to za mało, kondensator powinien być przy każdym pinie zasilania.
  • #12 10847153
    Konto nie istnieje
    Konto nie istnieje  
  • #13 10847236
    kbw24
    Poziom 14  
    Może źle to powiedziałem - kod, do momentu zamówienia płytki i elementów jest na etapie spekulacji - "a nuż zadziała" :D W tym momencie nie będę mógł też zmienić już płytki, ale możliwość zmiany oprogramowania będzie :)

    Prototyp z wielkim bólem niestety nie jest możliwy... Jedyny element jaki mam, to wyświetlacz, reszta załatwiana będzie około wakacji(tak myślę) i absolutnie wszystko jest w smd(z wyjątkiem wyświetlacza - Link ). No, i może dziś dostałem procesor...

    Daję obrazek płytki, mam nadzieję, że to wyjaśni kompletny brak możliwości modyfikacji, dodawania etc. Miało być to ściśle tajne, lecz cóż... :D Średnica około 29mm. Minimalne odstępy 7mils, najmniejsza grubość ścieżki 8mils, przelotki wiertłem 0,3mm... Kwarc smd taki, jaki podaje Dallas w datasheecie, 6pF, cokolwiek to znaczy.

    [BASCOM AVR][ATMEGA168V] Zegar DS1337, prośba o sprawdzenie poprawności sch.+kod

    Funkcji debounce nie stosuję, robię to po swojemu i działa jak chcę ;)

    Dziękuję i pozdrawiam
    kbw24

    PS. Przypominam o zasilaniu bateryjnym 3V ;)
  • REKLAMA
  • #14 10847279
    gaskoin
    Poziom 38  
    kbw24 napisał:
    PS. Przypominam o zasilaniu bateryjnym 3V ;)


    To nie ma znaczenia. Zgadnij co będzie wprowadzało śmieci do zasilania ?
    Tak tak, drogi Holmesie.... Mikrokontroler sam siebie zakłóca :)

    I podłącz AVCC do VCC i Vref przez kondensator do masy.
  • #15 10847305
    Konto nie istnieje
    Konto nie istnieje  
  • #16 10847571
    kbw24
    Poziom 14  
    Avcc juź podłączyłem.
    Kolejny kondensator? :D

    Saabotaz napisał:
    Może się okazać że polegniesz na włożeniu tego w obudowę w której na krawędzi jest np zatrzask (a akurat tutaj będzie jakiś element smd).

    Skoro to ma być bateryjne to podciągnij zasilanie baterii do nóżki ADC + dzielnik (włączany tranzystorem) lub do komparatora. Niby nic ale wskaźnik "low batt" zawsze się przydaje.

    No i skoro to ma być z 3V to pozostaje ci tylko czerwony kolor wyświetlacza :-)


    Jeżeli tak by się wydarzyło, to zatrzask by już nie istniał... :D Choć jakby nie patrzeć, obudowy również jeszcze nie mam...

    Zależy mi na oszczędności energii, tak więc więcej bajerów nie dorobię, już wystarczająco dużo tego :P

    I spójrz do linka z mojego poprzedniego postu, tam widać, że wyświetlacz jest czterocyfrowy i w dodatku czerwony. ;)

    Pozdrawiam
    kbw24
  • #17 10847860
    gaskoin
    Poziom 38  
    kbw24 napisał:

    Zaleźy mi na oszczędności energii, tak więc więcej bajerów nie dorobię, już wystarczająco duźo tego :P


    To dlaczego nie użyjesz bardziej energooszczędnego procesora z już wbudowanym RTC ? Zmniejszyło by to płytkę i koszty
  • #18 10847919
    kbw24
    Poziom 14  
    Wielkość płytki jest ograniczona przez wyświetlacz, więc nie zrobi mi to różnicy.
    Wewnętrznego RTC nie uźyję, bo...niekoniecznie nie wiem jak, ale może wolę tak ;)
    Z resztą taka budowa nieco ułatwia program i obsługę - niskonapięciowy DS1337 działa sobie w tle i liczy czas, a Atmega na żądanie zostaje zresetowana, odczytuje, wyświetla, i przechodzi w tryb maksymalnego oszczędzania energii, tudzież powerdown. ;)
  • #19 10847945
    gaskoin
    Poziom 38  
    Ma duży raster (0.8mm) - można dać coś z mniejszym (0.5mm)
    Od razu to coś może mieć RTC w środku, które też przecież działa w tle.

    Zmniejszy to powierzchnie płytki o 40% na tej jednej warstwie.
  • #20 10848018
    kbw24
    Poziom 14  
    Hmm... Można by od razu znaleźć jakiś układ wyspecjalizowany, tylko po co ;)
    Atmegę 168V już mam kupioną, więc zmiany w tym zakresie przestają wchodzić w grę. Z resztą nieco męczyłem się z rozszyfrowywaniem tego, co dallas napisał w datasheecie, w momencie zmiany na wewnętrzny rtc traci to sens...rozumiem Twój punkt widzenia, ale moźe juź zostańmy przy tym, przy czym się tak naprodukowałem? ;)

    Pozdr.
REKLAMA