Pages: [1]   Go Down
Author Topic: PWM arduino mega  (Read 1290 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Full Member
***
Karma: 0
Posts: 131
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
Faraday Member
**
Karma: 26
Posts: 5492
фон Крыса
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
Faraday Member
**
Karma: 26
Posts: 5492
фон Крыса
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

qui troverai le info di cui necessiti :
http://pdf1.alldatasheet.com/datasheet-pdf/view/107090/ATMEL/ATMEGA1280.html
Logged

Se corri veloce come un fulmine, ti schianterai come un tuono.

Offline Offline
Full Member
***
Karma: 0
Posts: 131
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

SoftwarePWM suppongo sia una libreria giusto? sai dirmi dove la trovo?
Logged

Monselice PD Italy
Offline Offline
Faraday Member
**
Karma: 26
Posts: 5492
фон Крыса
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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=1268806013

Se devi controllare led e vuoi una cosa pulita usa un 74HC595 smiley
in questo modo espandi le porte ..
Logged

Se corri veloce come un fulmine, ti schianterai come un tuono.

Offline Offline
Full Member
***
Karma: 0
Posts: 131
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
Full Member
***
Karma: 0
Posts: 131
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

potresti spiegarmi meglio la storia del TIMER2? cos'è?
Logged

Monselice PD Italy
Offline Offline
Faraday Member
**
Karma: 26
Posts: 5492
фон Крыса
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley


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 smiley
Logged

Se corri veloce come un fulmine, ti schianterai come un tuono.

Offline Offline
Full Member
***
Karma: 0
Posts: 131
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
Full Member
***
Karma: 0
Posts: 131
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
Brattain Member
*****
Karma: 251
Posts: 21266
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
Full Member
***
Karma: 0
Posts: 131
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
Tesla Member
***
Karma: 120
Posts: 9168
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 251
Posts: 21266
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

secondo http://arduino.cc/en/Main/ArduinoBoardMega2560 sono 14 Pin PWM
secondo http://arduino.cc/en/Hacking/PinMapping2560 ci sono 22 Pin PWM.
secondo http://www.atmel.com/Images/doc2549.pdf pagina 1:
- Four 8-bit PWM Channels
– Six/Twelve PWM Channels with Programmable Resolution from 2 to 16 Bits (ATmega1281/2561, ATmega640/1280/2560)
percui arriverei a 16 PWM

Ciao Uwe
« Last Edit: February 08, 2012, 06:44:53 am by uwefed » Logged

Pages: [1]   Go Up
Jump to: