AEQ-WEB

Amtel Studio ATMega328 LED Blink Example in C++
ATMega328
31.07.2018

Switch language to: en Englisch

ATMega328 LED Blink Beispiel

Zu diesem Artikel gibt es auch ein Video auf Youtube: Standanlone AVR ATMega328 Blink Beispiel in C mit Amtel Studio


In diesem Artikel zeigen wir, wie ein ATMega328 in Amtel Studio programmiert wird und wie die Software auf den Mikrocontroller mittels Programmer (AVRISP) geladen wird. Als einfaches Beispiel lassen wir eine LED auf dem PIN 15 (PORTB1) blinken. Dazu ist eine LED sowie ein Vorwiderstand von 220 Ohm notwendig. Informationen zum Grundaufbau der Schaltung gibt es im vorherigen Beitrag, wo wir den Bootloader brennen.


ATMega328 Amtel Studio LED Blink in C

ATMega328 Schaltplan

Auch in diesem Beispiel wird der ATMega328 auf einem Steckbrett betrieben. Neben der 5V Stromversorgung ist auch hier der Programmer über ISP angeschlossen. Zusätzlich verwenden wir auch hier einen externen Taktgeber mit 16 Mhz. Auf den Pin 15 (PORTB1) wird dann die Anode der LED angeschlossen und die Kathode über den 220 Ohm Widerstand in Serie mit der Masse verbunden. Wenn der Mikrocontroller das erste Mal programmiert wird, muss sichergestellt werden, dass der Bootloader bereits gebrannt ist.


Amtel Studio Projekt erstellen

Wenn die Hardware fertig angeschlossen ist, so kann mit der Entwicklung der Software gestartet werden. In Amtel Studio wird ein neues Projekt erstellt. Dabei wird als Projekttyp "GCC C Executable Project" ausgewählt und anschließend ein Projektname definiert. Nach dem Klick auf "OK" öffnet sich noch das Fenster, wo der richtige Mikrocontroller (ATMega328P oder ATMega328) ausgewählt werden muss. Danach wird die Projektmappe mit den notwendigen Projektdateien erzeugt. In der C-Datei (main.c) befindet sich bereits ein Teil vom Code, der jetzt noch so erweitert wird, dass die LED blinkt. Der gesamte Code sieht wie folgt aus:


#define F_CPU 16000000UL
#include <avr/io.h>
#include <util/delay.h>

int main(void)
{
	DDRB |= (1<<DDB1);
    while (1) 
    {
	PORTB |= (1<<PORTB1);
	_delay_ms(1000);
	PORTB &= ~ (1<<PORTB1);
	_delay_ms(1000);
    }
}

Wie der Code funktioniert

Als Erstes wird die Taktfrequenz definiert (#define F_CPU 16000000UL). Diese entspricht der Frequenz vom Oszillator welche in diesem Aufbau 16MHz (16000000Hz) beträgt. In den weiteren zwei Zeilen werden zwei Bibliotheken in das Projekt integriert. Im Hautprogramm wird als Erstes der Pin 15 (PORTB1) als digitaler Ausgang definiert. Danach wird der restliche Code in der While-Schleife dauerhaft ausgeführt. Dabei wird der PORTB1 eingeschaltet, dann wird eine Sekunde gewartet, bis der PORTB1 wieder ausgeschaltet wird. Bevor PORTB1 wieder eingeschaltet wird, wird erneut eine Sekunde gewartet.


Upload und Test

Wenn der Code vollständig ist, kann unter dem Punkt "DEBUG" das Projekt starten. Beim ersten Start wird noch nach den Programmer gefragt. Dabei muss der angeschlossene Programmer ausgewählt werden und der Upload fortgesetzt werden. Während diesem Vorgang blinkt der Programmer kurz auf und danach sollte die LED bereits blinken. In Amtel Studio steht dann in der Ausgabe das der Build erfolgreich war.