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

ATmega32 - Monitor na VGA sterowany przez mikrokontroler Atmela

piored93 02 Sie 2012 00:03 3491 22
  • #1 02 Sie 2012 00:03
    piored93
    Poziom 9  

    Znalazłem w sieci ciekawy projekt, a mianowicie wyświetlanie obrazków na monitorze (VGA) przez mikrokontroler Atmela.

    http://www.lucidscience.com/pro-vga%20video%20generator-1.aspx

    Wykorzystano tam ATmege644p przy taktowaniu 20Mhz. Ja posiadam Atmege32 na kwarcu 16Mhz. Chciałbym wiedzieć czy ruszy to na moim sprzęcie.

    0 22
  • #2 02 Sie 2012 01:03
    LordBlick
    VIP Zasłużony dla elektroda

    Temat bardzo ciekawy, ale kod to masochistyczna rzeźnia, w ogóle nie używa dostępnych udogodnień preprocesora.
    - To ma być 20MHz(najlepiej scalony generator), chyba, że będziesz kod przerabiał, aby timingi się zgadzały.
    - Pierwsza, podstawowa wersja pójdzie na ATmega32, bardziej rozbudowana może mieć problem, ze względu na zajętość 62kB pamięci Flash.
    dodatkowo do wersji w której można coś sensownego robić:
    - A masz 128kB(1Mb) SRAM ?

    0
  • #3 02 Sie 2012 07:59
    mickpr
    Poziom 39  

    Nie pójdzie. Zastosowano tą Atmegę z 2 względów:
    1. Zegar (20MHz to minimum)
    2. Możliwość podłączenia Zewnętrznej pamięci RAM

    0
  • #5 02 Sie 2012 09:36
    Paraclitus
    Poziom 15  

    Autor pisał o grafice więc tryb tekstowy odpada.
    Kombinowałem kiedyś jak zrobić generator sygnału do tv ( szukałem gotowców ale chyba słabo - jeśli ktoś zna to niech się podzieli ) tak żeby dużo czasu procesora było wolne i wyszło mi coś takiego:

    ATmega32 - Monitor na VGA sterowany przez mikrokontroler Atmela

    PS Można też podłączyć kartę vga isa ale sporo kodu będzie do napisania.

    0
  • #6 02 Sie 2012 09:41
    tmf
    Moderator Mikrokontrolery Projektowanie

    Dla trybu mono 320x200 to nie ma problemu, tylko 8kB pamięci potrzebne. Ja bym wziął jakiś nowszy AVR, który ma tyle lub więcej i nie bawił się w external RAM. A najlepiej wziąć XMEGA, gdzie zrobienie VGA graficznego to kilkanaście linii kodu (dosłownie!) i obciążenie CPU rzędu paru procent. Zwykłe ATMega obraz wygenerują, ale pochłonie to z 80% ich mocy.

    0
  • #7 02 Sie 2012 11:00
    LordBlick
    VIP Zasłużony dla elektroda

    mickpr napisał:
    Nie pójdzie. Zastosowano tą Atmegę z 2 względów:
    1. Zegar (20MHz to minimum)
    2. Możliwość podłączenia Zewnętrznej pamięci RAM
    1. Nikt nie broni przetaktowywać o te 4 MHz przy 5V zasilania.
    2. A to nie wolno podłączać zewnętrznej pamięci do ATmega32 ?
    tmf napisał:
    A najlepiej wziąć XMEGA, gdzie zrobienie VGA graficznego to kilkanaście linii kodu (dosłownie!) i obciążenie CPU rzędu paru procent.
    Przepraszam, czy to będzie ujęte w drugiej książce ? ;)

    0
  • #9 02 Sie 2012 11:12
    mickpr
    Poziom 39  

    LordBlick napisał:
    A to nie wolno podłączać zewnętrznej pamięci do ATmega32 ?

    Wolno. Można podłączyć sobie nawet teoretycznie nieskończoną ilość pamięci RAM - tylko pytanie - gdzie tu sens i logika, skoro tak podłączona pamięć nie będzie dostępna w przestrzeni adresowej uC. Używanie do tego celu pamięci z interfejsem SPI, albo (o zgrozo) budowanie własnego interfejsu do pamięci równoległej mija się z celem ze względu na szybkość dostępu do RAM w takim rozwiązaniu, która to szybkość jest kluczowa.
    Prawda?

    0
  • #10 02 Sie 2012 11:39
    LordBlick
    VIP Zasłużony dla elektroda

    mickpr napisał:
    tylko pytanie - gdzie tu sens i logika, skoro tak podłączona pamięć nie będzie dostępna w przestrzeni adresowej uC
    No to teraz swoje wnioski przedstaw autorowi tego projektu, bo w ATmega644 też nie ma interface XMEM, podobnie jak w ATmega32... :P
    Pamięć w nim nie służy do szybkiego dostępu w przestrzeni adresowej, tylko do szybkiego wystawiania stanów logicznych na VGA, wcześniej do niej wpisywanych w trakcie powrotów odchylania ramki obrazu. Przy dołożeniu odpowiedniej logiki adresowania i zwykły AVR może nie mieć zbyt dużo roboty, bo otrzymamy już prawie kontroler wyświetlacza...

    0
  • #11 02 Sie 2012 13:43
    piored93
    Poziom 9  

    Kupię ATmege644p i będzie git. Najpierw przetestuje prostszą opcje. Do drugiej gdzieś powinienem mieć buffer tylko SRAM trzeba kupić. Przydała by się obsługa wyświetlania tekstu.

    0
  • #12 02 Sie 2012 15:17
    Tomasz Gumny
    Poziom 27  

    Paraclitus napisał:
    [...] jeśli ktoś zna to niech się podzieli
    Wyrzeźbiłem kiedyś coś takiego na ekranie TV:
    ATmega32 - Monitor na VGA sterowany przez mikrokontroler Atmela
    Było dużo zabawy z liczeniem taktów w asemblerze, żeby obraz nie drżał - odradzam.

    0
  • #13 02 Sie 2012 18:31
    236759
    Użytkownik usunął konto  
  • #14 03 Sie 2012 08:54
    Paraclitus
    Poziom 15  

    Tomasz Gumny napisał:
    Paraclitus napisał:
    [...] jeśli ktoś zna to niech się podzieli
    Wyrzeźbiłem kiedyś coś takiego na ekranie TV:
    ATmega32 - Monitor na VGA sterowany przez mikrokontroler Atmela
    Było dużo zabawy z liczeniem taktów w asemblerze, żeby obraz nie drżał - odradzam.


    Chyba się niedokładnie wyraziłem - chodziło mi o kawałek "hardwaru" np. teraz znalazłem coś podobnego do GTIA z atari 800XL MC6847 Video generator 256×192 link do pdfu jest na dole strony.

    0
  • #15 03 Sie 2012 12:05
    236759
    Użytkownik usunął konto  
  • #16 03 Sie 2012 12:28
    LordBlick
    VIP Zasłużony dla elektroda

    Myślę, że rozwiązując to zagadnienie na układach programowalnych (CPLD, FPGA) to nie będzie też problemu.

    0
  • #19 04 Sie 2012 11:26
    236759
    Użytkownik usunął konto  
  • #21 05 Sie 2012 00:03
    236759
    Użytkownik usunął konto  
  • #22 05 Sie 2012 20:51
    piored93
    Poziom 9  

    Czyli rozumiem że moja ATmega32 da rade. Może ktoś podsunie jakiś przykład w bascomie i sposób podłączenia między moim uC a VGA.

    0
  • Pomocny post
    #23 05 Sie 2012 21:01
    tmf
    Moderator Mikrokontrolery Projektowanie

    W BASCOMie nie da rady - przynajmniej czystym. Musi być co najmniej mały fragment w assemblerze, żeby zlikwidować jitter przerwania AVR. Reszta też by się przydała w assemblerze, bo liczba taktów na linię jaka jest do dyspozycji nie jest imponująca. A co do łączenia - masz H i V-Sync, które są liniami cyfrowymi i po prostu je łączysz z MCU - mały rezystor po drodze nie zawadzi. No i masz 3 analogowe linie R, G, B, gdzie masz sygnał o amplitudzie 0,7Vpp, 0 - czerń, 0,7V - max wysycenie. W najprostszym przypadku, kiedy interesują cie tylko dwa poziomy dajesz rezystor, który robi jako dzielnik z wejściem monitora, które ma impedancję 75 omów, tak aby sygnał z MCU 5Vpp podzielić do owych 0,7Vpp.

    0