kramann.info
© Guido Kramann

Login: Passwort:










Mikrocontroller
1 Einfuehrung
..1.1 Entwicklungsgeschichtliches
..1.2 Maschinensprache
..1.3 Assemblerbeispiel
..1.4 Sprachwahl
..1.5 Praxis
....1.5.1 Digital_IO
....1.5.2 Byteoperationen
....1.5.3 AVR_Studio
....1.5.4 Testboard
....1.5.5 Aufgaben
....1.5.6 Do_it_yourself
......1.5.6.1 Ampel
......1.5.6.2 Programmierer
..1.6 Literatur
..1.7 Programmierer
....1.7.1 Bauverlauf
....1.7.2 KurzreferenzLow
....1.7.2 Kurzreferenz_16PU
..1.8 Uebung1
..1.9 BoardAtHome
....1.9.1 Software
....1.9.2 Hardware
....1.9.3 Knoppix
....1.9.4 Aufbau
....1.9.5 LED
2 Oszillator
..2.1 Assembler
..2.2 Interner_RC
..2.3 Quarz
..2.4 Taktgenerator
3 DigitalIO
..3.1 Elektrische_Eigenschaften
..3.2 Pullup_Widerstaende
..3.3 Bitmasken_Eingang
..3.4 Bitmasken_Ausgang
..3.5 Tic_Tac_Toe
....3.5.1 DuoLEDs
....3.5.2 Schaltplan
....3.5.3 Spielfeld
....3.5.4 Anwahl
....3.5.5 Kontrolle
..3.6 Laboruebung2
..3.7 Laboruebung2_alt
4 PWM
..4.1 Prinzip
..4.2 Nutzen
..4.3 Generierung
..4.4 Programmierung
..4.5 Servos
..4.7 Laboruebung3
..4.8 LoesungUE3
..4.9 Uebung6
5 LichtKlangKugeln
..5.1 LED
..5.2 RGB
..5.3 Sensoren
..5.4 lautsprecher
..5.5 tonerzeugung
6 UART
..6.1 Bussysteme
..6.2 UART
..6.3 RS232
..6.4 Hardware
..6.5 Senden
..6.6 Hyperterminal
..6.7 Empfangen
..6.8 Broadcast
..6.9 Uebung4
7 Infrarot
..7.1 schalten
..7.2 seriell
..7.3 Uebung
8 OOP
..8.1 Probleme
..8.2 Konzept
..8.3 Statisch
..8.4 Datentypen
..8.5 RS232
....8.5.1 Prozedural
....8.5.2 Analyse
....8.5.3 Umsetzung
....8.5.4 Vererbung
....8.5.5 Statisch
....8.5.6 Performance
..8.6 Fahrzeug
9 ADW
..9.1 ADW
..9.2 Zaehler
10 Peripherie
..10.1 RS232Menue
..10.2 ASCIIDisplay
..10.3 Tastenmatrix
..10.4 Schrittmotor
..10.5 Zaehler
..10.6 Uebung7
11 SPI
..11.1 Testanordnung
..11.2 Register
..11.3 Test1
..11.4 Test2_Interrupt
..11.5 Test3_2Slaves
..11.6 Laboruebung
12 EEPROM
13 I2C
..13.1 MasterSendByte
..13.2 MasterSend2Bytes
..13.3 MasterReceiveByte
..13.4 MasterReceive2Bytes
14 Anwendungen
..14.1 Mechatroniklabor
....14.1.1 Biegelinie
....14.1.2 Ausbruchsicherung
....14.1.3 Einachser
....14.1.4 AV
....14.1.5 Vierradlenkung
....14.1.6 Kommunikation
..14.2 Sinuserzeugung
....14.2.1 Variante1
....14.2.2 Variante2
....14.2.3 Variante3
....14.2.4 Variante4
..14.3 Laboruebung8
..14.4 Loesung_Ue8
..14.5 SPI_Nachtrag
20 Xubuntu
1.5.6.2 Programmiergerät DT-006
PROJEKT-DURCHFÜHRUNG: Stefan Hohendorf
PROJEKT-DOKUMENTATION: Sebastian Freidank
LETZTE ÄNDERUNG: 05.06.2007

Die Mikrocontroller der Firma ATMEL sind kostengünstige und leicht programmierbare Bausteine. Es gibt eine große Anzahl frei verfügbarer Software zum Schreiben von Programmen. Hat man ein Programm geschrieben, stellt sich die Frage wie man es in den Mikrocontroller bekommt. Ein ATMEL Mikrocontroller kann in seiner Systemumgebung programmiert werden ohne ihn aus dem System auszubauen. Dies nennt man In-System-Programming (ISP). Über die ISP Schnittstelle kann der Mikrocontroller mit dem PC verbunden werden. Dazu benötigt man ein Programmiergerät. Für die ATMEL Mikrocontroller gibt es eine Vielzahl von Programmiergeräten in den unterschiedlichsten Preisklassen. Für den Mikrocontroller Einstieg reicht aber auch ein einfaches Programmierkabel für den Parallel Port eines PCs. Dieses Programmierkabel ist einfach und kostengünstig herzustellen. Das hier vorgestellte Programmiergerät wird unter anderem von der Programmiersoftware PonyProg2000 unterstützt.

