stefano_ Inserito: 28 ottobre 2005 Segnala Inserito: 28 ottobre 2005 ciao,dovrei fare una semplice scheda per comandare 2 stepper in unipolare.I 2 motori devono poter girare a 2 velocita diverse e variabili ed anche il verso di rotazione dei 2 motori può essere diverso.Per fare il tutto ho deciso di utilizzare un 16f84 2 ne555 2 potenziometri per regolare la velocità dei 2 motori ed un switch 2 poli per invertire il senso di rotazione dei 2motori.Bene detto questo voi mi direte che era mooolto più comodo utilizzare un 16f877 e sfruttare la conversione A/D dello stesso senza utilizzare l' NE ma visto che non sono esperto avevo paura che:1) si complicasse troppo la programmazione 2) di 16f84 ne ho parecchi mentre l'877 lo devo acquistare 3) non ho un programmatore che mi programmi pic a 40 piediniil problema principale comunque rimane quello della programmazione !!!!vengo al dunque,per adesso ho utilizzato 1ne che mi genera un onda quadra che mi va ad un ingresso del pic e ad ogni fronte di salita mi "shifta" di un bit in modo tale da attivare in sequenza tutte le fasi del motore. Funzia pure bene ora però devon inserire l'altro ne per il secondo motore e non so come devo fare o meglio avevo pensato di mandare l'uscita del second ne al pinRB0 ( che se non sbaglio attiva l'interrupt ad ognicambiamento di stato) in questo modo ogni volta che rb0 cambia stato quindi ogni 2 cambiamenti di stato shifto l'uscita che va al motore.Che ne dite ??Ringrazio tutti e scisate se mi sono dilungato.
ifachsoftware Inserita: 28 ottobre 2005 Segnala Inserita: 28 ottobre 2005 Scusa , ma il primo segnale su che pin lo hai messo ???Perche' secondo me entrambi andrebbero portati su degli ingressi ad interrupt , e gli unici interrupt che hai su tale PIC sono RB0 e RB4-RB7 , dove per il primo (RB0) hai la possibilita' di gestire l'interrupt su fronte o di salita o di discesa , mentre su RB4-RB7 hai l'interrupt su ogni variazione di stato su uno qualsiasi dei 4 pin.Data l'applicazione collegherei entrambi per esempio su RB4 e RB5 e ad ogni interrupt , discrimino quello che e' intervenuto e opero di conseguenza.Ciao
stefano_ Inserita: 28 ottobre 2005 Autore Segnala Inserita: 28 ottobre 2005 per adesso ho collegato il primo ne ad un ingresso "senza" interrupt ed ho gestito tutto tramite software !!comunque ora farò come hai detto tu.Grazie 1000
ifachsoftware Inserita: 28 ottobre 2005 Segnala Inserita: 28 ottobre 2005 per adesso ho collegato il primo ne ad un ingresso "senza" interrupt ed ho gestito tutto tramite software !!
stefano_ Inserita: 28 ottobre 2005 Autore Segnala Inserita: 28 ottobre 2005 ripeto, non sono molto esperto e comunque si parla di frequenza all'ordine di 100 / 200 Hz
stefano_ Inserita: 30 ottobre 2005 Autore Segnala Inserita: 30 ottobre 2005 per ifachsoftware:ho fatto come hai detto tu ed ho tirato giu il seguente programmino scritto con mikrobasic:Dim Conta as integerDim Blocca as boolean' Procedura eseguita quando si verifica un cambiamento di stato sui bit 4,5,6 e 7 di portbsub procedure int_provaif testbit (intcon,RBIF) = 1 then 'se l'interupt è stato causato da un cambiamento di stato di rb4,5,6,o 7conta = conta +1end ifSelect case conta Case 1 porta.0 = 1 Case 2 portb.0 = 1End selectend submain:trisa = 0 ' Setto tutta la porta A come uscitatrisb = %00001111 ' Setto la porta B ' In1 = portB.4 pin 10' In2 = portB.5 pin 11' Out1 = portA.0 pin 17' Out2 = portA.1 pin 18' Out3 = portA.2 pin 1' Out4 = portA.3 pin 2' Out5 = portB.0 pin 6' Out6 = portB.1 pin 7' Out7 = portB.2 pin 8' Out8 = portB.3 pin 9INTCON = %10000001 ' Abilito l'interrupt sul cambiamento di stato dei pic RB4:RB7end.in pratica i 2 clock degli ne55 vanno a finire sui pin rb4 ed rb5, testando il bit rbif riesco a sapere se la causa che ha generato l'interrupt è stata il cambiamento di stato di rb4, 5 6 o7 ma non funziona,ho provato a simularlo ma la sub "int_prova" non viene mai eseguita .Sicuramente sarà una banalità per te ma per me che non sono esperto mi sta facendo diventare matto !!!Mi puoi dare qualche dritta ?? Grazie
ifachsoftware Inserita: 30 ottobre 2005 Segnala Inserita: 30 ottobre 2005 Non conosco il Basic della Mikroelectronica , comunque posso dirti che i Pic hanno un interrupt dedicato per i segnali RB4-RB7 , personalmente in C (con cui lavoro solitamente) metterei in una variabile static nell'interrupt il vecchio valore letto sulla porta e poi con dei mascheramenti di bit andrei a capire quale e' il segnale incrementando il contatore.Ciao
ifachsoftware Inserita: 30 ottobre 2005 Segnala Inserita: 30 ottobre 2005 Ti allego un esempio fatto col compilatore C della CCSshort int Cnt1,Cnt2;#int_rbvoid detect_rb_change() { int current; static int last = 0; set_tris_b(0xF0); current=input_b(); if ((!bit_test(last,4))&&(bit_test(current,4))) Cnt1++; // Incrementa Cnt1 se variazione su PB4 if ((!bit_test(last,5))&&(bit_test(current,5))) Cnt2++; // Incrementa Cnt2 se variazione su PB4 last=current;}void main() { Cnt1=Cnt2 = 0; // Azzera i contatori enable_interrupts(INT_RB); enable_interrupts(GLOBAL); while (TRUE) { }}
stefano_ Inserita: 31 ottobre 2005 Autore Segnala Inserita: 31 ottobre 2005 grazie infinite,non ci ho capito molto anche perche non sono esperto comunque me lo studierò per benino e cercherò di tirarci fuoriqualcosa di buono.Grazie.
stefano_ Inserita: 2 novembre 2005 Autore Segnala Inserita: 2 novembre 2005 accidenti,non riesco proprio a far funzionare l'interrupt con microbasic !!!Se avete qualche consiglio dite pure.Grazie.
Livio Orsini Inserita: 2 novembre 2005 Segnala Inserita: 2 novembre 2005 Stefano, te lo do io un consiglio. Lascia stare per il momento il micro basic. Guarda gli esempi ed i tutorial in assembler su come si usano gli inerruts. Fai una prova con una routinetta semplice semplice. Poi cerca di ripeterla in microbasic, magari leggendo il lstato espanso in assembler in modo da poter fare i confronti.Comunque, come consiglio generale, lascia perdere il microbasic. E' un giocattolo che non porta da nessuna parte.
ifachsoftware Inserita: 2 novembre 2005 Segnala Inserita: 2 novembre 2005 Comunque, come consiglio generale, lascia perdere il microbasic. E' un giocattolo che non porta da nessuna parte.
stefano_ Inserita: 3 novembre 2005 Autore Segnala Inserita: 3 novembre 2005 grazie,provvederò subito.
Claudio F Inserita: 4 novembre 2005 Segnala Inserita: 4 novembre 2005 Per curiosita' io ho invece provato il pascal... ebbene un'operazione su un longint del tipo pippo:=pippo+1; la compila, invece pippo:=pippo+2; manda in errore il linker :lol: Peccato... ma se anche basic e C sono a questo livello...
stefano_ Inserita: 7 novembre 2005 Autore Segnala Inserita: 7 novembre 2005 scusate, un'ultima cosa,come posso limitare la corrente ??Se comandassi i motori in bipolare con i 297 / 298 ho il relativo igresso per limitare la coorrente,in questo modo invece come posso fare ?Grazie.
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