logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak wyświetlić tekst na wyświetlaczu TID w Oplu za pomocą PIC16F84A?

pikachu1986 11 Mar 2007 17:52 4602 20
REKLAMA
  • #1 3667503
    pikachu1986
    Poziom 13  
    Posty: 155
    Ocena: 36
    witam napisałem program (wzorując sie na innych) który ma wyświetlać jeden wyraz na wyświetlaczu tid w oplu , wszystkie 3 linie podłączyłem do procesora ( pic 16f84a) przez diody (tid---I>I---pic) jednak nic nie moge wyświetlić, widziałem już kilka takich projektów ale chcę to napisać po swojemu,na początek ma wyświetlać jeden wyraz oto program

    #define sda portb.f3
    #define scl portb.f2
    #define mrq portb.f4

    unsigned char dana ,i ,ack ;

    void puls_us(void) //puls clock
    {
    delay_us(100);
    }
    void startpuls(void)
    {
    delay_us(150);
    }
    void start(void)
    {
    //bit startu na magistrali I2C START
    sda=1;
    startpuls();
    scl=1;
    startpuls();
    sda=0;
    startpuls();
    scl=0;
    startpuls();
    }
    void stop(void) //STOP
    {
    scl=0;
    sda=0;
    startpuls();
    scl=1;
    startpuls();
    sda=1;
    startpuls();
    }

    void send(unsigned char dana) // wysyłanie
    {
    ack=1;
    for(i=0;i<8;i++) //będzie 8 bitów
    {
    if(dana&0x80) //badaj najstarszy bit wysyłanego znaku
    {
    sda=1;
    ack=~ack; //wyślij "1"
    }
    else
    {
    sda=0; //wyślij "0"
    }
    //i2c_delay(0);
    scl=1;
    puls_us();
    scl=0;
    puls_us();
    dana<<=1; //przygotuj następny bit do wysłania
    }
    if(ack=1)
    {
    sda=1;
    scl=1;
    puls_us();
    scl=0;
    }
    else
    {
    sda=0;
    scl=1;
    puls_us();
    scl=0;
    }
    }

    void main () {
    trisb=0;
    while(1) {
    portb=255;
    mrq=0;
    delay_us(950);
    mrq=1;
    start();
    send(0x94);
    startpuls();
    mrq=0;
    send(0x10);
    send(0x10);
    send(0x9b);
    send(0x12);
    send(0x37);
    send(0x9b);
    send(0x9b);
    send(0x9b);
    send(0x9b);
    send(0x9b);
    mrq=1;
    stop();
    }

    }

    Próbowałem z innymi czasami ale również nie działa , ponieważ pomysły już mi sie skończyły i sam sobie nie poradze prosze o jakieś rady.
  • REKLAMA
  • #3 3691236
    pikachu1986
    Poziom 13  
    Posty: 155
    Ocena: 36
    widziałem tą strone, chce zrobić własnie cos takiego tylko po swojemu:)
    tylko nie wiem jak wyświetlać cos takiego np. RPM 123 gdzie 123 bedzie zmienną .Jak to napisać żeby program kiedy ma wyświetlić np. 5 wiedział ze ma wysłać adres 0x6B a jeżeli ma wyświetlić liczbe 50 to wysyła adres 0x6B a pożniej 0x61
  • #4 3691808
    techrys
    Poziom 28  
    Posty: 1537
    Pomógł: 17
    Ocena: 59
    Tid vectra/omega czy astra/corsa? Bo to dwa różne wyświetlacze.
  • REKLAMA
  • #5 3692049
    pikachu1986
    Poziom 13  
    Posty: 155
    Ocena: 36
    mam astre tid 8 znakowy (adres 0x94)
  • #6 3692219
    Kristo
    Poziom 17  
    Posty: 135
    Pomógł: 18
    Ocena: 131
    Witam wszystkich. Zainteresował mnie bardzo poruszony temat. Czy podobne rozwiązanie jest możliwe w Oplu Vectra B (1997). Byłbym bardzo wdzięczny za ewentualne linki bo samodzielne przeszukiwanie internetu jakoś nie przyniosło rezultatu.
    Autora postu przepraszam za zaśmiecanie wątku.
  • #7 3692555
    pikachu1986
    Poziom 13  
    Posty: 155
    Ocena: 36
    http://www.studio24.prv.pl/ na tej stronie znajduje sie opis kilku wyświetlaczy. Napisz który masz dokladnie u siebie w vectrze i sprawdz jakie masz złącze radia. Myśle że można wyświetlać dowolne napisy podłączając sie pod linie sda,scl,mrq w złączu radia jedyny probelem to napisanie odpowiedniego protokołu
    tu masz jeszcze kilka stron na których sie wzorowałem:
    http://www.eelkevisser.nl/rado.html
    http://www.carluccio.de/index.php?page=pro-tid
    http://manloeste.gmxhome.de/corsa/tid.htm
  • #8 3693452
    Kristo
    Poziom 17  
    Posty: 135
    Pomógł: 18
    Ocena: 131
    Dziękuję za szybką odpowiedź. Myślę, że chyba rozumiem na czym cała zabawa polega. W najbliższym czasie czeka mnie wyjęcie wyświetlacza w celu naprawienia brakujących linii więc będę więcej wiedział na temat złącz. Z tego co się zorientowałem to interface na PIC-u po odpowiednim podłączeniu jest w stanie wyświetlić obroty silnika na każdym wyświetlaczu TID.
  • REKLAMA
  • #9 3695777
    pikachu1986
    Poziom 13  
    Posty: 155
    Ocena: 36
    a wracając do tematu czy ma ktoś już jakiś pomysł na wyświetlanie tej zmiennej ? doszedłem do wniosku że nie musze wyświetlać liter i znaków wystarczą cyfry 0-9 np. L/KM 7.8 (przecinek jest na wyświetlaczu wiec 78 )
  • REKLAMA
  • #11 3696903
    pikachu1986
    Poziom 13  
    Posty: 155
    Ocena: 36
    widziałem tą strone tam jest gotowy projekt i o cos takiego mi chodzi tylko chce to sam napisać w C . Ten jest na procku 89c2051 ja pisze na 16f84a ale podłączone mam w bardzo podobny sposób. Kwestia powitania już jest opracowana ,problem jest żeby wyświetlał tak jak np. na 5 zdjęciu 950 OBR gdzie liczba sie zmienia a "OBR" zostaje cały czas tak samo ,nie wiem jak to napisać prosze o jakiś przykład
  • #12 3697353
    techrys
    Poziom 28  
    Posty: 1537
    Pomógł: 17
    Ocena: 59
    No niestety ja w c nie piszę. Chociaż chyba trzeba będzie zacząć ;) Z tego co rozumiem to masz problem z wyświetlaniem czegokolwiek - jak na mój gust masz rozjechaną czasówkę.
  • #13 3697451
    pikachu1986
    Poziom 13  
    Posty: 155
    Ocena: 36
    cokolwiek moge wyświetlić wpisując ręcznie do każdego z 8 bajtów adres (8 znaków). Napisy wyświetla mi bez problemu, napisałem własny protokół
    (nie ukrywam że męczyłem sie prawie miesiąc:]) jedyny problem to wyświetlenie zmiennej a dokładnie chodzi o to że jeżeli chce wyświetlać zmienną i w danym momencie wynosi ona np. 5 to jak ją wyśle send(0x05); nie wyświetli nic http://pl.wikipedia.org/wiki/ASCII żeby wyświetlić "5" musze wysłać adres 0x6B. W jaki sposób procek zamienia zmienną na odpowiedni adres ???
  • #14 3697664
    szymtro
    Poziom 30  
    Posty: 1421
    Pomógł: 101
    Ocena: 59
    W c też powinno się tak dać. Układasz sobie tablice z danymi po koleji - zaczynajac od zera gdzie po koleji będziesz miał wartości poszczególnych cyfr:

    tabela_1:
    .data 0x68, 0x69, 0x70 .....

    i teraz potrzebujesz jakas funkcję która na podstawie wartości zmiennej i pocżatku adresu tabela będzie ci wybierała zmienne z tej tabeli.
    np ala=2 (wartość jakaś)
    ela=lookup(ala) co spowduje podstawienie adresu tabeli, doidanie do niego wartości ala(tu =2) i zwróci ela=0x70.
    To jest dobre jak kolejne cyfry są kompletnie rózne od siebie.

    Przykłąd jest z baskoma ale w c też musi być coś takiego. W asm napewno jest.
  • Pomocny post
    #15 3698512
    psiemek
    Poziom 21  
    Posty: 560
    Pomógł: 23
    Ocena: 42
    Robisz tabele na przykład:

    uchar table[10]={ po kolei hexy jak wyglądają poszczególne liczby oddzielone przecinkami};

    zmienna = table[zmiennej która trzyma wartość np 5];

    po tym masz już w "zmiennnej" nie wartość 0x05 ale tą co chcesz.
  • #16 3700003
    pikachu1986
    Poziom 13  
    Posty: 155
    Ocena: 36
    napisałem tak jak wyżej i nareszcie działa :) wielkie dzieki ,
    a tak przy okazji następny problem z przyciskiem .Z podłączeniem nie ma problemu (przycisk reaguje na mase podłaczony do RB7) .Chce żeby jednokrotne naciśnięcie przycisku zwiększyło zmienną o 1 niezależnie od czasu trzymania przycisku. Czytałem troche o przerwaniach ale nie poradze sobie z tym prosze o przykład
  • #17 3702346
    psiemek
    Poziom 21  
    Posty: 560
    Pomógł: 23
    Ocena: 42
    Niekoniecznie musisz to robić na przerwaniach. Robisz tak:
    - sprawdzasz czy wciśnięty jak tak to czekasz na przykład 10ms (eliminuje drgania styków) po czym sprawdzasz czy puszczony jak puszczony to znowu 10ms.
    - w czasie tych oczekiwań możesz robić coś innego w końcu to procek jest i 10ms to kuupa czasu :D

    Pozdrawiam
  • #18 3703654
    pikachu1986
    Poziom 13  
    Posty: 155
    Ocena: 36
    chce żeby naciśnięcie przycisku zwiększało zmienną o 1 ,napisałem cos takiego:
    if portb.f7=0 {
    while (portb.f7=0) { //przycisk wciśniety
    delay_ms(10);
    }
    a++;
    }
    Nie wiem czy to sie sprawdzi zalezy mi na tym że jak przycisk jest nienaciśnięty to program omija dodawanie 1 do zmiennej .Chce to wykorzystać do wyboru menu np. trzy funkcje w menu obroty , prędkość i zużycie paliwa . Program zaczyna od wyświetlania obrotów i jak wcisne przycisk zmienia na wyświetlanie prędkości itd. chcę wykorzystać do tego funkcje
    switch (a) {
    case 0: obroty(); break;
    case 1: predkosc(); break;
    case 2: paliwo(); break;
    }
    to jest przykład ale na takiej zasadzie ma to działać chyba ze jest jakis inny latwiejszy sposób to prosze o podpowiedź
  • #19 7675450
    Konto nie istnieje
    Konto nie istnieje  
  • #20 7677364
    pikachu1986
    Poziom 13  
    Posty: 155
    Ocena: 36
    Cytat:
    Wyświetlacz MID/TID/DID zbudowany w oparciu o np. at89c2051 lub Pic16XXX i lcd 1x16 lub 2 x 16 ? ?

    Witam, nie wiem czy dobrze zrozumiałem, to ma być urządzenie które calkowicie ma zastąpić MID/TID czy wspólpracować z nim?

