Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Mikrokontroler i LCD

[es] :: Elektronika :: Mikrokontroleri :: Mikrokontroler i LCD

Strane: < .. 1 2 3

[ Pregleda: 15216 | Odgovora: 53 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

conver
Milos Milutinovic
Paracin

Član broj: 226436
Poruke: 112
79.101.80.*



+1 Profil

icon Re: Mikrokontroler i LCD24.07.2009. u 21:40 - pre 178 meseci
a paj sad ovo sto sam uradio:

void MainMenuFunction ()
{
Lcd_Out(1,1,MeniMika);

while (1)
{

if (MPC=0 && Button(&PORTE, RE2, 1, 1))
{
MPC =1;
Delay_ms(600);
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out (1,1,MeniLaza);
}
if (MPC=1 && Button(&PORTE,RE2,1,0))
{
MPC=2;
}
if (MPC=2 && Button(&PORTE, RE2, 1, 1))
{
MPC=3;
Delay_ms(600);
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out (1,1,MeniPera);
}
if (MPC=3 && Button(&PORTE,RE2,1,0))
{
MPC = 4;
}
if (MPC=4 && Button(&PORTE,RE2,1,1))
{
MPC=5;
Delay_ms(600);
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out (1,1,MeniAca);
}
if (MPC=5 && Button(&PORTE,RE2,1,0))
{
MPC=0;
Delay_ms(600);
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out (1,1,MeniMika);
}
}
}

samo sto ni ovo ne pije vodu.. jer mi while uslov proverava to beskonacno puta u krug pa mi posle dovodjena 1 na RE2, prebaci na sledece stanje (sa Mike na peru :) ) ali posle 600ms vrati me na Miku...
Razbijam glavu celo popodne kako da napisem ovaj meni!
 
Odgovor na temu

rsinisa
Siniša Radanočević
Smederevo

Član broj: 2716
Poruke: 1586
93.86.139.*



+321 Profil

icon Re: Mikrokontroler i LCD25.07.2009. u 12:12 - pre 178 meseci
Ajde probaj da objasniš šta ti je ideja, koji je cilj, šta tačno hoćeš da postigneš, možda grešiš u pristupu problemu.

Pozdrav.
Sinisha
 
Odgovor na temu

conver
Milos Milutinovic
Paracin

Član broj: 226436
Poruke: 112
212.200.222.*



+1 Profil

icon Re: Mikrokontroler i LCD25.07.2009. u 17:07 - pre 178 meseci
Pa napisao sam na prosloj strani... :) cak sam i kod sa proteusovim fajlom okacio u zip-u!
Hocu da napravim klasican meni sa tri tastera! Levo , Desno i Potvrdni (enter) taster! Negde gresim uporno...
Imam solidnog iskustva u programiranju aplikacija za racunar u C-u ali u MikroC-u za mikrokontrolere i nemam, tako da ne izvaljujem gresku!

Dakle LEVO (RE1 = 1), DESNO (RE2 = 1), i POTVRDNI taster (RE0 = 1)
Hvala! ;)
 
Odgovor na temu

rsinisa
Siniša Radanočević
Smederevo

Član broj: 2716
Poruke: 1586
93.86.139.*



+321 Profil

icon Re: Mikrokontroler i LCD25.07.2009. u 22:08 - pre 178 meseci
Ja bih to ovako napravio (pošto ne znam C, napisaću opisno):
definisao bih promenljivu koaj se zove "meni" i dodelio joj neku početnu vrednost u delu za inicijalizaciju zavisno od toga koja treba da bude prva opcija menija.
Napravio bih potprogram koji bi se zvao "ispis" koji bi na displeju ispisivo tekst u zavisnosti od stanja promenljive "meni".

potprogram
ispis:
if meni=1 piši "Mika"
if meni=2 piši "Pera"
if meni=3 piši "Laza"
return

inicijalizacija:
meni=1
gosub ispis

glavna_petlja:
da li je pritisnut neki taster?
ako ne, idi na "glavna petlja"

