MPLAB X und ATtiny202
Seit Microchip die Firma Atmel übernommen hat, gibt es zwei mögliche
IDEs für alle AVR-Controller. Neben dem Atmel Stuio 7 kann ich nun auch
auf die MPLAB X IDE zurückgreifen. Diese Software habe ich bereits
einmal für einen PIC16F1707
verwendet und dabei einige Eigenschaften als sehr praktisch empfunden.
Deshalb wollte ich es nun auch für die neuen AVR mit UPDI probieren.
Besonders hilfreich ist das MCC-Werkzeug (MPLAB Code Confifurator), das
man zusätzlich installieren kann. Es hilft dabei die interne Peripherie
und die Zuordnung zu den äußeren Anschlüssen zu koordinieren. Im
Ergebnis werden zahlreiche .h- und .c-Dateien erzeugt, die die
Hardware-Register passend ansteuern. So kann man die aufwendige
Datenblattrecherche abkürzen und kommt schneller zu einem Ergebnis. Das
main.c bleibt kurz und aufgeräumt. Nur "#include
mcc_generated_files/mcc.h" fügt die IDE hier ein.
Hier wollte ich den analogen Komparator AC0, den AD-Wandler ADC0
und die interne Spannungsreferenz VREF nutzen. Die Idee war, die
interne Referenzspannung von 1,1 V nach außen zu führen. Der positive
Komparator-Eingang sollte intern an die Referenz gelegt werden, Der
Ausgang sollte über ein RC-Tiefpassfilter an den negativen Eingang
gehen. Damit sollte sich ein Regelkreis bilden, der genau 1,1 V am
Kondensator einstellt. Alles das konnte ich mir einfach als
Einstellungen des AC0 zusammenklicken. Zusätzlich wurde VREF für den
Komparator und für den AD-Wandler auf 1,1 V eingestellt.
Man sieht dabei
immer, welche Anschlüsse verwendet werden, und ob es irgendwo zu
Kollisionen kommt. Am Ende klickt man auf „Generate“ und lässt sich
damit die erforderlichen Quelltexte erzeugen.
Nach dem Kompilieren des Gesamtprogramms bekomme ich eine
hex-Datei. Sie automatisch aus der IDE heraus in den Chip zu brennen
ist mir bisher noch nicht gelungen. Also kopiere ich die Datei, benenne
sie um in firmware.hex und brenne sie mit pymcuprog und meiner
Batch-Datei firmware_t202.bat in den Controller. Das Ergebnis: 1,1 V am
Ladekondensator mit 22 nF, Hurra!. Der Komparator-Ausgang am Widerstand
mit 10 k zeigt schnelle Impulse, die völlig autonom sind und in keinem
Verhältnis zu Prozessortakt stehen. Es ist also wie geplant ein
eigenständiger Regelkreis entstanden, der den Prozessorkern nicht
belastet.
Im nächsten Versuch habe ich mit MCC die Referenzspannung 2,5 V
eingestellt und alles neu kompiliert. Auch das funktioniert, nun stehen
2,5 V am Pin 3 des Controllers. Alles funktioniert also einwandfrei.
Ich kann auch Teile der Quelltexte kopieren und im AVR Studio 7
einsetzen. So ist es mir gelungen, die gleiche Regelschleife auch auf
dem ATtiny3216 einzusetzen. Dies sind die wesentlichen Teile aus der
Datei ac0.c.
#include "../include/ac0.h"
/**
* \brief Initialize ac interface
*/
int8_t AC0_Initialize()
{
//CMP disabled;
AC0.INTCTRL = 0x00;
//INVERT enabled; MUXPOS PIN0; MUXNEG VREF;
AC0.MUXCTRLA = 0x82;
//RUNSTDBY disabled; OUTEN enabled; INTMODE BOTHEDGE; HYSMODE OFF; ENABLE enabled;
AC0.CTRLA = 0x41;
return 0;
}
ISR(AC0_AC_vect)
{
/* Insert your AC interrupt handling code here */
/* The interrupt flag has to be cleared manually */
AC0.STATUS = AC_CMP_bm;
}