Podsumowanie tematu

✨ Dyskusja dotyczy wyświetlania tekstu na wyświetlaczu TID w samochodach Opel, sterowanym przez mikrokontroler PIC16F84A. Użytkownik napisał własny program do wyświetlania pojedynczych słów, podłączając linie wyświetlacza (SDA, SCL, MRQ) do portów PIC przez diody, jednak nie uzyskał efektu wyświetlania. Poruszono kwestie różnych typów wyświetlaczy TID w modelach Opla (Astra, Vectra, Omega, Corsa) oraz adresacji wyświetlanych znaków, gdzie cyfry muszą być mapowane na odpowiednie kody (np. znak '5' wymaga wysłania adresu 0x6B). Zaproponowano rozwiązanie w postaci tablicy mapującej wartości zmiennych na kody znaków do wysłania. Omówiono także problem obsługi przycisku do zmiany wyświetlanych danych (np. obroty, prędkość, zużycie paliwa) z eliminacją efektu wielokrotnego zwiększania wartości przy dłuższym przytrzymaniu, sugerując prostą metodę programową bez przerwań. Podano linki do stron z opisami protokołów i przykładami projektów na podobnych mikrokontrolerach (np. 89c2051). W dalszej części dyskusji pojawiły się pytania o wyświetlacze MID/TID/DID zbudowane na bazie mikrokontrolerów PIC16XXX lub at89c2051 oraz LCD 1x16 lub 2x16, a także przykłady gotowych rozwiązań zastępujących lub współpracujących z oryginalnym TID.
Wygenerowane przez model językowy.
REKLAMA