caddyct Postat Septembrie 3, 2009 Partajează Postat Septembrie 3, 2009 As dori sa realizez un program pentru un PIC18F4520 in Microchip C18 sau in ASM (oricare) prin care sa trimit de pe PC mesaje sau caractere (nu conteaza) apoi ulterior poate comenzi catre PIC care are si un LCD.Iar acel mesaj sa apara pe LCD-ul respectiv.Comunicarea as vrea sa fie de tip seriala, RS232.Folosesc placuta PICDEM2 PLUS versiunea RoHS (cea verde).LCD-ul e un 2x16 Hitachi HD44780. Link spre comentariu
ratza Postat Septembrie 4, 2009 Partajează Postat Septembrie 4, 2009 ?i noi cu ce te putem ajuta? Link spre comentariu
caddyct Postat Septembrie 4, 2009 Autor Partajează Postat Septembrie 4, 2009 sa-mi dati niste idei cum as putea sa realizez acest program.sau macar niste pasi ai algoritmului Link spre comentariu
ratza Postat Septembrie 4, 2009 Partajează Postat Septembrie 4, 2009 Ai nevoie de Hyperterminal ca s? trimi?i caracterele. Pentru PIC e bine s?-?i structurezi mesajul dup? un anumit ?ablon. Presupunînd c? vrei s? trimi?i mai multe caractere într-un mesaj de lungime variabil?, po?i avea a?a: START LEN MSG CHK STOP S? le lu?m acum pe rînd. START e caracterul de început al mesajului care indic? faptul c? se transmite un nou mesaj. Trebuie e s? fie un caracter care s? nu poat? fi con?inut în mesajul de comand?. De exemplu po?i s? pui "$" pentru start ?i "." pentru stop, iar în mesaj s? ai doar caractere alfanumerice. LEN e lungimea mesajului, adic? num?rul de caractere pe care vrei s?-l trimi?i. MSG e seria de caractere trimise. Preferabil ar fi s? ai doar cifre ?i litere, f?r? caractere speciale. Se poate ?i cu ele, dar e mai elegant f?r?. CHK e checksum-ul, dar cum tu trimi?i mesaje manual, e cam nasol de calculat. Po?i renun?a la el, dac? e?ti sigur c? ai transmisii f?r? erori. Practic e bine s?-l faci. STOP e caracterul care indic? faptul c? transmisia s-a încheiat. Nu ?tiu dac? PIC-ul t?u are întrerupere pe USART RX, mi-e lene s? m? uit, dar dac? are e bine s-o folose?ti, programul va merge mult mai repede. Ca variabile ai nevoie (minim) de un buffer pentru caracterul primit, un index pentru pozi?ia în mesaj, un string pentru mesajul propriu zis ?i dou? variabile pentru suma de control primit? ?i recalculat?. Algoritmul ar fi urm?torul, pentru varianta cu întrerupere: - ini?ializezi indexul pentru pozi?ia în mesaj cu 0; - recep?ionezi un caracter ?i îl copiezi local în buffer; - verifici dac? ai primit caracterul de start ?i dac? da, incrementezi indexul ?i copiezi în string urm?torul caracter care va veni. Dac? nu, a?tep?i pîn? prime?ti caracterul de start; - recep?ionezi ?i testezi fiecare caracter ca s? vezi dac? e caracterul de stop. Dac? nu e stop copiezi în string. Dac? e, resetezi indexul ?i descompui mesajul din string. Ca s? faci asta, ?tii c? în string ai num?rul de caractere recep?ionate chiar pe prima pozi?ie ?i c? la pozi?ia LEN+2 ai un checksum. Îl recalculezi ?i îl verifici cu cel primit, trebuie s? fie identice. Dac? nu sînt, înseamn? c? s-a întîmplat ceva na?pa la recep?ie ?i tre' s? trimi?i din nou mesajul. Ca s? nu te complici inutil, po?i structura codul în felul urm?tor (îmi iau libertatea de a boteza func?iile, tu le po?i numi cum te taie capul): - init_hw() în care ini?ializei to?i regi?trii de care ai nevoie; - rx_message() pentru compus mesajul; - check_message(checksum_rx, checksum_calculated) pentru calculat ?i verificat checksum-ul; - decode_message(message_received, "COMMAND") pentru verificat ?i execu?ia comenzii; - print_message(message received) pentru a afi?a pe ecran; - main() în care bagi un frumos while(1) ?i la?i întreruperea s? fac? teburile ai departe. Link spre comentariu
caddyct Postat Septembrie 4, 2009 Autor Partajează Postat Septembrie 4, 2009 In datasheet-ul lui zice la EUSART asa:The pins of the Enhanced USART are multiplexedwith PORTC. In order to configure RC6/TX/CK andRC7/RX/DT as an EUSART:? bit SPEN (RCSTA<7>) must be set (= 1)? bit TRISC<7> must be set (= 1)? bit TRISC<6> must be set (= 1)The operation of the Enhanced USART module iscontrolled through three registers:? Transmit Status and Control (TXSTA)? Receive Status and Control (RCSTA)? Baud Rate Control (BAUDCON)?R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R-0 R-0 R-x SPEN RX9 SREN CREN ADDEN FERR OERR RX9D bit 7 bit 0PS: Ce program de Hyperterminal sa folosesc? eu am avut un Hyperterminal Private Edition da mi-a expirat.Vista nu are HyperTerminal din pacate Link spre comentariu
ratza Postat Septembrie 4, 2009 Partajează Postat Septembrie 4, 2009 Dac? nu are întrerupere, va trebui s? faci poll la port tot timpul ?i se complic? treaba. O s? arunc o privire peste datasheet ?i o s?-?i zic dac? merge sau nu. Pentru terminal exist? o variant? mai nesim?it?, ?i anume s? iei versiunea freeware de CodeVision. De?i e pentru Atmel, terminalul din el e excelent, po?i trimite inclusiv fi?iere. http://www.hpinfotech.ro/html/download.htm EDIT: Merge ?i cu întrerupere, vezi c? mai ai vreo dou? baxuri de regi?tri de configurat :crazy: Link spre comentariu
caddyct Postat Septembrie 4, 2009 Autor Partajează Postat Septembrie 4, 2009 care registrii?btw am gasit si eu o versiune buna de hyperterminal care sa-mi mearga bine (acelasi program mentionat mai sus) Link spre comentariu
ratza Postat Septembrie 4, 2009 Partajează Postat Septembrie 4, 2009 Regi?trii de întreruperi mai trebuie s? fie configura?i. Vezi în datasheet. Link spre comentariu
kit Postat Septembrie 6, 2009 Partajează Postat Septembrie 6, 2009 eu m-am inspirat de la: http://www.electronicfr.com/index.php/M ... F2550.html ai acolo cam tot ce-ti trebuie. bafta! Link spre comentariu
caddyct Postat Septembrie 6, 2009 Autor Partajează Postat Septembrie 6, 2009 am reusit sa trimit niste comenzi.o sa incerc acum cu un LCD si apoi cu un senzor de temperatura. Link spre comentariu
Vizitator Csroluxx Postat Septembrie 10, 2009 Partajează Postat Septembrie 10, 2009 O aplicatie de comunicare PC-PIC-PC gasesti si aici http://www.piclist.com/techref/piclist/cheapic/alphabet.htm Link spre comentariu
Liviu M Postat Septembrie 10, 2009 Partajează Postat Septembrie 10, 2009 Aplicatia de mai sus e pentru 16f84, care n-are port serial hardware (sau are, ca nu-mi dau seama din poza?), totul se face in cod. 18f45x0, pe de alta parte, are tot ce-i trebuie implementat in hard, trebuie numai activat (configurat picul corespunzator). 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