Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Zamiennik układu HV77 dla wyświetlaczy Williams Cherry
#1
Ostatnio będąc na naprawach otrzymałem między innymi dwa uszkodzone wyświetlacze Cherry z Williamsa. W jednym były pourywane nogi, co udało się zacerować, ale niestety w drugim był padnięty układ HV77. Uszkodzenie tego układu polegało na tym, że posiadał on ciągłe zwarcie przy kilku pinach wyjściowych dla wysokiego napięcia, co powodowało wywalanie bezpiecznika dla +62V w płytce Dot Matrix. Niestety na dzień dzisiejszy układ taki można otrzymać albo ściągając go z drugiego końca świata, albo na zasadzie kanibalizmu wyciągając z innego uszkodzonego już wyświetlacza. Postanowiłem go "wyprodukować".
Układ HV77 steruje wyświetlaniem kolumn w wyświetlaczu. Normalnie na wyjściu może osiągać +80V, a w WPC osiąga około +62V - napięcie te jest nadawane z kontrolera Dot Matrix.
Zamiennikiem miałby być odpowiednio zaprogramowany procesor ATmega8515 + kilka bramek lub dwa takie procesory. Skąd takie różnice? W ATmega8515 można zaprogramować około 30 wyjść kiedy to HV77 ma ich 64. Oczywiście procesor ATmega czy dodatkowa logika do niego podpięta nie da nam napięcia potrzebnego do zasilenia kolumn wyświetlacza, gdyż wynikiem ich działania będą stany logiczne, które sam voltomierz odczyta jako przedziały 0-1V dla logicznego zera oraz 2,5 - 4,8V (może i pełne 5V) dla logicznej jedynki.
Z odpowiedzią przychodzi nam tranzystor BC546, który mógłby być na bazie pobudzany wysokim stanem logicznym i przepuścić nam te +62V do kolumny, która będzie do niego podłączona. Jedyne, co jest przy tym tranzystorze przerażające to jego ilość - 64 sztuki na jeden zamiennik.
Jako, że nad tematem siedzę od wczoraj zastrzegam sobie granicę błędu. Smile
Cały prototyp "emulatora" mam zamiar uruchomić w ciągu dwóch tygodni.
Odpowiedz
#2
Jako, że w wyświetlaczach Cherry w WPC na wejściach DIR oraz POL układu HV77 panuje wiecznie stan wysoki można już doprowadzić do pewnych wykluczeń.


Załączone pliki Miniatury
   
Odpowiedz
#3
Jeśli chodzi o ATmega8515 to niestety z powodu za małej liczby wyjść będą potrzebne 3 sztuki. Postaram się poszukać jakiegoś innego procka. Jakby się nie znalazł...
Kod:
$regfile = "m8515.dat"                                      'dyrektywa dla mikrokontrolera ATmega8515 lub AT90S8515
$crystal = 16000000                                         'mikrokontroler będzie działać z częstotliwością 16MHz

'configuracje pinów
Config Pina.0 = Output
Config Pina.1 = Output
Config Pina.2 = Output
Config Pina.3 = Output
Config Pina.4 = Output
Config Pina.5 = Output
Config Pina.6 = Output
Config Pina.7 = Output

Config Pinb.0 = Output
Config Pinb.1 = Output
Config Pinb.2 = Output
Config Pinb.3 = Output
Config Pinb.4 = Output
Config Pinb.5 = Output
Config Pinb.6 = Output
Config Pinb.7 = Output

Config Pinc.0 = Output
Config Pinc.1 = Output
Config Pinc.2 = Output
Config Pinc.3 = Output
Config Pinc.4 = Output
Config Pinc.5 = Output
Config Pinc.6 = Output
Config Pinc.7 = Output

Config Pind.0 = Input                                       'wejście D0
Config Pind.1 = Input                                       'zegar CLK
Config Pind.2 = Input                                       'Latch Enable
Config Pind.3 = Input                                       'blank

Config Pine.0 = Output                                      'wyjście D0 do kolejnego procesora

'przypisanie nazw dla pinów operacyjnych
Wej Alias Pind.0                                            'od tej pory uzywamy nazwy Wej zamiast PIND.0
Wyj Alias Pine.0                                            'od tej pory uzywamy nazwy wyj zamiast PINE.0
Clk Alias Pind.1                                            'od tej pory uzywamy nazwy clk zamiast PIND.2
Latch Alias Pind.2                                          'od tej pory uzywamy nazwy latch zamiast PIND.3
Blank Alias Pind.3                                          'od tej pory uzywamy nazwy Wej zamiast PIND.4