ako je pritisnut taster "meni levo" i meni > 1 onda smanji meni za 1
ako je pritisnut taster "meni desno" i meni < 3 onda uvećaj meni za 1
ako je pritisnut taster "meni izbor" radi to i to
gosub ispis
goto glavna_petlja

izbor:
.....
.....



To bi bilo otprilike to s tim da verovatno treba da se ispiše nešto novo ako se pritisne "meni izbor" tako da to treba prilagoditi.
Takodje u zavisnosti od tvojih planova možda je dobro na napišeš program kao tzv. "state machine" jer imaš više opcija menija, a možda imaš potrebe i za podmenijima.

Pozdrav.
Sinisha

 
Odgovor na temu

barum
Bojan Radosavljevic

Član broj: 52522
Poruke: 418
92.60.233.*



+1 Profil

icon Re: Mikrokontroler i LCD25.07.2009. u 22:43 - pre 178 meseci
Citat:
conver: a paj sad ovo sto sam uradio:

...

samo sto ni ovo ne pije vodu.. jer mi while uslov proverava to beskonacno puta u krug pa mi posle dovodjena 1 na RE2, prebaci na sledece stanje (sa Mike na peru :) ) ali posle 600ms vrati me na Miku...
Razbijam glavu celo popodne kako da napisem ovaj meni!


Čiju glavu kad svuda imaš jedan znak jednako umesto dva?
 
Odgovor na temu

conver
Milos Milutinovic
Paracin

Član broj: 226436
Poruke: 112
212.200.222.*



+1 Profil

icon Re: Mikrokontroler i LCD25.07.2009. u 23:24 - pre 178 meseci
jedno ili dva znaka =, mikroCpro, sam prepozna i iskompajlira ga kako valja!
Problem je sto mi meni preskace, a ja ne znam zasto!
Danas sam malo konsultovao sinisu pa sam nesto ispravio ali ne mnogo:

Evo:

int MPC=0; //Brojac (MPC = MenuPositionCounter)

char MeniMika[] = " <- Mika ->";
char MeniLaza[] = " <- Laza ->";
char MeniPera[] = " <- Pera ->";
char MeniAca[] = " <- Aca ->";



void MainMenuFunction () //Funkcija za ispisivanje teksta u zavisnosti od vrednosti brojaca
{
if (MPC==0) //Ako je stanje brojaca = 0, ispisivace MIKA
{
Lcd_Cmd (_LCD_CLEAR);
Lcd_Out (1,1,MeniMika);
}
if (MPC==1) //Ako je stanje brojaca = 1, ispisivace LAZA
{
Lcd_Cmd (_LCD_CLEAR);
Lcd_Out (1,1,MeniLaza);
}
if (MPC==2) //Ako je stanje brojaca = 2, ispisivace PERA
{
Lcd_Cmd (_LCD_CLEAR);
Lcd_Out (1,1,MeniPera);
}
}

void GetKeyFunction() //funkcija za detekciju stanja na RE2
{
while(1) //Proverava stanja beskonacno puta
if(PORTE.RE2==1)
{
MPC = + 1; //Vrednost brojaca se uvecava za 1 ,onda kada se na RE2 dovede stanje 1
MainMenuFunction(); //Pozivanje funkcije za ispisivanje teksta menija sa predjasnjom vredoscu brojaca

}
else //u suprotnom kada nema stanja 1 (spustenog prekidaca na RE2)
{
MainMenuFunction(); // samo pozivam funkciju za ispisivanje pocetnog stanja menija... (kako je int MPC = 0, pocetna stavka menija mi je MIKA)
}
}



void main()
{
TRISB = 0;
PORTB = 0xFF;

ANSEL = 0;
ANSELH = 0;

TRISE=255;

Lcd_Init();

Lcd_Cmd(_LCD_CURSOR_OFF);

Lcd_Cmd(_LCD_CLEAR);


Lcd_Out(2,5,"Moj Meni :-)");


Delay_ms(2000);

Lcd_Cmd(_LCD_CLEAR);



GetKeyFunction();

}

