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
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