Sari la conținut
ELFORUM - Forumul electronistilor

Frecventmetru 2Ghz cu LMX2322 - asamblare si dezasamblare


Mondan

Postări Recomandate

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
  • Răspunsuri 12
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • Mondan

    7

  • nico_2010

    3

  • MatyC

    2

  • BodoRF

    1

Top autori în acest subiect

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

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

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

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

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

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

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

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

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

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

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

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