In-System-Programming - ISP
Eine Voraussetzung ist das der Mikrocontroller über seine Schaltung mit Strom versorgt wird. Eine Versorgung über das Programmierkabel ist nicht möglich. Somit sind für die Programmierung nur 5 Leitungen notwendig:

  • RESET
  • GND
  • MISO
  • MOSI
  • SCK

GND ist der Masseanschluss
RESET ist für den Reset des Mikrocontrollers über die ISP Schnittstelle
MOSI steht für Master Output Slave Input
MISO steht für Slave Input Master Output
SCK ist die Taktleitung

Schaltung

Das Programmierkabel besteht aus einem 25pol. Sub-D Stecker, einem 5pol. IC-Steckbuchse und vier Widerständen mit je 220 Ohm. Die Widerstände werden zwischen RESET, MOSI, MISO und SCK geschaltet und die Masseleitung wird direkt verbunden.

dt-006

Bild 1.5.6.2-1: Schaltplan Programmieradapter DT-006

Der praktische Aufbau des Programmierers

Es werden folgende Bauteile benötigt:

  • 5pol. IC Buchse
  • 4x 220 Ohm Widerstand
  • ca. 20cm Flachbandkabel 5pol.
  • 25pol. Sub-D Stecke
  • kleines Stück isolierter Draht
  • etwas Isolierband
Benötigte Bauteile

Bild 1.5.6.2-1: Übersicht über die benötigten Bauteile

Das Flachbandkabel wird mit der 5pol. IC-Buchse verlötet und kann somit als Stecker verwendet werden. Durch die Markierung am Flachbandkabel hat man einen Richtungsinn für den Stecker. Bei Verwendung eines anderen Kabels sollte man sich einen Pin (am besten den Massepin) kenntlich machen, damit der Stecker nicht versehentlich falsch eingesteckt wird.

Benötigte Bauteile

Bild 1.5.6.2-2: Anschlüsse auf der Seite des Mikrocontrollers

Die Widerstände können direkt an den 25pol. Sub-D Stecker gelötet werden.

Benötigte Bauteile

Bild 1.5.6.2-3: Anschluß der Widerstände am PC-Seitigen Parallelport-Stecker

Die Kabelbrücken am Sub-D Stecker werden mittels isolierter Kabel hergestellt. Es sollte darauf geachtet werden, alles möglichst klein zu halten, damit das ganze in ein Steckergehäuse passt.

Benötigte Bauteile

Bild 1.5.6.2-4: Verdrahtung am Parallelport

Jetzt kann das Flachbandkabel entsprechend angelötet werden und der Parallelportstecker ist betriebsbereit.

Benötigte Bauteile

Bild 1.5.6.2-5: Anschluß des Verbindungskabels am Parallelport

Damit das ganze optisch etwas ansprechender aussieht, wird der Stecker mit einem Gehäuse versehen und das Ganze mit etwas Isolierband verstärkt.

Benötigte Bauteile

Bild 1.5.6.2-6: Fertiger Programmierer DT006

Programmieren des Mikrocontrollers

Nachdem das Programmiergerät fertig gestellt ist, wird noch ein Programm zum Testen benötigt. Dazu verwenden wir die auf der Atmel Homepage kostenlos bereitgestellte Software AVR Studio . Wir werden das Programm in C programmieren, denn C ist eine weit verbreitete und relativ leicht zu verstehende Programmiersprache. Um diese in AVR Studio nutzen zu können, muss noch die Software WinAVR installiert werden. Diese stellt einen kostenlosen C-Compiler zur Verfügung. Dieser übersetzt das in C geschriebene Programm in eine Maschinensprache (Assembler) und speichert es in einer .hex Datei. Diese kann direkt in den Mikrocontroller geladen werden.
Zum beschreiben des Mikrocontrollers wird die kostenlose Software Ponyprog2000 benutzt. Diese dient ausschließlich dazu den Mikrocontroller zu beschreiben.

Erstellen eines Programms

Zum Erstellen des Programms wird AVR Studio gestartet. Als erstes erscheint der Startdialog:

Startdialog AVR Studio

Bild 1.5.6.2-2: Startdialog AVR Studio

In diesem Dialog wählt man entweder ein bestehendes Projekt zum Öffnen aus oder man erstellt ein neues Projekt. Für ein neues Projekt klickt man den Button "New Project" an und es öffnet sich folgendes Fenster:

Neues Projekt erstellen

Bild 1.5.6.2-3: Erstellen eines neuen Projekts

Wenn WinAVR korrekt installiert hat man jetzt die Möglichkeit zwei verschiedene Projektypen auszuwählen. Um ein Projekt in der Programmiersprache C zu schreiben wählen wir "AVR GCC" als Projekttyp aus. Rechts daneben legen wir einen Projektnamen fest und darunter den Namen der .c Datei für das Hauptprogramm. Zur Auswahl des Speicherpfads ist auf den Button "..." unter Location zu klicken. Ist die Auswahl des Speicherplatzes getroffen, wird auf "Next" geklickt und es erscheint folgender Dialog:

