Mondan Postat Februarie 9, 2011 Partajează Postat Februarie 9, 2011 Pentru realizare unui frecventmetru descris aici: http://www.elforum.info/viewtopic.php?f=29&t=69453&start=30 Am un LCD de 2*16 + PIC16f628 care merg ok Am descarcat un cablaj pentru acest integrat, pentru ca altfel nu il pot folosi.Cablajul este aici (unde scrie PCB): http://hem.passagen.se/communication/frcpll.html Descierea lui LMX este detaliata aici (unde scrie "How use Code Loader to calculate registers R & N (print screen PDF)"): http://www.qsl.net/yo4hfu/PLL_LMX.html Pe scurt daca nu aveti chef sa cititi descrierea acest integrat are 2 contoare de pulsuri (frecventa). Unul "numara" frecventa care trebuie masurata , iar altul numara "frecventa" data de un standard (un oscilator extern integratului), si dupa "comparatie" da raspuns inr-un anumit pin. Nu am posibilitatea sa ii lipesc ceva de pini, sau sa ii atasez un alt oscilator. As vrea sa vad cum comunica HEX-ul ala cu LMX-ul, practic sa folosesc acea bucata de cod. Pana cum am gasit pe un site rusesc o "bucata de cod". L-am luat si l-am mai cizelat: http://vrtp.ru/index.php?showtopic=9435 ;*********************************************************************************************; Program - obtiunea 1; Pentru 16F84 la 4Mhz;********************************************************************************************* LIST p=16F84A ; PIC16F84A. __CONFIG 03FF5H ; Oscilator Standard XT-Standard, WDT activat, fara CP,PWRT ; (1111 0101).;=============================================================================================; Registre speciale;=============================================================================================OptionR equ 01h ; registrul Option - bank1Status equ 03h ; registrul StatusPortB equ 06h ; Port BTrisB equ 06h ; Registrul Tris B - bank1IntCon equ 0Bh ; IntCon;=============================================================================================; variabile uz general;=============================================================================================part1 equ 0Ch ; primul octetpart2 equ 0Dh ; al doilea octetpart3 equ 0Eh ; al treilea octetpart equ 0Fh ; variabila generalacount equ 1Ah ; schimbare biti, contaorSecL equ 1Bh ; delay puls lowSecH equ 1Ch ; delay puls high;=============================================================================================;=============================================================================================F equ 1 ; Rezultat trimis in registrul FW equ 0 ; Rezultat trimis in registrul W;=============================================================================================; Bank select;=============================================================================================RP0 equ 5 ; bitul 5 din registrul STATUS este RP0.;=============================================================================================;==============================================================================================le equ 0 ; dat equ 1 ;clk equ 2 ;; Definire intrare program;============================================================================================= org 0 ; executie la pornire goto START ; sari la START.;********************************************************************************************* org 4 ; Adresa (vectorul) de intrerupere;------------------------------- Programul efectiv -----------------------------------;*********************************************************************************************; Operatiunile pregatitoare;---------------------------------------------------------------------------------------------START clrf IntCon ; Dezactiveaza toate intreruperile clrwdt ; reseteaza WDT. bsf Status,RP0 ; bank 1. movlw .0 ; PORTB - totul pe OUT movwf TrisB bcf Status,RP0 ; bank 0. ;--------------------------------------------------------------------------------------------; Constante de timp - timmer;-------------------------------------------------------------------------------------------- movlw .98 movwf SecH ; .43 movlw .255 movwf SecL ; .255;--------------------------------------------------------------------------------------------;Intarziere de protectie aproximativ 100mS;--------------------------------------------------------------------------------------------PAUSE clrwdt decfsz SecL, F goto PAUSE ; clrwdt decfsz SecH, F goto PAUSE;--------------------------------------------------------------------------------------------; VCO Frequency Division reg N;-------------------------------------------------------------------------------------------- movlw b'100000' movwf part1 movlw b'000010' movwf part2 movlw b'000000' movwf part3 call w_com_reg;--------------------------------------------------------------------------------------------; diviziune frecvenţă de cuarţ Reg R;-------------------------------------------------------------------------------------------- movlw b'000000' movwf part1 movlw b'000110' movwf part2 movlw b'010001' movwf part3 call w_com_reg;--------------------------------------------------------------------------------------------PRD clrwdt btfss PortB, 5 goto PRD; btfss PortB, 5 goto PRD goto START;--------------------------------------------------------------------------------------------w_com_reg;--------------------------------------------------------------------------------------------; PP 3 octeti în secvenţa 18 bit;-------------------------------------------------------------------------------------------- bcf PortB, le ; Bitul LE (PORTB,0) este pe 0 clrwdt movf part1, W movwf part ; part= part1 call w_clk ; w_clk clrwdt movf part2, W movwf part ; part= part2 call w_clk ; w_clk clrwdt movf part3, W movwf part ; part= part3 call w_clk ; w_clk nop bsf PortB, le ; LE=High pentru sfarsit return ;sfarsit proceduraw_clk;--------------------------------------------------------------------------------------------; Ïîäïðîãðàììà îäíîãî èç 3-õ 6òè ðàçðÿäíîãî öèêëè÷åñêîãî ñäâèãà;-------------------------------------------------------------------------------------------- movlw h'06' movwf count ; count=6w_loop btfsc part, 5 bsf PortB, dat; dat este (PortB,1)=1 nop bsf PortB, clk; clk (PortB,0)=1 nop bcf PortB, clk; clk (PortB,0)=0 nop bcf PortB, dat; dat (PortB,1)=0 rlf part, F ; rotire la stanga a registrului part decfsz count, F ; daca s-a ajuns la 0 sare la RETURN goto w_loop return ;--------------------------------------------------------------------------------------------;============================================================================================ end ; sfarsitul programului Problema este sa incerc sa identific in HEX-ul dat structuri de genul asta Am gasit un dezasamblator tare (ca sa nui zic dezasableor): http://www.hagi-online.org/picmicro/picdisasm.html Link spre comentariu
Mondan Postat Februarie 9, 2011 Autor Partajează Postat Februarie 9, 2011 Am mai luat HEX-ul de aici, am facut schema in PROTEUS: http://hem.passagen.se/communication/frcpll.html Si nu arata nimic pe afisaj, clipea ceva aiurea.... Evident nu am pus LMX2322 in simulare ca nu stiu cum sa pun.... Voi ce spuneti de Proteus ? Ajuta la ceva ? Link spre comentariu
BodoRF Postat Februarie 9, 2011 Partajează Postat Februarie 9, 2011 La inceput am simulat si eu diverse hexuri gasite pe internet.Am folosit Proteus.Porturile uC le-am conectat la analizorul logic sau la osciloscopul virtual.Aici am putut sa vad clar trenurile de impulsuri.Nu este nevoie sa simulezi integratul PLL.Important este "cuvantul" trimis spre el.Trebuie studiata foaia de catalog a LMX-ului.La mine a fost mai simplu, aplicatia nu folosea LCD si butoane.Imi aduc aminte ca unul dintre softuri avea o greseala, lipsea un bit din cuvantul trimis spre registri R/N.Primele teste le-am facut cu ajutorul portului paralel.Am folosit Code Loaderul oferit de producator.Dupa ce m-am asigurat ca VCO si PLL functioneaza corect am trecut la conectarea uC.Rezultatele simularii au fost reale, PLL s-a calat imediat pe frecventa calculata. Link spre comentariu
Mondan Postat Februarie 13, 2011 Autor Partajează Postat Februarie 13, 2011 Multumesc pentru raspuns.Inca mai am internet .......Cateva idei despre cum se realizeaza frecventmetru. Vreau mai intai sa realizez frecventmetru fr divizorul LMX.Pana acum- am conectat in monyaj si alimetat LMX-ul- am afisat pe LCD un numar format din byte0: byte1: byte2: byte3- am vazut ca merge TMR0 contorizeza pulsuri cu precalersugestii cum realizez frecventmetru ?clrf TMR0delaycitesc TMR0 ?din falg-ul lui realizez ceilati octeti ?Sau cu inreruperi ? Link spre comentariu
MatyC Postat Februarie 13, 2011 Partajează Postat Februarie 13, 2011 Sa inteleg ca vrei sa concepi un frecventmetru de la zero. Studiez si eu de ceva timp utilizarea lui PIC16 la asa ceva si uite ce am inteles eu. Frecventa este o unitate de masura compusa din doua alte masuri. Numarul de evenimente si timpul. In cazul de fata unitatea de masura a timpului este secunda. Aici intervine o "mica problema". Sa reusesti prin program sa obtii aceast interval de masura fix de o secunda daca vrei precizie de 1 Hz. Eu cred ca asta este motivul pt care variantele de frecventmetru gasite de mine sunt realizate in asm. Legat de TMR0. Intradevar se folosesc intreruperile generate de el. Dupa ce rezolvi problema timpului de masurare, logica ar fi cam asa ceva. Aduci TMR0 la val 0, activezi intreruperile, numeri de cate ori intervine intreruperea, verifici daca a mai ramas timp din secunda aia de masura. Cand a trecut secunda de masurare, blochezi intrarea de la TMR0, citesti valoarea din el si faci calculele necesare. (NrINTx256+ValTMR0)xPrescaler. Legat de prescalerul intern din cate tin minte nu este folosit la frecventmetru. Performanta TMR0 din PIC16F84 de functiona la frecvente de circa 50 Mhz chiar nu merita prescalerul intern. Legat de LMX 2322, am aflat si eu de pe web in urma cu cateva luni despre el, nu l-am studiat in amanunt dar banuiesc ca este folosit doar ca divizor de frecventa. Link spre comentariu
nico_2010 Postat Februarie 14, 2011 Partajează Postat Februarie 14, 2011 salut! Un raspuns la intrebarile tale cred ca il poti gasi aici: http://www.electro-tech-online.com/micr ... unter.html. daca iti surade ideea incearca varianta de frecventmetru realizat de mine si prezentat pe pagina de web:www.electronica webfreehosting.net. Voi pune si softul actualizat, care permite afisarea cu precizie de 1 kHz a frecventelor cuprinse intre 60 MHz si 2500 MHz. Link spre comentariu
Mondan Postat Februarie 15, 2011 Autor Partajează Postat Februarie 15, 2011 Am luat bucata de cod data aici: http://www.electro-tech-online.com/microcontrollers/99153-100mhz-frequency-counter.html fara pasajul: movlw TRISIO movwf FSR ; setup TRISIO indirect access bsf INDF,2 Am facut separ setarile : pin RA4 ca intrare,.. prescaler.... Bucata de cod data acolo merge ! Multumesc pentru ea. Problema e ca imi arata ceva ce nu stie ce e. E un numar care creste o data cu frecventa. atat am putut observa. Citirea frecventei in acea bucata se face pe 3 byte. Eu am gasit o transformare a numerelor pe 4 byte in BCD pentru LCD. E vorba de procedura b2_bcd luata din programul dat pe urmatorul site: http://homepage.eircom.net/~ei9gq/counter.html oricum am pus primul byte pe 0 Oricum nu imi place aici ca mai foloseste un pin al integratului sa descarce prescalerul lui TMR0, cand se poate face si soft ca in linkul indicat de tine. Pana cum am un numar care creste o data cu frecventa ..... Link spre comentariu
Mondan Postat Februarie 15, 2011 Autor Partajează Postat Februarie 15, 2011 Am luat un HEX-ul de aici: http://www.qsl.net/yo4hfu/PLL_LMX.html Si am facut o simulare in Proteus - poza Imag1. Aici desi se dau impulsurile alea cu o baza de timp mare macar se vede totul frumos. Adica semnalul Clk apare exact la mijlocul impulsului Data, apoi cand se da LE clk si data sunt pe 0 Codul sursa e in C, iat eu C la micro controllere nu am folosit niciodata. Am sa incerc sa dezaasamblez HEX-ul dat aici. In cazul meu cu procedura de comunicare luata de aici: http://hem.passagen.se/communication/frcpll.html, totul se da aiurea - poza imag2 data si clk sunt pe 1 cand primeste LE, iar apoi raman pe 1 In ambele cazuri vad ca se da de 2 ori un sir de 18 biti. De ce sunt 2 ? nu am inteles inca. Link spre comentariu
nico_2010 Postat Februarie 15, 2011 Partajează Postat Februarie 15, 2011 Am verificat si eu softul de la pagina de origine si functioneaza.Nu stiu cum ai modificat schema insa, in forma originala, este OK.Si inca ceva: daca incropesti parti din diferite soft-uri, vei avea surprize foarte neplacute (se pare ca deja ai facut cunostinta cu o parte din ele).Succes!! Link spre comentariu
nico_2010 Postat Februarie 15, 2011 Partajează Postat Februarie 15, 2011 si totusi, frecventmetrul cu pricina nu este suficient de stabil, iar de setat prescalerul se pare ca trebuie setat sa divizeze cu 192,7.. (1?), ceea ce mi se pare o prostie.parerea mea: nu te mai chinui in zadar! Link spre comentariu
MatyC Postat Februarie 16, 2011 Partajează Postat Februarie 16, 2011 Eu am gasit o transformare a numerelor pe 4 byte in BCD pentru LCD.E vorba de procedura b2_bcd luata din programul dat......Pentru LCD informatia care o vrei afisata o transmiti in ASCII. Ex cifra 4 are codul 0x34. In BCD este pe 4 biti adica 0100=0x04. Cauta conversia BIN2ASCII pentru a afisa pe LCD. Eu am folosit in C ceva librarii si nu sunt chiar complicate. Din pacate nu-mi gasesc placa de Acatel sa i-au LMX-ul si din cauza asta nu pot testa montajul.PS. Din cate am vazut protocolul pentru LMX este MICROWIRE. Link spre comentariu
Mondan Postat Februarie 16, 2011 Autor Partajează Postat Februarie 16, 2011 logic ca trebuie ASCII, da' nu e decat o adunare cu 30h. Interesat e cum se transforma in BCD pentru ca la o astfel de operatie trebuie impartire. Se face prin instructiuni de shift.. Cum se poate face impartirea la 10 ? Stiam candva ..... Imi amintesc ca se impartea cumva la 8 (shiftare cu 3) si la 2 (shiftare cu 1).... Daca isi mai aminteste cineva sa posteze. Deci partea de freventzmetru merge, numai ca nu e "calibart". Adica are precizie, da; nu are acuratete cum am zice noi..... Acum ma cert cu LMX-ul. Din pacate alt telefon nu mai am, daca am stricat integratul..... Ii dau impulsurile necesare numai ca el... nicio treaba. Ii dau 2 siruri in oridin de la MSB la LSB 0001011 11111 11111 1 11111 11111 00000 000 si el nimic fiecare bit e trimis cam la 3uS. (pe data) " In mijocul" fiecaruri bit data apare clock. dupa primul sir se da un puls de LE si dupa al doilea la fel. Dupa care LE, data si clock rama pe 0. Cum sa folosesc Code Loaderul de aici ca el nu are LMX2322. Sa pun LMX2323 ?: http://www.qsl.net/yo4hfu/PLL_LMX.html Link spre comentariu
Mondan Postat Februarie 16, 2011 Autor Partajează Postat Februarie 16, 2011 Cam asa arata semnalul pe care il dau eu - figura.Sunt 2 imagini unite de mine luate initial cu Print Screen.Am vazut intru-un HEx ca pentru divizare cu 1000 i se da:000101100000000101si000001111101000000Am verificat si alimetare e 0k : Masa pe pnul 6.+3.8 V pe pinii 3 si 4 aceeai tensiune pe pinul 12.Aici sa nu fie un conflict daca ii dau un semnal pe pinii 9,10,11 de +5VAm verificat conexiunile, semnalul pe pinii, clar ca nu la frecventa aia ca in simularea Protreus, dar comanda "pinii".De acum nu prea mai stiu ce sa incerc... 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