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

Wyświetlacz klienta ECR - IBM 93F1090 - jak tym sterować?

djskomy 14 Cze 2009 21:29 34051 109
  • #91
    Holtek
    Specjalista - zasilacze komputerowe
    boogdan napisał:
    I tu ponawiam pytanie: czy ktoś znalazł jakąś wtyczkę pasującą do tego gniazda?


    Zamieszczam kilka zdjęć wtyczki:

    Wyświetlacz klienta ECR - IBM 93F1090 - jak tym sterować?Wyświetlacz klienta ECR - IBM 93F1090 - jak tym sterować?Wyświetlacz klienta ECR - IBM 93F1090 - jak tym sterować?Wyświetlacz klienta ECR - IBM 93F1090 - jak tym sterować?
    Wyświetlacz klienta ECR - IBM 93F1090 - jak tym sterować?Wyświetlacz klienta ECR - IBM 93F1090 - jak tym sterować?Wyświetlacz klienta ECR - IBM 93F1090 - jak tym sterować?

    Może zdjęcia pomogą w doborze jakiejś pasującej wtyczki :D
  • PCBway
  • #92
    boogdan
    Poziom 15  
    Holtek napisał:
    Zamieszczam kilka zdjęć wtyczki:


    Bardziej chodziło mi o to czy da się w jakimś sklepie taką wtyczkę kupić, ale dzięki za zdjęcia :D
  • #93
    mirekk36
    Poziom 42  
    Hej to znowu ja ;) nieustanny VFD Warior ;)

    poniżej krótki filmik - prezentujący współpracę naszego jakże wspaniałego wyświetlacza ze znanym i lubianym programem LCD Smartie. Oczywiście - normalnie brak w nim driverów do wysterowania takiego wyświetlacza - więc można byłoby o tym zapomnieć,

    .... ale wkurzyłem się i piszę własny sterownik DisplayDriver.dll do Smartie - a także kilka wtyczek pozwalających na różne ciekawe efekty - żeby nasz wyświetlacz nie był uboższy niż zwykłe HD448xxx

    - będzie można także definiować własne znaki i to aż 18 !!!

    driver wprawdzie jeszcze nie ukończony ale filmik prezentuje już wstępne wfekty ciekawych bargrafów które pokazują analizator widma dźwięku - nie pokazuję innych podstawowych rzeczy jak maile, prędkości procesora i miliony różnych standardowych opcji w Smartie, które już normalnie działają

    zresztą popatrzcie sami:

  • #94
    mirekk36
    Poziom 42  
    uuuuuf - przy okazji tworzenia uniwersalnego BootLoadera

    https://www.elektroda.pl/rtvforum/viewtopic.php?t=1343484&highlight=

    - okazało się to zbawiennym sposobem na BAZPIECZNE !!! w końcu uaktualnienia BIOSU sterownika VFD ;) ...... teraz już w sekcji BootLoadera następuje kasowanie wszystkich rejestrów przesuwnych....

    ..... a co najważniejsze - gdy program MkBoot na PC "dobiera" się do BootLoadera w procku aby z-up-grejdować BIOS - to także ładnie przed RESETM kasowane są wszystkie rejestry przesuwne !!!! - matko z córką w końcu cała operacja podmiany biosa procka jest w pełni na prawdę bezpieczna a co ważne dzięki temu BootLoaderkowi (o rozmiarze tylko 512 bajtów) - bardzo szybka!

    poniżej obrazek z wgrywania BIOSA za pomocą programiku na PC MkBoot:
    Wyświetlacz klienta ECR - IBM 93F1090 - jak tym sterować?
  • PCBway
  • #95
    mirekk36
    Poziom 42  
    jeszcze raz się odezwę i coś podpowiem, może komuś się jeszcze przyda z posiadaczy takich wyświetlaczy ;)

    ... po milionach prób, doświadczeń, spaleniu kilku wyświetlaczy w końcu udało mi się doprowadzić procedurę przerwania , która obsługuje sam proces prezentacji znaków na wyświetlaczu do takiego poziomu, żeby

    .. nawet przy bardzo dynamicznym wyświetlaniu - jak np widmo dźwięku z WinAmpa - nie było widać "duszków" na innych nie zapalonych pozycjach znaków. Oczywiście wszystko było dobrze gdy nie używało się programowego przyciemniania i VFD świecił na maxa - wtedy nie było żadnych duszków - ale gdy zrobiło się jasność na minimum - no to zaczynały one harcować po wyświetlaczu lub pojawiały się jakby lekko rozświetlone pixele wokół tych już zapalonych w znaku. Generalnie z daleka mało widoczne - ale wkurzało mnie - bo na oryginalnych wyświetlaczach nigdy nie ma takiego efektu

    w związku z powyższym przedstawiam dokładny algorytm jak powinny wyglądać operacje wg mojego kodu żeby w 100% pozbyć się "duszków"

    po wejściu w przerwanie:

    1. zapamiętać poziom jasności - czyli wartości PWM
    2. wyzerować jasność
    3. WYZEROWAĆ zawartość znaku - wprowadzić jakby pusty - same zera
    3. teraz przełączyć na następną anodę - czyli na kolejny znak (licznik został już wcześniej inkrementowany o 1) - przesuwamy rejestr o 1
    4. dopiero po tym wprowadzić zdefiniowany znak FONT
    5. po tym zwiększyć wartość licznika anody
    6. odtworzyć jasność (PWM) która została na początku procedury wyzerowana

    i sukces gwarantowany !!! trzeba tylko zachować taką kolejność działań jaką podałem

    sprawdzałem wszystko po 100kroć w ciemności - dzuszki odeszły w niepamięć ;)
  • #96
    f_teller
    Poziom 10  
    Cześć :)

    Słuchajcie - również posiadam takiego VFD-ka - 93F1090... Nówka sztuka - pytanie jest krótkie - jak się otwiera obudowę? Ładna świeżutka - jeszcze pachnąca - nie chcę popsuć/porysować/zniszczyć/whatever - tylko otworzyć bez efektów specjalnych ;)

    Pozdrawiam
    F_teller
  • #97
    mirekk36
    Poziom 42  
    f_teller --> łoo matko! ile ja się namęczyłem za pierwszym razem jak to otwierałem - ale że miałem kilka to pierwszy poszedł na rozwałkę bo mnie wkurzyło to otwieranie ;)

    A po tej destrukcji okazało się oczywiście, zgodnie z moimi domysłami, że otwarcie tego paskudztwa nie jest wcale takie trudne jak już się wie gdzie ? co ? i jak?

    Nie wiem jak to opisać - ale od spodu tej obudowy masz dwa takie miejsca na srtku tego zielonego filtra i pozostałej części obudowy, które trzeba przycisnąć płaskim śrubokrętem i jednocześnie w czasie dociskania jakby próbować wysunąć/odsunąć ten zieolny filtr na zewnątrz. W tych 2 miejscach są po prostu takie plastikowe zatrzaski/łapki zielone ;) Teraz jak doszedłem do wprawy to otworzenie obudowy zajmuje mi tyle czasu i problemu co zdjęcie kapsla z butelki piwa za pomocą dobrego otwieracza ;)

    a nic oczywiście się przy tym nie uszkadza ani nie zarysowuje
  • #98
    f_teller
    Poziom 10  
    Udało się :)

    Teraz przypuszczalnie wykorzystam piękną obudowę do umieszczenia w nim innego wyświetlacza VFD - również 2x20 ale z normalnym sterowaniem (RS-232).

    Przy okazji - chętnie odsprzedam kilka takich VFDków (z RS-232).

    Pozdrawiam
    F_teller
  • #99
    nexus6
    Poziom 10  
    Panowie to czysta poezja !
    Gratulacje fantastyczne jeszcze raz gratulacje.
  • #100
    Fueryon
    Poziom 11  
    Witam,
    w związku z tym, że wreszcie skleciłem sobie zestaw uruchomieniowy z 8051, udało mi się odpalić ten wyświetlacz jak producent przewidział - bez żadnych modyfikacji (w sumie, gdybym miał ten mikrokontroler, wszystko śmigałoby już rok temu, ale może i lepiej, że tak się nie stało, bo rozwiązanie kolegi daje dużo większe możliwości - sam pewnie tak ostatecznie zrobię, wielki respekt za to)
    Mały teaser
    Wyświetlacz klienta ECR - IBM 93F1090 - jak tym sterować?
    Wszystko okazało się dosyć proste (przynajmniej na mikrokontrolerze a nie jakiś dziwnych przelotkach), tylko ja to naokoło tłumaczyłem strasznie ;)
    Na razie jestem w stanie jedynie przesłać do 40 znaków które wyświetlają się od początku wyświetlacza (niestety dokumentacja dotyczy nowszego wyświetlacza, ten nasz jest starszy i niewiele poleceń na nim działa...)
    Wieczorem jakoś to wszystko zbiorę do kupy i opiszę co i jak.[/img]
  • #101
    boogdan
    Poziom 15  
    Szacunek kolego Fueryon.
    Chętnie zobaczę kod programu.
  • #102
    Fueryon
    Poziom 11  
    Narazie jedynie mogę wyświetlać napis od początku i czyścić dolny/górny wiersz...


    Sprzęt
    Max485 jest podpięty do drugiego uarta 8051, piny RE i DE podpięte pod p1.0
    Kwarc mam 12 mhz i uart ustawiony w trybie 2 (9bit, kwarc/64=187500)
    Wyświetlacz, w zależności od sposobu podłączenia odpowiada na adresie 0x20 lub 0x21 (a może i na obu ;P)

    Kod
    Rzucam to co istotne, jak ktoś chce całego gotowca to na pw ;) (jak go uporządkuje, to umieszcze)


    Code:

    sbit SE = P1^0; //1 - wysyłamy, 0 - odbieramy (steruje maxem)
    char sent = 0;//licznik wysłanych ramek

    char cleartop[6] = {0x00, 0x00, 0x01, 0x00, 0x00, 0x00};
    char putchar (char c)
    {
    while (!TI_1);
    TI_1 = 0;
    SBUF1 = c;
    delay(1); //czekamy, bo jeszcze cos nam zmieni 9 bit zanim wyslemy caly znak
    return (c);
    }
    void serialInit(void)
    {
       SMOD_1 = 0;
       TMOD = 0x21;
       TH1 = 0xE6;
       TR1 = 1;
       SCON0 = 0x50; // Enable serial port 0  - 1200, z timera 1, do PC, jakoś nie mogłem lepszej prędkości dobrać ;)
       SBUF0 = ' ';
       SCON1 = 0x90; // Enable serial port 1 - 187500, vfd'ek
       SBUF1 = ' ';
    }

    //wywolanie
    void poll(void)
    {
       unsigned char rply[20] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
       unsigned char * r = rply;

       SE=1;              //wysyłamy
       TB81 = 1;        //to adres, więc dziewiąty bit na 1
       delay(2);         //delay(1) czeka dokładnie tyle, ile trwa wysłanie 1 znaku (5.33*12 us bodajże)
       putchar(0xA0); //adres 0x20 i dodatkowo pierwszy bit na 1, bo to poll
       delay(2);
       putchar(0xA0); //zgodnie z pdf'em 2 razy i odpowiednio dlugo 1 na linii przed wywolaniem
       delay(1);
       SE=0;              //przestawiamy na odbiór
       while(1)
       {
          TL0=0;
          TH0=251;
          TF0=0;
          TR0=1;    //timeout na T0
          while(!RI_1&&!TF0);
          *r=SBUF1;
          RI_1=0;
          if((*r==0x7E)&&RB81) //ostatni znak
          {
             *(r+1)=0x00;
             break;
          }
          if(TF0||*r==0x5A&&RB81) //timeout lub nic ciekawego (EOP)
          {
             *r=0x00;
             break;
          }
          r++;
       }
       if(*r!=0x00) //jak coś ciekawego
       clearLCD();
       r=rply;
       cursorset(0);
       while(*r!=0x00)
       {
           putcharLCD(*r/16>9 ? *r/16+55 : *r/16+48);
          putcharLCD(*r%16>9 ? *r%16+55 : *r%16+48);
          r++;
       }
    }

    //set normal response mode
    void snrm(void)
    {
       unsigned char rply[20] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
       unsigned char * r = rply;
       SE=1;
       TB81 = 1;       //9 bit na 1
       delay(2);
       putchar(0x20); //adres, tu juz normalnie bo adres ;)
       delay(2);
       TB81 = 0;        // 9 bit na 0
       putchar(0x83); //polecenie snrm
       delay(1);        //delaye nie wiem czy potrzebne, ale bitow stopu nigdy za wiele ;)
       putchar(0xe7); //suma kontrolna
       delay(1);
       putchar(0x9a); //suma kontrolna
       delay(1);
       TB81 = 1;        //9 bit na 1
       putchar(0x7E); //koniec ramki
       delay(1);
       SE=0;
            //Tu nawet nie wiem czy odpowiada od razu czy dopiero jak zostanie wywołany poll...
       while(1)
       {
          TL0=0;
          TH0=252;
          TF0=0;
          TR0=1;
          while(!RI_1&&!TF0);
          *r=SBUF1;
          RI_1=0;
          if((*r==0x7E)&&RB81) //ostatni znak
          {
             *(r+1)=0x00;
             break;
          }
          if(TF0) //timeout
          {
             *r=0x00;
             break;
          }
          r++;
       }
       if(*r!=0x00&&*r!=0x5A)
       clearLCD();
       r=rply;
       cursorset(0);
       while(*r!=0x00)
       {
           putcharLCD(*r/16>9 ? *r/16+55 : *r/16+48);
          putcharLCD(*r%16>9 ? *r%16+55 : *r%16+48);
          r++;
       }
    }


    //funkcja wysyła polecenia po zainicjowaniu, pilnuje sum kontrolnych i licznika ramek
    //tablica na ktora wskazuje msg musi miec 2 doklejone 0x00 z przodu i 3 z tylu
    void send(char * msg, char len)
    {
       unsigned char * r = msg;
       unsigned int csum = 0;
       char i = len;

       *r=0x20;        //wstawiamy adres na pierwsza pozycje
       r++;
       *r=sent;        //aktualna wartosc licznika
       sent = sent<7 ? sent+1 : 0;     // czy przeladowac licznik
       *r<<=1;        //przesuwamy o bit, bo polecenie wyglada jakos tak: RRR0SSS0
       r=msg+len;    //przeskakujemy na koniec
       
       csum = crc(msg, len); //funkcja wyliczajaca sume crc-citt, wielomian 0x1021
       *r = csum%256;   //doklejamy sume kontrolna
       r++;
       *r = csum/256;    //i reszte
       
       SE=1;
       TB81 = 1;
       delay(2);
       putchar(0x20);  //adres wysylamy z 9 bitem na 1
       delay(2);
       TB81 = 0;

       r = msg+1;         //adres juz przeslany, wiec zaczynamy od 2 znaku
       len+=1;             //niby crc mialo 2 znaki, ale adres juz poszedl, wiec tylko +1
       while(len--)
       {
          putchar(*r);
          r++;
       }
       TB81 = 1;
       putchar(0x7E);  //i koniec ramki tez z 9 bitem na 1
       delay(1);
       SE=0;       //wysylamy sekwencyjnie, wiec odpowiedz bedzie po poll
    }


    //wyswietla napis
    void printv(char * txt)
    {
        unsigned char tmp[50] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
       unsigned char c = 6; //pierwsze 2 znaki zarezerwowane na adres i licznik ramek, nastepnie 3 razy 0x00, 6 znak oznacza dlugosc przesylanego stringu, dalej sam napis (do 40 znakow)
       while(*txt != 0x00)
       {
          tmp[c]=*txt;
          txt++;
          c++;
          tmp[5]++; //zwiekszamy licznik znakow
       }
       send(tmp, c);
    }


    void main()
    {
       char buff[40] = {0};
       char * b = buff;
       lcdInit();
       serialInit();

       poll();   
       delay(1000);
       delay(1000);
       poll();   //pewnie zbedne, ale poll'ow nigdy za wiele ;P
       delay(1000);
       delay(1000);
       snrm();
       delay(1000);
       delay(1000);
       printv("test test"); //wysłanie tekstu
            send(cleartop,4); //czysci gorny rzad
       while (1)
       {
          *b=_getkey2(); //czyta z drugiego uarta
          if(*b==0x0D)
          {
             
             *b=0x00;
             printv(buff);
             b=buff;
          }
          else
          b++;
       }
    }



    ja odpalam poll raz na jakis czas (1 sec - przerwanie z timera) i dodatkowo blokuje wysylanie komunikatów dopóki nie będzie tego przerwania od timera (zamiast poll'a, przerwanie odblokowuje funkcje send) - nie jest to konieczne i coś mi się przywiesza dodatkowo... wystarczy samo poll raz na jakiś czas.

    Nie mogę też dojść, czemu nie wyłapuję wszystkich odpowiedzi od wyświetlacza.

    Generalnie myślę, że jeżeli ft232 umożliwia szybkie przełączanie 9 bitu, to bez problemu można sklecić adapter ft232+max485 i wszystko zrealizować w sterowniku po stronie PC
  • #103
    boogdan
    Poziom 15  
    Fueryon, widzę że odwaliłeś kawał dobrej roboty.
    Jednak okazało się że da się oprogramować ten fikuśny protokół IBM'a, gratuluje.
  • #104
    kitor
    Poziom 34  
    A ja mam do kolegów pytanie z innej beczki.
    Otóż posiadam VFD Samsung 20L203DA2M. Generalnie mało jest o nim informacji w sieci, z datasheeta - sterowanie RS232 TTL, choć co ciekawe w pinoucie jest również szyna równoległa. Sterownik Samsunga, info brak, siatki sterowane poprzez TD62C950RF/LF czyli tak jak tutaj.
    Problem polegał na tym, że w wyświetlaczu wysiadło coś w zasilaniu - tranzystor przy przetwornicy był kompletnie zwęglony, aż część miedzi w okolicy odkleiła się od laminatu. Na podstawie zdjęć podobnych modeli (inna cyfra przedostatnia) namierzyłem że to prawdopodobnie C3303, po podaniu napięcia zasilania (5v) wyświetlacz zaczyna pobierać prąd, i to nie mały (ponad 2A), tranzystor się grzeje, a za przetwornicą mam napięcie żarzenia 4V. Wyświetlacz nie reaguje nawet na tryb testowy (zwarcie pinu 16 do masy)
    Natomiast nie bezcelowo wymieniłem układy TD62C950RF/LF, gdyż tu właśnie zaczynam mieć wątpliwości. Wg datasheetu powininny być zasilane Vcc=7V, a w tej aplikacji zasilanie jest równe napięciu wejściowemu czyli 5V. Natomiast nota definiuje "Output Driver Supply Voltage" (HVcc) jako 70v - w moim wypadku jest to równe 14V DC. Tu własnie jest pytanie - czy mogli by koledzy sprawdzić, jak to u Was wygląda?

    Samo szkło wygląda na nieuszkodzone, nie upalone. Prócz układów Toshiby i sterownika, siedzą tam jeszcze 74HC574d, 74HC02D i 74HC74D. Myślałem nawet nad zastąpieniem sterownika tym autorstwa kolegów, no ale póki co mam wątpliwość czy w/w układy Toshiby w ogóle działają.

    Zdjęcia wyświetlacza (dość gabarytowy jest, to fakt). Wrzucam w pełnej rozdzielczości - w internecie znalazłem tylko jedno foto tego modelu.
    Wyświetlacz klienta ECR - IBM 93F1090 - jak tym sterować? Wyświetlacz klienta ECR - IBM 93F1090 - jak tym sterować?
  • #105
    boogdan
    Poziom 15  
    Driver Toshiby pracuje na 5V, to co odczytałeś z noty katalogowej wartość maksymalna, więc tu jest ok. Napięcie na żarnik też wydaje mi się w normie, szkło dosyć duże.
    Na siatki i anody powinno być o wiele więcej niż te 14V, szukałbym tu problemu, jeśli chcesz sprawdzić czy wyświetla coś w trybie testowym, to rób to w całkowitej ciemności, przy napięciu 14V może coś zobaczysz wtedy (jakieś lekkie świecenie), ale to też wątpliwe, powinno być o wiele więcej więc może nic nie będzie widać.
  • #106
    kitor
    Poziom 34  
    Tak myślę (bo zbyt dużej wiedzy elektronicznej nie mam) - jakby usunąć przetwornicę i podać napięcia (5v zasilania, 4 żarnika i to brakujące siatek), powinno to działać?
  • #107
    boogdan
    Poziom 15  
    Jeśli reszta układów jest sprawna, to tak, napięcie na drivery lampy proponuję podać ok 30V na początek
  • #108
    kitor
    Poziom 34  
    Wygląda na to że układy Toshiby umarły - po wyrzuceniu sekcji zasilania i podpięciu z zewnątrz usłyszałem charakterystyczny dźwięk palonego układu scalonego i jest przywarcie między HVcc a masą. I to przy 15V! Sprawdzałem trzy razy, wszystko podpięte było dobrze :|
    Z innej beczki - sprawdziłem organoleptycznie napięcie żarzenia - przy około 10v zaczynają być delikatnie widoczne druciki.
    W tej sytuacji chyba będę zwyczajnie szukać VFD z uszkodzonym szkłem żeby przełożyć elektronikę.
  • #110
    vania
    Poziom 23  
    Witam!

    Przepraszam że odgrzebuje staroć ale ostatnio odgrzebałem w piwnicy wyświetlacz (a raczej jego płytkę, bo sama lampa się stłukła) jak w temacie. Kiedyś też próbowałem rozgryzać oryginalny protokół i też zrezygnowałem na rzecz własnego sterownika.

    Projekt był zaczęty, zacząłem odrysowywać schemat i lampa "się stłukła" dlatego porzuciłem prace. Odkopałem zrysowany schemat wiec dołączam, może jeszcze się komuś przyda.