Sari la conținut
ELFORUM - Forumul electronistilor

LCD-Display LCM1602ASL 16x2 Problema


pspsuceava

Postări Recomandate

  • Răspunsuri 148
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • pspsuceava

    35

  • Liviu M

    22

  • pegas

    14

  • MatyC

    12

Top autori în acest subiect

Imagini postate

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.post-27236-139829296456_thumb.jpg

Link spre comentariu

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

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.post-27236-139829296805_thumb.jpgCum 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

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

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

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

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
  • 1 lună mai târziu...

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

... 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
  • 3 săptămâni mai târziu...

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

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 cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări