Programmazione DAC con MCP4725

Salve a tutti, sto realizzando un codice capace di far variare la frequenza ed il dutycycle di un onda triangolare per pilotare un driver esterno. Ho acquistato un digital to analog converter ma non ho ancora capito a pieno come si variano questi valori. Ha una risoluzione pari a 12 bit e si controlla via i2C con i pin SCL e SDA. Sul sito di adufruit non è spiegato come personalizzare il codice e quindi la forma d'onda. Qualcuno può consigliarmi qualcosa o magari spiegarlo in parole semplici? Grazie a tutti

Benvenuto, essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione tutto il su citato REGOLAMENTO ... Grazie. :slight_smile:

nid69ita

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione, nessuno ti potrà rispondere, quindi ti consiglio di farla al più presto. :wink:

Bene, ho appena completato la presentazione. Attendo istruzioni per il mio progetto, grazie mille :sweat_smile:

In realtà MALE ... perché hai aperto un thread per presentarti ? ? ? :open_mouth:

Se leggevi con attenzione il mio post ed il REGOLAMENTO ti saresti presentato nel posto giusto (dove io ho spostato la tua presentazione) !

Per il futuro cerchiamo di fare più attenzione a ciò che ti si scrive ... grazie.

Guglielmo

Se metti il link al prodotto che hai acquistao è meglio, così ne vediamo le specifiche e che componente usa, così si può recuperare il datasheet.

Guglielmo

P.S.: Comunque, se è un semplice DAC ... immagino che dovrai creare TU da codice i vari punti che compongono l'onda triangolare e mandarli in uscita ...
Resta ovvio che se la esaminetrai molto in dettaglio, come tutte le onde create con un DAC (che accetta valori discreti), avrai che è essa è formata da tanti piccoli scalini ... i tuoi valori che darai in pasto al DAC.

Chiedo umilmente scusa, non mi era chiaro se dovevo rispondere al topic o aprirne uno nuovo, sono da cellulare e mi è stato chiesto di presentarmi al piú presto, quindi mi sono dovuto adattare per essere veloce

Le mando il link del prodotto

Ok, è appunto un semplice DAC ... c'è una libreria per usarlo senza star ad impazzire ... :roll_eyes:

Come dicevi, dovrai trovare tu la formula che descrive la rampa di salita di discesa dell'onda trinagolare che vuoi generare ed inviare i vari punti calcolati (considerando che hai 12 bit, quindi 4096 valori) al DAC per ché faccia uscire il relativo valore analogico.

Guglielmo

Benissimo sono riuscito a regolare la frequenza, solo che, come sapevo, oltre i 400hz ho dei problemi di definizione e l'onda ha dei mini quadretti durante il percorso. Ho visto su un sito che si poteva regolare il TWBR per supportare frequenze più alte, potrei sapere come? Grazie mille :sweat_smile:

Se ti serve più velocità forse ti converebbe usare un DAC SPI invece che I2C come il 4725, es. l'MCP4921 per rimanere in casa Microchip. Mi sembra di ricordare che di default l'SPI su Arduino sia a 2Mhz, quindi un guadagno netto di 5X per quanto riguarda la trasmissione, con l'unica svantaggio che dovrai usare 3 pin invece che 2.

Ciao, Ale.

1 Like

... di base è 4 MHz (Clock / 4), ma si può modificare con l'oggetto SPIsettings.

Guglielmo

Su ATmega328P NON puoi andare oltre i 400 KHz, è un limite della MCU ed è riportato nel datasheet:

Ci sono altre MCU più veloci in cui, con l'apposito comando della libreria Wire, è possibile aumetare questo valore ... ma poi bisogna vedere i devices I2C perché NON tutti supportano velocità più alte.

Guglielmo

Ad esempio, il ATSAMD21 che è montato sulle più recenti schede Arduino (es. tutta la serie MKR) permette sulla Sercom velocità decisamente superiori ...

Guglielmo

1 Like

Assolutamente chiari, grazie mille a tutti, mi sa che cambierò scheda arduino, oramai questa ce l'ho da più di 5 anni. Buona serata