roberto8303 Inserito: 18 agosto 2009 Segnala Inserito: 18 agosto 2009 Buongiorno,devo usare un encoder per attivare un cerchio di luci disposte appunto su una ruota. quindi l albero dell encoder man mano che gira accende una lampada fino ad un giro completo e tutte le lampade accese ( 360°)ora ho a disposizione un encoder da 3600 imp giro e la cpu un s7 222 con 6 uscite a rele.la cosa è abbastanza semplice per ora, perche ho configurato l encoder e ho scritto 6 segmenti nel main dove faccio i confronti e attivo l uscite: cioe, quandol encoder ha fatto 600 imp attivo la prima lampada, quando ne avra fatti 1200 attivo la seconda lampada, quando sara 1800 la terza e cosi via fino a 3600imp sesta lampada accesa.Ora volevo chiedere ma per non scrivere i sei segmenti non che sono pigro ma perche se le lampade invece di 6 sono 60 come posso fare per risolvere scrivendo pochi segmenti??? cè una soluzione?
Livio Orsini Inserita: 18 agosto 2009 Segnala Inserita: 18 agosto 2009 Copia e incolla dei segmenti e piccole modifiche
roberto8303 Inserita: 18 agosto 2009 Autore Segnala Inserita: 18 agosto 2009 Ciao Livio , le soluzioni piu semplici sono a volte le piu difficili da trovare, ma stavo pensando non è che si potrebbe fare qualcosa con lo scorrimento verso dx o sx o la rotazione dei bit in una word?
Livio Orsini Inserita: 18 agosto 2009 Segnala Inserita: 18 agosto 2009 (modificato) Dipende tutto da come hai organizzato il tuo programma. Puoi usare incrementi, scorrimenti, oppure mettere i valori di compoarazione e di uscita in una tabella ed incrementare il puntatore alla tabella ad ogni comparazione positiva.I modi sono quasi infiniti.Dipende dai gusti, preferenze e....sensibilità Modificato: 18 agosto 2009 da Livio Orsini
roberto8303 Inserita: 18 agosto 2009 Autore Segnala Inserita: 18 agosto 2009 oppure mettere i valori di compoarazione e di uscita in una tabella ed incrementare il puntatore alla tabella ad ogni comparazione positiva.questo deve essere interessante ma non so di cosa parli...
Livio Orsini Inserita: 18 agosto 2009 Segnala Inserita: 18 agosto 2009 encoder ha fatto 600 imp attivo la prima lampada, quando ne avra fatti 1200 attivo la seconda lampada, quando sara 1800 la terza e cosi via fino a 3600imp sesta lampada accesa.Fai due array; nel primo metti i valori del contatore (600, 1200, etc); nel secondo metti i corrispondenti valori di uscita (Q0, q1, etc. p.e.)Poi fai una variabile ch s'incrementa, con questa individui l'elemento degli array. Partirai da 0. Carichi nel registro dello HSc il valore del primo array corrispondente alla variabile (0 per il primo)Avrai settato lo HSc in mofo che dia un interrupt al raggiungimento del valore di comparazione tra contatore e registro. Sull'interrupt butti fuori l'uscita corrispondente all'elemeto dell'array indicato dalla variabile. Incrementi la variabile, carichi nel registro di comparazione l'elemento dell'array puntato dal nuovovalore ed esci dalla routine d'interrupt.Ovviamente devi fare il controllo perchè arrivato all'unltimo elemento devi ripartire da zero (buffer circolare o stack circolare).In questo modo per qualsiasi modifica di valore o aggiunte di elemnti devi manovrare solo sui dati della tabella.
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