Mikrocontroller-Entwicklungskit Inhalt 1 80C537/80C517A-Modul-LWL... 2 1.1 Speichermodelle... 3 1.2 Jumper und ihre Funktion... 3 1.3 RS232-Anschlüsse... 4 1.4 LWL-Anschlüsse... 5 1.5 Besonderheiten... 5 2 Webserverplatine... 7 2.1 Anschluss von Ethernetgeräten... 9 3 Monitor-EPROM... 10 3.1 Bootloader... 10 3.2 Keil-Monitor... 11 3.3 Memory Map des Gesamtsystems... 12 3.4 TCP/IP-Stack... 12 3.4.1 Funktionsweise... 13 3.4.1.1 Initialisierung... 14 4 Software... 15 4.1 Erstellen eigener Projekte... 15 4.2 Kompilieren, Assemblieren, Linken... 16 4.3 Software-Upload und Debugging... 16 Hinweis: Kopieren und Weitergabe dieser Unterlagen nur mit ausdrücklichem Einverständnis des Autors.
80C537/80C517A-Modul-LWL 1 80C537/80C517A-Modul-LWL Dieses Modul ist ein vollständiges Mikrocomputer-System, das auch als Huckepacksystem einsetzbar ist. Es stehen 12 Analog- und 36 Digital-Anschlüsse zur Verfügung. Eine serielle Schnittstelle (COM 1) ist mit einem 9-poligen Stecker als RS232c ausgeführt. Über die zweite serielle Schnittstelle (COM 0) lässt sich eine LWL-Verbindung über Plastikfasern mit anderen Modulen aufbauen. Ein serielles EEPROM dient der stromausfallsicheren Speicherung von Daten. Zum 80C537/80C517A-Modul-LWL gehört ein Monitor-Programm. Damit lassen sich Programme vom PC aus über die serielle Schnittstelle laden, testen und Fehler einkreisen. Das 80C537/80C517A-Modul-LWL können Sie entweder mit zwei zweireihigen Stiftkontaktleiste auf eine eigene Schaltung aufstecken oder über Flachbandleitungen verbinden. Je nach Bedarf können die Kontakte mit den Stiften nach oben oder nach unten eingelötet werden. Es ist eine Bestückung mit bis zu 64 KByte Programmspeicher (2 Stück 27C256) und 64 KByte RAM (2 Stück 65256) möglich. Die Auflösung des A/D-Wandlers beträgt bei der 80C537-Version 8 Bit, bei der 80C517A-Version 10 Bit. Durch entsprechende Programmierung lässt sich auch in der 8-bit- Ausführung eine 10 Bit Auflösung erreichen. Die Schaltung lässt sich unterschiedlich konfigurieren, wodurch das Modul vielseitig einsetzbar wird. Durch den Einsatz von LWL (Licht- Wellen-Leiter) ist eine galvanisch entkoppelte und störsichere Datenübertragung zwischen diesen Modulen oder zu einem PC möglich. Es können auch mehrere Module zu einem Ringnetz zusammengeschlossen werden. Auch über die RS232-Schnittstelle COM1 kann eine Verbindung zu einem PC hergestellt werden, der dann z. B. Messdaten von einem Modul auswertet. Wird diese Schnittstelle nicht benutzt, ist JP4 zu öffnen, so dass Port P6.1 frei verfügbar ist. Wenn eine zweite RS232 anstelle der LWL- Schnittstelle benötigt wird, ist über den Stecker COM0 und eine Flachbandleitung ein weiterer 9-poliger SUB-D-Stecker anschließbar. Über Jumper JP5 wird von der LWL-Schnittstelle auf die RS232 umgeschaltet. Für verschiedene Zwecke ist das 80C537/80C517A-Modul-LWL mittels Jumper JP1 mit normaler Speicherbelegung oder mit Von-Neumann-Architektur zu betreiben. Letztere erlaubt es, Code (Programm) in das RAM1 zu übertragen und dann ein Programm in RAM1 anstelle von ROM1 ablaufen zu lassen. In diesem Fall spricht ein Programm-Speicherzugriff auf Adressen ab 8000H nicht mehr das ROM1, sondern das RAM1 an. ROM1 darf dann nicht bestückt werden. Ein Sprungbefehl auf eine Adresse ab 8000H, an der sich das geladene Programm befindet, startet dieses dann. Mikrocontroller-Entwicklungskit 2
80C537/80C517A-Modul-LWL 1.1 Speichermodelle Dieser Abschnitt zeigt, welcher Speicherbaustein (Code oder XData) bei welcher Adressierungsart und Jumper- Einstellung jeweils angesprochen wird. Harward-Architectur JP1: RAM1=XData+Code Code FFFFH 8000H ROM1 7FFFH 0H ROM0 XDATA RAM1 RAM0 Abbildung 1.1: Speicherbelegung Von-Neumann-Architektur JP1: RAM1=XData Code FFFFH 8000H RAM1 7FFFH 0H ROM0 XDATA RAM1 RAM0 1.2 Jumper und ihre Funktion Beachten Sie zur Beschreibung auch den Schaltplan. Ebenfalls wird in diesem Abschnitt die Jumper-Vorkonfiguration durch Leiterzüge gezeigt. JP1 Mit JP1 wird zwischen der Harward-Architektur und der Von-Neumann-Architektur unterschieden. JP2 JP3 Diese Jumper verbinden VAREF und VAGND mit der Referenzspannungsquelle auf der Platine. Wird IC13 (REF02) nicht verwendet, kann JP2 geöffnet und VAREF mit +5 V der Betriebsspannung verbunden werden, was aber ein größeres Rauschen der Wandlerergebnisse zur Folge haben kann. Soll die Referenzspannung über ST1 oder ST2 extern zugeführt werden, müssen beide Jumper geöffnet werden. Abbildung 1.3: JP1 für Speicherbelegung Abbildung 1.3: JP2 und JP3 Referenzspannungen Mikrocontroller-Entwicklungskit 3
80C537/80C517A-Modul-LWL JP4 JP4 verbindet den RxD-Anschluss der seriellen Schnittstelle 1 mit COM1. Soll Port P6.1 anderweitig verwendet werden, so muss JP4 geöffnet sein. JP5 Mit JP5 wird der Betrieb der seriellen Schnittstelle 0 mit LWL Bausteinen oder mit RS232-Port eingestellt. Hinweis: Nicht alle Jumper sind auf dem Board bestückt, es bestehen jedoch vorkonfigurierte Leiterzüge, die die Jumpereinstellungen repräsentieren. Sollen die Jumpereinstellungen geändert werden, sind die Leiterzüge aufzutrennen und die Jumper einzulöten. Abbildung 1.4: JP4 und JP5 1.3 RS232-Anschlüsse Zu COM0 ist eine 2 x 5-polige Stiftfeldleiste einlötbar. Darauf wird eine entsprechende Buchse mit eingepresstem 9poligen Flachbandkabel gesteckt. Das Flachbandkabel lässt den Anschluss 10 von COM0 frei. Am Ende des Flachbandkabels wird dann der SUB-D-Stecker so montiert, dass Pin 1 von COM0 mit Pin 1 vom SUB-D-Stecker verbunden ist, dann stimmt die Anschlussbelegung. die Verbindung der RS232-Schnittstellen COM0 und COM1 zu einem anderen Gerät muss dabei über ein. RS232-Linkkabel (oder auch Null-Modemkabel) mit zwei 9-poligen SUB-D-Buchsen erfolgen, bei denen die Pins 2 und 3 über Kreuz verbunden sind. Solche Kabel werden auch zur Verbindung von zwei PCs verwendet. Abbildung 1.5: Link-Verbindung zum PC Mikrocontroller-Entwicklungskit 4
80C537/80C517A-Modul-LWL 1.4 LWL-Anschlüsse Zur Verbindung der LWL-Anschlüsse werden Kunststoff-Lichtwellenleiter mit 1 mm Faserdurchmesser verwendet. Im allgemeinen genügt ein Abschneiden der Faser mit einem scharfen, eventuell erhitzten Messer, bevor sie angeschlossen wird. In der Praxis zeigt sich, dass Scheren ungeeignet sind, da sie in der Mitte des Kerns eine Kante erzeugen. Für den Betrieb von zwei Systemen wird je ein Sender mit einem Empfangsbaustein verbunden. Bei einer Vernetzung von mehreren Systemen wird jeweils ein Sender mit dem Empfänger des nächsten Systems so verbunden, dass ein Ring entsteht. 1.5 Besonderheiten An Port 6 ist ein EEPROM angeschlossen, das die Daten seriell nach dem MICROWIRE-Standard überträgt. Generell muss am Programmanfang ein Befehl stehen, der den CS-Eingang (P6.3) auf logisch 0 setzt, um unbeabsichtigtes Ansprechen des Bausteins zu vermeiden und Strom zu sparen. Außerdem ist die Schaltung mit einem DIL-Schalter ausgerüstet, der über ein Schieberegister eingelesen werden kann. Der Zustand des DIL-Schalters wird beim Einschalt- Reset über das Pin RO\ in das Schieberegister übernommen. Spätere Änderungen am Schalter können dann nicht mehr eingelesen werden. Über P6.5 wird der Takt ausgegeben und über P6.7 das jeweilige Datenbit eingelesen. In der Praxis hat sich gezeigt, dass der Referenzspannungsbaustein nicht unbedingt erforderlich ist. Wird er weggelassen, muss er durch eine Drahtbrücke überbrückt werden (VCC nach Pin6). Will man den DIL-Schalter verwenden müssen die Widerstände auf V AA und die Schalter auf GND gelegt werden. Hinweis: Leider hat sich im Bestückungsdruck auf der Platine ein Fehler eingeschlichen. Die zwei Dioden D1 und D2 sind umgekehrt gepolt einzubauen! Es gilt der folgende Bestückungsplan. Abbildung 1.6: Bestückungsdruck Mikrocontroller-Entwicklungskit 5
80C537/80C517A-Modul-LWL Mikrocontroller-Entwicklungskit 6
Webserver 2 Webserverplatine (optional) Die Realisierung des Embedded Webservers erfolgt mit dem Mikrocontrollerboard 80C537/80C517A-Modul-LWL und einer Zusatzplatine zur Aufnahme einer ISA-Ethernet-Karte. Abbildung 2.1: realisierter Webserver Das verwendete Mikrocontrollerboard verfügt über zwei Steckplätze zur Aufnahme von zwei 32KB sram-bausteinen (RAM0 und RAM1). RAM1 wird bereits für die Funktion als Entwicklungsboard (Von-Neumann-Architektur) verwendet. Anstelle eines RAM-Baustein auf RAM0 (0000H-7FFFH) kann die Zusatzplatine direkt mit einem Verbindungskabel auf den Sockel des RAM0-Steckplatzes gesteckt werden. Damit erfolgt der Anschluss der Ethernetkarte im Speicherbereich des Mikrocontrollers und es werden keine I/O-Ports belegt. Im Falle einer NE2000 kompatiblen Ethernetkarte werden 32 Byte des Speicherbereiches benötigt, im Falle einer Ethernetkarte mit CS8900-Ethernetcontroller nur 16 Byte. Um den restlichen Speicherbereich von RAM0 nicht ungenutzt zu lassen, wurde ein zusätzlicher 8KB RAM auf der Webserverplatine realisiert. Durch die beiden komplementären Select-Eingängen der 8KB-RAM-Bausteine lassen sich zusätzliche Logikschaltungen vermeiden. Des weiteren wurde eine Spannungsversorgung für das komplette System auf dem Webserver- Board realisiert. Das ist notwendig, da ältere Ethernetkarten eine 5V- und 12V- Spannungsversorgung benötigen. Mikrocontroller-Entwicklungskit 7
Webserver Abbildung 2.2: Schaltplan Die Standard-Adresse um Ethernetkarten anzusprechen ist 0300H. Um die Ethernetkarte ab der Adresse 0000H verfügbar zu machen, wurden die obersten 14 Adressen des 8-Bit-ISA-Sockels auf die Adresse 0300H fest verschaltet. Die Adresse A5 und A6 werden zur Selektion verwendet und die Adressen A0-A4 dienen zum Ansprechen der Ethernetregister. Die Adresse A5 wurde direkt mit dem /CS-Pin des RAM0-Sockels verbunden, damit eine eindeutige Trennung zwischen RAM1 und Webserverplatine gewährt wird. Die Adresse A6 dient zum unterscheiden zwischen dem 8KB RAM auf der Webserverplatine und Ethernetkarte. Dadurch ist A6 des ISA-Sockels mit Adresse A14 des RAM0-Sockels verbunden. Abbildung 2.3: Bestückungsplan Mikrocontroller-Entwicklungskit 8
Webserver Der Anschluss des 8 KB-RAM entspricht nahezu 100% dem RAM0-Sockel. Eine Besonderheit von 8 KB-RAM-Bausteinen ist jedoch der zweite high aktive Select-Eingang. Dieser wird ebenfalls wie der ISA-Sockel mit der Adresse A14 des RAM0-Sockels verbunden. Damit kann der RAM ab der Mikrocontroller-Adresse 4000H angesprochen werden. Abbildung 2.4: Memory Map der Webserverplatine FFFFH 8000H 7FFFH 6000H 5FFFH 4000H 3FFFH 0020H 0000H - 001FH XData RAM1 unbenutzt 8 KB RAM unbenutzt Ethernet-Karte Hinweis: Auf dem Mikrocontrollerboard wurden Standarddioden verwendet, um eine UND- Verschaltung von /PSEN und /RD zu realisieren. Diese Dioden führen jedoch zu unerwünschten Nebeneffekten, wenn die Ethernetkarte angeschlossen wird. Daher wird empfohlen, diese Dioden gegen Highspeed-Dioden auszutauschen. 2.1 Anschluss von Ethernetgeräten Wenn zwei Ethernetgeräte verbunden werden sollen, gibt es zwei Wege dies zu tun. Es kann ein Router, Gateway oder HUB verwendet werden, um die Geräte zu verbinden. Stehen diese Geräte nicht zur Verfügung können zwei Ethernetgeräte auch direkt erbunden werden. Dabei ist ein Cross-Over-Kabel zu verwenden Abbildung 2.5: Cross-Over-Kabel Mikrocontroller-Entwicklungskit 9
Monitor-EPROM 3 Monitor-EPROM Der Monitor-EPROM enthält verschiedene Funktionalitäten, so wird er zum einen für die Verwendung des Boards als Entwicklungsboard verwendet, sowie zum Lauf der entgültigen Anwendung. Er enthält den Monitor von Keil, um mit dem Keil-Softwaretool zu kommunizieren, als auch einen Bootloader, der es erlaubt die erstellte Anwendung automatisch zu starten bzw. zwischen Keil-Monitor und eigener Anwendung umzuschalten. 3.1 Bootloader (optional) Der im EPROM enthaltene Bootloader erlaubt zwei verschiedene Funktionsweisen des Mikrocontrollerboards. So kann der Anwender den Keil-Monitor starten, der es ihm erlaubt eigene Programme zu entwickeln und auszutesten oder, wenn das entgültige Programm fertiggestellt und in den RAM1 geladen wurde, dieses automatisch laufen zu lassen. Das ist notwendig, da der 80C517A/80C573 kein Flashcontroller ist und eigenständig Code abspeichern kann. Des weiteren können Restriktionen des Keil-Monitor beseitigt werden. Diese Restriktionen sind: - Kein automatischer Start des eigenen Programms nach einem Power On Reset oder Reset - Start des eigenen Programms nur mit der Keil-Software möglich - Stark verlangsamte Arbeitsweise des eigenen Programms durch den Keil-Monitor Die Arbeitsweise des Bootloaders ist denkbar einfach. Er enthält eine Vergleichslogik, die je nach Ergebnis, True oder False, entweder das eigene Programm oder den Keil-Monitor startet. Die Vergleichslogik bezieht sich auf einen Speichereintrag in den Adressbereich FEFCH-FEFFH im XData-Bereich, also im RAM1. Entspricht der Inhalt dieser vier Bytes dem Wort INIT, so wird das eigene Programm gestartet. Das eigene Programm muss ebenfalls wie bei dem Keil-Monitor ab der Adresse 8000H gelinkt und geladen worden sein (Von-Neumann-Architektur). Bei einem uninitialisiertem RAM oder einem nichtstromausfallsicheren Speicher wird somit immer der Keil-Monitor gestartet werden. Voraussetzung dafür ist also ein stromausfallsicher Speicher, also ein batteriegepufferter RAM, ein Zero-Power-RAM oder ein Flash/EEPROM. Die Verwirklichung dieses Speichereintrages wird durch den Bootloader nicht vorgegeben, so bleibt es dem Anwender überlassen, ob er den INIT-Eintrag in der eigenen Applikation vornimmt oder über die Speichermanipulation-Funktion in der Keil-Software. Wird der INIT-Eintrag gelöscht startet der Keil-Monitor wieder nach einem Reset. Hat der Anwender vergessen eine Routine im eigenen Programm zu integrieren, die es ihm erlaubt den INIT-Eintrag zu löschen oder funktioniert diese nicht richtig, gibt es eine weitere Möglichkeit den Eintrag zu löschen. Es ist das serielle Kabel für den Software-Upload zu entfernen und die TxD- und RxD-Leitungen (Pin 2 und 3 des Sub-D-Steckers) zu verbinden und ein Reset auszuführen. Danach ist der INIT-Eintrag gelöscht und der Keil-Monitor startet wieder. Hinweis: Das eigene Programm ist zuvor zu erstellen, auf richtige Funktionsweise zu testen und mittels Keil-Monitor in den RAM1 zu laden. Danach kann der INIT-Eintrag erfolgen. Nur, wenn die Daten im RAM1 stromausfallsicher gespeichert werden können, ist die Funktion des automatischen Starts des eigenen Programms gesichert. Mikrocontroller-Entwicklungskit 10
Monitor-EPROM 3.2 Keil-Monitor Prinzipiell lassen sich verschiedene Monitore verwirklichen. Die beste Variante, in Verbindung mit dem verwendeten Mikrocontrollerboard, ist der folgende. 10 FF 0 - Monitor für 80C537/80C517A - COM1 wird für den Software-Upload verwendet (COM0 bleibt für den Anwender frei) - Verwendung des internen Bautradengenerators (die Timer bleiben somit frei für den Anwender) - automatische Baudratenerkennung (somit stehen verschiedene Baudraten zur Verfügung) - der Bootloader startet mit der Adresse 0000H (Reset-Adresse) - der Keil-Monitor verwendet eine Page von FF00H-FFFFH für interne Variablen Weitere Informationen zu den Monitoren von Keil können im Verzeichnis der installierten Keil- Software unter C:\Keil\C51\MON51\Mon51.pdf eingesehen werden. Folgende Restriktionen werden durch den Keil-Monitor bedingt: - 5 KB Code (EPROM) - 256 Byte XData (externer RAM) - RAM1 muss groß genug sein, um das gesamte Programm zu speichern (Code+Data) - die serielle Schnittstelle COM1 wird durch den Monitor belegt Sämtliche andere Hardwarekomponenten stehen dem Anwender zur Verfügung. Mikrocontroller-Entwicklungskit 11
Monitor-EPROM 3.3 Memory Map des Gesamtsystems Für das Gesamtsystem steht folgende Speicherkonfiguration zur Verfügung. Code xxxxxxxxxxx XData FFFFH FFFFH Keil-Monitor-Variablen FF00H Keil-Monitor-Variablen INIT FEFCH-FEFFH INIT FEFBH RAM1 (32KB) RAM1 (32KB) 8000H 8000H 7FFFH 7FFFH unbenutzt 6000H 5FFFH Monitor-EPROM 8 KB RAM 4000H 3FFFH unbenutzt 0020H 0000H 0000H - 001FH Ethernet-Karte Abbildung 3.1: Memory Map des Gesamtsystems 3.4 TCP/IP-Stack (optional) Mikrocontroller-Entwicklungskit 12
Monitor-EPROM Der TCP/IP-Stack enthält folgende Protokolle und Restriktionen: - ARP, IP, TCP, UDP, ICMP, WINS, HTTP - Treiber für NE2000 kompatiblen Chipsatz - Eingebettete Konfigurations-Webpage -. -. -. -. 3.4.1 Funktionsweise Die Verwendung des Stacks ist einfach zu bewerkstelligen, da nur 5 Funktionen notwendig sind. Zur näheren Erklärung gibt es drei Beispiele, die die Initialisierung des Stacks, das Ausgeben einer Webside mit Embedded Daten und die Verarbeitung von eingehenden Daten zeigen. Abbildung 3.2: TCP/IP-Stack Mikrocontroller-Entwicklungskit 13
Monitor-EPROM 3.4.1.1 Initialisierung Abbildung 3.3: Ergebnis des PING Abbildung 3.4: Konfigurationspage Mikrocontroller-Entwicklungskit 14
Software 4 Software An dieser Stelle soll kurz auf die Verwendung der Keil-Software eingegangen werden. Es soll jedoch nur die Anwendung der Software für die ersten Schritte erklärt werden. Für die Vertiefung in die Entwicklungssoftware soll an dieser Stelle auf die einschlägige Literatur, sowie auf das Internet verwiesen werden. 4.1 Erstellen eigener Projekte Um ein neues Projekt zu erstellen, ist zunächst die Keil-Software zu öffnen und ein neues Projekt anzulegen. Dies geschieht über den Button Project und anschließend New Project. Gegebenenfalls ist das aktuelle Projekt zu schließen. Nach dem Festlegen des Ordners, in dem das Projekt hinterlegt ist, erfolgt die Auswahl des entsprechenden Mikrocontrollers. Im Falle eines 80C517A-Mikrocontrollerboard ist Infineon und anschließend der SAB80C517A auszuwählen. Anschließend erfolgt die Abfrage, ob die Standard StartUp-Datei eingefügt werden soll. Empfohlen wird, diese Aufforderung zu verneinen und die mitgelieferte Datei startup.a51 zu einem späteren Zeitpunkt einzubinden. Nun ist ein neues Projekt erstellt und es kann der Quellcode erstellt werden. Mit dem Erstellen dieses Projektes wurden einige Voreinstellungen festgelegt. So ist das erstellte Programm im Simulator ausführbar und nicht auf der Hardware. Damit das eigene Programm auf der Hardware läuft, muss über Project, Options for Target in der Registerkarte Debug eine Umstellung erfolgen (siehe Abbildung 4.1). Abbildung 4.1: Target-Einstellungen Mikrocontroller-Entwicklungskit 15
Software Die zu ladende Datei Tscope.ini enthält einige Anweisungen für den Software-Upload. load HELLO $=0x8100 g, main load HELLO Es wird die Datei HELLO ins Mikrocontrollerboard geladen. Eine Dateiendung wird nicht angegeben. $=0x8100 Das Programm beginnt ab der Adresse 8100H. g,main In C-Projekten werden Anweisungen bis zur Main-Funktion ausgeführt (Initialisierung von Speicherbereichen und Festlegen des Stack). In Assembler-Projekten kann diese Anweisung entfallen. Steht dennoch ein g in der Tscope.ini, so startet das Programm automatisch nach dem Software-Upload. 4.2 Kompilieren, Assemblieren, Linken Ist bereits ein eigenes Projekt erstellt und der entsprechende Quellcode geschrieben, muss dieser Quellcode kompiliert, assembliert und gelinkt werden. Dazu dient der Rebuild All-Button. Es werden alle Dateien des Projektes gespeichert, kompiliert, assembliert und gelinkt. 4.3 Software-Upload und Debugging Ist das gewählte Projekt kompiliert kann es in ein Mikrocontrollerboard geladen werden. Vor dem Betätigen des Debug-Buttons ist sicherzustellen, dass kein anderes Programm die serielle Schnittstelle verwendet, die für den Softwareupload benutzt wird. Sollte bereits ein anderes Programm die entsprechende Schnittstelle verwenden, verhindert Windows einen Zugriff und es kommt zu einer Fehlermeldung. Mikrocontroller-Entwicklungskit 16
Software Der Software-Upload erfolgt nach Betätigen des Debug-Button. Ist das Programm in das Board geladen muss es mittels Run-Button gestartet werden. Ein stoppen des Programms ist jeder Zeit möglich, indem der Stop-Button verwendet wird. Voraussetzung für den Stopp ist die Aktivierung des Interrupts der seriellen Schnittstelle (siehe 4.1 Erstellen eigener Projekte). Mikrocontroller-Entwicklungskit 17