Vai al contenuto
PLC Forum


Velocità Campionamento 16F88 [?]


avince72

Messaggi consigliati

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

Link al commento
Condividi su altri siti


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.

Link al commento
Condividi su altri siti

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...

Link al commento
Condividi su altri siti

  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.
Link al commento
Condividi su altri siti

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...

Link al commento
Condividi su altri siti

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. ;)

Link al commento
Condividi su altri siti

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...

Modificato: da avince72
Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...