I opet mi se ista stvar desava...
kao da mi se negde preklapaju komande...
prvo mi se polako pojavljuje s leva na desno, pa se zatim brise sa desna u levo i tako sve u krug.... ne kontam ga... ko bi rekao da je ovako tesko napisati meni
Ako nekog ne mrzi , nek ucita ovaj hex u pic u proteusu koji se nalazi u ovom zip-u zajedno sa kodom, skontace o cemu pricam... stvarno ne znam kako da resim ovo! :(

http://www.megaupload.com/?d=NIV2GFP3
 
Odgovor na temu

barum
Bojan Radosavljevic

Član broj: 52522
Poruke: 418
92.60.233.*



+1 Profil

icon Re: Mikrokontroler i LCD26.07.2009. u 00:26 - pre 178 meseci
Mi izgleda nemamo isti mikroC!
Ne mogu da pronađem projektni fajl a kada pokušam da iskompajliram kod ima preko trideset grešaka.

Ja koristim:

Citat:

mikroC, mikroElektronika C compiler
for Microchip PIC microcontrollers
Version: 8.1.0.0


Koja je vaša verzija?

Citat:
conver: jedno ili dva znaka =, mikroCpro, sam prepozna i iskompajlira ga kako valja!

Strašno!

Verovatno i ovo prepozna
Code:

MPC = +1;           //Vrednost brojaca se uvecava za 1

kao
Code:

MPC += 1;

 
Odgovor na temu

conver
Milos Milutinovic
Paracin

Član broj: 226436
Poruke: 112
212.200.222.*



+1 Profil

icon Re: Mikrokontroler i LCD26.07.2009. u 08:08 - pre 178 meseci
Izvinjavam se, ovo jeste stvarno moja greska:
MPC = +1;

mikroC PRO V2.50

ni ispravljanje ne pomaze...
 
Odgovor na temu

conver
Milos Milutinovic
Paracin

Član broj: 226436
Poruke: 112
212.200.222.*



+1 Profil

icon Re: Mikrokontroler i LCD26.07.2009. u 08:41 - pre 178 meseci
EVO JA GA NAPRAVIO!!!

Moze vam posluziti kao template ako nekad budete nesto pravili a zatreba vam meni

-------------------------------------------------------------------------------------
// LCD module connections
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;
// End LCD module connections

int MPC=0; //Brojac (MPC = MenuPositionCounter)

char MenuItem1[] = " <- MenuItem 1 ->";
char MenuItem2[] = " <- MenuItem 2 ->";
char MenuItem3[] = " <- MenuItem 3 ->";
char SubMenuItem[] = " < SubMenuItem >";

void MainMenuFunction ()
{

if (MPC==0)
{
Lcd_Cmd (_LCD_CLEAR);
Lcd_Out (1,1,MenuItem1);
}
if (MPC==1)
{
Lcd_Cmd (_LCD_CLEAR);
Lcd_Out (1,1,MenuItem2);
}
if (MPC==2)
{
Lcd_Cmd (_LCD_CLEAR);
Lcd_Out (1,1,MenuItem3);
}
}

void MoveRightFunction()
{
MPC==MPC++;
MainMenuFunction();
}
void MoveLeftFunction()
{
MPC==MPC--;
MainMenuFunction();
}
void EnterFunction()
{
if (MPC==0||1||2)
{
Lcd_Cmd (_LCD_CLEAR);
Lcd_Out (1,1,SubMenuItem);
}
}


void GetKeyFunction()
{
MainMenuFunction();
while (1)
{
if(PORTE.RE2==1)
{
Delay_ms(500);
MoveRightFunction();
}

if(PORTE.RE1==1)
{
Delay_ms(500);
MoveLeftFunction();
}
if(PORTE.RE0==1)
{
Delay_ms(500);
EnterFunction();
}
}

}



void main()
{
TRISB = 0;
PORTB = 0xFF;

ANSEL = 0;
ANSELH = 0;

TRISE=255;

Lcd_Init();

Lcd_Cmd(_LCD_CURSOR_OFF);

Lcd_Cmd(_LCD_CLEAR);


Lcd_Out(2,5,"Moj Meni :-)");
Lcd_Out(3,5,"My Menu :-)");


Delay_ms(2000);

Lcd_Cmd(_LCD_CLEAR);



GetKeyFunction();

}
---------------------------------------------------------------------------------------
 
Odgovor na temu

barum
Bojan Radosavljevic

Član broj: 52522
Poruke: 418
92.60.233.*



+1 Profil

icon Re: Mikrokontroler i LCD26.07.2009. u 11:01 - pre 178 meseci
Dobro je kad je proradilo.
Ja samo ne mogu da se načudim šta sve ovaj kompajler može da proguta:
Code:
MPC==MPC--;

Code:
if (MPC==0||1||2)

 
Odgovor na temu

vukboban
Boban Vukovic
PANCEVO

Član broj: 116735
Poruke: 250
195.252.79.*



+11 Profil

icon Re: Mikrokontroler i LCD26.07.2009. u 11:51 - pre 178 meseci
Ja koliko znam kad ispitujes neki uslov(if) onda ide dva znaka =,a kad se necemu dodeljuje neka vrednost onda jedan.
Trebalo bi MPC=MPC--; ili jednostavnije MPC--;
Mada mozda taj pro i moze to da radi,imam ga,ali jos uvek radim u obicnom mikroC.
Vazno je da kod radi!(meni licno je malo cudan,ali bitno je da sljaka)

 
Odgovor na temu

conver
Milos Milutinovic
Paracin

Član broj: 226436
Poruke: 112
212.200.222.*



+1 Profil

icon Re: Mikrokontroler i LCD26.07.2009. u 13:00 - pre 178 meseci
@barum

if (MPC==0||1||2)

sta je ovde lose napisano???

ovo jeste:
treba da bude:
MPC = MPC--;
 
Odgovor na temu

barum
Bojan Radosavljevic

Član broj: 52522
Poruke: 418
92.60.233.*



+1 Profil

icon Re: Mikrokontroler i LCD26.07.2009. u 22:14 - pre 178 meseci
Citat:
conver: @barum

if (MPC==0||1||2)

sta je ovde lose napisano???


To je tautologija.
Mislim da je pisac hteo da kaže:

Code:
if (  MPC==0  ||  MPC==1  ||  MPC==2  ) 
 
Odgovor na temu

conver
Milos Milutinovic
Paracin

Član broj: 226436
Poruke: 112
195.178.35.*



+1 Profil

icon Re: Mikrokontroler i LCD15.12.2009. u 19:21 - pre 173 meseci
Problem sa grafickim displejem i PIC-om!!! \

PIC 16F887 8Mhz

Povezao sam ovako:

// Glcd module connections
char GLCD_DataPort at PORTD;
sbit GLCD_CS1 at RB0_bit;
sbit GLCD_CS2 at RB1_bit;
sbit GLCD_RS at RB2_bit;
sbit GLCD_RW at RB3_bit;
sbit GLCD_EN at RB4_bit;
sbit GLCD_RST at RB5_bit;
sbit GLCD_CS1_Direction at TRISB0_bit;
sbit GLCD_CS2_Direction at TRISB1_bit;
sbit GLCD_RS_Direction at TRISB2_bit;
sbit GLCD_RW_Direction at TRISB3_bit;
sbit GLCD_EN_Direction at TRISB4_bit;
sbit GLCD_RST_Direction at TRISB5_bit;
// End Glcd module connections

dakle copy/paste iz Helpa za MikroCpro

kad iskompajliram, ubacim u proteus, izbaci mi gresku na lcd-u u vezi Busy Flag-a... ne kontam... kako da ga setujem off, pomoc ?
 
Odgovor na temu

[es] :: Elektronika :: Mikrokontroleri :: Mikrokontroler i LCD

Strane: < .. 1 2 3

[ Pregleda: 15216 | Odgovora: 53 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.