PWM sui pin non indicati?

avrei bisogno di avere di creare dei segnali pwm sui pin dal 0 al 8, su un ATmega328, non mi importa che siano precisissimi, devo solo controllare dei led... esiste già qualcosa di fatto o devo crearmi la funzione? voi come mi consigliate di fare? grazie mille ;)

Software PWM, la trovi nel playground

Software PWM non l'ho trovato, però ho trovato questo codice http://arduino.cc/playground/Main/PWMallPins è questo? però è un codice che fa solo quello o sbaglio? a me servirebbe farmi una funzione che lavora in background se è possibile...

Io ho trovato questa: http://code.google.com/p/rogue-code/wiki/SoftPWMLibraryDocumentation

?R: Software PWM non l'ho trovato, però ho trovato questo codice http://arduino.cc/playground/Main/PWMallPins è questo? però è un codice che fa solo quello o sbaglio? a me servirebbe farmi una funzione che lavora in background se è possibile...

Allora devi prendere un interrupt agganciato ad un timer ed usare quello per modificare lo stato del pin su cui vuoi simulare il segnale PWM. Si tratta di ricrearti una semplice funzioncina che metta High o Low il pin per il tempo necessario a ricreare la frequenza ed il duty cicle che ti servono.

leo72: Io ho trovato questa: http://code.google.com/p/rogue-code/wiki/SoftPWMLibraryDocumentation

questa è interssante e mi piace :)

leo72:

?R: Software PWM non l'ho trovato, però ho trovato questo codice http://arduino.cc/playground/Main/PWMallPins è questo? però è un codice che fa solo quello o sbaglio? a me servirebbe farmi una funzione che lavora in background se è possibile...

Allora devi prendere un interrupt agganciato ad un timer ed usare quello per modificare lo stato del pin su cui vuoi simulare il segnale PWM. Si tratta di ricrearti una semplice funzioncina che metta High o Low il pin per il tempo necessario a ricreare la frequenza ed il duty cicle che ti servono.

quelle cose lì non le so fare, non ho ancora imparato =(

?R: quelle cose lì non le so fare, non ho ancora imparato =(

Tu mi dici come costruire un robottino e io ti faccio la funzioncina PWM :stuck_out_tongue_closed_eyes:

leo72:

?R: quelle cose lì non le so fare, non ho ancora imparato =(

Tu mi dici come costruire un robottino e io ti faccio la funzioncina PWM :stuck_out_tongue_closed_eyes:

ahaha ma fare i robot è semplice: ti basta mettere insieme qualche motore e qualche sensore poi decidi da SW cosa fare, penso che tu conosci già tutti questi elementi singolarmente, non penso tu abbia problemi a metterli insieme ;) invece io non conosco proprio come gestire gli interrupt sui timer =( è diverso :P

Non ho problemi nell'assemblamento dei componenti, ho difficoltà a reperire i "giusti" componenti ;)

Cmq i timer non sono impossibili da gestire. Se ti scarichi le ultime lib che ho creato, la swRTC e la leOS, al loro interno vedrai la gestione del timer 2. Si tratta di calcolare a priori la frequenza, da lì si calcola il valore da dare al contatore del timer. Poi ad ogni interrupt si cambia lo stato del pin, tenendo conto del duty cicle, ossia del rapporto fra stato High e stato Off del segnale.

L'unica cosa è che se tocchi i timer, devi stare attento di non andare ad interferire con altre librerie che stai usando nel tuo progetto e che potrebbero anch'esse appoggiarsi su interrupt o timer.

ok grazie mille dopo le guardo :wink:

che programma si usa per compilare i codici delle librerie? e che codice è usato? vorrei imparare anch’io a fare delle librerie :slight_smile:

E' C++ normale come quello del tuo sketch :P Non le compili in anticipo, semplicemente le includi nei tuoi sketch e poi il compilatore compila tutto.

Un punto di partenza è questo: http://arduino.cc/en/Hacking/LibraryTutorial

ahn ok ok quindi non lo puoi compilare prima? domani guardo, grazie mille ;)

ho letto la pagina che mi hai linkato ;) pensavo fosse più complicato creare le librerie :P adesso devo capire come gestire i timer e poi dovrei essere a posto ;)

Per i timer ti suggerisco di aprirti una delle mie lib, ho commentato moltissimo il codice per cui riesci a capire, datasheet alla mano, a cosa servono i singoli registri.

quale delle tante mi suggerisci in particolare per poter capire più facilmente?

La leOS va bene. Ha la gestione del timer anche per micro non Atmega328 così vedi che cambiano i registri ma il principio è uguale.

ok ho guardato un po', sinceramente speravo fosse leggermente più semplice la cosa :sweat_smile: domani guardo meglio e provo a capire cosa sono tutti quei registri ;)

Beh, si va a "giocare" con i registri del microcontrollore, un minimo di difficoltà è normale dato che stai "spippolando" direttamente nella *stanza dei botton*i :stuck_out_tongue_closed_eyes:

si vero hai ragione :sweat_smile:

comunque la libreria che mi avevi linkato e che mi sembrava buona, questa:

leo72: Io ho trovato questa: http://code.google.com/p/rogue-code/wiki/SoftPWMLibraryDocumentation

non me la compila e mi da una serie di errori riguardanti la libreria:

C:\Users\User\Documents\Arduino\libraries\SoftPWM\SoftPWM.cpp: In function 'void SoftPWMSet(int8_t, uint8_t, uint8_t)':
C:\Users\User\Documents\Arduino\libraries\SoftPWM\SoftPWM.cpp:232: error: 'digitalPinToPort' was not declared in this scope
C:\Users\User\Documents\Arduino\libraries\SoftPWM\SoftPWM.cpp:232: error: 'portOutputRegister' was not declared in this scope
C:\Users\User\Documents\Arduino\libraries\SoftPWM\SoftPWM.cpp:233: error: 'digitalPinToBitMask' was not declared in this scope

A me paiono i soliti errori da conflitto di versioni. Immagino tu stia usando l'IDE 1.0.1. Devi aprire la lib e sostituire #include "WProgram.h" con #include "Arduino.h". Poi provare a ricompilare e vedere se va tutto bene.