Offline
Jr. Member
Karma: 0
Posts: 77
|
 |
« on: February 07, 2012, 02:57:34 pm » |
ciao a tutti! la domanda è la seguente: sul mega ho 13 pin pwm ( dal13 a 0) poi ho dal 22 al 53 digitali, ma ho letto che alcuni (esempio 44,45,46,51,52,53 sono PWM. volevo capire se questi pin sono già PWM oppure se bisogna "settarli" come PWM. scusate ma sono agli inizi! se vanno settate come faccio? librerie?
|
|
|
|
|
Logged
|
|
|
|
|
Monselice PD Italy
Offline
Faraday Member
Karma: 15
Posts: 4907
фон Крыса
|
 |
« Reply #1 on: February 07, 2012, 03:05:26 pm » |
in teoria puoi fare PWM in qualsiasi pin con la SoftwarePWM però, se ti guardi il datasheet del microcontrollore sicuramente vedrai quali sono e quali non sono PWM.
|
|
|
|
|
Logged
|
Se corri veloce come un fulmine, ti schianterai come un tuono.
|
|
|
|
Monselice PD Italy
Offline
Faraday Member
Karma: 15
Posts: 4907
фон Крыса
|
 |
« Reply #2 on: February 07, 2012, 03:11:55 pm » |
|
|
|
|
|
Logged
|
Se corri veloce come un fulmine, ti schianterai come un tuono.
|
|
|
|
Offline
Jr. Member
Karma: 0
Posts: 77
|
 |
« Reply #3 on: February 07, 2012, 03:37:29 pm » |
SoftwarePWM suppongo sia una libreria giusto? sai dirmi dove la trovo?
|
|
|
|
|
Logged
|
|
|
|
|
Monselice PD Italy
Offline
Faraday Member
Karma: 15
Posts: 4907
фон Крыса
|
 |
« Reply #4 on: February 07, 2012, 03:50:24 pm » |
Occhio però.... usa il Timer2 se nel programma in cui vuoi usare la SwPWM usi delle librerie che interagiscono con questo timer avrai problemi durante l'esecuzione.... http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1268806013Se devi controllare led e vuoi una cosa pulita usa un 74HC595  in questo modo espandi le porte ..
|
|
|
|
|
Logged
|
Se corri veloce come un fulmine, ti schianterai come un tuono.
|
|
|
|
Offline
Jr. Member
Karma: 0
Posts: 77
|
 |
« Reply #5 on: February 07, 2012, 04:19:51 pm » |
ma io veramente dovrei usare il PWM per i servi, ma ho letto che non è detto che la libreria funzioni per i servi dato che è stata creata per i led, ma con qualche "ritocco" dovrebbe andare. ti ringrazio!
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Jr. Member
Karma: 0
Posts: 77
|
 |
« Reply #6 on: February 07, 2012, 05:01:06 pm » |
potresti spiegarmi meglio la storia del TIMER2? cos'è?
|
|
|
|
|
Logged
|
|
|
|
|
Monselice PD Italy
Offline
Faraday Member
Karma: 15
Posts: 4907
фон Крыса
|
 |
« Reply #7 on: February 07, 2012, 05:12:28 pm » |
Se devi pilotare dei servocomandi da modellismo usa la libreria Servo.h o SoftwareServo.h senza complicarti la vita e facendoli lavorare male usando il PWM... I servi si pilotano in PPM e non PWM  Dentro al micro ci sono dei timer, questi "detto semplicisticamente" sono dei contatori che si incrementano sempre da quando alimenti il micro ovviamente, se te prelevi il numero che contengono puoi lavorare con i tempi, ad esempio il pwm modula a 490Hz se non sbaglio (per arduino a 16MHz di clock) il duty cycle di un onda quadra, i tempi dati dai timer danno la cadenza in cui l'onda dev'essere HIGH o LOW ... il discorso è abbastanza complesso 
|
|
|
|
|
Logged
|
Se corri veloce come un fulmine, ti schianterai come un tuono.
|
|
|
|
Offline
Jr. Member
Karma: 0
Posts: 77
|
 |
« Reply #8 on: February 08, 2012, 04:48:07 am » |
ma il timer sarebbe il clock quindi? usando la libreia servo ottengo il pwm su qualsiasi pin digitale? se fosse così non ci sono problemi. io ho bisogno il pwm su altri pidini solo perchè usando delle shield i pin PWM(dal 13 al 2) sono tutti occupati. quindi usavo gli altri digitali come PWM.
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16462
Don't know what I do
|
 |
« Reply #9 on: February 08, 2012, 05:02:30 am » |
No, il clock è il circuito che dà il segnale di sincronizzazione al micro, quello che poi comunemente si chiama "frequenza". Un timer è un temporizzatore, è un circuito basato su un registro che ad ogni segnale di clock viene incrementato. E' possibile manipolare questi timer (sono più di 1) per fargli compiere particolari operazioni, dal semplice conteggio del tempo (il timer 0 sugli Arduino è usato proprio per questo: la funzione millis() e la delay() funzionano grazie ad un contatore che viene aggiornato grazie all'incremento del timer 0) alla generazione di un'onda quadra (basta mettere lo stato del pin su High o Low dopo un certo lasso di tempo, basato appunto su un timer).
I pin che possono generare segnali in PWM sono quelli marchiati con un simbolo ~ sull'Arduino.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Jr. Member
Karma: 0
Posts: 77
|
 |
« Reply #10 on: February 08, 2012, 05:35:37 am » |
grazie leo72 della spiegazione,ora è un po' più chiaro. però il mio problema è che i pin con il simbolo PWM sono tutti utilizzati, quindi volevo utilizzare altri pin digitali come PWM(parliamo di arduino mega). per farlo basta la libreia servo?
|
|
|
|
|
Logged
|
|
|
|
|
BZ (I)
Offline
Brattain Member
Karma: 162
Posts: 15712
+39 349 2158303
|
 |
« Reply #11 on: February 08, 2012, 05:41:44 am » |
no, la libreria Servo non é per il PWM. Il mega ha 14 Uscite PWM. E`preferibile usare i pin PWM Hardware che l' emulazione Software. Non puoi sostituire dei Pin su altri per liberare dei PWM? Ciao Uwe
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Jr. Member
Karma: 0
Posts: 77
|
 |
« Reply #12 on: February 08, 2012, 06:22:00 am » |
ciao Uwe! stavo guardando il mapping del mega. http://arduino.cc/en/Hacking/PinMapping2560 sembrerebbe che anche altri pin come il 44,45,46 siano PWM (c'è scritto: digital pin 44(PWM)) cosa dici? purtroppo non riesco a liberare i pin da 0 a 13. uso 2 shield (motor e joystick) che li usano tutti(ho già dovuto cambiare dei pin perchè venivano usati da tutte e due le shield)
|
|
|
|
|
Logged
|
|
|
|
|
Rome (Italy)
Offline
Tesla Member
Karma: 74
Posts: 7357
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
|
 |
« Reply #13 on: February 08, 2012, 06:28:49 am » |
Però il mio problema è che i pin con il simbolo PWM sono tutti utilizzati, quindi volevo utilizzare altri pin digitali come PWM(parliamo di arduino mega). per farlo basta la libreia servo?
Prima di tutto con il PWM di Arduino non puoi comandare dei servo, la frequenza di carrier è troppo alta, 490 Hz invece di 50 Hz, e poi avresti una bassa risoluzione visto che il PWM consente solo 256 step, poi c'è pure il fatto che i servo si comandano in PPM e non in PWM, anche se i due segnali sono simili e volendo forzare la cosa con il PWM è possibile imitare il PPM non è comunque la stessa cosa. Per comandare i servo devi usare la libreria servo che sfrutta il timer 2 per generare il corretto impulso PPM con risoluzione fino al singolo us, tramite questa libreria puoi comandare i servo tramite un qualunque pin di Arduino, unica limitazione è il numero di servo controllabili, fino a 12 sulla UNO e fino a 48 sulla MEGA.
|
|
|
|
|
Logged
|
|
|
|
|
|
|
|