Buongiorno, ho bisogno di avere il segnale di uscita PWM in controfase per pilotare dei led bipolari in PWM, il segnale in uscita dal pin 10 deve essere invertito rispetto al pin 11. Grazie.
Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento se non lo hai già fatto: Regolamento
Qui una serie di link utili, non inerenti al tuo problema:
- qui una serie di schede by xxxPighi per i collegamenti elettronici vari: ABC - Arduino Basic Connections
- qui le pinout delle varie schede by xxxPighi: Pinout
- qui una serie di link generali utili: Link Utili
Se non ho capito male la domanda, potresti usare un semplice transistor BC337.
La base la connetti al pin 10 tramite una resistenza da 1k, l'emettitore a massa ed il collettore ad un resistore da 220 ohm connesso ai +5V.
Il segnale di uscita lo prelevi dal collettore.
Ricordo di aver letto da qualche parte che si poteva impostare il PWM come inverted PWM o non-inverted PWM, e mi pare che su due piedini funzionasse proprio così. Ma non ricordo dove ho letto questa cosa.
Ciao ti posto un pezzetto di schetch che usa il timer 1 (16 bit) con overflow a 8 bit (sprecato ma avevo quello praticamente pronto)
con questo sketch hai un fast pwm su timer 1 a 1khz, il canale b e' invertito quindi in controfase perfetta rispetto al canale a
essendo impostato lo stesso duty cycle (30% se non invertito) il canale b ha duty 70% in questo esempio, ti basta modificare OCR1B per cambiare duty (il valore va da 0 a 255 quindi 75 e' circa 30% come dicevo che diventa 70% essendo invertito)
a pagina 135 del datasheet del 328 trovi le info che ti servono (anche in quelle sotto e sopra)
fai pure tutte le domande che ti servono!!
Edit
aggiungo che puoi modificare OCR1A e OCR1B quando vuoi durante le tuo funzioni nel loop (e non solo) per variare il duty del pwm come ti serve.
void setup() {
pinMode(9, OUTPUT); // output pin for OCR1A
pinMode(10, OUTPUT); // output pin for OCR1B
TCCR1A = _BV(COM1A1) | _BV(COM1B1) | _BV(COM1B0)| _BV(WGM10); // set fast pwm non inverting (OCR1A) inverting (OCR1B) 8 bit (overflow 255)
TCCR1B = _BV(WGM12) | _BV(CS11) | _BV(CS10); // set prescaler 64 (cpu 16mhz overflow 255 prescaler 64 == 1khz)
OCR1A = 75; //set duty cycle pin 9 arduino
OCR1B = 75; // set duty cycle pin 10 arduino
}
void loop() {
}