Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

ARDUINO: convertire uscita digitale in uscita analogica

Tipologie, strumenti di sviluppo, hardware e progetti

Moderatore: Foto UtentePaolino

3
voti

[11] Re: ARDUINO: convertire uscita digitale in uscita analogica

Messaggioda Foto Utentesimo85 » 3 giu 2014, 23:57

Dunque, ogni volta che spunta fuori Arduino si va sempre in OT.. :mrgreen:

thexeno ha scritto:motivo tempo, o il corso non è basato sui micro e ciò che si vuole fare si ottiene benissimo così, perché complicarsi la vita

Secondo me questo è un approccio molto superficiale.
Si finisce per usare uno strumento senza sapere come è fatto e come funziona veramente. Poi al primo problema, spuntano i perché. Complicarsi la vita prima serve per imparare e conoscere così le soluzioni che serviranno un domani.

Per questo sono felicissimo di aver avuto un professore che ci ha fatto programmare in C sui microcontrollori AVR usando le librerie AVR e senza Arduino ma con una schedina fatta in casa, giusto per praticare un po'..
Ovviamente se la schedina non funzionava, le due soluzioni erano: bocciato o ... bocciato. :mrgreen:

Poi provi le librerie di Arduino e ti rendi conto che è 1000 volte meglio aprirsi il datasheet.

Il professore che ci faceva programmare i PIC non ha mai menzionato le librerie varie messe a disposizione della Microchip. Assembly e C, della serie "le funzioni te le fai".

TardoFreak ha scritto:Di male in peggio, povera Italia!

Quoto.
Avatar utente
Foto Utentesimo85
30,8k 7 12 13
Disattivato su sua richiesta
 
Messaggi: 9928
Iscritto il: 30 ago 2010, 4:59

1
voti

[12] Re: ARDUINO: convertire uscita digitale in uscita analogica

Messaggioda Foto Utentedaniele1996 » 4 giu 2014, 0:14

Foto UtenteTardoFreak so benissimo come ti piange il cuore a sapere ste cose... e ora che ho capito qualcosa di base concordo con te... la gestione tramite delle librerie è facile ma non hai la possibilità di gestire il tutto a basso livello... con intralci del tipo: "il timer x è gia usato" o questo o quello...(Esperienza diretta) ora per non andare in OT, ti do una risposta (credo gia sia stata data in altri): puoi impostare un timer e ad ogni scatto di interrupt fai attivare e riduci a metà il tempo del timer, poi successivamente lo fai reimpostare al valore iniziale...

mi spiego meglio con 1 riga di codice:
Codice: Seleziona tutto
void setup(){
DDRD |= (1<<0);
}
volatile bool stato = false;

ISR(TIMER....){
//ammettiamo che stiamo usando il pin0 delle porte D
if(stato){
PORTD |= (1<<0);

//imposto il timer a metà del tempo attuale (Non lo so fare xD)

}else{
PORTD &= ~(1<<0);

//imposto il timer al tempo giusto
}
}


spero che quello che ho detto sia sensato! (e ho scritto giuste ste due righe di codice)
Ultima modifica di Foto Utentedaniele1996 il 4 giu 2014, 0:42, modificato 1 volta in totale.
Avatar utente
Foto Utentedaniele1996
580 2 8 11
Sostenitore
Sostenitore
 
Messaggi: 1236
Iscritto il: 29 ago 2011, 11:29

0
voti

[13] Re: ARDUINO: convertire uscita digitale in uscita analogica

Messaggioda Foto Utentethexeno » 4 giu 2014, 0:39

simo85 ha scritto:
Per questo sono felicissimo di aver avuto un professore che ci ha fatto programmare in C sui microcontrollori AVR usando le librerie AVR e senza Arduino ma con una schedina fatta in casa, giusto per praticare un po'..
Ovviamente se la schedina non funzionava, le due soluzioni erano: bocciato o ... bocciato. :mrgreen:


Eh vabbè, ma consideri un esempio che non è il mio.
Noi abbiamo avuto corsi (due) incentrati sui micro, ed è come descrivi tu. Ma abbiamo avuto un corso incentrati su misure automatiche fatte con micro stupidi, interfacce PC-seriale di vario tipo (un altro corso ancora), se lì non usavi Arduino, avresti dovuto lo stesso usare librerie prefatte su schede di sviluppo molto più costose (e non so perché), altrimenti lo scopo del corso veniva meno. Ovviamente il tutto non aveva riduzione di prestazioni, cioè per lo scopo nostro non è stata limitante quella piattaforma (che però non era obbligatoria, potevi fare anche tutto in assembler, of course).

edit:
A parte questa specificazione, pare evidente che avete opinioni così forti dal dover ridicolizzare il resto, tentare di esprimere una opinione quindi non serve a nulla e io non ci guadagno nulla, se non il contrario.
Avatar utente
Foto Utentethexeno
235 4 9
Frequentatore
Frequentatore
 
