MikroC potreban kod

Rasprava o PIC mikrokontrolerima, PIC projekti i drugo vezano za PIC-eve...

Moderators: pedja089, stojke369, [eDo], trax

Post Reply
Enis24
Posts: 5
Joined: 21-12-2012, 16:11

MikroC potreban kod

Post by Enis24 »

Pozdrav raja !
Eh ovako, znaci poceo sam pomalo raditi sa ovim 7-segmentnim displejima, zanimljivo mi to nekako a i moze se napraviti dosta korisnih stvari.Eh sad, zadao sam "sebi" zadatak da multipleksiram 3 7-seg. disp i da mi ispisuju 0-999.Ali i ne ide bas.
Inace radim u MikroC-u i Proteusu.
Koristim PIC16F887.
Ovako sam to zamislio u Proteusu http://upload.slike.com/slike/UK9YO.jpg
Ako ima neko iskusniji u MikroC-u da malo objasni ili da preporuci neku literaturu.
Hvala unaprijed !
yt1nvs
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 286
Joined: 30-03-2009, 16:54

Re: MikroC potreban kod

Post by yt1nvs »

mislim da u samom (mikroC)u folderu examples imas tih primera,pogledaj sajt mikroelektronike ima i tamo.
vukboban
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 212
Joined: 05-12-2008, 17:49
Location: Pancevo

Re: MikroC potreban kod

Post by vukboban »

Sema je OK,daj kod,ili objasni sta te muci...
Enis24
Posts: 5
Joined: 21-12-2012, 16:11

Re: MikroC potreban kod

Post by Enis24 »

Ma muci me to sto ne znam, kako bih kod poceo.Nesto sam razmisljao da bih trebao staviti tri petlje da su zavisne jedna od druge, znaci kad se prva izvrsi da se druga uveca za jedan pa tako i treca.Hocu reci kad zavrsi od 0-9, da se onda na mjestu desetica pojavi jedan, pa kad opet 0-9 zavrsi da se na mjestu desetica pojavi 2 itd. Znaci treba mi od 1 do 999.
Al sad ne znam kako bih te petlje povezao da su zavisne jedna od druge.Naravno ovako sam ja mislio da bi moglo funkcionisati, al nisam siguran da li je to izvedivo.
Tu mi treba pomoc.
vukboban
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 212
Joined: 05-12-2008, 17:49
Location: Pancevo

Re: MikroC potreban kod

Post by vukboban »

To sto si ti zamislio nece moci tako.
Multipleks znaci da brzo palis i gasis sva tri displeja,tako da oku deluje da su svi stalno upaljeni.
To se radi na sledeci nacin:
Prvo na port D stavis vrednost koja odgovara prvoj cifri (recimo 0b0011000).
Onda na RA0 postavis log1,odnosno ukljucis tranzistor Q3 koji odgovara prvoj cifri.
Taj tranzistor radi neko vreme koje mora da bude dovoljno malo (recimo 10ms).
Onda ugasis taj tranzistor(dovedes log0 na RA0)
Zatim postavljas vrednost druge cifre na port D.
Onda palis Q2 (dovodis log1 na RA1),i njega pustis da radi 10ms,pa ga ugasis.
Postavis vrednost trece cifre na portD,palis Q1,radi 10ms,pa ga gasis.
Zatim sve ovo ponavljas,t.j. vracas se na korak 1
Jedna jako bitna stvar,multipleks se po pravilu radi sa tajmerom,NIKAKO se delay_ms! Namestis tajmer da broji 10ms,podesis da ti tajmer izazove interapt,u interaptu ugasis prethodni tranzistor,postavis vrednost na port D,i upalis sledeci tranzistor.
Kada izadjes iz interapta racunas koja je sledeca cifra koja treba da se prikaze ili radis bilo sta drugo...
Enis24
Posts: 5
Joined: 21-12-2012, 16:11

Re: MikroC potreban kod

Post by Enis24 »

Hvala na objasnjenju, znaci ipak ovo sto sam ja zamislio nije izvedivo.Sad mi je malo jasnije.
Kako bi to izgledalo u kodu, da malo pohvatam strukturu tog multipleksiranja?
vukboban
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 212
Joined: 05-12-2008, 17:49
Location: Pancevo

Re: MikroC potreban kod

Post by vukboban »

Code: Select all

unsigned short y[]={0,0,0};
unsigned short x[]={95,65,47,109,113,124,126,73,127,125};
unsigned short z[]={1,2,4};
unsigned short n=0;

void interrupt(){
if(TMR0IF_bit){
PORTD=x[y[n]];
PORTA=z[n];
n++;
if(n==2) n=0;
TMR0IF_bit=0;
}
}
Pre ovoga postavi tajmer0 da broji 10ms,i omoguci mu da izazove interapt.
Ovi brojevi pod x su takvi jer sam ja tako vezivao displeje,to moras da promenis prema tvom nacinu vezivanja.

y[0],y[1] i y[2] su cifre tog tvog broja koje racunas negde u glavnom programu.
Enis24
Posts: 5
Joined: 21-12-2012, 16:11

Re: MikroC potreban kod

Post by Enis24 »

Prije svega hvala na trudu, sto si objasnio neke stvari, to se cijeni.
Ovu strukturu sam nesto i shvatio, al posto sam tek poceo raditi sa ovim, znaci nemam previse iskustva, nekako sam se izgubio u ovim tvojim x,y,z.Ako mozes objasniti, ili jos bolje staviti cijeli program pa da malo analiziram to multipleksiranje.
Vidim da nisam bio ni blizu sa onim svojim nacinom.Znaci nista od petlji.Bas me zanima kako bi to na kraju izgledalo.
Hvala !
vukboban
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 212
Joined: 05-12-2008, 17:49
Location: Pancevo

Re: MikroC potreban kod

Post by vukboban »

Code: Select all

unsigned short y[]={0,0,0};
unsigned short x[]={95,65,47,109,113,124,126,73,127,125};
unsigned short z[]={1,2,4};
unsigned short n=0;
unsigned int broj=752;//ovde stavis neki broj koji hoces da ti prikaze 
void interrupt(){
if(TMR0IF_bit){
PORTD=x[y[n]];
PORTA=z[n];
n++;
if(n==2) n=0;
TMR0IF_bit=0;
}
}
void main() {
TRISA=0;
TRISD=0;
CMCON=7;
ADCON1=142;
OPTION_REG=4;//ova podesavanja su za 16F877A,za tvoj pogledaj u datasheet
INTCON=0;
while(1){
y[0]=broj/100;
y[1]=(broj-y[0]*100)/10;
y[2]=broj-y[0]*100-y[1]*10;
//ovde radis nesto drugo,npr menjas broj koji prikazujes,uvecavas ga,smanjujes...
}
}
Enis24
Posts: 5
Joined: 21-12-2012, 16:11

Re: MikroC potreban kod

Post by Enis24 »

Znaci ovo je sve sto mi treba da bi to funkcioniralo sto se tice multipleksa?
Uglavnom hvala na pomoci !
Post Reply