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.

Atmega [Bascom] - "Konewerter LCD"

podly 28 Lut 2012 15:34 1483 5
  • #1 28 Lut 2012 15:34
    podly
    Poziom 15  

    Witam,

    mam problem - w moim sprzęcie audio padł wyświetlacz LCD. Wyświetlacz oparty na kontrolerze SPLC780, w jakimś stopniu kompatybilnym z HD44780. Wygląda jak 1x16 ale w rzeczywistości jest to 2x8 w jednej linii - ot taka dziwna organizacja.
    Chciałbym go wymienić na VFD również kompatybilne z HD44780. Znalazłem 2x20 w takim rozmiarze, że górna linia wypełnia miejsce po starym wyświetlaczu.

    Niestety, VFD podłączony w miejsce starego wyświetlacza nie startuje prawidłowo, wyświetla krzaki - nie uruchamia się również sprzęt audio. Zwarcie R/W do masy, sprawa, że sprzęt startuje, ale wyświetlacz jest pusty.

    Oba wyświetlacze sterowane z Atmega8 i prostego programu w bascom działają poprawnie, jednak nie wykorzystywany jest R/W (bascom nie obsługuje chyba w ogóle).

    I teraz mój pomysł i przyczynek do tego posta. Czy można wykorzystać Atmega jako emulator starego wyświetlacza, który komunikował by się z urządzeniem, wyświetlając po odpowiedniej reorganizacji dane na nowym wyświetlaczu VFD?

    Jeśli tak, to od czego zacząć? W programowaniu jestem noga, coś tam kiedyś w bascomie napłodziłem i to wszystko, ale myślę, że jak się zepnę to dam radę.

    Z góry dziękuję za pomoc, w szczególności za informację od czego zacząć i jak ugryźć problem.

    0 5
  • #2 28 Lut 2012 17:17
    tmf
    Moderator Mikrokontrolery Projektowanie

    Oczywiście, że można i jest to nawet dobry pomysł. Zacznij od dokładnego przeczytania noty katalogowej emulowanego kontrolera, potem obsłuż na AVR nowy wyświetlacz, a następnie dodaj emulację. Jeśli z programowania jesteś noga to będzie to pewną trudnością, ale powinno się dać.

    0
  • #3 28 Lut 2012 18:36
    podly
    Poziom 15  

    Notę pobrałem, czytam powoli bo całkiem obszerna. Obsłużenie nowego wyświetlacza to nie problem. Bardziej mnie zastanawia jak to ugryźć od strony emulacji kontrolera - razem z R/W. Fajnie by było wzorować się na jakimś przykładzie. Nie spotkałeś się może już gdzieś z taką implementacją?

    0
  • #4 28 Lut 2012 20:15
    tmf
    Moderator Mikrokontrolery Projektowanie

    Musisz zaimplementować to dokładnie tak jak pokazano w nocie kontrolera. Ważne tu będą zależności czasowe. Zrobić to łatwo - masz stroby odczytu, zapisu i CS - najlepiej je podłączyć pod piny generujące przerwanie, resztę robisz w procedurze jego obsługi. Niemniej jednak, jeśli nie znasz się na programowaniu to ten projekt może być za ambitny. Zacznij od czegoś prostego.

    0
  • #5 28 Lut 2012 20:29
    podly
    Poziom 15  

    Dzięki, prostsze robiłem ;] Zdaję sobie sprawę, że to nie będzie łatwe, stąd założyłem ten temat. Myślałem, że ktoś może robił już coś podobnego i może poratować kodem 'wejściowym'. Mam jeszcze drugi pomysł - wydaje mi się że łatwiejszy do zrealizowania:

    Pozostawić stare LCD które jest elektronicznie sprawne. Podłączyć równolegle R/W, RS i D4-D7 do mikrokontrolera. Stary LCD załatwiał by komunikację z urządzeniem. R/W w stanie LOW wyzwalało by przerwanie i procesor odczytywał by wtedy RS oraz D4-D7. Składamy całość do kupy, tłumaczymy na ludzki język i wyświetlamy na nowym wyświetlaczu już bez obsługi R/W, w najprostszy sposób. Czy takie coś ma szansę zadziałać?

    0
  • #6 08 Mar 2012 01:15
    podly
    Poziom 15  

    Ok, nikt więcej nic nie podpowiedział, więc pomyślałem jeszcze trochę. Wydaje mi się, że sniffowanie transmisji będzie łatwiejsze. Wyświetlacz obsługuje sprzęt audio, więc nie ma tutaj szybkich zmian na wyświetlaczu.

    Po przeczytaniu datasheetów, doszedłem do wniosku, że w momencie opadania zbocza E wszystkie sygnały muszą być stabilne. Wydaje mi się, że przechwytywanie ich w tym momencie powinno przynosić dobry efekt.

    Popełniłem krótki kod w bascomie:

    Code:

    $regfile = "m8def.dat"
    $crystal = 1000000

    'Konfiguracja LCD:
    $lib "lcd4busy.lib"
    Const _lcdport = Portb
    Const _lcdddr = Ddrb
    Const _lcdin = Pinb
    Const _lcd_e = 1
    Const _lcd_rs = 2
    Const _lcd_rw = 3

    'Przerwanie - zbocze opadające na E powoduje wykonanie podprogramu Przerwanie
    On Int0 Przerwanie
    Enable Int0
    Config Int0 = Falling
    Enable Interrupts

    'Wejście
    Config Portc = Input
    Portc = &B00000000

    'Inicjalizacja LCD:
    Config Lcd = 20 * 2
    Initlcd
    Lcdcontrast 1
    Cls
    Cursor On
    Cursor Blink

    'Zmienne:
    Dim Kod As Bit

    Dim Rs0 As Bit
    Dim Rw0 As Bit
    Dim Db40 As Bit
    Dim Db50 As Bit
    Dim Db60 As Bit
    Dim Db70 As Bit

    Dim Rs1 As Bit
    Dim Rw1 As Bit
    Dim Db41 As Bit
    Dim Db51 As Bit
    Dim Db61 As Bit
    Dim Db71 As Bit

    'Program:
    Do

    If Kod = 1 Then

       Disable Int0

       Locate 1 , 1
       Lcd Rs0 ; " " ; Rw0 ; " " ; Db40 ; " " ; Db50 ; " " ; Db60 ; " " ; Db70
       Locate 2 , 1
       Lcd Rs1 ; " " ; Rw1 ; " " ; Db41 ; " " ; Db51 ; " " ; Db61 ; " " ; Db71

       Kod = 0

       Enable Int0

    Else

       Locate 2 , 20
       Lcd "|"
       Waitms 100
       Locate 2 , 20
       Lcd "/"
       Waitms 100
       Locate 2 , 20
       Lcd "-"
       Waitms 100
       Locate 2 , 20
       Lcd "\"
       Waitms 100

    End If

    Loop

    'Podprogram Przerwanie:
    Przerwanie:

    'odczyt pierwszej połówki danych
    Rs0 = Pinc.0
    Rw0 = Pinc.1
    Db40 = Pinc.2
    Db50 = Pinc.3
    Db60 = Pinc.4
    Db70 = Pinc.5

    'odczyt drugiej połówki danych
    Rs1 = Pinc.0
    Rw1 = Pinc.1
    Db41 = Pinc.2
    Db51 = Pinc.3
    Db61 = Pinc.4
    Db71 = Pinc.5

    Kod=1

    Return


    End


    Na razie chcę tylko wyświetlić przychodzące sekwencje na LCD.
    Podczepiam sygnały z oryginalnego wyświetlacza pod Port C, a sygnał E pod Int0.
    Nie mam w tym momencie możliwości sprawdzenia czy to działa, więc proszę o podpowiedź, czy tak ma to szansę działać i czy w dobrą stronę idę, ewentualnie co zmienić i poprawić.

    0
  Szukaj w 5mln produktów