Mikrocontroller-Einführung mit dem ES52-Flash

(18.12.01, letzte Änderung 28.2.05)

Das Mikrocontroller-Entwicklungssystem ES52-Flash mit einem 89S8252-Prozesor wurde ursprünglich für das Franzis-Buch "Handbuch der PC-Mess- und Steuertechnik" entwickelt. Es dient dort als Plattform für die Entwicklung spezieller PC-Interfaces. Zugleich aber gibt es spezielle Kapitel über die Einführung in die Mikrocontroller-Technik und die Anwendung von Assembler und Basic-52. Genau dieses Thema behandelt nun auch eine Artikel-Reihe in Elektor: Der "Basiskurs Mikrocontroller" richtet sich an Einsteiger und soll eine Einführung geben, die ohne große Vorkenntnisse auskommt.

Das ES52-Flash von AK MODUL-BUS

Der Grundlagenkurs ab Elektor 1/2002 kann auch allen Anwendern des ES52-Flash empfohlen werden. Elektor hat ein eigenes Board zum 89S8252 entwickelt, das im Heft 12/2001 vorgestellt wurde. Beide Systeme unterscheiden sich zwar etwas, sind aber von der Grundidee sehr ähnlich. Alle für das Elektor-System erarbeiteten Programmbeispiele können auch mit dem ES52-Flash eingesetzt werden.

Die wesentlichen Unterschiede zwischen beiden Systemen liegen in der Verwendung der Schnittstellen. Das ES52-Flash braucht nur eine Schnittstellenbuchse, die sowohl für die Programmierung als auch für die serielle Kommunikation mit dem PC verwendet wird. Der Anwender benutzt z.B. nur COM2 für das Downlaod-Programm FLASH.EXE und z.B. ein Terminalprogramm für die Arbeit mit Basic52. Zwei Jumper auf dem Board dienen der Freigabe für die Programmiersignale. Entfernt man diese Jumper, sind die entsprechenden Ports frei für andere Aufgaben.

Das 89S8252-Board von Elektor

Das Elektor-Board hat zwei Schnittstellen, eine für die Programmierung und eine für den Terminalbetrieb. Beim Programm-Download in den 8-K-Flash-Bereich des Mikrocontrollers erfolgt eine automatische Umschaltung der Prozessorports, die in der übrigen Zeit frei für beliebige Aufgaben sind. Das Board besitzt bereits eine LCD-Schnittstelle.

Die entscheidenden Unterschiede und die übereinstimmenden Daten sollen hier in einer Tabelle aufgelistet werden.

ES52-Flash von AK-Modul-Bus

89S8252-Board von Elektor

Grunddaten Mikrocontroller 89S8252, 11,059 MHz, 8 K Flash, 32 K RAM, 5-V-Spannungsregler, Systembus, Punktraster-Experimentierfeld Mikrocontroller 89S8252, 11,059 MHz, 8 K Flash, 32 K RAM, 5-V-Spannungsregler, Systembus, Punktraster-Experimentierfeld
Programmierung Über RS232, wenn zwei Jumper gesetzt sind Über RS232, automatische Umschaltung
Programmierwerkzeug Flash.exe Microflash.exe
COM-Schnittstelle Über die gleiche DB9-Buchse Über eine zweite DB-9-Buchse
LCD Über Systembus erweiterbar Schnittstelle vorhanden
LEDs Vcc vorhanden, Programmieren aktiv keine
Betriebsspannung Schraubklemme 9...12V, alternativ +5V über Systembus Hohlstecker 9...12 V

Die wesentlichen Daten beider Systeme stimmen so weit überein, dass man nicht viel mehr als die unterschiedliche Download-Software beachten muss. Speziell für den Elektor-Kurs wurde noch eine Windows-Oberfläche für den Shareware-Assembler TASM geschrieben. Das Programm TASMedit.exe hat zusätzlich ein eingebautes Programmiertool für das Elektor-Board, so dass man bei der Entwicklung mit Assembler nur eine Oberfläche hat. Um den Anwendern des ES52-Flash die Teilnahme am Elektor-Kurs zu erleichtern, wurde das Programm angepasst. Die einzige Änderung verbirgt sich hinter der Schaltfläche RUN. Hier wird nun das assemblierte Programm in das ES52-Flash übertragen.

Download: TASMeditMB.zip (161 KB, update 28.2.05)
Download FlashMB.zip (update 28.2.05)

So gerüstet macht die Teilnahme am Basiskurs Mikrocontroller hoffentlich eine Menge Spaß.


Anwendungsbeispiel : Servosteuerung

(Dieses Beispiel wurde aus dem "Handbuch der PC-Mess- und Steuertechnik" entnommen und beschreibt einen typischen Einsatzbereich des ES52-Flash.)

Fernsteuerservos aus dem Modellbau lassen sich sehr einfach ansteuern, da sie nur einfache Impulse mit Pulsdauern zwischen 1 ms und 2 ms benötigen. Die Pulsdauer ist ein lineares Maß für den Drehwinkel des Servos. Wenn es gelingt, Impulse mit hoher zeitlicher Auflösung zu generieren, ergibt sich auch eine gute Winkelauflösung.

Zeitkritische Steuerungen mit PCs werden oft in autonome Mikrocontrollersysteme ausgelagert, weil vor allem unter Windows kleine volle Kontrolle über zeitliche Abläufe besteht. Hier wird ein Mikrocontroller 89S8252 verwendet, um bis zu 5 Servos über Anschlüsse des Ports 1 zu steuern. Steuerdaten werden über die serielle Schnittstelle empfangen und in entsprechende Impulse umgesetzt. Damit auch bei mehreren Servos eine ausreichende Impulsrate sichergestellt werden kann, wird die Übertragungsrate auf 19200 Baud eingestellt.

