Email schreiben ...

 







Update:
06.11.2009

Erste Schritte mit einem µC

Viele Aufgaben in der digitalen Elektronik wie messen, steuern und regeln, lassen sich mit einem Microcontroller µC einfacher lösen als mit konventioneller Elektronik. Wenn auch das Erlernen der Hardware- und Software-Entwicklung mit Aufwand verbunden ist, überwiegen die Vorteile bei weitem. Vor allem die Veränderung von bestehenden Systemen sind mit µCs viel einfacher, da sie oft ausschliesslich eine Anpassung des µC Programms erfordern.

Microcontroller vom Typ AT89C2051

Bei der Anwendung von Microcontrollern muss man sich zwischen kompletten Systemen oder Eigenentwicklungen mit Single-Chip Controllern entscheiden. Die Eigenentwicklungen mit Standard-Industriekomponenten erfordern den grösseren Arbeitsaufwand, dafür sind die Materialkosten wesentlich geringer und die Hardware kann genau der Aufgabe angepasst werden.

 

Microcontroller µC der 8051-Familie

Der ursprünglich von Intel vorgestellte Microcontroller 8051 ist mittlerweilen einer der meist eingesetzten Einchipcomputer. Die heutigen 8051er Derivate werden von vielen verschiedenen Herstellern zu sehr günstigen Preisen angeboten. Je nach Typ sind interner Programmspeicher, Arbeitsspeicher, digitale IO-Ports, AD- und DA-Wandler, UART, I²C- und SPI-Bus, EEPROM, Timer, interne und externe Interrupts, ... vorhanden, so dass man bei vielen Aufgaben mit einem Minimum an zusätzlichen Komponenten auskomt.

 

AT89C2051 - der Einstiegs-Typ

Viele kleine Projekte lassen sich mit dem AT89C2051 von Atmel durchführen (pdf, 298kB). Für die ersten Schritte braucht man ein Programmiergerät. Programmiergeräte für Microcontroller und EEPORMs gibt es viele auf dem Markt. Die günstigsten Programmiergeräte sind ab ungefähr 100.- Fr. erhältlich. Es gibt auch viele Eigenbauvarianten im Internet.

Für die Programmierung braucht es einen PC mit Windows und eine Programmiersprache. Für kleine, übersichtliche Programme mit maximaler Geschwindigkeit und minimalem Speicherbedarf braucht man mit Vorteil einen Assembler. Ein Assembler eignet sich auch für den Einstieg in die 8051er-Welt sehr gut, denn beim Programmieren in Assembler lernt man die Hardware am besten kennen. Im Buch «Das Microcontroller Kochbuch MCS51» von Andreas Roth liegt ein guter Assembler mit Simulator bei.

Für grössere Projekte braucht man in der Regel eine Hochsprache. Oft wird ein spezielles C eingesetzt. Die C Compiler sind jedoch meist sehr teuer und generieren zudem auch für kleine Anwendungen enorm viel Code. In der Praxis hat sich BASCOM sehr bewährt. BASCOM steht für Basic Compiler, wurde von MCSElec entwickelt und hat ein sehr gutes Preis-Leistungsverhältnis. Der von BASCOM erzeugte Code ist effizient bezüglich Geschwindigkeit und Speicherbedarf. Ein weiterer Vorteil von BASCOM ist, dass es auch ein BASCOM für AVR Risc Controller gibt.

 

Ein Minimalsystem mit dem AT89C2051

Ein Minimalsystem beinhaltet nur gerade das absolute Minimum an Komponenten, damit der Controller läuft. Beim AT89C2051 sind dies der Quarz und zwei Kondensatoren für den Schwingkreis, sowie ein Widerstand, ein Kondensator und ein Schalter für den Power-on-Reset POR. Zudem braucht es eine Stromversorgung, die eine Spannung zwischen 2.7 V und 6.0 V liefert.

Schaltschema eines Minimalsystems mit einem AT89C2051

Das Schaltschema eines Minimalsystems sieht so aus. Zusätzlich wurde noch eine Leuchtdiode an Pin 12 und ein Schalter an Pin 13 des Controllers angeschlossen, um seine Funktion zu testen.

Diese Schaltung kann einfach auf einem Experimentierboard oder auf einem Lochraster Print aufgebaut werden.

Schaltung auf Experimentierboard aufgebaut

Zum Test des Minimalsystems soll nun ein kleines Programm in Assembler geschrieben werden, das die angeschlossene Leuchtdiode mit 2 Hz blinken lässt. Wird der Schalter gedrückt, so soll das Blinken der Leuchtdiode unterbrochen werden.

Der Microcontroller wird mit 12 MHz getaktet. Das heisst, dass er für einen Maschinenzyklus nur eine Microsekunde, also eine Millionstel Sekunde braucht. Deshalb besteht die Hauptaufgabe des Programms darin, den Microcontroller mit Warteschleifen zu bremsen. Das fertige Programm könnte etwa so aussehen:

  #cpu=89C2051 ;AT89C2051
0000 schleife: ;do forever
0000   hier: ;Schalter gedrückt?
0000 30 91 FD   jnb p1.1,hier  
0003 B2 90   cpl p1.0 ;LED umschalten
0005 7A FA   mov r2,#250 ;warte 250ms
0007   warte1:  
0007 79 2B     mov r1,#43 ;warte 1ms
0009     warte2:  
0009 78 0A       mov r0,#10  
000B       warte3:  
000B D8 FE       djnz r0,warte3  
000D D9 FA     djnz r1,warte2  
000F DA F6   djnz r2,warte1  
0011 80 ED sjmp schleife  

In der mittleren Spalte steht der Assembler Code. Die Kürzel kann der Assembler in Maschinencode umwandeln. Der Maschinencode steht in der linken Spalte in der hexadezimalen Form. Dem Microcontroller wird mit dem Programmiergerät dieser Code in den Flash-Speicher einprogrammiert. Der Controller kann nach einem Reset diese Befehle interpretieren und ausführen. In der rechten Spalte stehen Kommentare, die der Assembler nicht liest. Das Programm belegt im Flash-Speicher 19 Bytes. Möglich wären beim AT89C2051 maximal 2048 Bytes. Dies reicht bereits für recht ansehnliche Steuerungsaufgaben.

Das gleiche Programm in der Hochsprache BASCOM programmiert, würde so aussehen:

$crystal = 12000000
$regfile = "89c2051.dat"
Do
  Do : Loop Until P1.1 = 1
  P1.0 = Not P1.0
  Waitms 250
Loop

 

Die verschiedenen Dateien, die im Assembler erzeugt wurden, stehen hier zum Download zur Verfügung:

blink.a51 a51, 397B Assembler Code; txt
blink.l51 l51, 860B Assembler und Maschinen Code; txt
blink.h51 h51, 64B Maschinen Code; txt (Intel Hex-Format)
blink.zip zip, 1.1kB alle Dateien zusammen

 

zurück

 

 
nach oben

home