Auswahl des Mikrocontrollers

Bild 1.5.6.2-4: Auswahl des Mikrocontrollers

Als Debug Platform wählt man den AVR Simulator. Dies ermöglicht eine Simulation des Mikrocontrollers durch das AVR Studio. Als Device wird der Mikrocontroller ausgewählt den man programmieren möchte. Anschließend klickt man auf "Finish" und der Startdialog ist damit beendet. Es erscheint die Arbeitsoberfläche des AVR Studio:

AVR Arbeitsoberfläche

Bild 1.5.6.2-5: AVR Arbeitsoberfläche

Auf der linken Seite befindet sich der Navigationsbereich. Dort ist die Projektstruktur mit den entsprechenden Unterordnern zu finden. Auf einem weiterern Reiter kann man sich während der Simulation die Ein- und Ausgabeports, sowie alle Register des ausgewählten Mikrocontrollers anschauen. Der dritte Reiter zeigt die PIN-Belegungen der Packages an, sowie die Hardwareadressen der verschieden Speicherbereiche und Interrupts. Für unser Testprogramm benötigen wir nur den ersten Reiter. Wie zu erkennen ist, wurde die vorhin benannte .c Datei bereits angelegt und ist im rechten Fensterbereich geöffnet. Dies ist der Arbeitsbereich. Hier wird der Programmcode eingegeben. Im unteren Bereich ist ein Informationsfenster in dem Status- und Fehlermeldeungen angezeigt werden.

#include <avr/io.h>
 int main()
 {
  while(1)
  {
   PORTA = ~PORTA;
  }
 }

Code 1.5.6.2-1: Quelltext für das Beispielprogramm

Das Programm ist ein sehr einfaches , wobei der PORT A des Mikrocontrollers bei jedem Aufruf invertiert wird. Die erste Zeile dient zum Einbinden der Portdefenitionen, somit kann der Port A über "PORTA" angesprochen werden. Die zweite Zeile ist der Beginn der Hauptfunktion. "int" steht dabei für den Rückgabewert der Funktion, "main" ist der Name der Funktion und in den Klammern kann ein Parameter übergeben werden. Der gesamte Funktionsblock wird von einer geschweiften Klammer umgeben. In der vierten Zeile wird eine Endlosschleife programmiert. Dies ist nötig um den Mikrocontroller in Betrieb zu halten. Ansonsten würde dieser alle Befehle nur einmal abarbeiten und dann nichts mehr tun. Alles was der Mikrocontroller regelmäßig machen soll, muss somit in diese while-Schleife. Diese wird solange wiederholt, bis der Ausdruck in der folgenden Klammer false wird. In der sechsten Zeile steht der eigentliche Befehlscode: "PORTA = ~PORTA;". Alle Befehle werden in C mit einem Semikolon abgeschlossen. Dieser Befehl läßt den Port A bei jedem Aufruf invertieren. Dies wird durch das ~-Zeichen ausgedrückt. Jetzt muss aus dem C-Befehlscode eine .hex Datei für den Mikrocontroller erstellt werden. Dies erreichen wir durch drücken des Button "Build" im Menu des AVR Studio. Im unteren Fenster des AVR Studio sollten bei korrektem Quellcode keine Fehlermeldungen erscheinen. Unter anderem findet man dort auch den Namen der .hex Datei. Diese wird im Unterordner default des Projekts erstellt.

Programm in den Mikrocontroller laden

Zum beschreiben des Mikrocontroller wird das Programm PonyProg2000 (kurz PonyProg) verwendet. Wir starten das Programm und wenn der Setup Dialog nicht automatisch erscheint, wird er mit dem Button Setup PonyProg2000 gestartet.

PonyProg2000

Bild 1.5.6.2-6: PonyProg2000

Es erscheint der Setup Dialog:

Setup Dialog PonyProg2000

Bild 1.5.6.2-7: Setup Dialog PonyProg2000

Für unser Programmiergerkabel müssen wir den Parallelport und "DT-006 I/O" wählen. Dann klicken wir auf "O.K." und müssen im PonyProg Menu noch den korrekten Mikrocontroller auswählen. Jetzt ist die Software bereit zum programmieren. Wir laden die .hex Datei über den Button Open Device File PonyProg2000. Nachdem das File geladen wurde sollte der Bildschirm etwa so aussehen:

PonyProg2000 mit geladenem Device File

Bild 1.5.6.2-8: PonyProg2000 mit geladenem Device File

Jetzt können wir den Mikrocontroller über den Button Write Device File PonyProg2000 beschreiben. Nachdem der Schreibvorgang mit "Write successfully" abgeschlossen wurde, kann man mit Hilfe eines Oszilloskop einen Ausgang des PORTA darstellen und eine Rechteckschwingung erkennen. Sollte kein Oszilloskop zur Verfügung stehen, kann auch in den C-Quellcode eine Verzögerungsschleife eingefügt werden, so dass die Invertierung nur alle x-Sekunden durchgeführt wird und man den Zustand des Port A mit Hilfe eines Voltmeters überprüfen kann.