Für die Übertragung wurde folgenden Ablauf vereinbart: Der PC sendet zuerst die gewünschte Servoposition als ein Byte und dann den gewünschten Kanal in Form eines Bitmusters für den Port 1 des Mikrocontrollers. Die einzelnen Kanäle werden durch die Steuerbytes 1, 2, 4, 8 usw. angesprochen. Aber auch die gleichzeitige Ansteuerung mehrerer Kanäle ist auf diese Weise möglich. Der Mikrocontroller überträgt das empfangene Bitmuster an den Port 1 und startet damit den Impuls. Dann folgt eine Verzögerungsschleife mit je vier Befehlszyklen mal der empfangenen Servoposition. Eine zusätzliche Wartezeit vergrößert die Gesamtdauer auf den Bereich 0,955 ms bis 2,065 ms. Danach werden die Portanschlüsse wieder zurückgesetzt. Zur Bestätigung und zur Steuerung des zeitlichen Ablaufs wird nach dem Ende des Servoimpulses ein Byte 1 zurückgesandt. Dieses Byte muss vom PC empfangen werden, bevor ein neuer Impuls angefordert wird.

Das Steuerprogramm wurde auf fünf Kanäle begrenzt, weil mit Rücksicht auf die Programmierschnittstelle des 89S8252 die Portanschlüsse P1.5 bis P1.7 nicht verwendet werden sollten. Eine Erweiterung auf acht Kanäle ist aber ohne weiteres möglich. Man kann auf dem Entwicklungssystem die Programmierjumper entfernen, um auch diese Ports benutzen zu können. Für einen dauernden Einsatz wird man aber einen Einchip-Controller ohne das Entwicklungssystem einsetzen. Die Anzahl der gewünschten Steuerkanäle beeinflusst die Impulsrate, die im Idealfall bei etwa 50 Hz liegen sollte. Pro Kanal werden drei Bytes übertragen, was bei 19200 Baud etwa 1,6 ms benötigt. Dazu kommen noch maximal 2 ms für den Servoimpuls. Man kommt also mit weniger als 4 ms pro Kanal aus. Bei 5 Servos kann eine Wiederholzeit von 20 ms eingehalten werden.

;11,059MHz, 19200 Baud   (Servos.ASM)



#include 8051.H

         .org 0000H



ANFANG   mov   SP,#60H       ;Stackpointer setzten

INIT     clr   TR1           ;Timer 1 stoppen

         mov   TH1,#0FDH     ;3 bis Überlauf: 19200 Baud

         mov   TL1,#0FDH

         anl   TMOD,#0FH     ;Timer1: 8-Bit-Auto-Reload

         orl   TMOD,#20H

         setb  TR1           ;Timer Starten

         mov   SCON,#50H     ;InitRS232

         setb  TI

         orl   PCON,#80H     ;SMOD=1



NEXT     acall EMPF          ;Verzögerungszeit

         inc   A

         mov   R3,A

         acall EMPF          ;Servo-Kanal

         orl   A,#224        ;P1.5...P1.7 nicht verwenden  

         mov   P1,A

Delay1   nop                 ;1, Verzögerung 955...2065µs 

         nop                 ;1

         djnz  R3,Delay1     ;2, (1...256)*4*1.085µs

         mov   R3,#220

Delay2   nop                 ;1µs 

         nop                 ;1µs  

         djnz  R3,Delay2     ;2µs, 220*4*1,085µs

         mov   P1,#224       ;P1.0...P1.4 low

         mov   A,#1

         acall SEND

         sjmp  NEXT



EMPF     jnb   RI,EMPF

         mov   A,SBUF

         clr   RI

         ret



SEND     jnb   TI,SEND

         clr   TI

         mov   SBUF,A

         ret

        .end

Welche Anzahl von Steuerkanälen tatsächlich genutzt wird, hängt nur von der PC-Software ab. Das folgende Listing zeigt die Ansteuerung von fünf Servos mit einem Visual Basic Programm. Der Timer wurde auf 20 ms eingestellt, sodass sich eine Wiederholrate von 50 Hz ergibt. Die tatsächliche Ausgabegeschwindigkeit hängt aber von der Leistungsfähigkeit des Prozessors und von der momentanen Auslastung des Systems ab. Unter ungünstigen Umständen erreichen die Servos ihre Sollpositiin verlangsamt. Die einmal erreichte Position steht jedoch absolut ruhig, da die Impulsdauer allein vom Mikrocontroller erzeugt wird.

Private Sub Form_Load()

  OPENCOM "COM2:19200,N,8,1"

End Sub



Private Sub Form_Unload(Cancel As Integer)

  CLOSECOM

End Sub



Private Sub Timer1_Timer()

  SENDBYTE (HScroll1.Value)

  SENDBYTE 1 'P1.0

  Dummy = READBYTE

  SENDBYTE (HScroll2.Value)

  SENDBYTE 2 'P1.1

  Dummy = READBYTE

  SENDBYTE (HScroll3.Value)

  SENDBYTE 4 'P1.2

  Dummy = READBYTE

  SENDBYTE (HScroll4.Value)

  SENDBYTE 8 'P1.3

  Dummy = READBYTE

  SENDBYTE (HScroll5.Value)

  SENDBYTE 16 'P1.4

  Dummy = READBYTE

End Sub




Weitere Informationen zum Thema:

Elektor-Homepage: www.elektor.de
Informationen und Software (Flash.exe, Basic52) zum ES52-Flash
Kursübersicht und FAQ zum Basiskurs Mikrocontroller
Inhaltsübersicht zum Buch "Handbuch der PC-Mess- und Steuertechnik"


Zurück zur Startseite der MB-News
Zurück zur Startseite AK-Modul-Bus