Buongiorno,
riprendo da questo thread
viewtopic.php?f=16&t=15729&start=1410per aprire il "mio" filone sull'els e relativi problemi-chiarimenti-consigli.
In allegato metto il programma che, per ora, ha girato solo sul banco. Presto dovrei riuscire a provarlo sul tornio.
Se qualcuno vuole provarlo son disponibile a spiegare tutto quello che serve.
Premessa: il lavoro non e' tutta farina del mio sacco, ha preso spunto dal lavorone di McMax, dal lavorone di un russo e rubando l'interfaccia del programma di Mimoletti. Un doveroso ringraziamento a tutti per il lavoro che avete fatto.
Non volevo reinventare l'acqua calda ma c'erano cose che non mi piacevano nel programma di McMax, cose che non mi piacevano in quello del russo e cose che non mi piacevano in quello di Mimoletti.
Quindi mi sono creato il mio programma con qualche feature in piu' (che se funziona dovrebbe rendere il tutto piu' funzionale rispetto a quello di mimoletti e di McMax) e togliendo tante cose rispetto al programma di McMax e del russo che, per come lavoro io, non le avrei mai usate a vantaggio di una interfaccia utente piu' immediata.
Giusto due precisazioni, riprendendo il vecchio thread (chi partecipa si beva una tazza di camomilla altrimenti ci sbattono fuori tutti
)
1. McMax, mentre stavo guidando ho avuto l'illuminazione su quello che cercavi di spiegarmi sulla routine di interrupt. Nel tuo programma, quando entri nelle varie funzioni (filettatura, avanzamento, ecc...) fai partire un ciclo while che diventa falso solo alla pressione di un pulsante. Adesso capisco perche' dicevi che mettendo tutto sotto interrupt il ciclo "normale" diventava sterile.
In realta' ho fatto anch'io cosi', prendendo spunto dal tuo programma (e, di nuovo, ti ringrazio perche' ho trovato tante nuove idee). Pero', preso dalla discussione (e dal fatto che il programma l'avevo scritto due mesi fa, poi accantonato per mancanza di tempo, e non mi ricordo neanche cos'ho fatto stamattina) non avevo considerato che avevo fatto anch'io come te e quindi non capivo a pieno il tuo discorso.
Nella discussione mi ero concentrato sulla routine di interrupt pensando di averla chiamata all'interno della funzione "filettatura" (quindi dove vado a gestire anche il display, ad esempio).
Solo stamattina ho avuto il flash che l'interrupt lo "accendo" giusto prima di entrare nel while quindi posso tranquillamente gestire li' il motore (nel mio ciclo while, alla fine, c'e' solo il controllo del pulsante per uscire e poco altro).
Per un programmatore navigato sara' una banalita' ma per un programmatore ignorante non e' cosi' banale (pur avendo capito il tuo programma e quello del russo, mi mancava l'ultimo passo per capire al 100%).
2. sempre domanda per McMax, perche' hai usato il timer1 per gestire la generazione del passo? Ok, capito, mi sono risposto da solo.
Tu devi generare anche un segnale pwm per l'avanzamento asincrono. Visto che e' una cosa che non avrei mai usato (trovo molto piu' comodo e diretto l'avanzamento a cent/giro) la relativa funzione l'avevo guardata ma non approfondita.
3. ultima domanda per esaurire quello che era rimasto in sospeso dal vecchio thread: si discuteva sul fatto di far fare piu' operazioni contemporaneamente al micro. Mi e' rimasto un dubbio: le periferiche (ad esempio i timer e l'interfaccia qei) sono indipendenti dalla cpu, giusto? Se imposto un timer che faccia cambiare di stato la relativa porta OC, questa cambiera' di stato senza occupare la cpu, corretto? Quindi il micro e' in grado di fare piu' operazioni contemporaneamente (inteso letteralmente, non che sembrano contemporanee).
Era giusto un dubbio, dalla discussione mi sembrava di aver capito il contrario ma potrei aver capito male io (o aver sbagliato quanto scritto sopra).