Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 16 odgovora
  • 5.108 pregleda

Najnovija ↓

Problem sa 2x16 LCD displejom! 23.02.2014. u 18:31 · pre 154 meseca #1
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:

Re: Problem sa 2x16 LCD displejom! 24.02.2014. u 08:44 · pre 154 meseca #2
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.
Potpis
www.micromatic.hr
Re: Problem sa 2x16 LCD displejom! 24.02.2014. u 12:50 · pre 154 meseca #4
A najbolje na ME forumu, tamo najbolje znaju kako "rade" biblioteke za njihove kompajlere.
Potpis
--
Make no mistake between my personality and my attitude.
My personality is who I am.
My attitude depends on who you are.
Re: Problem sa 2x16 LCD displejom! 24.02.2014. u 20:45 · pre 154 meseca #6
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
Re: Problem sa 2x16 LCD displejom! 25.02.2014. u 11:47 · pre 154 meseca #7
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).
Potpis
Site about Software Defined Radio – SDR
http://yu3ma.net/
https://github.com/yu3ma
On-line LM317 kalkulator
Re: Problem sa 2x16 LCD displejom! 25.02.2014. u 11:53 · pre 154 meseca #8
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
Potpis
arhimed
http://www.mysql.rs/ | http://elco.crsndoo.com/
Re: Problem sa 2x16 LCD displejom! 27.02.2014. u 22:08 · pre 154 meseca #9
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
Re: Problem sa 2x16 LCD displejom! 28.02.2014. u 15:41 · pre 154 meseca #10
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
Re: Problem sa 2x16 LCD displejom! 01.03.2014. u 12:53 · pre 154 meseca #11
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
Re: Problem sa 2x16 LCD displejom! 01.03.2014. u 14:24 · pre 154 meseca #14
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.
Potpis
gorankg
Re: Problem sa 2x16 LCD displejom! 01.03.2014. u 14:36 · pre 154 meseca #15
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;
Potpis
gorankg
Re: Problem sa 2x16 LCD displejom! 02.03.2014. u 02:20 · pre 154 meseca #16
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
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme