Saluti a tutti voi,
la mia e' una domanda per molti banale ma e' una curiosita' riguardo la scheda UNO e NANO.
Prendo come esempio 2 pin, il D3 ed il D4.
Il D3 output mi fornisce 256 valori grazie ai quali posso variare la luminosita' di un led.
Il D4 riconosce solo 1 o 0.
E' possibile variare la luminosita' con il PIN D4 che non sia solo acceso o spento ?
Cio' senza l'ausilio di accessori quali R ecc. in pratica l'uscita pura come o simile a D3.
Abbiate pazienza ma e' solo una domanda.
Grazie e ciao
Prova a vedere "soft pwm library"
Dovrebbe fare al caso tuo
Il microcontrollore ha alcuni piedini predisposti per il PWM hardware, cioè ha dei circuiti appositi collegati a quei piedini. Su altri va fatto tramite software, usando gli interrupt.
Grazie per le risposte.
Cerchero' nelle librerie cercando di capire da dove iniziare anche perche' la versione 1.8.19 non mi pare molto ricca e comunque vedro' sulla rete.
Per quanto riguarda gli interrupt devo conoscere il microprocessore.
Io conoscevo quelli del 8088-8086
mov cx,lmessaggio ; carica lungh messaggio
mov dx,OFFSET messaggio ; in DX l'indirizzo
mov ah,40h ; funzione DOS per scrittura
int 21h ; chiama l'interrupt
; in AH 4C e AL 00 errorlevel
int 20h ; Chiama il DOS
;_TEXT ENDS
Questo pezzo su scritto fa parte di un programmino per scrivere sullo schermo e risale a oltre 30 anni fa e non ricordo piu' nulla.
Qui siamo in un contesto diverso e visto che ho quasi 80 anni la mia memoria.....stendo un velo pietoso ma non voglio fare addormentare il mio cervello.
Grazie comunque per il vostro interessamento.
Ciao ciao
Esistono anche un paio di trickpwm, usabili in alcuni contesti su qualsiasi PIN e senza interrupt, MA... a patto che il ciclo di loop giri costante alla massima velocità, senza altri loop o delay che creino ritardi.
Entrambi prevedono 100 passi.
La versione "normale" è semplicemente il confronto con una soglia 'duty' 0→100 con un contatore ciclico 'i' 0→99. Dato che il contatore va incrementato ad ogni ciclo di loop, la frequenza del PWM sarà un centesimo del tempo di loop.
out = i < duty;
La seconda versione è un PWM a larghezza di impulso costante (lunga quanto un ciclo di loop) e frequenza variabile. La media integrata sul lungo periodo in entrambi i casi corrisponde, anche se sul breve periodo non è così.
In questo caso si usa un contatore 'n' inizializzato a zero all'avvio:
out = 0;
n += duty;
if (n > 99){
n -= 100;
out = 1;
}
Grazie per il consiglio. Avevo previsto qualcosa di simile ma prima voglio vedere con l'oscilloscopio le forme d'onda che escono da UNO per capirci qualcosa di piu'
Pensavo appunto che simulando il PWM da un piedino digitale qualcosa ne puo' uscire ma devo studiarmi la procedura di programmazione.
Guardo le fotografie che sono molto belle e nitide e penso a cio' che vedo sul mio GOS 620
20 MHz che sta diventando un pezzo da museo.
Pensa che uso ancora un tester Chinaglia made in Belluno che ha quasi 55 anni......e funziona benissimo.
Scusa per i miei voli pindarici
Grazie e ciao
Saluti a tutti,
con il forum combino qualche guaio. Ho risolto comunque il discorso PWM su digitale.
In pratica il led collegato aumenta e diminisce la sua luminosita'. Non e' il meglio ma funziona.
Ciao ciao
int rit=1000;
int x=0;
void setup()
{
pinMode(4, OUTPUT);
}
void loop()
{
x=0;
while(x<rit)
{
digitalWrite(4, HIGH);
delayMicroseconds(x);
digitalWrite(4, LOW);
delayMicroseconds(rit-x);
x=x+1;
}
x=0;
while(x<rit)
{
digitalWrite(4, LOW);
delayMicroseconds(x);
digitalWrite(4, HIGH);
delayMicroseconds(rit-x);
x=x+1;
}
}
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.