Christians Webseite        << zurück        vor >>

Arduino Nano

Die Arduinos sind eine Serie von sehr populären Mikroprozessor-Boards. Dazu gibt es eine komplette Programmierumgebung. Eines der kleinsten Mitglieder ist der sogenannte NANO.
arduino arduino

Das Board ist bestückt mit einem Mikroprozessor Atmega328p von Atmel. Weiterhin sind ein Spannungsregler, ein USB-Seriell Baustein und diverse Kleinteile vorhanden. Für die ersten Versuche muss man das Board nur an den USB eines PC anstecken und kann loslegen.

Inbetriebnahme

Ganz so einfach ist es dann doch nicht..
Zuerst muss auf dem PC der Treiber für die USB-Verbindung installiert werden. Auf meinem "China Clone" sitzt ein IC mit der Bezeichung CH340. Der passende Treiber (für einen CH341!) ist im Internet zu finden.
Andere Nano-Versionen benutzen ein IC der Firma FTDI. Welche man benutzt spielt keine Rolle, funktionieren beide.

Die Arduino-Programmierumgebung gibt's auf den Arduino-Projektseiten. Die muss natürlich ebenfalls installiert werden.

Testprogramm

Im Ardunio-Land heissen die Programme SKETCH. Zum ersten Testen den "Blink"-Sketch laden. Bei Erfolg blinkt die rote LED auf dem Board im Sekundentakt.

Funktionsgenerator

Zum Spielen habe ich ein kleines Programm geschrieben. Es ist ein Funktionsgenerator der mir die Signale zum Testen meiner Ganganzeige liefert.
Hier liegt der Source-Code:
Nano_2.zip
An den Kontaktpins D9 und D6 werden zwei einstellbare Rechteckignale ausgegeben. Gesteuert wird das ganze per Terminal-Programm.

arduino
Für die Frequenzen hat man 2 Optionen:
- Freie Wahl der Frequenz mit "a" und "b.
- Drehzahl "d" und Gang "g" vorgeben. Die Frequenzen werden dann automatisch berechnet. Die dabei benutzen Rechenfaktoren werden mit "?" angezeigt und können mit "!" verändert werden.

Die Frequenzgrenzen liegen, je nach erwarteter Qualität der Signale, bei mehreren 10kHz.

Cockpitsignale

Der Arduino liefert an seinen Ausgängen 5V Rechtecksignale, bei einem maximalen Strom von ca. 10mA. Wenn man damit sein digitales Cockpit testen möchte sind einige Dinge zu beachten.

Die Signalamplitude vom Tachogeber beträgt (meistens) 5V. Das passt schon mal. Die Tachogeber haben aber üblicherweise einen Open-Kollektor-Ausgang, d.h. sie schalten eigentlich den Strom. Der Arduino muss daher die typ. 3 .. 4mA an Strom nach Masse schalten können. In Serie zum Ausgang sollte noch ein 100 Ohm Widerstand als Sicherheit aufgenommen werden.

Die Drehzahlsignale haben (meistens) eine Amplitude von 12V. Das wird jetzt ein bischen knapp, je nach Auslegung der Toleranzen des Cockpits. Im Zweifel muss eine einfache Transistorstufe, die mit 12V versorgt wird, nachgeschaltet werden.

Zuletzt sollte man noch darauf achten in welcher Reihenfolge die Stromversorgungen hochgefahren werden. Der Arduino wird über USB versorgt, das Cockpit über eine 12V Batterie (oder ein Netzteil). Eine Art Zwischenstufe (Transistoren) ist daher immer von Vorteil um Rückwärtsspeisung des Arduino über seine Ausgänge zu vermeiden.

Arduino Spannungsregler

Der Nano läuft original mit einem LM1117-5.0 bei 5V Betriebsspannung. Die maximale Eingangsspannung beträgt 20V. Für einen direkten Betrieb an einem 12V Bordnetz ist das ausreichend, bei Spikes kann es aber problematisch werden. Es sollte dann unbedingt ein kleiner Überspannungsschutz hinzugefügt werden.

Ein Umbau auf 3V ist durch Austausch gegen einen LM1117-3.3 möglich, oder die Adjust-Variante plus Spannungsteiler. Die Diode für die USB-Speisung muss dann evtl. entfernt werden. Ebenso gibt es einige 16MHz-Quarze die bei den geringen Spannungen Probleme bekommen. Notfalls kann man auch die Fusebits auf den internen 8MHz-Oszillator umschalten.
Der Vorteil ist das man z.B. LCDs mit 3V-Logik direkt ansteuern kann.

Arduino mit WinAVR programmieren

WinAVR ist eine Open Source Entwicklungsumgebung für Atmel Prozessoren. Das letzte Release ist leider schon ein paar Jahre alt aber es gibt immer noch kleinere Updates. Simpel und stabil und genau das richtige für Kommandozeilen-Freaks die gerne alles unter Kontrolle haben :)

In der vor-Arduino Zeit wurde typischerweise ein AVR-ISP Programmer verwendet um die Programme per ISP-Schnittstelle zu flashen. Mit einem Arduino kann man dessen Bootlader benutzen und direkt per USB-Kabel (=virtueller COM-Port) und mit Hilfe von "avrdude" beschreiben. Der entsprechende Eintrag im Make-File hat die folgende Struktur:

							 
avrdude -v -patmega328p -carduino -PCOMNummer -b57600 -D -V -U flash:w:Programmname.hex:i

Nummer: verwendeter COM-Port
Programmname: das compilierte Programm
							 
						

Die Bedeutung der sonstigen Parameter findet man in der Avrdude-Beschreibung.

WinAVR-Programm als "Sketch" verwenden

Wer in der Sketch-Umgebung arbeitet, aber die vordefinierte Bibliotheken der Sketch-Umgebung nicht mag und seine (alten?) mit WinAVR erstellten Programme weiterhin verwenden möchte, kann dies einfach erreichen.

Die Struktur des "ino"-Files mit "setup" und "loop" wird beibehalten. Das "ino"-File sieht beispielhaft so aus:

							 
/* Am Anfang stehen alle includes, Variablen Deklarationen, Defines, Funktionsdeklarationen etc. */
/* aus dem WinAVR-Programm z.B. */
	
#include <avr/io.h>
uint8_t lauf;
void USART_SendChar(char *Text)
{
	Hier stehen die Befehle für die jeweilige Funktion
}


/* In den Abschnitt "setup" kommt alles was einmalig vor dem eigentlichen Programm ablaufen soll */
	
void setup() {
	lauf = 1;	// Beispiel
}


/* Im Abschnitt "loop" steht das Hauptprogramm */
	
void loop()
{
	while(lauf < 100){
		USART_SendChar(lauf);
		lauf++;
	}
	lauf = 1;
}
							 
						

Zumindest für relativ einfache Programme sollte das funktionieren. Sobald man aber, beispielsweise, mit speziellen Compiler-Schaltern arbeitet (weil der Speicher knapp ist oder so) dann muss man das in den "Tiefen" der Arduino-Umgebung anpassen.