Sari la conținut
ELFORUM - Forumul electronistilor

Oscilator buclucas la PIC 12F1571


Postări Recomandate

E deja al doilea PIC (primul fiind 16F1847) care are toane sau imi scapa mie ceva.

 

PIC 12F1571 cu oscilator intern la 8MHz, dar se pare ca totul se executa ca si cum oscilatorul ar fi la sub 1MHz, chiar daca functia Delay_ms() este practic independenta de frecventa (in plaja acceptabila).

 

Programul functioneaza, dar Delay_ms(500) nu se executa in 500ms, ci 6-7secunde. Odata terminata Delay_ms(500), programul nu mai are probleme de timp caci citeste apasarea unui buton.

 

Am nevoie de acea intarziere ca sa se coordoneze cu alt PIC care controleaza un LCD. Insa vreau si sa evit executia haotica in momentul cuplarii alimentarii, 80% schimba starea iesirilor in mod aleator. Cu intarziere nu mai sunt probleme.

 

Care e problema oscilatorului?

 

Configuratia ca mai jos:

Posted Image
Posted Image

 

Initializarea registrilor o fac asa:

' Set-up the PICsub procedure InitMain()    OPTION_REG =   0x80              ' Pull-up disabled    INTCON     =   0x00              ' No INT    CM1CON0    =   0x00              ' No COMP    PWM1CON    =   0x00              ' No PWM    ANSELA     =   0x00              ' No AI    ODCONA     =   0x00    ADCON0     =   0x00'    DAC1CON0   =   0x00    PORTA      =   0x00              ' Clear PORTA    TRISA      =   0x28              ' All outputs but RA5/RA3end submain:' Main programInitMain()counter = 0Delay_ms(500) ' Asta e intarzierea care dureaza 6-7 secunde in loc de 500ms.  while(TRUE)' aici citesc RA5 si aprind LED-uri pe RA0/1/2  wendend.
Editat de thunderer
Link spre comentariu
  • Răspunsuri 8
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

Zile populare

Top autori în acest subiect

Cred ca setarea de oscilator este folosit doar pentru generarea functiei de delay_ si altor librarii care necesita calcule dupa valoarea oscilatorului, registrii in sine pentru PIC nu sunt setati. Am folosit diverse PIC-uri cu oscilatorul intern si la toate am fost nevoit sa setez din soft valoarea registrului OSCCON, altfel PIC-ul rula la valoarea default care in general este 500khz. 

Editat de bandi12
Link spre comentariu

Nope, problema e in alta parte.

 

Am revazut programul pentru 16F1847 (primul la care am detectat problema). Am OSCCON deja setat.

'   Set-up the PICsub procedure InitMain()    INTCON  = 0x00                                ' No INT        OSCCON  = 0x70                                ' 8MHz clock    CLKRCON = 0x00    ANSELA  = 0x00                                ' No ADC    ANSELB  = 0x00                                ' No ADC        FVRCON  = 0x00                                ' Vref disabled    ADCON0  = 0x00                                ' No ADC        DACCON0 = 0x00                                ' No DAC        CM1CON0 = 0x00                                ' No comps    CM2CON0 = 0x00                                ' No comps        OPTION_REG = 0x80                             ' No Pull-Up        CCP1CON = 0x00                                ' No CCP    CCP2CON = 0x00                                ' No CCP    CCP3CON = 0x00                                ' No CCP    CCP4CON = 0x00                                ' No CCP        CPSCON0 = 0x00                                ' No CPS    PORTA   = 0x00    PORTB   = 0x00    TRISA   = 0x31                                ' Setup I/O ports    TRISB   = 0x0C    Init_Rotary_Encoder()    InitTimer()    TMR1IE_bit  = 1  ' Timer1 Interrupt enable    INTCON.PEIE = 1  ' Peripheral Interrupts enable    INTCON.GIE  = 1  ' Interrupts global enableend sub

Posted Image

Posted Image

PIC-ul 12F1571 l-am pus in cutie, plus ca e SMD. Cata vreme 16F1847 face la fel, ceva trebuie sa fie gresit in ce fac.

@bandi, nu cred ca PIC-ul lucreaza la 500kHz din motivul de-l invoci, dar nici nu pot sa zic ca e gresit ce zici, caci ceva intre 500k si 1MHz este ce vad in executie.

 

Foarte rar setez OSCCON-ul. De regula in Edit Project o fac numai.

Inclusiv PLLx4 si altele. Majoritatea proiectelor mele sunt la 32-64MHz ca sa pot face rapid calcule si altele, pot confirma ca lucreaza la 32-64MHz comparat cu PIC-urile vechi limitate la 16-20MHz. Viteza se vede la executie.

Link spre comentariu
Cu OSCCON=0x70  bit 7 din OSCCON este 1,inseamna ca 4xPLL is enabled,  asta pentru ca in configuration word 1, PLLEN are valoarea 0.
Bitii 6-3 din OSCCON au valoarea 1100 ceea ce inseamna ca fregventa oscilatorului este 2MHz si este setat asa cum spun bitii 1-0, adica ceas determinat de FOSC<1:0> din configuration words(ceas intern).
Eu cred ca cel mai bine ar fi sa pui bitii SCS din OSCCON la valoarea 1x, figura 5-1 din datasheet  si sa alegi fregventa potrivita din bitii 6-3.
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