tinyAVR1-Controller ATtiny3216            

 
                      Elektronik-Labor  Bastelecke  Projekte  Mikrocontoller                        




Rainer hat einige tinyAVR-Controller mit UPDI-Programmierschnittstelle mitgebracht, darunter auch den ATtin3216 aus der tinyAVR 1-Serie. Diese großen Brüder des ATtiny202 besitzen u.a. auch einen echten DA-Wandler, der mich besonders interessiert. Jetzt habe ich den Chip auf eine Adapterplatine gelötet und die ersten Tests gestartet. Zur ersten Orientierung habe ich die Startversuche für den Tiny202 wiederholt. Fast alles konnte ich einfach kopieren, übersetzen, brennen und erfolgreich testen. Auch hier läuft der Controller mit 20/6 MHz = 3,33 MHz. Ich musste nur das Kommando zum Aufruf des PYUPDI anpassen und dort den neuen Chip eintragen:

C:\Users\User\pyupdi.py -d tiny3216 -c COM4 -b 115200 -f  $(TargetDir)$(TargetName).hex





USART0

Eine kleine Änderung betrifft die serielle Schnittstelle. TXD liegt jetzt an PB2 und RXD an PB3. Bis auf  diesen Unterschied funktioniert das Programm wie bisher.

/*
* GccApplication5.c
*
* Created: 09.09.2020 12:24:56
* Author : User
* DAC ATtiny3216
*/


#include <avr/io.h>
#define F_CPU 3333333
#define USART0_BAUD_RATE(BAUD_RATE) ((float)(F_CPU * 64 / (16 * (float)BAUD_RATE)) + 0.5)

#include <avr/io.h>
#include <util/delay.h>
#include <string.h>

void USART0_init(void);
void USART0_sendChar(char c);
void USART0_sendString(char *str);

void USART0_init(void)
{
PORTB.DIRSET = 0x04; //TXD an PB2
PORTA.DIRCLR = 0x08; //RXD an PB3
USART0.BAUD = (uint16_t)USART0_BAUD_RATE(9600);
USART0.CTRLB |= USART_TXEN_bm;
}

void USART0_sendChar(char c)
{
while (!(USART0.STATUS & USART_DREIF_bm))
{
;
}
USART0.TXDATAL = c;
}

void USART0_sendString(char *str)
{
for(size_t i = 0; i < strlen(str); i++)
{
USART0_sendChar(str[i]);
}
}

int main(void)
{
USART0_init();

while (1)
{
USART0_sendString("TXD an PA6 \r\n");
_delay_ms(500);
}
}


DAC0

Und nun zum DA-Wandler. Man muss ihn eigentlich nur einschalten und dann in das 8-Bit-DATA-Register schreiben. Die vielseitigen Referenzeinstellungen ab 0,55 V gibt es nicht nur für den AD-Wandler, sondern auch für den DA-Wandler. Im Beispiel stellte ich einen Endbereich von 2,5 V ein. Das Programm erzeugt ein Sägezahnsignal. Man findet es an PA6. Offensichtlich hat der Controller einen Pufferverstärker nach dem eigentlichen DA-Wandler, denn bei unterschiedlichen Belastungen ändert sich die Spannung nicht, solange man unter 25 mA bleibt. Zum Test habe ich gleich mal einen großen Lautsprecher mit einem Vorwiderstand von 100 Ohm angeschlossen. Dabei entsteht ein recht lauter Ton. Man könnte den DA-Wandler also sogar als kleinen Audioverstärker einsetzen.

int main(void)
{
VREF.CTRLA = VREF_DAC0REFSEL_2V5_gc;
DAC0.CTRLA = 0x41;
DAC0.DATA = 255; //DA an PA6
char n = 0;
while (1)
{
n++;
DAC0.DATA =n;
_delay_us(10);
}
}





Elektronik-Labor  Bastelecke  Projekte  Mikrocontoller