Generatore frequenza e duty variabile con Attiny85 e nano.

Ciao a tutti. Vorrei far generare un'onda quadra a frequenza variabile (da 80Khz a 120Khz) dove posso variare anche il duty cycle. Per iniziare mi basterebbe realizzare qualcosa in cui metto manualmente i valori di freq e DC, poi vedrò come realizzare l'interfaccia per variarli... Purtroppo con i TIMER faccio a cazzotti.... E' fattibile? Chi può aiutarmi?? Grazie.

Prova a guardare se lo strumento software QUI descritto può aiutarti a capire come fare ... ... perché, purtroppo, devi necessariamente imparare a giocare con i "timers" ... ::)

Guglielmo

Ti allego anche un vecchissimo documento (un tutorial), che a suo tempo scrisse il nostro caro leo72, in occasione di una riunione di appassionati di Arduino a Bassano del Grappa … :smiley:

Guglielmo

Timer.pdf (747 KB)

gpb01: Prova a guardare se lo strumento software QUI descritto può aiutarti a capire come fare ... ... perché, purtroppo, devi necessariamente imparare a giocare con i "timers" ... ::)

Guglielmo

Grazie Guglielmo, ma quando clicco sul link mi dice che non è raggiungibile....

Io ci arrivo tranquillamente, Chrome su Win7

manolomao: Grazie Guglielmo, ma quando clicco sul link mi dice che non è raggiungibile....

Prova con un'altro browser perché il link è perfettamente funzionante ;)

Guglielmo

Il firewall mi bloccava l'accesso... Ho fatto, però non è molto preciso... Ho messo 100Khz con duty 80% e mi restituisce 75Khz duty 87%. Domanda:

OCR1B = (int) (ICR1*0,83);

come fa a prendere 0,83 che viene castizzato ad un INT???

Spero che il valore nel codice sia 0.83 e non con la virgola, il linguaggio C è in inglese. Comunque 0.83 per il compilatore è un float. Di sicuro poi verrà castizzato dopo la moltiplicazione di int*float.

manolomao: Ho fatto, però non è molto preciso...

Valori "precisi" non puoi ottenerli ... il clock di sistema è fisso ed idem i valori di prescaler ... per quanto giochi con valori di partenza e di arrivo, comunque ti sposterai sempre di valori "discreti" ad intervallati e mai continui.

Per minimizzare l'errore usa timer a 16 bit.

Guglielmo

A circa 10€ trovi moduli DDS con AD9850 su ebay, Amazon e altrove, che generano segnali fino a 40MHz, sia a onda sinusoidale che quadra. Sarebbe un buon punto di partenza, ma da solo non permette di variare il duty cycle...

Considera pure che a poco più di 1€ lo trovi già fatto... :) :( PWM Pulse Duty Cycle Generatore di segnale L'integrato più grande pilota il display; purtroppo non riesco a leggere la sigla dell'integrato più piccolo... Qui si legge bene: Banggood E' un microcontrollore 8S003F3P6, che non mi sembra molto diverso dall'atmega328p...

Datman, tu hai ragione.... Comprarlo già fatto è una bazza, ma imparare ad usare i timer forse è meglio!!! In realtà il segnale generato mi serviva in combinazione con altro... Quindi l'idea di usare un chip solo era meglio :) Guglielmo, io ho provato ad un usare il software RTM, ma non capisco le differenze nei vari modi: -Mode 10 Phase -Mode 12 CTC -Mode 14 Fast

:confused:

manolomao: ... Guglielmo, io ho provato ad un usare il software RTM, ma non capisco le differenze nei vari modi ...

Se apri il datasheet del ATmega328P e vai dalla pagina 131 alla pagina 138 trovi le varie modalità di funzionamento con anche dei grafici esplicativi del funzionamento.

Guglielmo