MikroC kod

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

Moderators: pedja089, stojke369, [eDo], trax

Post Reply
Solid Snake
Posts: 6
Joined: 18-03-2010, 09:19

MikroC kod

Post by Solid Snake »

Bok, molio bih za malu pomoc oko jednog zadatka, za koji sam ja dosta posla uradio, ali uvijek negdje pogrijesim, tako da ne dobijem rezultat koji hocu.Zadatak je slijedeci:

Tastaturu spojiti, segmente displeja na dekoder, ulaze čipa
A,B,C,D na port A mikrokontrolera, RA0=A...

Program skenira tastaturu, rezultat se pohranjuje na PORTA, dekoder
pretvara BCD-8421 kod u kod pogodan za ispis na 7-seg displej.
Zajednička anoda je spojena na 5V.

ZADATAK JE NAPRAVITI SIMULACIJSKI MODEL I NAPISATI PROGRAM, TESTIRATI ISPRAVNOST
PROGRAMA NA MODELU. KORISTITI DATASHEET 74LS47N.

Promijeniti dekodiranje u programu tako da se, kad nijedna tipka nije pritisnuta,
na displeju ne ispisuje ništa, a kad se pritisne 0 da se 0 i ispiše.

Ja sam u Proteusu poslozio dijelove, to nije problem, ali kod me muci.Evo dokle sam stigao:
http://hotfile.com/dl/37235705/4ea3c9c/" onclick="window.open(this.href);return false; ... d.txt.html

pa ako mi mozete ikako pomoci, bio bih vam stvarno zahvalan.Hvala jos jednom
User avatar
scroller
Penjem se :)
Penjem se :)
Posts: 77
Joined: 26-09-2009, 19:47

Re: MikroC kod

Post by scroller »

1. Popravi link (stavi ga u code blok)
2. Koji se PIC koristi u aplikaciji?
abc
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 498
Joined: 08-03-2007, 20:19
Location: Hrvatska

Re: MikroC kod

Post by abc »

Evo Solid Snake kod.

Code: Select all

unsigned short keyscan(); 

 

void main() { 

TRISB.F1=1; 

TRISB.F2=1; 

TRISB.F3=1;   // kolone 1,2,3 ulazni pinovi 

TRISB.F4=0; 

TRISB.F5=0; 

TRISB.F6=0; 

TRISB.F7=0;   // redovi A,B,C,D izlazni pinovi 

PORTB.F4=0; 

PORTB.F5=0; 

PORTB.F6=0; 

PORTB.F7=0;  // redovi su inicijalno 0 

TRISA=0;      // portA je izlazni 

PORTA=0;      // portA je inicijalno 0 

 

// beskonaèna petlja 

do { 

   PORTA=keyscan(); 

   } while(1); 

} 

 

// funkcija keyscan 

unsigned short keyscan() { 

unsigned short i; 

PORTB.F4=0;    // ispitujemo red A na RB4 

for (i=1; i<4; i++) { 

if(Button(&PORTB,i,1,0)) {PORTB.F4=1; return i;} 

} 

PORTB.F4=1; 

PORTB.F5=0;    // ispitujemo red B na RB5 

for (i=1; i<4; i++) { 

if(Button(&PORTB,i,1,0)) {PORTB.F5=1; return i+3;} 

} 

PORTB.F5=1; 

PORTB.F6=0;    // ispitujemo red C na RB6 

for (i=1; i<4; i++) { 

if(Button(&PORTB,i,1,0)) {PORTB.F6=1; return i+6;} 

} 

PORTB.F6=1; 

PORTB.F7=0;    // ispitujemo red D na RB7 

for (i=1; i<4; i++) { 

if(Button(&PORTB,i,1,0)) {PORTB.F7=1; return i+9;} 

} 

PORTB.F7=1; 

} 
abc
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 498
Joined: 08-03-2007, 20:19
Location: Hrvatska

Re: MikroC kod

Post by abc »

Mi koji neradimo sa tim C kompajlerom tesko da ti mozemo nesto pomoci jer koristis funkciju Button za koju ne znamo sta radi.

Pretpostavljam da skeniras tatstaturu i odmah je dekodiras u znak koji ocitavas.
Imas dosta primjera na netu, vecinom se radi sa dvije funkcije jedna skenira tastaturu dok druga dekodira koji je broj ili slovo pritisnuto.
Solid Snake
Posts: 6
Joined: 18-03-2010, 09:19

Re: MikroC kod

Post by Solid Snake »

abc wrote:Mi koji neradimo sa tim C kompajlerom tesko da ti mozemo nesto pomoci jer koristis funkciju Button za koju ne znamo sta radi.

Pretpostavljam da skeniras tatstaturu i odmah je dekodiras u znak koji ocitavas.
Imas dosta primjera na netu, vecinom se radi sa dvije funkcije jedna skenira tastaturu dok druga dekodira koji je broj ili slovo pritisnuto.
DA li bi ste mi mogli jos malo pomoci, jer sam stvarno zapeo na ovom problemu, pa ako me mozete malo uputiti na neke primjere ili savjete :oops: ...
User avatar
scroller
Penjem se :)
Penjem se :)
Posts: 77
Joined: 26-09-2009, 19:47

Re: MikroC kod

Post by scroller »

Eo' ti ga na! :lol:
Attachments
tastatura.zip
keypad - 16f84 - 74ls47 - 7segCA
(45.73 KiB) Downloaded 201 times
Solid Snake
Posts: 6
Joined: 18-03-2010, 09:19

Re: MikroC kod

Post by Solid Snake »

Hvala ti puno, sad sam uvidio gdje sam pogrijesio, nikad se ne bi sjetio toga :? .Hvala ti puno :D
abc
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 498
Joined: 08-03-2007, 20:19
Location: Hrvatska

Re: MikroC kod

Post by abc »

Ajde da malo analiziramo taj tvoj ili vec ciji kod jer mi nije bas najjasnije kako radi:

******************************************************************
PORTB.F4=0; // ispitujemo red A na RB4
for (i=1; i<4; i++) {
if(Button(&PORTB,i,1,0)) {PORTB.F4=1; return i;}
}
********************************************************************

Da pocnemo , na pocetku si inicijalizovao PORTB.F4=0; i sad opet na pocetku svake petlje to radis. Kako mozes da ispitas matricnu tastaturu ako nemas na ni jednom izlaznom pinu napon? , PORTB.F4=0; portb4 ti je na LO upisao si 0 u njega. Kako ces da kad pritisnes tipku taj napon detektujes na nekom od tri ulazna pina? kad nemas nista na ulazu tastature.

Ulazimo u petlju, for petlja poveca varijablu do 1<4 i ispada van jer "if" nece nikada biti izvrsena jer pretpostavljam funkcija buton za koju neznamo ni sta radi ne moze detektovati napon ni na jednom ulaznom pinu jer ga ne moze biti i ako pritisnes neku tipku jer napona nema ni na jednom od 4 pina matricne tastature.

*********************************************************************
PORTB.F4=1;
PORTB.F5=0; // ispitujemo red B na RB5
for (i=1; i<4; i++) {
if(Button(&PORTB,i,1,0)) {PORTB.F5=1; return i+3;}
}
***********************************************************************

Ovjde vec napredujes PORTB.F4=1; ali u pogresnom trenutku rekao bih.


***********************************************************************************************
PORTB.F4=1;
PORTB.F5=0; // ispitujemo red B na RB5
for (i=1; i<4; i++) {
if(Button(&PORTB,i,1,0)) {PORTB.F5=1; return i+3;}
}
PORTB.F5=1;
PORTB.F6=0; // ispitujemo red C na RB6
for (i=1; i<4; i++) {
if(Button(&PORTB,i,1,0)) {PORTB.F6=1; return i+6;}
}
PORTB.F6=1;
PORTB.F7=0; // ispitujemo red D na RB7
for (i=1; i<4; i++) {
if(Button(&PORTB,i,1,0)) {PORTB.F7=1; return i+9;}
}
PORTB.F7=1;
}
**********************************************************************************

Kad dodjes do kraja podignes na visoki nivo sve pinove koji su setovani kao izlazni.
Sada su ti RB4, RB5,RB6,RB7 na visokom nivou.
Sada ulazi drugi puta u petlju i gasis RB4 a ostala tri pina su ti na visokom nivou, Razmisli sam da li to moze da radi.


Onaj drugi kod koji je poslao neko drugi malo drugacije izgleda ali ima gresku
u jednoj if(Button(&PORTB,i,1,0))..... umjesti i ima upisano 2.

