Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Zegar "VGA-RTC" - ATMega16+PCF8583+TeleVGA+Monito

JarekC 02 Gru 2010 16:13 34110 39
  • Zegar "VGA-RTC" - ATMega16+PCF8583+TeleVGA+Monito

    Witam,

    Ostatnio wpadła mi w ręce karta VGA sterowana poprzez złącze szeregowe SPI.
    A a ponieważ w domu poniewiera się kilka starych monitorów VGA to postanowiłem
    zbudować zegar wyświetlający czas i datę na monitorze VGA (bez udziału PC)
    Takiego zegarka na elektrodzie chyba jeszcze nie było.

    Wybór padł na popularne układy: procesor z rodziny AVR ATMEGA16 i zegarek RTC Philipsa PCF8583.

    Układ jest bardzo prosty i składa się z następujących elementów:
    - zasilacza 5V (LM7805)
    - procesora (ATMEGA16)
    - zegara czasu rzeczywistego (PCF8583+bateria CR2032)
    - 3 mikroprzełączników
    - złącza JTAG
    - zasilacza 3.3V (LM1117-3.3V)
    - karty TeleVGA
    Schemat w załączonej dokumentacji.

    Karta co prawda pracuje tylko w trybie znakowym ale ma możliwość definiowania własnych znaków co pozwala
    na wykorzystanie semi-grafiki. Ponieważ bardzo lubię wyświetlacze matrycowe to postanowiłem upodobnić
    wyświetlane znaki do wyświetlacza matrycowego LED 5x7 punktów. Zdefiniowałem trzy wielkości fontów:
    duży do wyświetlania czasu, średni do wyświetlania daty i mały do wyświetlania sekund i dnia tygodnia.

    Do tej pory programy pisałem głównie w assemblerze ale teraz postanowiłem spróbować zmierzyć się z C i Basic.
    C znam z PC a w Basicu pisałem ostatnio na ZX Spectrum.

    Do testów wybrałem GCC zintegrowane z AVR studio, IDE IAR i BASCOM.
    Przyznam, że z C poszło gładko, co prawda pomiędzy GCC a IAR jest trochę różnic związanych z dostępem
    do stałych umieszczonych w pamięci FLASH i dostępem do zmiennych bitowych. Ale w obydwu przypadkach
    problemy udało się szybko rozwiązać.
    Natomiast Bascom to była dla mnie mordęga, co chwilę trafiałem na jakieś dziwolągi a to w jednej linii
    może być tylko jedno działanie, a to nawiasy są zastrzeżone dla tablic, a to nie ma tablic dwuwymiarowych itd.
    Zawziąłem się i dokończyłem projekt ale był to pierwszy i ostatni projekt w Basicu. Dziwię się, że tylu osobom
    tak bardzo się on podoba. Na pewno zaletą jest automatyczne konfigurowanie układów peryferyjnych ale w moim
    przypadku na pewno nie rekompensowało to innych wad.
    W przypadku C częściowo korzystałem z bibliotek dostępnych razem z kata TeleVGA.

    Co do wielkości kodu wynikowego to najlepiej wypadł IDE IAR ale tego można było się spodziewać po komercyjnym
    kompilatorze , na drugim miejscu AVRStudio z GCC i na szarm końcu Bascom.
    Niestety ze względu na wielkość kodu wynikowego > 4kB w przypadku IDE IAR i Bascom trzeba mieć dostęp do pełnych wersji.

    Starałem się aby kod projektu był przejrzysty i dobrze skomentowany. Cały projekt jest podzielony na funkcjonalne bloki
    typu VGA, I2C, SPI, RTC, FONT itd.
    Kolory wyświetlania można prosto zmienić poprzez zmianę definicji stałych COLOR1,COLOR2,COLOR3 i COLOR_PRG.
    Programowanie zegara odbywa się za pomocą trzech przycisków ENTER, PLUS i MINUS. Po naciśnięciu przycisku ENTER
    wywołany zostaje tryb programowania, teraz przy pomocy klawiszy PLUS i MINUS możemy kolejno zmieniać godziny,
    minuty, dzień miesiąca, miesiąc, rok i dzień tygodnia. Przejście pomiędzy kolejnymi parametrami następuje po naciśnięciu
    ENTER. Po ustawieniu sprawdzana jest poprawność daty tzn. gdy ustawimy na 31 kwietnia to zostanie ona skorygowana
    na 30 kwietnia. Przy ustawianiu czasu sekundy są zerowane. Aktualnie zegar nie koryguje daty dla lat przestępnych.
    Zegar można rozbudować np. o obsługę termometru na DS18B20.

    Ze względu iż karta VGA jest sterowana po SPI można ją łatwo podłączyć do PICa, 8051 czy ARMa.
    Myślę właśnie nad projektem na ARM z wykorzystaniem monitora VGA i panelu dotykowego.

    Załączam schemat, kartę katalogową karty TeleVGA, pliki źródłowe projektu w wersji C(IAR), C(GCC) i BASCOM.
    Projektu płytki nie ma gdyż układ został zmontowany na płytce uniwersalnej.
    Elementy zegara RTC są zmontowane na osobnej płytce, którą posiadałem od innego projektu.

    Załączam również kilka zdjęć zmontowanego układu i obrazu z monitora.
    Niestety nie udał mi się załadować filmiku pokazującego jak
    tworzona jest semi-grafika (wyświetlanie w zwolnionym tempie).
    Przy próbie ładowania dostaję komunikat "zły plik". Próbowałem zakodować
    film przy pomocy różnych formatów ale zawsze kończy się niepowodzeniem.

    Na pewno padną pytania co do kosztów. Monitor 0zł, karta TeleVga 120zł,
    ATMega16 ok 16-18zł, PCF8583 4-5zł, płytka, stabilizatory, elementy dyskretne ok 10zł.

    Pozdrawiam
    JarekC

    Zegar "VGA-RTC" - ATMega16+PCF8583+TeleVGA+Monito Zegar "VGA-RTC" - ATMega16+PCF8583+TeleVGA+Monito Zegar "VGA-RTC" - ATMega16+PCF8583+TeleVGA+Monito Zegar "VGA-RTC" - ATMega16+PCF8583+TeleVGA+Monito
    Potrafisz napisać podobny artykuł? Wyślij do mnie a otrzymasz kartę SD 64GB.
    O autorze
    JarekC
    Poziom 30  
    Offline 
    Specjalizuje się w: avr, 8051, technika cyfrowa
    JarekC napisał 1035 postów o ocenie 264, pomógł 184 razy. Mieszka w mieście Kraków. Jest z nami od 2003 roku.
  • #2
    krakarak
    Poziom 39  
    Wyjątkowo nietuzinkowy pomysł i za to duuuży plus. Nawet osoby z minus 10 dioptri w oczach zobaczą ten zegar. Po porządnym zaprojektowaniu płytek i dołożeniu zdalnego sterowania można pomyśleć nad produkcją na potrzeby różnych poczekalni, dworców, instytucji. Oczywiście nie na zewnątrz. Minus to duży pobór prądu. Przydałby się też znak oddzielający godziny od minut.
  • #4
    grala1
    Specjalista grupy V.A.G.
    Bardzo fajny projekt. Jak zobaczyłem zdjęcie na pierwszej stronie to sobie mówie co to za wyświetlacz, dopiero jak później zobaczyłem stojak to załapałem że to monitor.
    Czy między godziną a minutami jest dwukropek bo na zdjęciu go nie widać?
    Gdzie można znaleźć taka kartę?
  • #5
    kamil007
    Poziom 12  
    Dzięki za świetny projekt stanowi on dla mnie doskonały materiał do nauki, programowania AVR.
    W PDF-ie grafika obcina mi kawałek tekstu :D
    Jeszcze raz dzięki!!!
  • #6
    Maticool
    Poziom 20  
    Witam.
    Przyznam, że nie zagłębiałem się w dokumentację ale czy konieczny był układ RTC? Nie dało by się tego zrealizować na samej ATmedze?
  • #7
    bokuden
    Poziom 15  
    Witam
    Atmega zapamiętuje sama aktualny czas po zaniku napięcia?
    Właśnie po to jest RTC(Real Time Clock).
    Pozdrawiam
  • #8
    JarekC
    Poziom 30  
    >krakarak
    Między godzinami a minutami jest migający dwukropek.
    Mam nagrany filmik z pracą zegara ale mam problemy z umieszczeniem go na
    elektrodzie. Spróbuję to zrobić jeszcze raz.

    >szymon 122
    Proste animacje na pewno da się robić, należy tylko pamiętać o ograniczeniu
    przepustowości szyny SPI i o tym że karta pracuje w trybie znakowym.

    >Maticool
    Dzięki zastosowaniu RTC mamy przy braku zasilania zapewniony minimalny pobór prądu z baterii,
    dla PCF8583 wynosi on poniżej 2uA. Obsługa zegara przy pomocy Timera 2 i kwarcu 32768Hz jest możliwa ale znacznie trudniejsza
    w realizacji (usypianie uP, zasilanie z 5V itp). A przy okazji znajomość obsługi I2C na pewno się przyda.
    Po niewielkich modyfikacjach można zastosować PCF8563 (tylko obudowy SMD) który zapewnia pobór prądu < 0.5uA.

    Pozdrawiam
    JarekC
  • #10
    cezar91
    Poziom 11  
    a generowanie obrazu VGA nie da sie wykonac na samej atmedze?
    Widzialem kilka projektow sterujacych monitorem VGA bezposrednio z uC
  • #11
    JarekC
    Poziom 30  
    >cezar91
    Aby uzyskać obraz o rozdzielczości 640x480 punktów i 60Hz wymagany jest zegar (pixel clock) o częstotliwości 25MHz więc ATMega jest za wolna.
    Można uzyskać obraz ale o znacznie niższych rozdzielczościach
    Poza tym wymaga to dokładnego wyliczania czasów wszystkich procedur sterujących z dokładnością do 1 taktu.

    Pozdrawiam
    JarekC
  • #12
    mcm
    Poziom 12  
    A tutaj projekt czyniący taką właśnie rzecz:
    http://www.serasidis.gr/circuits/AVR_VGA/avr_vga.htm
    Pamiętam, że kiedyś go złożyłem i litery wyglądały bardzo brzydko. Ale gdyby zdefiniować mniejszą liczbę znaków na jeden ekran to może by się dało zrobić taki zegarek (jeśli chodzi o zasadę działania, taki ładny to na pewno nie ;)
  • #13
    TarzaN
    Poziom 13  
    Bardzo fajnie to wygląda, do celów edukacyjnych jak najbardziej bardzo dobry pomysł i wykonania. Jeśli chodzi o praktyczne zastosowanie to raczej tego nie widzę.
  • #14
    Użytkownik usunął konto
    Użytkownik usunął konto  
  • #15
    scooba
    Poziom 15  
    pomysl bardzo mi sie podoba, szukam takiego zegara zeby jeszcze mal klienta NTP i sieć LAN, sa takei zegary ale berdzo drogie a tu niezla alternatywa
  • #16
    JarekC
    Poziom 30  
    Witam,

    Ponieważ dostałem zapytania dotyczące ustawień FuseBitów wymaganych dla tego projektu przy zmianie procesora na ATEMGA32 to podaję:

    ATMEGA32 LockBits=0x41 LowFuse=0xE4 HighFuse=0x11

    Tak naprawdę najważniejszy jest FuseBit ustawiający wew. zegar RC na 8Mhz.

    Pozdrawiam
    JarekC
  • #17
    JarekC
    Poziom 30  
    Witam,

    Jeden z forumowiczów zgłosił problem z uruchomieniem układu.
    Okazało się iż na schemacie jest błąd podłączenia karty VGA do uP.

    Właściwe podłączenie to:

    uP Pin 3 (Port B.2) -> VGA Pin 5 (RESET)
    uP Pin 4 (Port B.3) -> VGA Pin 6 (SLEEP)

    Pozdrawiam
    JarekC
  • #18
    Użytkownik usunął konto
    Użytkownik usunął konto  
  • #19
    JarekC
    Poziom 30  
    Proszę bardzo:

    1. procesor ATMEGA16 lub ATMEGA32
    2. zegar RTC PCF8583
    3. stabilizator 7805
    4. stabilizator LM1117-3.3V (lub podobny)
    5. dioda prostownicza 1N14001
    6. dioda 1N4148 2 szt.
    7. dioda LED
    8. Trymer 5-35pF
    9. kondensator 100nF 7 szt
    10. kondensator 470uF/16V
    11. kondensator 100uF/10V 2 szt.
    12. kondensator 10uF/10V
    13. kwarc zegarkowy 32768Hz
    14. rezystor 1kOhm
    15. rezystor 2.2kOhm 2szt.
    16. rezystor 10kOhm
    17. rezystor 560Ohm (zależny od zastosowanej diody LED)
    18. mikroprzełącznik 3 szt.
    19. złącze 2x5 PIN raster 2.54mm (dla karty TeleVGA)
    20. złącze 2x3pin (dla ISP) lub 2x5pin (dla JTAG)
    21. karta TeleVGA

    Wszystkie elementy raczej łatwe do dostania.
    Karta TeleVga dostępna u producenta lub na znanym portalu aukcyjnym.


    Polecam też termometr z wykorzystaniem tych samych elementów + DS18B20.
    https://www.elektroda.pl/rtvforum/viewtopic.php?p=10513678#10513678


    Pozdrawiam
    JarekC
  • #20
    Użytkownik usunął konto
    Użytkownik usunął konto  
  • #21
    PF
    Poziom 19  
    Może coś takiego.

    Zegar "VGA-RTC" - ATMega16+PCF8583+TeleVGA+Monito
    Zegar "VGA-RTC" - ATMega16+PCF8583+TeleVGA+Monito

    Usunięte złącza ISP i JTAG. Mam podstawkę programującą.
  • #22
    Użytkownik usunął konto
    Użytkownik usunął konto  
  • #23
    PF
    Poziom 19  
    Może w ramach oszczędności płytki i roboty następnej wersji warto zrobić płytkę od razu z możliwością podłączenia DS-ów.

    Zegar "VGA-RTC" - ATMega16+PCF8583+TeleVGA+Monito Zegar "VGA-RTC" - ATMega16+PCF8583+TeleVGA+Monito
  • #24
    Użytkownik usunął konto
    Użytkownik usunął konto  
  • #25
    PF
    Poziom 19  
    Po co z tym walczyć. Weź LM317 ta sama obudowa , te same wyprowadzenia. Po kłopocie. LM jest w bibliotece v-reg.
  • #26
    Użytkownik usunął konto
    Użytkownik usunął konto  
  • #27
    PF
    Poziom 19  
    Najprościej wstaw obydwa pliki .sch i .brd , ktoś Ci to poprawi i będziesz walczył dalej. Jedyne wytłumaczenie tej sytuacji to błąd w schemacie.
  • #29
    PF
    Poziom 19  
    To nie te pliki. Wstawiłeś dwa pliki schematów.
    Musisz wstawić plik schematu z którego obecnie robisz płytkę [ z rozszerzeniem .sch ] i jego plik płytki [ z rozszerzeniem .brd ]. Obydwa pliki muszą mieć tą samą nazwę.
    Poprawiając w tej chwili sam schemat, bez pliku płytki , Eagle wyrzuci po ich otwarciu błąd.

    ps. Prawdopodobnie płytkę tworzysz z pliku plytka3wired bo tam jest już zmieniony LM. Patrząc na połączenia elementów o których piszesz wszystko jest w porządku,[ stworzyłem swój plik płytki z Twojego schematu i jest OK ] więc nie wiem czemu ich nie masz na płytce. Czy przy projektowaniu płytki masz też otwarty plik ze schematem ?!?.
  • #30
    Użytkownik usunął konto
    Użytkownik usunął konto