Jump to content
PLC Forum


Sign in to follow this  
avince72

Velocità Campionamento 16F88 [?]

Recommended Posts

avince72

Buon giorno,

Ho da poco iniziato a giocare con i microcontrollori e come primo progettino, sto provando a creare qualcosa da applicare alla passione che mi è ritornata dopo..... la crisi di mezza età: la moto :)

Sto usando ldmicro (editor in ladder logic) che è più alla portata delle mie capacità...

Il programma è già al limite della flash del pic: 4Kword.

Il dubbio che ho è se riuscirà a gestire la velocità dell'impulso che arriva dall'encoder della ruota. È un digitale 0-5V con frequenza massima di circa 1,5KHz.

Il pic vorrei farlo lavorare con l'oscillatore interno da 8MHz.

Stovo pensando di fare una prova empirica, aggiungendo un uscita che commuta ad ogni ciclo macchina e misurare la frequenza d'uscita.

Secondo voi, può funzionare?

Grazie

Enzo

Share this post


Link to post
Share on other sites

Livio Orsini

Il tipo di misura è corretto, però a poco a che vedere on il conteggio.

Vuoi usare un quarzo da 8 Mhz, significa eseguire un'istruzione in 0.5µs. Il tuo clock ha un periodo di 666 µs, quindi potresti eseguire all'incirca 1300 istruzioni se ti affidi ad un interrupt, meno della metà se vai in polling.

Share this post


Link to post
Share on other sites
avince72

Grazie Livio,

ma non saprei se ldmicro mi permetta di impostare un ingresso come interrupt. Devo verificare meglio.

cambiare linguaggio, la vedo un impresa...

Non so se ho capito tutto ciò che mi hai scritto.

per clock, intendi il tempp per eseguire tutto il programma ? (E quindi il tempo necessario per rileggere lo stato di un ingresso ?)

Le 1300 istruzioni sono al secondo, giusto ?

Ciò vuol di che arrivo al massimo 1300hz.

suppongo che anche la durata del semiperiodo del segnale in ingresso giochi il suo ruolo...

supponendo di avere un onda rettangolare con duty cycle 25% (non conosco quello reale) e frequenza di 1500Hz, quanto dovrebbe essere la minima frequenza del quarzo che dovrei utilizzare ?

scusate i molti dubbi e grazie in ogni caso.

intanto provo a continuare ad assemblare il prototipo...

Share this post


Link to post
Share on other sites
Livio Orsini
  1. Gli interrpts hw sono legati agli ingressi, tipicamente quelli delle porte B e A; consulta il datasheet del micro per capire quale ingresso potrebbe essere più adatto al tuo caso. Poi i conteggi di un segnale dovrebbero essere un poco più complessi di come credo tu voglia fare, questo per evitare falsi conteggi dovuti a disturbi.
  2. Il clock che intendo io è la frequenza di 1.5 kHz del tuo segnale il cui periodo è 0.6666 ms
  3. No il tuo micro, con 8 MHZ di quarzo esegue circa 2 M istruziuoni per secondo; le 1300 istruzioni circa sono quelle che potrà eseguire tra 2 impulsi successivi.
  4. per campionare un seganle con frequenza di 1500Hz devi avere una frequenza dic ampionamento >3000 Hz. Il comportere poter eseguire all'incirca 650 istruzioni tra due campionamenti successivi.

Share this post


Link to post
Share on other sites
avince72

Se non ho commesso errori, il prototipo dovrebbe essere pronto. Se ci riesco, oggi provo programmare il pic e sperimento...

Dal quello che sono riuscito a capire dal data sheet, gli interrupt sono su alcuni degli ingressi della porta B ma RB0 (pin6) dovrebbe essere quello più adatto che però va configurato almeno nel registro INTCO (mi pare settando il bit7 e 4).

Con ldmicro non si può fare !

Mentre se ho capito bene, visto che il mio programmino ha riempito il pic quasi al 100%, dovrebbe voler dire che è composto da circa 4000 istruzioni, giusto ?

Se è così, con oscillatore ad 8MHz, il programma viene eseguito 500 volte al secondo ed il piedino configurato per la prova empirica di cui sopra, dovrebbe fornirmi una frequenza di circa 500Hz.

Sarebbe corretto pensare che un ingresso normale (non interrupt), può avere frequenza massima di 250Hz?

Spero di fornirvi presto altre notizie più concrete.

Sto anche pensado di fare un generatore di impulsi con un secondo pic per collaudare il prototipo...

Share this post


Link to post
Share on other sites
Livio Orsini

I tempi che indichi son corretti.

RB0 è l'interrupt Hw a più alta priorità.

Però se vuoi gestire bene un conteggio impulsi non va bene quello che stai pensando di fare.

Comincia con il fare le prove che ti sei prefisso poi, se tutto funziona, vediamo come fare per realizzare un conteggio serio a prova di disturbi. ;)

Share this post


Link to post
Share on other sites
avince72

Prova fatta ma....

Ldmicro non abilita l'oscillatore interno, quindi non configura il registro specifico per selezionare la velocità di clock dell'oscillatore (8step).

Di conseguenza, anche se lo scelgo io con i "fuses" di icprog, ottengo un oscillatore a 31.25khz... infatti il mio "test point" oscilla ad 1.9hz circa.

I conti tornano ma mi toccherà aggiungere quarzo e condensatori... o studiare di più.

Avendo usato tutti gli i/o, mi toccherà togliere qualcosa

to be continue...

Edited by avince72

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...