'przypisanie nazw dla pinów wyjścia wysokiego napięcia
Hvout1 Alias Pina.0
Hvout2 Alias Pina.1
Hvout3 Alias Pina.2
Hvout4 Alias Pina.3
Hvout5 Alias Pina.4
Hvout6 Alias Pina.5
Hvout7 Alias Pina.6
Hvout8 Alias Pina.7
Hvout9 Alias Pinb.0
Hvout10 Alias Pinb.1
Hvout11 Alias Pinb.2
Hvout12 Alias Pinb.3
Hvout13 Alias Pinb.4
Hvout14 Alias Pinb.5
Hvout15 Alias Pinb.6
Hvout16 Alias Pinb.7
Hvout17 Alias Pinc.0
Hvout18 Alias Pinc.1
Hvout19 Alias Pinc.2
Hvout20 Alias Pinc.3
Hvout21 Alias Pinc.4
Hvout22 Alias Pinc.5
Hvout23 Alias Pinc.6
Hvout24 Alias Pinc.7

Dim Licznik As Integer                                      'licznik impulsów CLK

'początek działania programu
Do                                                          'oczekiwanie na synchronizacje
  Loop Until Clk = 1

   Do
     Hvout1 = 0
     Hvout2 = 0
     Hvout3 = 0
     Hvout4 = 0
     Hvout5 = 0
     Hvout6 = 0
     Hvout7 = 0
     Hvout8 = 0
     Hvout9 = 0
     Hvout10 = 0
     Hvout11 = 0
     Hvout12 = 0
     Hvout13 = 0
     Hvout14 = 0
     Hvout15 = 0
     Hvout16 = 0
     Hvout17 = 0
     Hvout18 = 0
     Hvout19 = 0
     Hvout20 = 0
     Hvout21 = 0
     Hvout22 = 0
     Hvout23 = 0
     Hvout24 = 0
     For Licznik = 1 To 64
         Wyj = Wej
         Do
           Loop Until Clk = 1
         If Licznik = 1 And Wej = 1 And Latch = 1 And Blank = 1 Then
            Hvout1 = 1
         End If
         If Licznik = 2 And Wej = 1 And Latch = 1 And Blank = 1 Then
            Hvout2 = 1
         End If
         If Licznik = 3 And Wej = 1 And Latch = 1 And Blank = 1 Then
            Hvout3 = 1
            End If
         If Licznik = 4 And Wej = 1 And Latch = 1 And Blank = 1 Then
            Hvout4 = 1
         End If
         If Licznik = 5 And Wej = 1 And Latch = 1 And Blank = 1 Then
            Hvout5 = 1
         End If
         If Licznik = 6 And Wej = 1 And Latch = 1 And Blank = 1 Then
            Hvout6 = 1
         End If
         If Licznik = 7 And Wej = 1 And Latch = 1 And Blank = 1 Then
            Hvout7 = 1
         End If
         If Licznik = 8 And Wej = 1 And Latch = 1 And Blank = 1 Then
            Hvout8 = 1
         End If
         If Licznik = 9 And Wej = 1 And Latch = 1 And Blank = 1 Then
            Hvout9 = 1
         End If
         If Licznik = 10 And Wej = 1 And Latch = 1 And Blank = 1 Then
            Hvout10 = 1
         End If
         If Licznik = 11 And Wej = 1 And Latch = 1 And Blank = 1 Then
            Hvout11 = 1
         End If
         If Licznik = 12 And Wej = 1 And Latch = 1 And Blank = 1 Then
            Hvout12 = 1
         End If
         If Licznik = 13 And Wej = 1 And Latch = 1 And Blank = 1 Then
            Hvout13 = 1
         End If
         If Licznik = 14 And Wej = 1 And Latch = 1 And Blank = 1 Then
            Hvout14 = 1
         End If
         If Licznik = 15 And Wej = 1 And Latch = 1 And Blank = 1 Then
            Hvout15 = 1
         End If
         If Licznik = 16 And Wej = 1 And Latch = 1 And Blank = 1 Then
            Hvout16 = 1
         End If
         If Licznik = 17 And Wej = 1 And Latch = 1 And Blank = 1 Then
            Hvout17 = 1
         End If
         If Licznik = 18 And Wej = 1 And Latch = 1 And Blank = 1 Then
            Hvout18 = 1
         End If
         If Licznik = 19 And Wej = 1 And Latch = 1 And Blank = 1 Then
            Hvout19 = 1
         End If
         If Licznik = 20 And Wej = 1 And Latch = 1 And Blank = 1 Then
            Hvout20 = 1
         End If
         If Licznik = 21 And Wej = 1 And Latch = 1 And Blank = 1 Then
            Hvout21 = 1
         End If
         If Licznik = 22 And Wej = 1 And Latch = 1 And Blank = 1 Then
            Hvout22 = 1
         End If
         If Licznik = 23 And Wej = 1 And Latch = 1 And Blank = 1 Then
            Hvout23 = 1
         End If
         If Licznik = 24 And Wej = 1 And Latch = 1 And Blank = 1 Then
            Hvout24 = 1
         End If

     Do
       Loop Until Clk = 0                                   'oczekiwanie na synchornizacje
     Next Licznik
   Loop
