Sari la conținut
ELFORUM - Forumul electronistilor

cum se pot realiza timere cu pic?


ovy_pas

Postări Recomandate

Daca m-am prins eu bine, pentru debug din mplab ai nevoie de niste fisiere speciale - .cof. Daca mikroC le genereaza sunt sanse sa mearga debugul din mplab cu codul din mikroC. Daca nu... incearca alt compiler.

Cum m-am tot laudat cu diverse ocazii, eu folosesc cu succes picc integrat in mplab. Nu are la fel de multe functii deja scrise ca mikroC, da' mie mi s-a parut "mai ANSI" decat mikroC, asa ca daca stii deja C sunt sanse sa-ti placa mai mult picc.

Link spre comentariu
  • 3 săptămâni mai târziu...
  • Răspunsuri 76
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • ovy_pas

    31

  • Liviu M

    24

  • Elef

    11

  • Eugen_B

    4

Top autori în acest subiect

Am conectat pickit2 la calculator si mplab il recunoaste. Am realizat o aplicatie in hi-tech c compiler, build cu succes.Nu am reusit sa descarc aplicatia in pic si bineinteles nici sa fac debugg.Se poate face debugg in hi-tech c compiler? in documentatii am vazut cum se face debugg in asm dar nu am gasit debugg in C.

Link spre comentariu

Se poate face debug si cu hi-tech ca si compilator, nu uita sa pui MCLREN (master clear enable) si DEBUGEN (debug enable) la config.

Nu am reusit sa descarc aplicatia in pic si bineinteles nici sa fac debug.

Pai ce eroare a dat? Ce zice in output?
Link spre comentariu

in output scrie asa:-La build :Build F:\Pro_MPLAB\Project01 for device 16F872 Using driver C:\Program Files\HI-TECH Software\PICC\9.80\bin\picc.exe Make: The target "F:\Pro_MPLAB\ParteaI.p1" is up to date. Loaded F:\Pro_MPLAB\Project01.cof. ********** Build successful! **********-la conectare :Initializing PICkit 2 version 0.0.3.63 Found PICkit 2 - Operating System Version 2.32.0 PICkit 2 Unit ID = ovy_pas Target power not detected - Powering from PICkit 2 ( 5.00V) PIC16F872 found (Rev 0x2) PICkit 2 Ready-la programare :Programming Target (09.04.2011 20:37:31) PIC16F872 found (Rev 0x2) Erasing Target Programming Program Memory (0x0 - 0x1) Programming Program Memory (0x7DB - 0x7FF) Verifying Program Memory (0x0 - 0x1) Verifying Program Memory (0x7DB - 0x7FF) Programming User ID Memory Verifying User ID Memory Programming Configuration Memory Verifying Configuration Memory PICkit 2 Ready -la debugg :Initializing PICkit 2 version 0.0.3.63 Found PICkit 2 - Operating System Version 2.32.0 PICkit 2 Unit ID = ovy_pas Target power not detected - Powering from PICkit 2 ( 5.00V) PIC16F872 found (Rev 0x2) PICkit 2 Ready PKWarn0006: The local copy of program memory has been changed since the last program operation. Should PICkit 2 program the target (fix) before proceeding? PKWarn0008: The target will be programmed with LVP enabled. PICkit 2 cannot debug the target in this state. Would you like to disable LVP? Programming Target (09.04.2011 20:40:30) PIC16F872 found (Rev 0x2) Erasing Target Programming User ID Memory Verifying User ID Memory Programming Debug Executive (0x-700 - 0x7FF) Verifying Debug Executive (0x700 - 0x7FF) Programming Debug Vector Verifying Debug Vector Programming Configuration Memory Verifying Configuration Memory PK2Error0028: Unable to enter debug mode PICkit 2 Ready PK2Error0024: PICkit 2 was unable to establish a valid Vdd on the target (Attempted 5.00V - Read 0.00V) La programare imi da senzatia ca s-ar incarca programul, se sterge vechiul program din pic si la urma ramane led-ul galben aprins si nu mai face nimic.Am reusit sa fac simulare debugg in MPLABSIM.Am versiunea MPLAB 8.63 si la configure nu am gasit MCLREN si DEBUGEN.

Link spre comentariu

Posteaza un pic cum ai tu configul pus. Daca ai fi cautat pe net PK2Error0028 , in unul din rezultate fix despre debug on si mcrl enable se vorbeste.Ar trebui sa ai configul ceva de genul:__CONFIG(LVPDIS&DEBUGEN); plus ce mai ai tu nevoie pentru configurarea ceasului, etc.(vad ca 16f872 nu are bit pentru dezactivarea mclr).De low voltage se ocupa inainte de programare pt debug , dar ca sa nu te mai intrebe, poti sa-l dezactivezi.

Link spre comentariu

Acesta este codul C :#include __CONFIG(XT & WDTDIS & PWRTDIS & BORDIS & LVPEN & WRTEN &DEBUGEN & DUNPROT & UNPROTECT);void init(void){TRISB = 0b00000000;}void main(void){init();while (1){PORTB =0b00000011 ;_delay(10000);PORTB =0b00000000;_delay(10000);}}

Link spre comentariu

Poate nu fac pasii care trebuie, sunt la inceput pe MPLAB si pt prima data fac debug, eu programez cu softul pickit2 v2.61 si functioneaza.Se poate programa si din MPLAB in Programmer > Program ? Sau la mine nu functioneaza corect programarea in MPLAB? Debugg se face dupa programare ?Am cablu USB intre PC si pickit2 de 3m si cablu intre pickit2 si montaj de 0.5 m, iar la pinii PGD si PGC am leduri cu rezistenta de 470 ohmi, ar mai putea fi si acestea una din cauze? Mentioneaz ca softul pickit2 v2.61 programeaza excelent.Montajul este alimentat independent, nu din pickit.

Link spre comentariu

Din cate am mai citit, de obicei se face:Debugger->Select tool->pickit2Debugger->Clear Memory->AllDebugger->ProgramClear memory nu trebuie dat mereu, am vazut undeva ca zicea de asta cand da eroarea aia cu unable to enter debug.(si select tool doar la inceput)Cu pic16f505 nu pot sa fac debug , imi trebuie nu stiu ce adapter header pentru debug. Dar la 16f872 care se pare ca il folosesti tu nu vad sa zica nicaieri nimic, ar trebui sa mearga debug-ul direct.Apropo eu debug-ul nu l-am folosit, doar am dat o data de curiositate mai demult, pe un pic18.

Link spre comentariu
  • 4 luni mai târziu...

Am o intrerupere data de TMR0:void interrupt() { if (T0IF_bit) { cnt++; // increment counter T0IF_bit = 0; // clear TMR0IF TMR0 = 96; Daca introduc cod aici in intrerupere oare influienteaza durata cu care se incremeneaza contorul cnt? }}

Link spre comentariu

Cred ca depinde de cat timp ai intre 2 intreruperi. Tinand cont ca in rutina de servire a intreruperilor acestea sunt dezactivate, daca instructiunile din runtina dureaza prea mult, poti "rata" o intrerupere venita de la timer. Altfel, cred ca daca durata intructiunilor din rutina de intreruperi nu depaseste perioada timerului, cred ca nu "simti" instructiunile respective. Repet, cred.

Link spre comentariu

Liviu M are dreptate, durata de executie a rutinei de intrerupere trebuie sa fie mai mica decat perioada la care survin intreruperile. @ovy_pas seteaza compilatorul sa genereze fisiere .cof si apoi fa o simulare in Proteus. Ai posibilitatea sa rulezi codul pas-cu-pas/cu breakpoints, la nivel de cod sursa. Astfel poti sa vezi exact in cat timp se executa codul, perioada de overflow a timer-ului, etc. In orice caz, rutina de intrerupere trebuie sa contina doar strictul necesar, nu e bine sa o incarci prea mult, altfel poate sa afecteze codul din main(daca este dependent de timp).

Link spre comentariu

In orice caz, rutina de intrerupere trebuie sa contina doar strictul necesar, nu e bine sa o incarci prea mult, altfel poate sa afecteze codul din main(daca este dependent de timp).

Bine punctat aici, mai ales daca ai si alte surse de intreruperi. Cum spuneam, la intrarea in rutina de tratare intreruperi, intreruperile sunt dezactivate. Asa ca daca stai prea mult in ea si mai ai si alte surse de intreruperi, ai sanse sa pierzi din ele.
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