Meni se uopste nesvidja ideja kako se utvrdjuje tipka koja je pritisnuta, seljaci kad broje krave onda broje glave ili citave krave da bi doznali broj krava ovi programi mi lice da broje sise pa onda utvrdjuju broj krava iz broja sisa, bez uvrede, rekao sam ima na netu jednostavnijih i boljih rjesenja kako se to radi ali kako se ceka sve servirano gotovo, nastaju problemi :D .
Solid Snake
Posts: 6
Joined: 18-03-2010, 09:19

Re: MikroC kod

Post by Solid Snake »

Vjeruj mi nije mi bilo ni na kraj pameti cekati tuđi kod, jer ja sam se stvarno potrudio koliko mogu sa mojim znanjem, ali vidio sam ja da nesto ne stima kod koda, jer sam tek nedavno poceo u njemu raditi :cry:
User avatar
scroller
Penjem se :)
Penjem se :)
Posts: 77
Joined: 26-09-2009, 19:47

Re: MikroC kod

Post by scroller »

abc wrote:Onaj drugi kod koji je poslao neko drugi malo drugacije izgleda ali ima gresku
u jednoj if(Button(&PORTB,i,1,0))..... umjesti i ima upisano 2.
Ta dvica nam govori da naćemo obraćati pažnju na znakove "#" i "*" , znači da ćemo se u zadnjem redu tastature usredotočiti samo na nulu "0" .

---------

A što se tiče funkcije Button:

Prototip: unsigned short Button(unsigned short *port, unsigned short pin, unsigned short time, unsigned short active_state);

Citiram:
Function eliminates the influence of contact flickering upon pressing a button (debouncing).

Parameter port specifies the location of the button; parameter pin is the pin number on designated port and goes from 0..7; parameter time is a debounce period in milliseconds; parameter active_state can be either 0 or 1, and it determines if the button is active upon logical zero or logical one.
abc
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 498
Joined: 08-03-2007, 20:19
Location: Hrvatska

Re: MikroC kod

Post by abc »

@Solid Snake , probaj onaj kod sto je postao scroller.
User avatar
scroller
Penjem se :)
Penjem se :)
Posts: 77
Joined: 26-09-2009, 19:47

Re: MikroC kod

Post by scroller »

:shock: :shock: Scooliraj se... :)
Pa probao je, vidiš da se zahvalio poslije tog posta gdje sam stavio kod! :roll:
abc
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 498
Joined: 08-03-2007, 20:19
Location: Hrvatska

Re: MikroC kod

Post by abc »

scroller wrote::shock: :shock: Scooliraj se... :)
Pa probao je, vidiš da se zahvalio poslije tog posta gdje sam stavio kod! :roll:
Ajde kad ste rijesili problem da ja objasnim kako to rjesavam. 4 pina koristim ujedno i za pogon 7 segmentnog displeja skeniranje tastature. Kad ocitam portove pozovem samo funkciju za dekodiranje sta je pritisnuto. Vrlo jednostavno.

if(PORTD>15){



if(tmr3_brojac>20){ //obrada tastature

tmr3_brojac=0;





nova_vrednost=PORTD & 0b11110000;

if(stara_vrednost != nova_vrednost){

stara_vrednost=nova_vrednost;

KeyPressed=0;



}

if(stara_vrednost == nova_vrednost){





temp2=PORTC >>4;

KeyPressed=nova_vrednost | temp2;



}



}

}



char DecodeKey(char keycode)

{

switch(keycode)

{



case 33:

return(0);

case 40:

return(2);

case 36:

return(5);

case 34:

return(8);



case 17:

return(100);

case 72:

return(3);

case 68:

return(6);

case 66:

return(9);







case 65:

return(101);

case 24:

return(1);

case 20:

return(4);

case 18:

return(7);



default:

break;

}

return(21);

}
User avatar
scroller
Penjem se :)
Penjem se :)
Posts: 77
Joined: 26-09-2009, 19:47

Re: MikroC kod

Post by scroller »

OK

A što si ga ovoliko raširio brate ?! :ohno: :lol:
i daj kad pišeš kod, stavi ga u Code block koji je i namjenjen za to ! :?
abc
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 498
Joined: 08-03-2007, 20:19
Location: Hrvatska

Re: MikroC kod

Post by abc »

scroller wrote:OK

A što si ga ovoliko raširio brate ?! :ohno: :lol:
i daj kad pišeš kod, stavi ga u Code block koji je i namjenjen za to ! :?
Rasiren je, ali kad se kompajlira onda se vrlo suzi :D.
Post Reply