Sari la conținut
ELFORUM - Forumul electronistilor

PIC12F675 cu butonul pe intrerupere.


lama

Postări Recomandate

Salut.Incerc sa imi aduc aminte din facultate cum e cu Pic-urile. Si am cautat tutoriale pe net.Asa ca am ajus in urmatoarea faza.Am un exemplu care fctioneaza bine pe HITECH C si am incercat sa il trec si in MikroC pro 4.60.Fara succes si nu ma prind unde e greseala. Poate are cineva idee unde gresesc. Codul este complilat ok dar nu fctioneaza. Aparent un intra in intrerupere.HITECH C/************************************************************************* ** Processor: 12F675 ** Demonstrates use of interrupt-on-change interrupts ** (without software debouncing) ** ** Toggles LED on GP4 ** when pushbutton on GP5 is pressed (high -> low transition) ** *************************************************************************** ** Pin assignments: ** GP4 - indicator LED ** GP5 - pushbutton switch ** *************************************************************************/#include #include #define _XTAL_FREQ 4000000 // oscillator frequency for _delay()/***** CONFIGURATION *****/// ext reset, no code or data protect, no brownout detect,// no watchdog, power-up timer enabled, 4MHz int clock__CONFIG(MCLREN & UNPROTECT & BORDIS & WDTDIS & PWRTEN & INTIO);// Pin assignments#define nB_LED 4 // indicator LED on GP1#define nBUTTON 5 // externally debounced pushbutton on GP2/***** GLOBAL VARIABLES *****/unsigned char sGPIO; // shadow copy of GPIOunsigned char db_cnt; // debounce counter/***** MAIN PROGRAM *****/void main(){ // Initialisation // setup ports TRISIO = ~(1< low transition) ** *************************************************************************** ** Pin assignments: ** GP4 - indicator LED ** GP5 - pushbutton switch ** *************************************************************************/// Pin assignments#define nB_LED 4 // indicator LED on GP1#define nBUTTON 5 // externally debounced pushbutton on GP2/***** GLOBAL VARIABLES *****/unsigned char sGPIO; // shadow copy of GPIOunsigned char db_cnt; // debounce counter/***** MAIN PROGRAM *****/void main(){ // Initialisation // setup ports //TRISIO = ~(1<

Link spre comentariu
  • Răspunsuri 9
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • lama

    6

  • Liviu M

    3

  • MatyC

    1

Top autori în acest subiect

Ai avut vreun motiv special sa "arunci" configurarea (de schimbul picc - mikroC nu interb)?

/***** CONFIGURATION *****/// ext reset, no code or data protect, no brownout detect,// no watchdog, power-up timer enabled, 4MHz int clock__CONFIG(MCLREN & UNPROTECT & BORDIS & WDTDIS & PWRTEN & INTIO);

Link spre comentariu

Ai avut vreun motiv special sa "arunci" configurarea (de schimbul picc - mikroC nu interb)?

/***** CONFIGURATION *****/// ext reset, no code or data protect, no brownout detect,// no watchdog, power-up timer enabled, 4MHz int clock__CONFIG(MCLREN & UNPROTECT & BORDIS & WDTDIS & PWRTEN & INTIO);

nu inteleg: cum adica sa arunc configurarea? sunt incepator si nu cunosc "nuantele". Ce anume am facut gresit?
Link spre comentariu

In bucata de cod din picc exista si secventa de configurare a picului

__CONFIG(MCLREN & UNPROTECT & BORDIS & WDTDIS & PWRTEN & INTIO);
bucata pe care eu n-o vad in codul pentru mikroC.Cum ultima optiune in __CONFIG, INTIO e descrisa in fisierul pic12f6x.h (picc) ca

#define INTIO 0x3FFC /* internal osc/GP4 = IO//GP5 = IO */

, poate ca e exact ce-ti lipseste ca sa mearga programul portat.Poate nu, pentru ca nu stiu daca nu cumva faci asta prin vreun meniu al mikroC.
Link spre comentariu

nu inteleg: cum adica sa arunc configurarea? sunt incepator si nu cunosc "nuantele". Ce anume am facut gresit?

Liviu M se refera la faptul ca in codul de MicroC nu se regaseste configurarea procesorului. Atat LiviuM cat si eu preferam compilatoare bazate pe ANSI C. Acum am incercat compilarea codului si am observat ca MicroC pastreaza configurarea in alt fisier si ala XML. Este in fisierul "numeproiect.cfg". Dar ma rog.Insa legat de codul tau uite ce erori au aparut:1. In void main () ai CMCON0=7. Vrei sa dezactivezi comparatorul si corect este CMCON=7, fara zeroul ala de la urma.2. La void interrupt la final resetezi indicatorul (flagul) de intrerupere "GPIO Interrupt" prin GPIF=0. Eroarea care apare este "Assigning to non-lvalue 'GPIF' ". Alta ciudatenie de la MicroC. Am studiat putin problema si vad ca compileaza daca folosesc INTCON.GPIF=0.
Link spre comentariu

In bucata de cod din picc exista si secventa de configurare a picului

__CONFIG(MCLREN & UNPROTECT & BORDIS & WDTDIS & PWRTEN & INTIO);
bucata pe care eu n-o vad in codul pentru mikroC.Cum ultima optiune in __CONFIG, INTIO e descrisa in fisierul pic12f6x.h (picc) ca

#define INTIO 0x3FFC /* internal osc/GP4 = IO//GP5 = IO */

, poate ca e exact ce-ti lipseste ca sa mearga programul portat.Poate nu, pentru ca nu stiu daca nu cumva faci asta prin vreun meniu al mikroC.
daca nu gresesc la vers 4.60 configurarea am facut-o ptr proiect.deci ea este facuta ca setare a proiectului.nu am gasit nici un exemplu de la vers 4.60 care sa aiba o comanda echivaleta lui __CONFIG DIN HITECH C.si alte exemple ptr 4.60 au mers (cu conf la proiect)
Link spre comentariu

Ai dreptate, am testat si eu putin si nu exista echivalentul lui __CONFIG.

Da' asa cum zice MatyC, proiectul asa cum l-ai scris mai sus nu se compileaza. Incearca sa-l corectezi (vezi postul lui MatyC) si mai testeaza-l o data.

 

PS Daca nu sunt indiscret, ce motive ai sa folosesti mikroC in detrimentul picc?

Link spre comentariu

Ai dreptate, am testat si eu putin si nu exista echivalentul lui __CONFIG.

Da' asa cum zice MatyC, proiectul asa cum l-ai scris mai sus nu se compileaza. Incearca sa-l corectezi (vezi postul lui MatyC) si mai testeaza-l o data.

 

PS Daca nu sunt indiscret, ce motive ai sa folosesti mikroC in detrimentul picc?

Proiectul se compileaza fara erori.

Cand am invatat prima oara foloseam asm. Dar am uitat(sunt multi ani de atunci) si cum stiu C am zis sa vad care pare mai usor de inteles/folosit.

MikroC vine cu niste librari de functii (un plus)dar pana acum e ciudat tare in functionare.

Deci astfel spus HITECH C cistiga puncte din ce in ce mai mult.

Link spre comentariu

nu inteleg: cum adica sa arunc configurarea? sunt incepator si nu cunosc "nuantele". Ce anume am facut gresit?

Liviu M se refera la faptul ca in codul de MicroC nu se regaseste configurarea procesorului. Atat LiviuM cat si eu preferam compilatoare bazate pe ANSI C. Acum am incercat compilarea codului si am observat ca MicroC pastreaza configurarea in alt fisier si ala XML. Este in fisierul "numeproiect.cfg". Dar ma rog.Insa legat de codul tau uite ce erori au aparut:1. In void main () ai CMCON0=7. Vrei sa dezactivezi comparatorul si corect este CMCON=7, fara zeroul ala de la urma.2. La void interrupt la final resetezi indicatorul (flagul) de intrerupere "GPIO Interrupt" prin GPIF=0. Eroarea care apare este "Assigning to non-lvalue 'GPIF' ". Alta ciudatenie de la MicroC. Am studiat putin problema si vad ca compileaza daca folosesc INTCON.GPIF=0.
Deci se compileaza fara erori doar ca nu merge.Am corectat partea de comparator. nici un efect.versiunea de compilator care o am instalata accepta si gpif=0 si intcon.gpif=0 doar ca nu merge.Asta e: cred ca voi ramine cu HITECH C caci cu MikroC nu par sa ma descurc. Am pus intrebarea si la ei pe forum si vad ca nu mi-o aproba. Si mai este o intrebare de ceva verme fara nici o parere(nici macar de la staff)
Link spre comentariu

Am rezolvat cu codul. Initializarea nu era corecta. Mai jos codul fctional pe Mikroc./************************************************************************* ** Processor: 12F675 ** Demonstrates use of interrupt-on-change interrupts ** (without software debouncing) ** ** Toggles LED on GP4 ** when pushbutton on GP5 is pressed (high -> low transition) ** *************************************************************************** ** Pin assignments: ** GP4 - indicator LED ** GP5 - pushbutton switch ** *************************************************************************/// Pin assignments#define nB_LED 4 // indicator LED on GP4#define nBUTTON 5 // externally debounced pushbutton on GP5/***** GLOBAL VARIABLES *****/unsigned char sGPIO; // shadow copy of GPIOunsigned char db_cnt; // debounce counter/***** MAIN PROGRAM *****/void main(){//////////////////////// TRISIO = ~(1<

Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări