• 54 odgovora
  • 12.454 pregleda
Mikrokontroler + LCD-molim pomoc! 25.12.2012. u 18:16 · pre 168 meseci #1
Pisao sam jedan jednostvan primer za PIC16F877A...,i imam problem.
Program treba da ispise brojeve od 1 do recimo 7 na LCDu.Prvo da napise broj 1,pa obrise displej,pa broj 2 itd.
evo koda:

sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;

sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
// LCD konekcija

short int i; // varijabla petlje

void main(){

Lcd_Init(); // Inicijalizacija LCDa
Lcd_Cmd(_LCD_CLEAR); // obrisi displej
Lcd_Cmd(_LCD_CURSOR_OFF); // ugasi kursor

Delay_ms(500);

// petlja
for(i=0; i<=7; i++) // Petlja
{
Lcd_Out(2,1,i); // Upisi i u drugi red,prvo mesto
Delay_ms(500);
Lcd_Cmd(_LCD_CLEAR); // obrisi displej
Lcd_Cmd(_LCD_CURSOR_OFF); // ugasi kursor
}

Sa ovim ja na displeju dobivam neke brljotine,kao da igram pakmana :)
U pitanju je MikroC.

Re: Mikrokontroler + LCD-molim pomoc! 25.12.2012. u 19:17 · pre 168 meseci #2
A kako si ti to sve fizicki povezao?daj neku semu...

Mislim da " i " prvo moras da pretvoris u tekst naredbom IntToStr,pa tekst ide na LCD

Re: Mikrokontroler + LCD-molim pomoc! 25.12.2012. u 19:27 · pre 168 meseci #3
Fizicki!?
Pa mislim da je iz samog koda sve jasno.Mikrokontroler je PIC16F877a,LCD je 4bitno spojen na port B.Nema nikakvog drugog hardvera.
Re: Mikrokontroler + LCD-molim pomoc! 25.12.2012. u 19:30 · pre 168 meseci #4
Odgovor na tvoje pitanje je u prototipu LCD_Out funkcije

Code:


void Lcd_Out(char row, char column, char *text);



kao što vidiš tvoja promenljiva 'i' nije odgovarajućeg tipa

Jedna od mogućnosti je da iskoristiš LCD_chr:

Code:

Lcd_chr(2,1, i+48 ); // i+48 je ASCII code za broj -
                           //nedostatak samo brojevi od 0..9 pa za veće brojeve potrebno je malo manipulacije


druga je da iskoristiš ByteToStr ,ShortToStr,WordToStr,IntToStr,LongToStr,LongWordToStr,FloatToStr funkcije.
I to naravno ima nedostataka,probaj pa će ti biti jasno koji je....

npr

Code:

...
char tmp[3];

...
ShortToStr(i,tmp)
Lcd_Out(2, 1, tmp);
...

Re: Mikrokontroler + LCD-molim pomoc! 25.12.2012. u 19:30 · pre 168 meseci #5
Pa recimo da li si B3 povezao na D7,da li su d1,d2,d3,d4 svi na gnd itd...
pretvori promenljivu u tekst,pa tekst salji na lcd!
Re: Mikrokontroler + LCD-molim pomoc! 25.12.2012. u 19:43 · pre 168 meseci #6
OK,mislim da ce inttostr da resi problem.Probacu malo kasnije veceras da prepakujem kod.
LCD je pravilno spojen jer neki drugi kodovi normalno rade na njemu.
Hvala svima na pomoci.Javicu se kasnije...
Re: Mikrokontroler + LCD-molim pomoc! 25.12.2012. u 20:36 · pre 168 meseci #7
Evo ovako sam ja to sad spakovao,ali sad mi prijavljuje gresku u kompajleru :(

sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;

sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
// LCD konekcija

short int i = 0; // varijabla petlje
char txt[7];
IntToStr(i, txt);


void main(){

Lcd_Init(); // Inicijalizacija LCDa
Lcd_Cmd(_LCD_CLEAR); // obrisi displej
Lcd_Cmd(_LCD_CURSOR_OFF); // ugasi kursor


Delay_ms(500);


// petlja
for(i=0; i<=7; i++) // Petlja
{
Lcd_Out(2,1,txt); // Upisi i u drugi red,prvo mesto
Delay_ms(500);
Lcd_Cmd(_LCD_CLEAR); // obrisi displej
Lcd_Cmd(_LCD_CURSOR_OFF); // ugasi kursor
}
}
Re: Mikrokontroler + LCD-molim pomoc! 25.12.2012. u 21:10 · pre 168 meseci #8
Resen problem,proradilo je!

Evo kompletnog koda koji radi:

sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;

sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
// LCD konekcija

short int i; // varijabla petlje
char txt[7];



void main(){

Lcd_Init(); // Inicijalizacija LCDa
Lcd_Cmd(_LCD_CLEAR); // obrisi displej
Lcd_Cmd(_LCD_CURSOR_OFF); // ugasi kursor


Delay_ms(500);


// petlja
for(i=0; i<=7; i++) // Petlja
{
IntToStr(i, txt);
Lcd_Out(2,1,txt); // Upisi i u drugi red,prvo mesto
Delay_ms(500);
Lcd_Cmd(_LCD_CLEAR); // obrisi displej
Lcd_Cmd(_LCD_CURSOR_OFF); // ugasi kursor
}
}


Hvala svima na pomoci!
Re: Mikrokontroler + LCD-molim pomoc! 25.12.2012. u 21:21 · pre 168 meseci #9
Probaj i ovako

Code:


sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;

sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
// LCD konekcija

short i; // varijabla petlje


//u slučaju da ti treba int
/*
void LCD_Int(char row, char column, int value) 
{

     char tmp[5],i=0;
     tmp[0]=value/10000;
     tmp[1]=(value%10000)/1000;
     tmp[2]=(value%1000)/100;
     tmp[3]=(value%100)/10;
     tmp[4]=value%10;
     Lcd_Out(row,column,"");
     while(!tmp[i]&&i<4)i++;
     while(i<5) {LCD_chr_cp(tmp[i]+48); i++; }
}
*/

void LCD_Short(char row, char column, short value)
{

     char tmp[3],i=0;
     tmp[0]=value/100;
     tmp[1]=(value%100)/10;
     tmp[2]=value%10;
     Lcd_Out(row,column,"");
     while(!tmp[i]&&i<2)i++;
     while(i<3) {LCD_chr_cp(tmp[i]+ 0x30); i++; }
}

void main()
{

     Lcd_Init(); // Inicijalizacija LCDa
     Lcd_Cmd(_LCD_CLEAR); // obrisi displej
     Lcd_Cmd(_LCD_CURSOR_OFF); // ugasi kursor

     Delay_ms(500);

     // petlja
     for(i=0; i<127; i++) // Petlja
     {
        LCD_Short(2,1,i); // Upisi i u drugi red,prvo mesto
        Delay_ms(500);
        Lcd_Cmd(_LCD_CLEAR); // obrisi displej
     }
}

Re: Mikrokontroler + LCD-molim pomoc! 25.12.2012. u 21:36 · pre 168 meseci #10
Radi lepo i na taj nacin...broji do 127 i na kraju obrise displej.
Proucavacu ovo malo :)
Kad sam poceo da pisem,misleo sam da ce bito kod od 4 reda :)
Hvala.
Re: Mikrokontroler + LCD-molim pomoc! 25.12.2012. u 21:57 · pre 168 meseci #11
Razlika izmedju tvog i mog koda je u tome što u tvom deo

IntToStr(i, txt);
Lcd_Out(2,1,txt);

ispiše txt[7] na LCD, pa ako je broj 1 - ispiše 5 praznih mesta i onda 1(sedmi je null terminator zbog stringa) ,dok moj ispiše odmah 1

to je zato što IntToStr popunjava txt sa brojem sa desno na levo pa ostatak niza popuni praznim mestom.
A to zna da smara,jer ako treba npr pre broja da se ispiše string od 12 slova pa onda broj sa 2 cifre moraš prvo da ispišeš broj
pa onda reč od početka. Malo nezgrapno objašnjeno ali nadam se da shvataš šta hoću reći....

Pozdrav
Re: Mikrokontroler + LCD-molim pomoc! 25.12.2012. u 22:24 · pre 168 meseci #12
Da,pokusao sam da menjam tu sedmicu,ali tad kod nece da radi,odnosno radi ali brljavi neke heroglife.
Aj jos jedno pitanje.Probao sam da napravim da broji unazad od recimo 100 do 0,medjutim nece da radi,kad sam koristio i-- dobio sam da recimo krene od 0 prema minusu odnosno u negativne brojeve,bilo sta drugo da probam nece da radi,prazan displej.
Re: Mikrokontroler + LCD-molim pomoc! 25.12.2012. u 22:29 · pre 168 meseci #13
Pa samo izmeniš for petlju
Code:


     for(i=100; i>=0; i--) // Petlja
     {
        LCD_Short(2,1,i); // Upisi i u drugi red,prvo mesto
        Delay_ms(500);
        Lcd_Cmd(_LCD_CLEAR); // obrisi displej
     }



Pozdrav
Re: Mikrokontroler + LCD-molim pomoc! 26.12.2012. u 18:15 · pre 168 meseci #16
Za brojeve do 255 koristi short promenljivu,onda je txt[4],t.j. imas 4 prazna mesta
Re: Mikrokontroler + LCD-molim pomoc! 23.01.2013. u 12:20 · pre 167 meseci #17
Sta koristis od biblioteka?

Uvukao sam xlcd.h i kada kompajliram tvoj kod izbaci mi problem na "sbit LCD_RS at RB4_bit;" pa sve redom dalje.

Ako bi mogao da mi posaljes potrebne fajlove da bi radio sa LCD-om.
Re: Mikrokontroler + LCD-molim pomoc! 23.01.2013. u 12:41 · pre 167 meseci #18
Citat:
MirkoDamnjanovic: 
Uvukao sam xlcd.h i kada kompajliram tvoj kod izbaci mi problem na "sbit LCD_RS at RB4_bit;" pa sve redom dalje.


sbit ... je MikroC lelemudija (nisu ga oni izmislili, sbit sluzi za definisanje adrese bitova jos iz vremena 8051 ali u PIC svetu mislim da samo mikroC koristi sbit) a mikroC ima svoje interne zatvorene biblioteke. Ti ako si uvlacio xlcd.h bice da koristis neki microchip kompajler, oni ne koriste sbit, i sa lcd-om rade drugacije
Potpis
arhimed
http://www.mysql.rs/ | http://elco.crsndoo.com/
Re: Mikrokontroler + LCD-molim pomoc! 23.01.2013. u 13:20 · pre 167 meseci #19
Aha znaci tako. Ceo dan sam izgubio pokusavajuci da napisem bilo sta na LCD i nista. Nadjem neki primer da se uvuce xlcd.h (prekopirao sam ga iz xc8 direktorijuma u aplikaciju) i prijavlje mi greske na bilo kom pozivanju metoda.

Plz ako znas neki sajt sa primerom koji ce da radi na xc8 lite compileru.
Odgovori
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme