[ Lazoman @ 23.02.2014. 17:31 ] @
Imam problem sa prikazivanjem temperature merene LM35 senzorom i PIC16F877, gledao sam bas dosta tutoriala vezanih za 2x16 LCD displej, video bioblioteku koja je ugradjena u MikroC za LCD, ali i dalje mi nisu jasni ti 4bitni i 8bitni modovi ra Hda displeja, odradjena je AD konverzija, ispravno se ispisuju brojevi srazmerni merenoj temperaturi npr. kad ih posaljem na pinove PORT-a B, ali mi nije jasno kako njih da prikazem na displeju u 4bitnom modu pomocu ASCII tabele, ako je 4bita 16 kombinacija a sama ASCII tabela zahteva mnogo vise bita za prikazivanje brojeva npr broj 0 = 0x48, smatram da bi mozda trebao da koristim 8bitni mod koji je mozda slican 4bitnom,ima vise kombinacija, ali eto nisam pametan vise. Mogu reci da sam početnik u svetu mikrokontrolera pa bi mi svaka pomoc dobrodosla :) Hvala

Ovo je šema:

[ micromatic @ 24.02.2014. 07:44 ] @
Prvo je potrebno inicijalizirati LCD odnosno reći mu dali radiš u 4 ili 8 bitnom modu.

ASCII kod koji šalješ je i u jednom i u drugom modu 8 bitni ali mu u 4 bitnom modu 8 bitni kod šalješ u dva koraka prvo gornji nibl (4 bita) a zatim donjih 4 bita (možda je i obrnuto nisam sad provjeravao datasheet ali ti to svakako preporučam.
[ shpiki @ 24.02.2014. 11:12 ] @
http://www.8051projects.net/lcd-interfacing/index.php

http://codeandlife.com/2012/02...t-lcd-interfacing-with-attiny/

http://www.microcontroller-pro...ng-16x2-lcd-in-4-bit-mode.html
[ ZAS011 @ 24.02.2014. 11:50 ] @
A najbolje na ME forumu, tamo najbolje znaju kako "rade" biblioteke za njihove kompajlere.
[ Lazoman @ 24.02.2014. 13:09 ] @
Hvala na pomoci! :)
[ vukboban @ 24.02.2014. 19:45 ] @
Prvo,nigde na semi ne vidim da si vezao neiskoriscene pinove(D0-D3) na GND,a ni RW ni Vss nisu spojeni na GND.
Drugo,ako si gledao primer iz mikroC za LCD biblioteku video si da ti saljes tekst koji se onda prikaze na LCD,recimo:
Code:
Lcd_Out(1,1,"tekst");
ili :

Code:
Lcd_Out(1,1,txt);
gde je txt neka promenljiva tipa char.Znaci konvertujes svoju promenljivu(tipa short,int,long,float) u tekst odgovarajucom komandom(ShortToStr,IntToStr,LongToStr,FloatToStr),pa zatim taj tekst saljes na LCD
[ mikikg @ 25.02.2014. 10:47 ] @
Neiskorisceni pinovi D0-D3 nije moranje da se spoje na GND, moze da prodje i kada "vise" (meni tako radi u dosta aplikacija), mada je svakako sigurnije da se spoje, mozda taj neki model LCD-a nema pull-up/down otpornike.

BTW: Vdd je pozitivno napajanje (+5V) a Vss negativno. Ne vidi se iz shema sta je sta ali samo da skrenem paznju …

Vezano za 4/8 bit mode, u sustini je isto (slicno) ali se razlikuje procedura za inicijalizaciju jednog i drugog moda. Posle inicijalizacije se kod 8bitnog moda salje podatak iz jednog "takta" a kod 4bitnog iz dva, po pola reci (gornji i donji nible).
[ bogdan.kecman @ 25.02.2014. 10:53 ] @
po datasheet-u mora da se spoje fizicki na gnd, sad ima proizvodjaca kod
kojih ne mora ali se desilo vise nego jednom da "radi na stolu a ne radi
u produkciji" kada ih ostavis da vise, tako da, spojis na gnd i ne
mislis, nije da ce potrositi neki externi prostor na pcb-u
[ Lazoman @ 27.02.2014. 21:08 ] @
Povezao sam ga sad u 8bitni mod znaci sve pinove LCD-a D0-D7 sa RB0-RB7, ono sto me zanima jeste kako inicijalizovati 8 bitni mod? i kako kod 4bitnog moda, slati 4 niža bita i 4 viša preko 4bitne magistrale, tj kako ih razdvojiti, da li je mozda dobra ideja shiftovanje? Pozz
[ vukboban @ 28.02.2014. 14:41 ] @
Ne razumem zasto se patis sa tim,kad sve to vec imas ugradjeno u biblioteci za LCD.
E sad ako bas hoces da ne koristis tu biblioteku,onda uzmes datasheet od displeja,i sve se tamo vidi,i 8bit mode,i 4bit mode,samo mislim da ti je mnogo lakse da koristis biblioteku
[ Lazoman @ 01.03.2014. 11:53 ] @
Ovo je kod:

// Lcd pinout settings
sbit LCD_RS at RC0_bit;
sbit LCD_EN at RC1_bit;
sbit LCD_D7 at RB3_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D4 at RB0_bit;

// Pin direction
sbit LCD_RS_Direction at TRISC0_bit;
sbit LCD_EN_Direction at TRISC1_bit;
sbit LCD_D7_Direction at TRISB3_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D4_Direction at TRISB0_bit;

unsigned short temp;
unsigned char txt;
void main() {
Lcd_Init();
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);
TRISA = 0xFF;
TRISB = 0x00;
TRISC = 0x00;
ADCON0 = 0x01;
ADCON1 = 0xC8;
while(1){
temp=adc_read(0)*0.001/0.01;
ShortToStr(temp, txt);
Lcd_Out(1, 1, txt);
}
}

Na displeju ne dobijam nikakvu vrednost, ispravite me ako pogresno razmisljam sto se tice kodiranja...ADC konverzija je valjana, problem je samo te vrednosti prikazati na displej u 4bitnom modu.

Ovo je sema
[ goran_68 @ 01.03.2014. 12:10 ] @
Nisi dobro vezao pinove za napajanje LCD. Pogledaj gde ti je VDD!?
Probaj prvo kod sa njihovog sajta da vidis da li ti uopste radi hardver:

http://www.mikroe.com/download...c/pro/pic/help/lcd_library.htm
[ Lazoman @ 01.03.2014. 12:28 ] @
U pravu si zamenio sam Vdd i Vss, prespojio sam sve, kod prepravio i sada sema izgleda ovako, http://i58.tinypic.com/ngp05t.jpg

Probao sam to njihovo sa sajta i radi kada koristim Lcd_Out(1, 1, "tekst"); ali sto se tice ShortToStr konverzije to ne radi
[ goran_68 @ 01.03.2014. 13:24 ] @
Moraš da dodaš neko kašnjenje u while petlji:

Code:

while(1)
{
    temp=adc_read(0)*0.001/0.01;
    ShortToStr(temp, txt);
    Lcd_Out(1, 1, txt);
    delay_ms(.....);
}



Pogledaj njihovu funkciju delay_ms();
Ne koristim mikroc pa ne znam kako izgleda.
[ goran_68 @ 01.03.2014. 13:36 ] @
Takođe:

Code:

unsigned short temp;
temp=adc_read(0)*0.001/0.01;
ShortToStr(temp, txt);


temp ti je unsigned short a ti imaš neko množenje pa deljenje koje baš ne razumem. Pogledaj tipove podataka u jeziku C.

Za početak (da proveriš samo ispis temp na LCD) pokušaj da razultat AD konverzije podeliš nekom celobrojnom vrednosću pa to šalji na LCD. Recimo:

Code:

temp=adc_read(0) / 8;
[ vukboban @ 02.03.2014. 01:20 ] @
Pogledaj malo help za ShortToStr,promenljiva txt mora da se definise kao
Code:
char txt[5] 

ako je promenljiva tipa short.Za promenljivu tipa int se pise
Code:
char txt[7] 
itd.
Znaci za svaku vrstu promenljive moras da definises tacno odredjeni broj karaktera za txt.
Takodje,ovo sto ti je rekao goran,ne mozes short da delis i mnozis sa float!
probaj ovakav kod:
Code:
// Lcd pinout settings
sbit LCD_RS at RC0_bit;
sbit LCD_EN at RC1_bit;
sbit LCD_D7 at RB3_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D4 at RB0_bit;

// Pin direction
sbit LCD_RS_Direction at TRISC0_bit;
sbit LCD_EN_Direction at TRISC1_bit;
sbit LCD_D7_Direction at TRISB3_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D4_Direction at TRISB0_bit;

unsigned short temp;
 char txt[5];
void main() {
Lcd_Init();
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);
TRISA = 0xFF;
TRISB = 0x00;
TRISC = 0x00;
ADCON0 = 0x01;
ADCON1 = 0xC8;
while(1){
temp=adc_read(0);
ShortToStr(temp, txt);
Lcd_Out(1, 1, txt);
}
}

ili samo prosto
Code:
temp=345;
,pa to konvertuj u tekst,i posalji na lcd
[ Lazoman @ 02.03.2014. 10:54 ] @
Proradilo je, hvala na pomoci svima! :)