nico_2010 Postat August 2, 2011 Partajează Postat August 2, 2011 Programul functioneaza inscris pe uC Dovada: In acest caz, aplica varianta a doua pe care ti-am propus-o. Link spre comentariu
ovy_pas Postat August 2, 2011 Partajează Postat August 2, 2011 Multumesc nico ai avut dreptate. Am zgariat cablajul intre trasee sa fiu sigur ca nu se ating traseele si acum merge. Link spre comentariu
ovy_pas Postat August 8, 2011 Partajează Postat August 8, 2011 imi apar caractere "parazite" stie cineva?vreau sa comand 2 leduri din 2 butoane si am introdus dupa citirea intrarii analogice codul de mai jos: RC6_bit = !RA5_bit; RC7_bit = !RA4_bit; si imi apar caractere ciudateapoi am incercat cu functia button cum recomanda in documentatie uC : RC6_bit = Button(&PORTA, 5, 1, 0); RC7_bit = Button(&PORTA, 4, 1, 0);la fel in apar ca in poza atasata. Link spre comentariu
nico_2010 Postat August 9, 2011 Partajează Postat August 9, 2011 imi apar caractere "parazite" stie cineva? vreau sa comand 2 leduri din 2 butoane si am introdus dupa citirea intrarii analogice codul de mai jos: RC6_bit = !RA5_bit; RC7_bit = !RA4_bit; si imi apar caractere ciudate apoi am incercat cu functia button cum recomanda in documentatie uC : RC6_bit = Button(&PORTA, 5, 1, 0); RC7_bit = Button(&PORTA, 4, 1, 0); Incearca altfel:"{ if RC5_bit =0 then //(sau 1, functie de configuratia butoanelor) RC6_bit=1; //(este doar un exercitiu) }" In ceea ce priveste functia Button, foloseste-o asa cum este explicat in help. Cu privire la caracterele "parazite", cumva LCD-ul este conectat pe acelasi port cu butoanele? Link spre comentariu
ovy_pas Postat August 9, 2011 Partajează Postat August 9, 2011 LCD este pe port B ca in schema atasata in pagina anterioara.Butoanele sunt pe port A, (RA4,RA5). Link spre comentariu
ovy_pas Postat August 9, 2011 Partajează Postat August 9, 2011 Problema nu era de la porturi, acele caractere apareau deoarece am declarat textul cu 6 caractere char sBuff_Valoare[6]; iar functia IntToStr(iBuff_Valoare, sBuff_Valoare); cere 7 caractere in uC deoarece Int ia valorile -32768 .. 32767, deci lungimea maxima a sirului trebuie sa aiba 6 caractere pentru a afisa valorile negative + 1 caracter blank la sfarsitul sirului.Cum pot uni 2 siruri de caractere ? De exemplu sa afisez pe primul rand "Temperatura:" , iar pe al doilea valoarea temperaturii convertite in text (cu functia inttostr) + " *C" . Link spre comentariu
nico_2010 Postat August 10, 2011 Partajează Postat August 10, 2011 Sper sa te ajute asta: //declaratii de variabile char txt_val[13]; //folosesti functia de conversie, in acest caz float to string floattostr(f2, txt_val); //si afisezi rezultatul astfel: Lcd_Out(1,3,"Temperatura"); Lcd_Out(2,1,"T="); lcd_chr(2,5,txt_val[0]); lcd_chr(2,6,txt_val[1]); lcd_chr(2,7,txt_val[2]); lcd_chr(2,8,txt_val[3]); lcd_chr(2,9,txt_val[4]); lcd_chr(2,10,txt_val[5]); Lcd_Out(2, 12, sufix); //iar sufix poate fi caracterul grade Celsius, generat cu generatorul de caractere din MikroC:: const char character[] = {12,18,18,12,0,0,0,0}; Link spre comentariu
Liviu M Postat August 17, 2011 Partajează Postat August 17, 2011 Daca tot ai folosit intens functii de conversie, daca ai avea un compilator cat de cat ANSI C ai putea folosi si strcat(string1, string2) ca sa unesti string1 cu string2. Nu stiu daca e implementata in compilatorul tau si nici cate resurse din pic foloseste (in general evit sa folosesc functii de-astea de conversie, desi n-am nici o dovada ca-s risipitoare de resurse). Link spre comentariu
nico_2010 Postat August 18, 2011 Partajează Postat August 18, 2011 Daca tot ai folosit intens functii de conversie, daca ai avea un compilator cat de cat ANSI C ai putea folosi si strcat(string1, string2) ca sa unesti string1 cu string2. Nu stiu daca e implementata in compilatorul tau si nici cate resurse din pic foloseste (in general evit sa folosesc functii de-astea de conversie, desi n-am nici o dovada ca-s risipitoare de resurse).Ovy_pas foloseste MikroC, iar solutia pe care i-am propus-o a fost folosita de mine intr-o aplicatie si a dat rezultatele pe care si le doreste.Si in acest compilator exista strcat, insa asta nu rezolva problema ridicata de ovy_pas si anume afisarea unui text pe prima linie si a unor valori de variabile pe cea de-a doua linie. Link spre comentariu
Liviu M Postat August 18, 2011 Partajează Postat August 18, 2011 Eu credeam ca ar merge ceva de genul (am prelucrat direct codul tau): //declaratii de variabile char txt_val[13];//folosesti functia de conversie, in acest caz float to stringfloattostr(f2, txt_val);//adauga sufixulstrcat(txt_val, "°C");//si afisezi rezultatul astfel:Lcd_Out(1,3,"Temperatura");Lcd_Out(2,1,"T=");Lcd_Out(2,5,txt_val);Da' acum daca ma uit mai bine cred ca o sa aiba probleme cu numarul de caractere din floattostr(), care poate diferi in functie de temperatura citita la un moment dat. Daca face totusi txt_val cat mai "exacta" (cred ca 6 caractere + \n i-ar ajunge), ar avea sanse sa mearga si varianta mea. LE Spun prostii grupa mare. txt_val trebuie sa fie suficient de mare sa incapa si °C. Link spre comentariu
nico_2010 Postat August 18, 2011 Partajează Postat August 18, 2011 Da, cred ca merge si varianta ta, dar nu am probat-o inca! E interesanta pentru teste. Link spre comentariu
Liviu M Postat August 18, 2011 Partajează Postat August 18, 2011 Varianta mea "arata mai bine", da' sunt destul de sigur ca nu e mai eficienta decat a ta (dimenasiune cod + eventual viteza). Link spre comentariu
ovy_pas Postat Septembrie 22, 2011 Partajează Postat Septembrie 22, 2011 Da multumesc nico_2010 varianta ta merge foarte bine, dar sunt dezamagit voiam sa fac un meniu cu vreo 10 parametrii, nu ma asteptam sa pot afisa doar 5 texte de 14 caractere, RAM insuficient ma gandeam ca poate functiile de conversie sunt de vina dar nu. Am sters tot programul si mi-a ramas doar atat:while(1){ Lcd_Out(1,1,"ABCDEF GH IJKLMN"); Lcd_Out(1,1,"ABCDEF GH IJKLMN"); Lcd_Out(1,1,"ABCDEF GH IJKLMN"); Lcd_Out(1,1,"ABCDEF GH IJKLMN"); Lcd_Out(1,1,"ABCDEF GH IJKLMN"); Lcd_Out(1,1,"ABCDEF GH IJKLMN");}Mesaj compilare: 0 1139 Available RAM: 112 [bytes], Available ROM: 2048 [bytes] 0 126 All files Preprocessed in 31 ms 0 122 Compilation Started SL_Lcd.c44 123 Compiled Successfully SL_Lcd.c0 127 All files Compiled in 15 ms 0 362 Not enough RAM '?lstr6_SL_Lcd' SL_Lcd.c0 102 Finished (with errors): 22 sep. 2011, 18:48:03 SL_Lcd.mcppiidei pentru un alt mod de programare pentru a economisi ram? Link spre comentariu
nico_2010 Postat Septembrie 23, 2011 Partajează Postat Septembrie 23, 2011 ... sunt dezamagit voiam sa fac un meniu cu vreo 10 parametrii, nu ma asteptam sa pot afisa doar 5 texte de 14 caractere, RAM insuficient ma gandeam ca poate functiile de conversie sunt de vina dar nu.Mesaj compilare: 0 1139 Available RAM: 112 [bytes], Available ROM: 2048 [bytes] 0 126 All files Preprocessed in 31 ms 0 122 Compilation Started SL_Lcd.c44 123 Compiled Successfully SL_Lcd.c0 127 All files Compiled in 15 ms 0 362 Not enough RAM '?lstr6_SL_Lcd' SL_Lcd.c0 102 Finished (with errors): 22 sep. 2011, 18:48:03 SL_Lcd.mcppiidei pentru un alt mod de programare pentru a economisi ram?InMikroC (ca si in alte IDE-uri, cum ar fi BASCOM), bibliotecile pentru comunicatiile cu LCD, conversii s.a.m.d. papa multe resurse ale uC asa ca, o solutie ar fi mixarea programului (acolo unde se poate) cu limbaj de asamblare si, nu in ultimul rand utilizarea unor mesaje stocate in EEPROM. Sunt convins ca imi vor sari multi in cap ca folosesc EEPROM si ca timpul de accesare este uneori prea mare (minim 4 ms) pentru unele aplicatii. Link spre comentariu
pspsuceava Postat Octombrie 8, 2011 Autor Partajează Postat Octombrie 8, 2011 Am o problema de cand folosesc C in loc de ASM , cand dau lcd_clear imi raman paraziti pe ecran ... Aveti idee de ce ? http://imageshack.us/photo/my-images/191/photo0086gm.jpg/ http://imageshack.us/photo/my-images/838/photo0087qd.jpg/ #include <htc.h>#include "lcd.h"voidmain(void){ while (1){ lcd_init(); lcd_goto(0); lcd_puts(" Bine ai venit"); lcd_goto(0x40); lcd_puts(" pe elforum !"); if (RA1=0){ lcd_clear();}}} 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