Messaggi: 298
Iscritto il: 12 apr 2010, 18:28

0
voti

[14] Re: ARDUINO: convertire uscita digitale in uscita analogica

Messaggioda Foto Utentesimo85 » 4 giu 2014, 1:20

Foto Utentethexeno, non si tratta di ridicolizzare, anche perché non é questo lo scopo.

Usare Arduino, o meglio dire usare le librerie Arduino è, prima di tutto inutile perché a conti fatti non so a cosa servono. Tra l' altro i datasheet sono pieni di esempi e codici.

Secondo, è dannoso se vengono utilizzate per insegnare la programmazione dei microcontrollori.

Poi ognuno è libero di fare il mega progretto domotico con Arduino, non aprirsi mai il datasheet e poi chiedersi perché dopo aver dato in pasto al micro qualche volt di troppo la scheda non funziona o cosa è una interruzione e come abilitarla perché l' IDE di Arduino non funziona e di conseguenza non si possono usare le librerie usate fino a ieri.

Menomale che almeno è open source, perché già così è grigia..

Ciao!
Avatar utente
Foto Utentesimo85
30,8k 7 12 13
Disattivato su sua richiesta
 
Messaggi: 9928
Iscritto il: 30 ago 2010, 4:59

3
voti

[15] Re: ARDUINO: convertire uscita digitale in uscita analogica

Messaggioda Foto UtenteWALTERmwp » 4 giu 2014, 1:30

Aggiungo una considerazione a quanto avete commentato, consapevole di sconfinare OT come chi mi ha preceduto.
Ho visto che spesso, quando l'argomento riguarda "Arduino", si apre una diatriba sul suo impiego.
Noto poi che alcuni (o diversi) studenti ed ex-studenti tendano a "marcare" la distanza tra loro e l'utilizzo e la modalità d'impiego dell'oggetto, quasi li potesse infastidire l'accostamento; sono solo impressioni raccolte in alcune circostanze.
Per quanto banale risulti scriverlo mi pare ovvio che la discussione dovrebbe vertire sempre sull'impiego che se ne fa, il contesto nel quale vi si ricorre e non sull'oggetto di per sè.
In alcune situazioni, credo, ma la mia cautela è solo dovuta all'ignoranza relativa ad Arduino, possa andare benissimo questo device; in altre, evidentemente no, annoverando tra queste, ad esempio, l'approfondimento relativo alla microelettronica ed in particolare l'apprendimento e lo sviluppo su "piattaforma" microcontrollore.
A rafforzare quanto sopra, col proposito d'evitare anche "leggere" interpretazioni fuorvianti, mi rendo conto che se nell'ambito universitario, in un corso di programmazione, viene perorato l'impiego di Arduino con quanto precostituito, dei dubbi siano più che leciti ma, se lo stesso oggetto viene utilizzato, e ora vado per eccesso, da degli studenti nell'ambito di una sperimentazione di scienza dell'alimentazione, si converrà che la prospettiva cambia radicalmente.
Personalmente Arduino non lo conosco e non lo utilizzo, prediligo, per esempio, i prodotti Microchip (ed ho anche acquistato il Pierin-Pic18) che impiego se voglio o devo sperimentare qualcosa ma quell'oggetto è evidente che risulta pratico ed utile per diverse situazioni: si tratta quindi di contestualizzare.
Ecco, se volete, un'opinione in più.

Saluti
W - U.H.F.
Avatar utente
Foto UtenteWALTERmwp
23,6k 4 8 13
G.Master EY
G.Master EY
 
Messaggi: 6997
Iscritto il: 17 lug 2010, 18:42
Località: le 4 del mattino

1
voti

[16] Re: ARDUINO: convertire uscita digitale in uscita analogica

Messaggioda Foto Utentethexeno » 4 giu 2014, 1:32

simo85 ha scritto:Secondo, è dannoso se vengono utilizzate per insegnare la programmazione dei microcontrollori.


Non le abbiamo mai usate per questo. E l'ho ripetuto.

WALTERmwp ha scritto:Ecco, se volete, un'opinione in più.


Un'opinione "non da bar". Un po' di sollievo.
Avatar utente
Foto Utentethexeno
235 4 9
Frequentatore
Frequentatore
 
Messaggi: 298
Iscritto il: 12 apr 2010, 18:28

1
voti

[17] Re: ARDUINO: convertire uscita digitale in uscita analogica

Messaggioda Foto UtenteTardoFreak » 4 giu 2014, 5:51

Le altre erano opinioni da bar?
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,7k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15763
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

1
voti

[18] Re: ARDUINO: convertire uscita digitale in uscita analogica

Messaggioda Foto Utentedaniele1996 » 4 giu 2014, 6:06

