Drk_alien Postat Martie 7, 2012 Partajează Postat Martie 7, 2012 Buna, doresc sa conectez o tastatura Ps2 la un microcontroler si sa afisez pe un afisor cu 7 seg. ultimul caracter tastat .Aici am niste nelamuriri: a) Tastatura trimite serial pe un singur pin al pic-ului codul 1c(H) la tastarea caracterului "A" .Cum retin acel cod binar ca apoi sa il procesez pt afisarea pe afisor?...stiu sa lucrez cu transmiterea paralela dar nu inteleg transmiterea seriala.b) De unde stie pic-ul cand datele pt caracterul tastat s-au transmis si sunt gata pt procesare spre afisare? Link spre comentariu
Liviu M Postat Martie 8, 2012 Partajează Postat Martie 8, 2012 Transmisia multor biti pe putine sarme se cheama transmisie seriala. Exista mai multe protoacoale de comunicatie; in fiecare protocol se "impune" modul in care: - se poate initia o transmisie (care trebuie sa fie starea liniilor de comunicatie ca sa poti transmite un nou pachet) - cum incepe transmisia (de obicei cu un bit de start) - cati biti se transmit "o data" - eventuale metode de testare a validitatii datelor receptionate (de ex. bit de paritate) - cum se termina mesajul (bit de stop). In cazul tau, protocolul e descris aici. Ca sa receptionez datele in PIC, in momentul in care detectezi date pe liniile seriale (poti folosi RB0 pentru clock si intreruperea INT0 ca sa detectezi bitul de start/fronturile semnalului de clock), incepi si salvezi datele de pe linia de date (din ce am vazut eu, poti salva pe frontul crescator al semnalului de ceas). Le salvezi intr-o variabila/un registru si le prelucrezi cum iti trebuie. Asta daca nu cumva merge sa folosesti direct portul serial al PICului, caz in care se ocupa el de comunicatie, tu trebuind doar sa "potrivesti" baud rate-ul si sa citesti datele din bufferul de intrare cand sunt toate. Link spre comentariu
ratza Postat Martie 8, 2012 Partajează Postat Martie 8, 2012 Ce tastatură ai? Pune un link spre datasheet. Link spre comentariu
Drk_alien Postat Martie 8, 2012 Autor Partajează Postat Martie 8, 2012 O sa revin cu modelul de tastatura pe care vreau sa fac acea aplicatie pe duminica,cand o aduc din sat si imi reamintesc ce model e.(oricum ceva vechitura). Pare destul de complicata treaba.Sper sa ii dau de capat...O sa revin duminica si pana atunci am sa citesc protocolul care mi s-a indicat. Link spre comentariu
Drk_alien Postat Martie 11, 2012 Autor Partajează Postat Martie 11, 2012 Bun, am revenit.Nu stiu modelul de tastatura deoarece nu este inscriptionat nimik.As putea sa o bag intr-un calc ca sa vad detalii despre, dar eu am laptop. Vreau sa fac in felul urmator: Voi folosi Pinul 7 din PORTB (RB7) ca si alimentare pentru tastatura, pinul 5 si 6 pt clock si data(RB5 si RB6)....astea se vor conecta la mufa PS2 .Folosesc un oscilator de 10 MHz. Intrebarea mea este care este algoritmul de receptie a datelor? void main() { TRISB7 = 0; ///setat ca si iesire PORTB7= 1; ///setam ca sa avem iesire pt alimentare (are ceva ca folosesc un pin din poarta pt alimentare?) TRISB6 = ? PORTB6=? //cum setez acest pin ca sa imi dea clock-ul? TRISB5 = 1; ///setat pentru intrare de la tastatura (data) while(1) { //gandirea ar fi: --daca am tensiune pe PORTB5 ..inseamna ca primesc date, deci undeva sa fie memorati bitii. //apoi apelez o functie care imi scoate pe o alta poarta in paralel PORTA = 0X1C ; }} Am gasit ceva aici http://tams-www.informatik.uni-hamburg.de/applets/hades/webdemos/95-dpi/pic16f628-rxtx/echo.html dar nu stiu daca merge si nici nu prea inteleg codul. Astept niste pareri si ajutor.Va multumesc. Link spre comentariu
ratza Postat Martie 12, 2012 Partajează Postat Martie 12, 2012 Aaaa, ai o tastatură normală de PC? Aşa spune. Am crezut că e una miniatură. Păi atunci nu-ţi rămîne decît să cauţi descrierea protocolului de comunicare şi să-l implementezi în PIC.Nu folosi portul PIC-ului pentru alimentare, rişti să-l arzi. Link spre comentariu
Drk_alien Postat Martie 12, 2012 Autor Partajează Postat Martie 12, 2012 ok...nu inteleg cum sa implementez protocolul acela in PIC, tastatura va trimite date la apasarea unei taste...dar cum fac progarmul care sa imi puna intr-o variabila codul binar specific tastei apasate?....cer prea mult? Link spre comentariu
costi002 Postat Martie 12, 2012 Partajează Postat Martie 12, 2012 Inainte de toate citeste cu atentie cum functioneaza USART-ul pic-ului si apoi revino cu intrebari.In principiu, ca sa ai o idee, dupa ce USART-ul receptioneaza 1 byte apare o intrerupere. trebuie monitorizata acea intrerupere, dupa care pur si simplu copiezi datele din registrul TXREG unde vrei tu si faci ce vrei cu ele.Mult spor la citit Link spre comentariu
Drk_alien Postat Aprilie 4, 2012 Autor Partajează Postat Aprilie 4, 2012 Am reusit sa fac acea aplicatie cu tastatura. Am folosit acest cod pe care l-am gasit in help-ul de la mikroC . Se pare ca pic16f877a nu are registrii ANSEL si ANSELH .In acea schema http://www.mikroe.com/esupport/index.php?_m=knowledgebase&_a=viewarticle&kbarticleid=143 la pinii de clock si data apar tensiuni.Eu nu am folosit asa ceva.Cred ca mi-ar fi tinut semnalul de clock sau data tot pe 1 . Sper sa ajute si pe altii ceea ce am facut aici.. unsigned short keydata = 0, special = 0, down = 0;sbit PS2_Data at RC0_bit;sbit PS2_Clock at RC1_bit;sbit PS2_Data_Direction at TRISC0_bit;sbit PS2_Clock_Direction at TRISC1_bit;void main() { ADCON1 = 0; ADCON1 = 0; TRISB = 0; TRISD = 0; PORTB = 255; PORTD = 255; UART1_Init(19200); // Initialize UART module at 19200 bps Ps2_Config(); // Init PS/2 Keyboard Delay_ms(100); // Wait for keyboard to finish UART1_Write_Text("Ready"); UART1_Write(10); // Line Feed UART1_Write(13); // Carriage return do { if (Ps2_Key_Read(&keydata, &special, &down)) { if (down && (keydata == 16)) { // Backspace UART1_Write(0x08); PORTB = keydata; } else if (down && (keydata == 13)) { // Enter UART1_Write('r'); // send carriage return to usart terminal //Usart_Write('n'); // uncomment this line if usart terminal also expects line feed PORTB = keydata; // for new line transition } else if (down && !special && keydata) { UART1_Write(keydata); PORTB = keydata; ///keydata este sirul de biti receptionat de la tastatura. (ex: '01101100') } } Delay_ms(1); // debounce } while (1);} Link spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum