Hersteller: www.modul-bus.de
Download: ES48.zip (125K) enthält MC48, Beispielprogramme und diesen Text
Das Entwicklungssystem ES48 mit 8748-Prozessor ist ein vielseitiges System sowohl für die Programmentwicklung als auch für den direkten Einsatz als einfa-ches Meß- und Steuerungssystem. Programme können über die serielle Schnitt-stelle in das RAM des Systems geladen und gestartet werden. Statt eines RAMs kann ein EEPROM bestückt werden, so daß sich Programme permanent bereit-halten lassen. Ein Jumper auf der Platine erlaubt außerdem den Betrieb als eigen-ständiger Einchip-Computer mit Programmen im internen EPROM eines 8748- oder 8749-Prozessors. Erweiterungen und Versuchsaufbauten werden durch das Punktraster-Versuchsfeld der Platine erleichtert. Alle freien Portanschlüsse sind über Pfostenstecker erreichbar.
Technische Daten: Prozessor: 8748, interne Ladesoftware RAM: 2K, alternativ EPROM oder EEPROM Taktfrequenz: 6MHz Baudrate: 9600 Baud Stromversorgung: 5V, stabilisiert Stromaufnahme: ca. 150mA Anschlüsse: - zwei universelle 8-Bit-Ports - serielle Schnittstelle Software: - Assembler - Makrocompiler MC48
Der Prozessor 8748 verfügt mit DB0 bis DB7 über einen kombinierten Daten- und Adreßbus. Das Adreßlatch 74HC573 trennt unter Steuerung des ALE-Signals die unteren acht Adreßsignale A0 bis A7 ab. Die höheren Adreßleitungen werden von der unteren Hälfte des Ports P2 geliefert. Im Normalfall verwalten 8048-Prozessoren völlig getrennte Programm- und Datenspeicher. Das RAM 6116 wird jedoch beim ES48 durch eine Verknüpfung von /PSEN- und /RD-Signal als gemeinsamer Daten- und Programmspeicher verwendet. Dadurch ist es möglich, Programme ins RAM zu laden und zu starten. Im Grundzustand des Systems ist die EA-Leitung hochgesetzt, um den externen Programmspeicher zu verwenden. Durch Umschaltung über Jumper J1 oder durch ein Signal an RTS wird EA jedoch low, so daß das interne Programm des 8748 aktiviert wird. Dies ist die Download-Software zum seriellen Empfangen und Laden von Programmcode in das RAM.
Kl1: Schraubklemme für die Betriebsspannung 1 GND 2 Vcc, +5V stabilisiert
Anmerkung: Das ES48 enthält eine Suppressor-Diode gegen Überspannung und Verpolung. Im Fehlerfall, z.B. bei überhöhter Betriebsspannung, begrenzt diese Schutzdiode die Spannung auf einen ungefährlichen Wert. Eine andauernde Überlastung führt zu einem irreversiblen Kurzschluß in der Diode, die dann ersetzt werden muß.
St1: RS232-Anschluß DB9, weiblich, zur direkten Verbindung mit dem PC: NC 1 6 NC (ES48 sendet Daten) RXD 2 7 RTS (Reset) (ES48 empfängt Daten) TXD 3 8 NC (Programm laden) DTR 4 9 NC GND 5
Anmerkung: Zur Verbindung mit dem PC ist ein 9-poliges, nicht- gekreuztes Verlängerungskabel zu verwenden. Beim Betrieb mit üblichen Terminalprogram-men ist zu beachten, daß RTS und DTR üblicherweise gesetzt werden und damit ein RESET ausgelöst wird.
St3: Pfostenstecker 10-polig, Port P1, frei verwendbar P10 1 2 P11 P12 3 4 P13 P14 5 6 P15 P16 7 8 P17 Vcc 9 10 GND
Anmerkung: Port P1 ist als quasi-bidirektionaler Port für Eingänge
und Ausgänge verwendbar.
St4: Pfostenstecker 10-polig, Port P2 (A8) P20 1 2 P21 (A9) (A10) P22 3 4 P23 P24 5 6 P25 P26 7 8 P27 (TXD vom Prozessor) Vcc 9 10 GND
Anmerkung: Die Leitungen P20 bis P23 werden vom Prozessor als Adreßleitungen
verwendet, können aber parallel einen Portbaustein 8243 ansteuern.
P27 ist im normalen Betrieb der serielle Ausgang, darf aber in Programmen
ohne serielle Schnittstelle auch direkt angesteuert werden.
St6: Pfostenstecker 20-polig: 1 P20 (Adreßleitungen und 8243) 2 P21 3 P22 4 P23 5 PPROG (Steuerleitung für 8243) 6 Vcc +5V 7 P10 (frei) 8 P11 9 P12 10 P13 11 P14 12 P15 13 P16 14 P17 15 P24 (frei) 16 P25 17 P26 18 P27 (/TXD) 19 Vcc +5V 20 GND
Anmerkung: Die Steckerbelegung entspricht weitgehend der Anschlußbelegung
des 8048 (Pin 1 bis 18), wobei allerdings die Pin 19 und 20 mit Vcc und
GND belegt wurden.
Das ES48 kann alternativ zum mitgelieferten Prozessor 8748 mit interner
Down-load-Software mit folgenden Prozessoren bestückt werden:
8035/80C35 mit 64 Byte RAM
8039/80C39 mit 128 Byte RAM
8048/80C48 maskenprogrammiert, 64 Byte RAM
8049/80C49 maskenprogrammiert, 128 Byte RAM
8050/80C50 maskenprogrammiert, 256 Byte RAM
8748 EPROM-Version, 64 Byte RAM
8749 EPROM-Version, 128 Byte RAM
Auf dem ES48 befinden sich ein Jumper zur Auswahl des aktiven Programmspeichers:
J1-ROM: geschlossen: Internes ROM aktiv
offen: RAM aktiv (default)
In der Grundeinstellung (J1 offen) führt das ES48 ein Programm aus, das zuvor ins RAM geladen wurde. Das Programm kann mit RESET neu gestartet werden und bleibt aktiv, solange die Betriebsspannung anliegt. Über die serielle Schnitt-stelle kann jedoch die interne Download-Software im EPROM des 8748 gestartet werden, um ein neues Programm ins RAM zu übertragen. Diese Einstellung gilt auch für den Betrieb mit einem EEPROM, das genau wie ein RAM mit dem Pro-grammcode geladen wird, wobei allerdings die Übertragung etwas langsamer er-folgen muß.
Statt eines RAMs 6116 kann ein EEPROM 28C16 oder ein bereits programmiertes EPROM 2716 bestückt werden. Falls das ES48 als festprogrammierter Einplati-nen-Computer mit Programm im EPROM oder EEPROM eingesetzt werden soll, ist es zweckmäßig, den Prozessor 8748 gegen einen stromsparenden CMOS-Prozessor 80C35 oder 80C39 auszutauschen. Ebenfalls verwendbar sind die Typen 80C48 und 80C49.
J1 aktiviert das interne ROM des Prozessors. Das System kann nun z.B. mit einem 8748 oder 8749 mit interner Software verwendet werden. In den meisten Fällen (bei Programmen ohne externe RAM-Zugriffe) können dann das RAM 6116 und das Adreßlatch 74HC573 aus dem Sockel entfernt werden.
Über die serielle Schnittstelle kann vom PC aus die Umschaltung in das interne ROM als Programmspeicher durchgeführt werden. Die Leitung DTR muß dazu gesetzt werden, was dieselbe Wirkung besitzt wie das Setzen von J1. Die Um-schaltung wird benutzt, um das Download-Programm im 8748 zu aktivieren und Programme ins RAM des Systems zu laden. RTS dient dabei als Reset-Eingang.
Autonom im ES48 lauffähige Pragramme lassen sich bequem mit dem Makroco-miler MC entwickeln und im System starten. Darüberhinaus können beliebige anders entwickelte Programme wie z.B. übersetzte Assembler- Pogramme geladen werden. Ein Download- Programm muß die folgenden Schritte ausführen:
1. Erzeugen eines 100ms-Reset-Signals, RTS setzen 2. Umschaltung ins interne EPROM, DTR setzen 3. Reset zurücknehmen, RTS zurücksetzen 4. 400ms warten 5. Programmcode ab Adresse 0000h im Binärformat senden 6. Reset, RTS setzen 7. Umschaltung ins RAM, DTR zurücksetzen 8. Reset zurücknehmen, RTS zurücksetzen
Das folgende Programm demonstriert den Download-Vorgang in Pascal. Die Da-tenübertragung wurde durch einen Delay-Befehl verlangsamt, um auch EEPROMs laden zu können
Program Download; Uses DOS, CRT; const BA : Integer = $02F8; { $03F8=COM1, $02F8=COM2} var Dateiname : String; procedure Sende (Zeichen :Byte); begin while (Port[BA+5] AND 32) = 0 do; { Sende-Halteregister leer? } Port[BA]:=Zeichen; end; function Empfang :Byte; var i :Word; begin i:=0; while ((Port[BA+5] AND 1)=0) AND (i<10000) DO Inc(i); if i < 10000 { Timeout erreicht? } then Empfang := Port[BA] else Empfang := 0; end; procedure Init; var i, Dummy :Byte; begin Port[BA+3]:=128; Port[BA+0]:=12; { 12: 9600 Baud, 6 :19200 Baud } Port[BA+1]:=0; Port[BA+3]:=7; { 8-Bit, n-Parity, 2 Stopbits } Port[BA+1]:=0; { keine Interrupts } Port[BA+4]:=0; { DTR = 0, RTS = 0} for i:= 1 to 3 do Dummy:=Port[BA]; { UART leeren } end; procedure DTR (An : Boolean); begin If An then Port[BA+4] := (Port[BA+4] OR 1) else Port[BA+4] := (Port[BA+4] AND 254); end; procedure RTS (An : Boolean); begin If An then Port[BA+4] := (Port[BA+4] OR 2) else Port[BA+4] := (Port[BA+4] AND 253); end; procedure lade (Dateiname: String); var f: file of Byte; r: Integer; code: Byte; begin RTS (true); {Reset} DTR (true); {ROM aktiv} delay (100); RTS (false); {Reset aufheben} delay (400); writeln; Assign (f, Dateiname); {$I-} Reset (f); {$I+} r := IOResult; if r= 0 then begin {$I-} while not EoF(f) do begin read(f,code); Sende(code); write ('.'); delay(20); {Wartezeit für EEPROM} end; Close(f); {$I+} writeln; r := IOResult; end; if r <>0 then writeln ('Fehler!') else writeln ('ok'); RTS (true); {Reset} delay (100); DTR (false); {RAM aktiv} delay (100); RTS (false); {Reset aufheben} end; begin Init; if ParamCount > 0 then begin Dateiname := ParamStr(1); lade (Dateiname); end; end.
Das Programm erwartet Programmcode im Binärformat. Programme können z.B. mit dem Assembler TASM oder mit dem Makrocompiler MC erstellt werden. Das folgende Beispiel zeigt ein kleines Assembler-Programm zum Testen des Systems:
Anfang mov A,#0 ;Akku mit Null laden outl P1,A ;Ausgabe an Port P1 call Warte ;Unterprogramm Warte aufrufen mov A,#255 ;Akku mit 255 laden outl P1,A ;Ausgabe an Port P1 call Warte ;Unterprogramm Warte aufrufen jmp Anfang ;Rücksprung zum Anfang Warte mov R7,#255 ;Register R7 laden Schl1 mov R6,#255 ;Register R6 laden Schl2 djnz R6,Schl2 ;innere Zählschleife djnz R7,Schl1 ;äußere Zählschleife ret ;Rücksprung vom Unterprogramm .end
Dieses Programm läßt sich mit dem Shareware-Assembler TASM übersetzen und als Binärfile TEST1.OBJ speichern:
TASM -48 -b TEST1.ASM
Die assemblierte Programmdatei TEST1.OBJ wird dann mit
DOWNLOAD TEST1.OBJ
in das RAM des ES48 übertragen und gestartet. Die Funktion läßt sich z.B. über LEDs erkennen, die mit Vorwiderständen zwischen Vcc und Port P1 angeschlos-sen sind. Für die Programmentwicklung ist es sinnvoll, einen Testadapter mit acht LEDs herzustellen, der auf die Pfostenstecker für Port P1 und Port P2 paßt. Pro-grammabläufe lassen sich damit in vielen Fällen direkt überblicken.
Die Programmierumgebung MC wurde speziell für die vereinfachte Programmentwicklung mit Mikrocontrollern entwickelt und enthält neben einem vielseitigen Compiler auch einen Editor, Download- Funtionen, ein Terminalprogramm und einen Speicher-Editor. MC unterstützt das ES48 mit seinem Download-Protokoll 1, wobei eine Verzögerungszeit zum Laden von EEPROMs eingestellt werden kann.
MC liefert sehr schnellen und sehr kompakten Code, so daß sich auch zeitkritische Aufgaben lösen lassen. Gegenüber Assembler ergibt sich vor allem eine geringere Einarbeitungszeit und eine erhebliche Zeitersparnis bei der Entwicklung von Pro-grammen. Insbesondere sind sehr schnelle Testzyklen möglich, weil Programme ins RAM geladen und z.B. mit dem integrierten Terminal in der selben Programmumgebung getestet werden können.
Das erste Programmbeispiel soll einfache Portausgaben demonstrieren. Hier wird eine genau vorgegebene Anzahl von Einzelimpulsen abgegeben. Da MC48 nur Bytes verarbeitet, müssen mehr als 255 Impulse über geschachtelte Prozeduraufrufe erzeugt werden.
Procedure pulse WrP1 255 WrP1 0 EndProc Procedure 200pulse Count1 200 Loop1 pulse Endproc Procedure 10000pulse Count2 50 Loop2 200pulse Endproc Begin 10000pulse End
Das zweite Programmbeispiel zeigt ein MC48-Programm zur Ansteuerung eines AD-Wandlers TLC549. Der Wandler wird seriell über folgende Portanschlüsse gesteuert: P24-Clk, P25-Dout, P26-/CS. Zusätzlich enthält dieses Programm ein Runtime-System mit Routinen zur seriellen Datenübertragung und zur Zeitsteue-rung. Die Prozeduren wurden in Assembler geschrieben und über Inline-Kommandos eingebunden.
;Steuerprogramm für den TLC549 ;Runtimesystem für MC48-Programme Procedure WrCOM ;9600 Baud Inline BA,08,9A,7F,BB,10,EB,0F Inline 97,67,F6,19,9A,7F,E6,1D Inline 8A,80,8A,80,BB,0F,EB,1F Inline EA,11,23,00,23,00,8A,80 Inline BB,01,EB,2B EndProc Procedure RdCOM ;9600 Baud Inline 86,33,97,E6,2E,BA,19,EA Inline 35,BB,08,97,86,49,00,A7 Inline 2C,67,2C,BA,0F,EA,43,EB Inline 39,FC,83,00,97,2C,67,2C Inline BA,0F,EA,50,EB,39,FC EndProc Procedure Delay ;A * 1 ms Inline AD,16,5C,97,E6,57,AE,23 Inline F4,62,23,00,23,00,23,00 Inline 23,00,FE,55,ED,57 EndProc Procedure BitLesen ;TLC549 auslesen RdP2 ;Bits lesen AND 00100000b ;Dout maskieren ShiftLeft ShiftLeft ;zum Bit 7 schieben +B ;zum Meßwert addieren ShiftLeft ;Bits weiterschieben WrB ;Meßwert in B speichern WrP2 10111111b ;Taktimpuls an Clk WrP2 10101111b ;Clk = 0 EndProc Procedure messen ;Abfrage TLC549 WrP2 11101111b ;/CS = 1 Count8 4 Loop8 Nop ;Wartezeit > 20µs WrP2 10101111b ;/CS = 0 B 0 ;Meßwert rücksetzen Count8 8 Loop8 BitLesen ;8 Bits lesen RdB ;Meßwert lesen EndProc Procedure in/out RdCom ;Ausgabewert lesen WrP1 ;über P1 ausgeben messen ;Messung ausführen WrCOM ;Ergebnis zurücksenden EndProc Begin Loop in/out ;Endlosschleife End
Nähere Erläuterungen zum ES48 und zahlreiche Anwendungsbeispiele finden sich im folgenden Buch:
B. Kainka, Erfolgreich Messen, Steuern und Regeln mit Mikrocontrollern, 2. Auflage Franzis' 1998