Mircea Postat Martie 28, 2020 Partajează Postat Martie 28, 2020 (editat) 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: Editat Martie 28, 2020 de Thunderer 1 Link spre comentariu
Mircea Postat Martie 29, 2020 Autor Partajează Postat Martie 29, 2020 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
Postări Recomandate
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 contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum