Picture

Microchip ATMEL ATmega4809, ATtiny1616, AVR128DB28: 3 semplici esempi di programmi in C

Posted |


Con riferimento al video PierAisa #696: Soirée Microchip ATMEL ATmega4809, ATtiny1616, AVR128DB28 ((21) PierAisa #696: Soirée Microchip ATMEL ATmega4809, ATtiny1616, AVR128DB28 – YouTube) qui di seguito vengono riportati gli Esempi mostrati preparati da Ancrea G. (canale Youtube (21) G.Elettronica – YouTube):

Tutti i sorgenti sono scaricabili a questo link: https://www.pieraisa.it/php/forumshareinsertdb.php?file=../forum_share/DATASHEETS/DIGITALI/MICROCONTROLLORI/ATMEL/ATMEL_ESEMPI_SOFTWARE_VIDEO_PierAisa696.zip

ESEMPIO 1

In questo esempio utilizzeremo l’Atmega4809 in versione 40 DIP, un display 16×2 HD44780 che utilizzeremo per scrivere alcuni caratteri e configureremo la periferica CCL (Configurable Custom Logic) per accendere e spegnere un LED tramite la pressione di un pulsante in maniera indipendente dall’esecuzione del programma.

Nel nostro esempio abbiamo configurato la CCL in configurazione D Latch, l’ingresso D è collegato all’uscita Q in negazione, mentre l’ingresso G è collegato all’ingresso fisico dell’Atmega4809 (ingresso LUT1-IN0 PC0), l’uscita oltre ad essere in feedback negativo con D è collegata all’uscita fisica dell’Atmega4809 (uscita LUT0-OUT PA3), con questa configurazione abbiamo che il LED spento con la pressione del pulsante il LED si accenderà e non cambierà il suo stato ameno che non si riprema nuovamente il pulsante.

Per capirci meglio diamo uno sguardo alla tabella della verità:

GDQ
010
11
001
00

Questo e un semplice esempio ma le configurazioni che può assumere la periferica CCL sono svariate…

Esempio 2

In questo esempio utilizziamo l’Attiny1616 come generatore di forma d’onda sinusoidale a 50Hz tramite il DAC0.

Il DAC0 ha la possibilità di convertire un segnale digitale in analogico con una risoluzione di 8-bit (0-255), tramite un timer (TCB0) generiamo un interrupt e andiamo di volta in volta a caricare nel registro di DATA di DAC0 il valore contenuto nel array che generiamo all’inizio dell’esecuzione del programma, l’array contiene i vari punti della sinusoide che vengono calcolati in questa maniera:

Campioni =Frequenza generazione/Frequenza generata

Costante =Campioni/(2π/1)

Nel nostro esempio:

20KHz/50Hz =400 Campioni

400/(2π/1)  =63,66 Costante

Array =offset+amplitude*sin(X(indice corrente)/costante)

Collegamenti:

PIN 1 -> +5V

PIN 4 -> Sonda oscilloscopio

PIN 20 -> GND

Esempio 3

In questo esempio utilizziamo l’AVR128DB28 in formato 28-DIP con la sua periferica OPAMP in configurazione non invertente per amplificare un segnale con un guadagno di 2, nello specifico utilizziamo OPAMP 0; Abbiamo settato R1 e R2 a 8KΩ tramite i bit 7-6-5 nel registro OP0RESMUX, cosi facendo dalla formula ricaviamo GAIN=1+(R2/R1)=1+(8kΩ/8kΩ)=2.

Questo esempio vuol far vedere una semplice applicazione dell’utilizzo della periferica OPAMP, un altro utilizzo potrebbe essere amplificare un segnale e darlo direttamente in impasto al convertitore Analogico Digitale (ADC).

Collegamenti:

PIN 6/14/20 -> +5V

PIN 15/21 -> GND

PIN 7 -> Ingresso non invertente OPAMP

PIN 8 -> Uscita OPAMP

Lascia un commento