Elektroda.pl
Elektroda.pl
X
Elektroda.pl
HelukabelHelukabel
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Klawiatura bezprzewodowa (na Atmega8 i ukl. Telecontrolli)

16 Oct 2005 11:55 2491 4
  • Level 2  
    Dzień dobry drodzy forumowicze
    Od paru dni zmagam sie z pewnym problemem. Dlatego postanowiłem zasięgąć rady na forum.

    Zauważyłem temty które są mi bliskie, ale żaden nie opisywał dokładnej specyfikacji.....

    Mój schemat transmisji jest taki:

    Klawiatura PC (PS/2)-> Atmega8 -> nadajnik RT4-XXX (firmy Telecontrolli) -> odbiornik RR6-XXX (firmy Telecontrolli) -> Atmega8 -> Komputer PC (gniazdo PS/2)

    RT4-XXX (opis - http://www.telecontrolli.com/pdf/transmitter/rt4.pdf)
    RR6-XXX (opis - http://www.telecontrolli.com/pdf/receiver/rr6.pdf)

    Układziki są już zbudowane, lecz napotkał mnie problem

    Wiem, że transmisja z klawiatury do PC odbywa się przez dwa sygnały (DATA) i (CLK), dzięki której odbywa się szeregowa transmisja danych. Należy zaznaczyć, że jest to dwukierunkowa transmisja, w której rolę nadrzędną pełni klawiatura. To ona taktuje magistralę i wysyła informację o naciśniętych klawiszach. Realizowana jest również transmisja w drugą stronę (tj. od komputera do klawiatury), np. w celu zapalenia diod kontrolnych. Standardowa wymiana danych odbywa się w postaci ramki taktowanej opadającym zboczem sygnału zegarowego

    Sygnał z klawiatury (KBD_CLOCK wchodzi do mikrokontrolera PD2(INT0), KBD_DATA do (DATA czyli PD0(RxD))
    Nadajnik podpięty jest do PD0 pierwszego mikrokontrolera, a odbiornik do PC0 drugiego mikrokontrolera...I tu zaczyna się problem, niewiem jak napisac program odczytu z klawiatury, a tym bardziej wysłania go do nadajnikiem do odbiornika podłączonego do drugiego mikrokontrolera przetworzeniu i wysłaniu do PC tak aby dla PC całe urządzenie było "przezroczyste".
    Jak ma być podłączony kabel z PC do drugiego mikrokontrolera?
    KBD_CLOCK do ?? (TxD) ????
    KBD_DATA do ??np. (PC1) ???


    Dobrym dodatkiem była by dioda która świeciłaby podczas każdej transmisji znaku łączem szeregowym.

    Wszystko wydaję się logiczne z punktu teoretycznego.
    Praktycznie układy mam już na płytce.

    Niestety nie wiem jak napisac soft.
    Raczkuje dopiero z programowaniem mikrokontrolerów zaczynając od prostych programów (zapalania diody i gaszenia z zastosowaniem mikrokontrolera. Programy napisany w Asamblerze w AVRStudio)

    Znalazłem przykładową procedurke odczytu danych z klawiatury
    (lecz niestety w C)

    //Funkcja obsługi klawiatury PC - musi być wywołana jako obsługa
    //przerwania lini CLK
    //Funkcja zapamietuje w glogalnej zmiennej KOD (unsigned char)
    //kod wciśniętego lub
    // zwolnionego klawisza, wpisuje dodatkowo "1" do zmiennej
    //bitowej NOWY (zerowanej w innej części programu)
    //
    //BIT - globalna zmienna bajtowa (unsigned char) przechowująca numer
    //odbieranego bitu (wstępnie zerowana)
    //
    //DATA - zmienna bitowa odpowiadająca lini "KBD DATA"

    void klaw_PC(void)

    {
    switch (BIT)
    {
    case 0:
    KODE=0;BIT++ //bit startu inicjacja zmiennej
    break;
    case 1:
    KODE=DATA; BIT++ //najmniej znaczący bit (nr 0)
    break;
    case 2:
    KOD=KOD+DATA?2:0 //bit nr 1
    BIT++
    break;
    case 3:
    KOD=KOD+DATA?4:0 //bit nr 2
    BIT++
    break;
    case 4:
    KOD=KOD+DATA?8:0 //bit nr 3
    BIT++
    break;
    case 5:
    KOD=KOD+DATA?16:0 //bit nr 4
    BIT++
    break;
    case 6:
    KOD=KOD+DATA?32:0 //bit nr 5
    BIT++
    break;
    case 7:
    KOD=KOD+DATA?64:0 //bit nr 6
    BIT++
    break;
    case 8:
    KOD=KOD+DATA?128:0 //bit nr 7
    BIT++
    break;
    case 9:
    BIT++ //bit parzystości (ignorowany)
    break;
    case 10:
    BIT=0; //bit stopu
    NOWY=1; //odebrano nowy kod
    break;
    }
    }


    Niewiem jak ją wykorzystać...

    Bardzobym prosił o pomoc.....
    Z góry dziękują za udzielone wskazówki...
    Z poważaniem

    MajkeL

    PS. mogę wysłać schemat układu
  • HelukabelHelukabel
  • Level 32  
    No to sobie postawiłeś poprzeczkę. Koledzy którzy projektowali kasy fiskalne mieli co robić z adaptacją klawiatury bo okazało się że klawiatury mają różne parametry ale to jeszcze pryszcz w stosunku do tego że musisz jeszcze opanować symulację klawiaturę od strony PC.
    Życzę powodzenia bo jest co robić.
  • HelukabelHelukabel
  • Level 36  
    GienekS wrote:
    klawiatury mają różne parametry ale to jeszcze pryszcz w stosunku do tego że musisz jeszcze opanować symulację klawiaturę od strony PC.


    Oczywiście z punktu widzenia przezroczystego łącza parametry klawiatury oraz fakt, że odbiornik ma odpracować nibyklawiaturę są kompletnie bez znaczenia. Po prostu musisz sobie wymyślić sposób transmisji, który pozwoli ci przesłać w miarę niezniekształcone dwa przebiegi binarne i to wszystko. Żadnych standardów klawiatury, ustawiania czy spasowania parametrów. W najprostszym wydaniu może to być jednokierunkowy UART który zbiera dane na zboczach zegara klawiatury i transmituje je przez radio, a odbiornik wystawia je bitowo w postaci szeregowej na linie CLK/DTA klawiatury przez dowolne porty.
    W zasadzie jest to pewna forma jednokierunkowego modemu dwubitowego, który w sumie można by zrealizować bez komputerka.

    Jesli się bardzo uprzesz możesz po stronie nadajnika zestawiać scankod wystawiany z klawiatury (wciśnięcie/puszczenie klawisza), przesyłać go przez UART i w odbiorniku ponownie przetwarzać go na postać szeregową wpuszczając do peceta. Oczywiście łącze to jest dość jednoznacznie zdefiniowane i nie ma mowy o konieczności strojenia, o której pisano w powyższym poscie.

    Jedyny poważny problem jaki masz to brak sygnału zwrotnego (o ile pamiętam klawiaturkę przy starcie się resetuje, po czym bez wciśnięcia klawisza jakoś się musi zgłosić, żeby pecet wiedział, że ją ma). Ta operacja dotyczy każdego startu i reseta peceta (na ogół wystarcza wtedy wciśnięcie F1). No i oczywiście dotyczy to też diod klawiatury, których swoim łączem nie obsłużysz.
  • Level 32  
    Kolega marek_Łódź zapomniał że ta transmisja musi być do szczęścia dwukierunkowa i to jeszcze na tej samej linii. Czyli o żadnym USARCIE tu nie może być mowy. Mało to zegar też do końca w klawiaturze nie jest jedno kierunkowy.
  • Level 36  
    GienekS wrote:
    Kolega marek_Łódź zapomniał że ta transmisja musi być do szczęścia dwukierunkowa i to jeszcze na tej samej linii. Czyli o żadnym USARCIE tu nie może być mowy. Mało to zegar też do końca w klawiaturze nie jest jedno kierunkowy.


    Dwukierunkowa z jednym nadajnikiem i jednym odbiornikiem radiowym :?: Chętnie obejrzę takie rozwiązanie. Podtrzymuję to, że najprościej zrobić radiolinię jednokierunkową korzystając z interfejsu szeregowego - txd w nadajniku, rxd w odbiorniku.

    Problemy z dwukierunkową komunikacją z klawiaturą sygnalizowałem w swoim poprzednim poscie.

    Żeby nie było wątpliwości napiszę otwartym kodem - klawiatura wyjście zegara tak jak proponował autor tematu - zegar na przerwanie, dane na dowolny port, dalej nadajnik szeregowy (txd) do nadajnika radiowego, z odbiornika radiowego na port szeregowy (rxd) i dalej dowolne porty na linie sygnałowe klawiatury do peceta.