Sari la conținut
ELFORUM - Forumul electronistilor

PIC-uri cu probleme


Postări Recomandate

1. Frecventa oscilator intern

Nu e primul PIC care refuza sa ruleze la frecventa impusa (fie direct in OSCCON, fie din Edit Project - meniu in produsele Mikroelektronika). In urma programarii rula la zeci-sute de kHz. Orice test de sanatate mintala a programatorului (asa zis-ul LED blink) revela o frecventa mult scazuta.

 

Daca la primul gasit (acum ani de zile) am renuntat si trecut la alt PIC, apoi la urmatoarele am sapat sa vad de ce se intampla ce se intampla.

 

Ultimul PIC rezolvat acum cateva zile fiind un 16F1827 - am optat pentru el caci voiam un minim de pini (inlocuitor de 18F1320) dar cu DAC.

 

Problema fiind ca o initializare prea rapida nu permite controllerului sa atinga frecventa impusa prin program. Sa zicem ca voiam 4MHz, solutia este sa-l pornesc la 500kHz apoi sa intarzii un pic impunerea frecventei finale de 4MHz. Mai jos pun codul meu de initializare a controllerului, aratand si artificiul specificat. De precizat ca toate facilitatile din Edit Project sunt dezactivate, singura configurare este pe INTOSC.

 

'  Set-up the PIC
sub procedure InitMain()
' Osc fix START
    OSCCON.6 = 1                                   ' INTOSC is 500kHz
    OSCCON.5 = 0
    OSCCON.4 = 1
    OSCCON.3 = 0
    Delay_ms(10)
    OSCCON.6 = 1                                   ' INTOSC is 4MHz
    OSCCON.5 = 1
    OSCCON.4 = 0
    OSCCON.3 = 1
' Osc fix END
    
    OPTION_REG = 0x80                      ' No pull-up PORTB
    INTCON     = 0x00                      ' No INT

    CCP1CON    = 0x00                      ' No CCP
    CM1CON0    = 0x00                      ' No comp used
    FVRCON     = 0xC4                      ' 1.024V Vref used for DACOUT
    DACCON0    = 0xE8                      ' 1.024V Vref+, Vss Vref-
    DACCON1    = 0x00                      ' DACOUT = 0V
    ANSELA     = 0x00                      ' No A/D
    ANSELB     = 0x00                      ' No A/D

    PORTA      = 0
    PORTB      = 0

    TRISA      = 0x78                      ' Setup I/O ports
    TRISB      = 0x03

    Init_Rotary_Encoder()
    InitTimer1()
end sub

Evident, in program pun :

'   Main program
main:
  InitMain()

Ce zice Errata la acest PIC:

qP9VMQH.png

 

Editat de Thunderer
Link spre comentariu

2. Blocare PIC din cauza I2C

 

Mesajul original al lui @djvas aici:

.

Textul: " Dupa cum bine stiti libraria hardware I2C  oferita in compilatoarele de la MikroE  poate crea blocarea microcontrolerului in situatia in care ceva este in neregula cu slave-ul de pe bus-ul I2c. Se intampla in special cu functia I2Cx_WR ()  atunci cand nu primeste ACK de la slave.  Ma gandesc ca la proiecte mai complexe unde este mult soft care face si altceva decat sa citeasca i2c-u sau unde sunt mai multe slave-uri pe i2c acest lucru ar putea duce la diverse neplaceri.  Cum tratati acest impediment? "

 

Raspuns Marius (multumesc @mars01) : link catre libstock (solutie Basic si Pascal de la Dany - mai ales disponibil pe sub-forumul MikroPascal) https://libstock.mikroe.com/projects/view/1052/i2c-non-blocking.

 

 

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