Scusate se ve lo dicomolto francamente... ma non so altere maniere per esprimermi... potremmo dedicarci al problema... al posto di parlare della radioattività delle lib arduino? (Che poi è OT).....
Avatar utente
Foto Utentedaniele1996
580 2 8 11
Sostenitore
Sostenitore
 
Messaggi: 1236
Iscritto il: 29 ago 2011, 11:29

3
voti

[19] Re: ARDUINO: convertire uscita digitale in uscita analogica

Messaggioda Foto UtenteTardoFreak » 4 giu 2014, 6:44

Soluzione: se non esistono librerie già scritte è necessario scrivere a manina una o più funzioni per generazione del PWM. Questo può essere fatto tramite software puro, con una tecnica mista (timer+gestione software) o utilizzando uno o più timer con comparatore.
Fare riferimento al datasheet specifico del microcontrollore per l' uso dei timer.

Cliccare QUI per il datasheet dell' ATmega328.

A Pagina 95 del datasheet c'è la struttura interna del Timer0 che può generare il PWM. Nelle pagine successive è descritto il funzionamento e come utilizzarlo.

A Pagina 114 la struttura interna del Timer1 che può generare il PWM. Nelle pagine successive è descritto il funzionamento e come utilizzarlo.

A Pagina 144 la struttura interna del Timer2 che può generare il PWM. Nelle pagine successive è descritto il funzionamento e come utilizzarlo.

Il linea generale, e questo vale praticamente per tutti i microcontrollori, si utilizzano i timer forniti di registri di comparazione. Uno di questi registri viene utilizzato per resettare il contatore interno, in pratica per definire la frequenza del PWM, un altro registro viene utilizzato per far commutare un' uscita (se il timer ha un' uscita hardware) o per generare un interrupt all' interno della quale si fa commutare il pin desiderato. Questo secondo compratore determina il duty cycle del PWM.

L' approccio misto prevede l' utilizzo di un timer che funge da base tempi mentre la gestione vera e propria del PWM viene fatta tramite software. Di solito questo tipo di gestione viene inglobato nella funzione di servizio dell' interrupt del timer utilizzato come base tempi.
Questo articolo è un esempio di questo tipo di implementazione.

La soluzione puramente software non è molto elegante ma funziona lo stesso. In pratica si costringe il micro a fare solo da gestore del PWM utilizzando il ciclo principale infinito di funzionamento. Avevo scritto un post a riguardo ma non riesco più a trovarlo. Se lo trovo modificherò questo messaggio.

Edit: trovato l' articolo.
viewtopic.php?f=17&t=20129&hilit=PWM+veloce+e+senza+timer
Il firmware è scritto per un PIC ma funziona benissimo su qualsiasi micro. Le uniche cose che variano sono l' accensione/spegnimento/inizializzazione dei pin di uscita (che variano, appunto, da micro a micro).

Edit 2:
In questo articolo c'è un esempio di implementazione di interrupt ciclica proprio su un micro della Atmel. Può essere utile per un primo approccio con i timers del ATmega328.
Anche in questo articolo viene implementata una base tempi.

Edit 3:
Un' ultima cosa ma non meno importante: non hai specificato la frequenza massima del segnale analogico (non del PWM eh!). Più il segnale è lento meno difficile è l' implementazione.
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,7k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15763
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

1
voti

[20] Re: ARDUINO: convertire uscita digitale in uscita analogica

Messaggioda Foto Utentetipu91 » 4 giu 2014, 9:26

come prima cosa ringrazio tutti quelli che stanno partecipando alla discussione =D>

Foto Utentespud l'articolo da te linkato è molto interessante e credo possa soddisfare le mie richieste. gli ho dato una prima lettura e sembra essere una buona soluzione, comunque appena avrò ancora un po' di tempo, lo rileggerò sicuramente con più attenzione.

Foto UtenteWALTERmwp il virgolettato è la mail originale. riguardo al dubbio che hai posto, anche a me era venuto, perché cercando in rete non avevo trovato niente di soddisfacente, quindi ho pensato "forse c'è un significato nascosto sotto" :lol:

Foto UtenteTardoFreak riguardo alla tua ultima risposta, credo sia la strada migliore, ma non penso il professore mi chieda così tanto: non sto affrontando un corso di microcontrollori, programmazione o cose simili. O per lo meno spero non sia quella la soluzione, altrimento dovrò rimboccarmi le maniche oltre il dovuto #-o

Ah scusate, mi ero scordato di dirvi una cosa molto importante: il tutto deve essere fatto con l'uso di Matlab!
Avatar utente
Foto Utentetipu91
1.015 6 13
Expert EY
Expert EY
 
Messaggi: 229
Iscritto il: 12 nov 2012, 18:46
Località: Pisa

PrecedenteProssimo

Torna a Realizzazioni, interfacciamento e nozioni generali.

Chi c’è in linea

Visitano il forum: Nessuno e 3 ospiti