'koniec działania programu
End
Wystrugałem już program do pierwszego procesora. Big Grin
Odpowiedz
#4
szacunek

gratulacje pomysłu i wykonania :-)
Odpowiedz
#5
Na razie to pomysł - wykonania jeszcze nie ma. Smile
Edit:
No i mamy pierwszą niezgodność z przebiegiem czasowym kontrolera. Wink
Prawidłowy przebieg dla jednego kanału (jeszcze bez estetyki)
Kod:
'początek działania programu
Do                                                          'oczekiwanie na synchronizacje
  Loop Until Clk = 1

'reset ustawien (gdyby procesor odebral jakies smieci)
Hvout1 = 0
Hvout2 = 0
Hvout3 = 0
Hvout4 = 0
Hvout5 = 0
Hvout6 = 0
Hvout7 = 0
Hvout8 = 0
Hvout9 = 0
Hvout10 = 0
Hvout11 = 0
Hvout12 = 0
Hvout13 = 0
Hvout14 = 0
Hvout15 = 0
Hvout16 = 0
Hvout17 = 0
Hvout18 = 0
Hvout19 = 0
Hvout20 = 0
Hvout21 = 0
Hvout22 = 0
Hvout23 = 0
Hvout24 = 0

   Do
     For Licznik = 1 To 64        
         Do
           Loop Until Clk = 1
         Wyj = Wej
         'prawidlowla instrukcja if
         'sygnal blank jest juz dobrze rozpoznawany!
         'zmiana wyjscia kanału nastepuje przy wysokim stanie latch, przy niskim stan jest zachowany, czyli jest OK
         If Blank = 0 Then                                  'niski stan blank przelacza wszystkie wyjscia HVout w stan niski (wyswietlacz wygaszony)
                 Hvout1 = 0
                 Hvout2 = 0
                 Hvout3 = 0
                 Hvout4 = 0
                 Hvout5 = 0
                 Hvout6 = 0
                 Hvout7 = 0
                 Hvout8 = 0
                 Hvout9 = 0
                 Hvout10 = 0
                 Hvout11 = 0
                 Hvout12 = 0
                 Hvout13 = 0
                 Hvout14 = 0
                 Hvout15 = 0
                 Hvout16 = 0
                 Hvout17 = 0
                 Hvout18 = 0
                 Hvout19 = 0
                 Hvout20 = 0
                 Hvout21 = 0
                 Hvout22 = 0
                 Hvout23 = 0
                 Hvout24 = 0
         End If
         If Licznik = 1 And Latch = 1 And Blank = 1 Then
            'instrukcja case
            Select Case Wej
                   Case 0 : Hvout1 = 0
                   Case 1 : Hvout1 = 1
            End Select
         End If
         'reszta instrukcji od tego momentu do przerobienia, inaczej na wyswietlaczu wczesniej aktywne punkty kolumn od 2 do 24 nie będą gasnąć!
Odpowiedz
#6
Kody pozwoliłem sobie usunąć - zawierały małe błędy w stosunku do tworzonego układu.
Odpowiedz


Skocz do:


Użytkownicy przeglądający ten wątek: 1 gości