zampx Inserito: 6 aprile 2006 Segnala Share Inserito: 6 aprile 2006 Salve,Sto cercando di misurare la velocità di una macchina tramite un sensore collegato ad una ruota dentata (60 denti).Sto inoltre usando un rabbit 2000 per il controllo della macchina.L'idea è di generare un interrupt ad ogni lettura del dente il qule va ad incrementarmi un contatore e in parallelo generare un interrupt a tempo e di contare quanti delti vendono letti ad ogni interrupt a tempo.Il mio problema è gestire questo interrupt a tempo:So che esistono due timer, A e B che possono generare degli interrupt ma non capisco come poter ottenere unafrequenza di interrupt abbastanza bassa (circa 4Hz) considerando che il clock del micro è 22,1MHz circa..Chi mi può aiutare con un esempio? e chiarirmi come lavorano questi timer?Ah ovviamente sto usando il Dinamic C 8.61...Grazie Ciao Link al commento Condividi su altri siti More sharing options...
muttano Inserita: 6 aprile 2006 Segnala Share Inserita: 6 aprile 2006 ciao,io non uso il Rabbit ma comunque lancio un'idea che però non è detto sia adatta al tuo problema. Per osservare il tuo conteggio ogni 250mS potresti costruirti un timer software fatto che viene aggiornato ogni millisecondo dal secondo timer a tua disposizione. La risoluzione è circa 1mS che magari è trascurabile rispetto ai tuoi 250.altrimenti conta più fitto./********************************************************************//* TimerAint interrupt function *//* aggiorna ogni millisecondo il vettore dei timer dei millisecondi *//* aggiorna ogni millisecondo il vettore dei timer dei secondi *//* ogni timer è attivo se diverso da zero e aggiornato se attivo *//********************************************************************/static unsigned int timer_vect[MAX_TIMER];static unsigned int timer_vect_sec[MAX_TIMER];static unsigned int sec=0;void TimerAint(void) // interrupt function { int i; ENABLE_INTERRUPT; // enable interrupts for(i=0;i<MAX_TIMER;i++) //aggiorno vettore millisecondi { if(timer_vect==0) ; //lascialo a 0 in quanto il timer sw nella posizione i è scaduto else timer_vect--; } sec++; //aggiorno vettore secondi(variabile esterna) if (sec==60) { for(i=0;i<MAX_TIMER;i++) { if(timer_vect_sec==0); else timer_vect_sec--; } sec=0; } }poi con questa varifichi se il tuo timer è scaduto (gli passi la posizione del vettore dei millisecondi che ti serve)int check_timer_milli(int timer){ while (timer_vect_sec[timer]>0); //rimanendo in questa rutine permette all'altro interrupt di contare return 1; }ciao,spero di non aver scritto un sacco di roba inutile Link al commento Condividi su altri siti More sharing options...
ifachsoftware Inserita: 7 aprile 2006 Segnala Share Inserita: 7 aprile 2006 Dovrei guardare per la serie 2000 , ma l'RCM3010 gestisce l'encoder direttamente.Ciao Link al commento Condividi su altri siti More sharing options...
dlgcom Inserita: 7 aprile 2006 Segnala Share Inserita: 7 aprile 2006 Per quello che hovisto , non mi sembra che ci siano entrate per encoder nella fam 2000.Pero' e' strano che non ci sia la possibilita di comandare un contatore interno con un impulso esterno. Link al commento Condividi su altri siti More sharing options...
walterword Inserita: 18 aprile 2006 Segnala Share Inserita: 18 aprile 2006 per usare il timer b devi utilizzare una libreria che si scarica gratuitamente , puoi fare una ricerca su googleHo cercato tanto anche io ma non ho trovato altro .Poi ho preferito mollare il colpo con rabbit anche per questa ragione .ciao Link al commento Condividi su altri siti More sharing options...
Messaggi consigliati
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 accountAccedi
Hai già un account? Accedi qui.
Accedi ora