(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