Programmentwurf eines Mikrocontrollergesteuerten H

1. Einf├╝hrung


Die Hardware - Semesterarbeit besteht aus der Aufgabe, einen mikrocontrollergesteuerten Hochregalroboter zu fertigen. Hierf├╝r stand der ELVamat Baukasten zur Verf├╝gung, der neben drei Schrittmotoren auch diverse mechanische Teile zum Bau von verschiedenen "Robotern" beinhaltet. Die Basis ist ein Mikrocontrollersystem auf der Basis des Intel 87C52. Die Software zum Betrieb des Roboters wird in Assembler geschrieben und in einem EPROM abgelegt. An dieses System angeschlossen sind eine I/O - Baugruppe, die Tastatur, das Display und eine Motoransteuerung, die einen Logikteil und die Treiberstufen enth├Ąlt. In dieser Dokumentation wird n├Ąher auf die Programmausarbeitung eingegangen.

1.1. Formelle Aufgabenstellung f├╝r die gesamte Gruppe

Aufgabe: Hochregalroboter
Teilnehmer: Michael Ku├č, Thomas J├╝ngel, Matthias Buchhorn, Andreas Spiller
Zeitraum: 8 Wochen

Mit dem ELVamat Baukasten wird ein Hochregalroboter gebaut, der Gegenst├Ąnde in ein Hochregallager ein - , aus - und umlagern kann. Die Steuerung erfolgt ├╝ber eine Mikrocontrollerbaugruppe. Die gesamte Steuerung erfolgt durch ein Assemblerprogramm, das auf der Mikrocontrollerbaugruppe in einem EPROM gespeichert ist. Die Hardware teilt sich in die drei folgenden Teilbereiche: Logik &Treiber, Ein - und Ausgabeeinheit und Mikrocontrollerbaugruppe. Die Steuerung des Roboters erfolgt ├╝ber die Tastatur, die Eingaben k├Ânnen auf dem Display ├╝berpr├╝ft werden. Die Mikrocontrollerbaugruppe verarbeitet die Eingaben und gibt die Signale f├╝r die Schrittmotorsteuerung.
Der Funktionsnachweis ist zu f├╝hren. Das fertige Projekt wird mit einer kompletten Dokumentation pr├Ąsentiert


1.2. Organisatorisches Umfeld



















1.3. Aufgabenstellung Programmausarbeitung

Grundlage f├╝r alle weiteren Programme sind zwei Befehlsbibliotheken, welche alle elementaren Funktionen in sich vereinigt und somit erst ein effizienteres Programmieren erm├Âglicht. Die Bibliothek "system.mak" soll alle Funktionen zum Ansteuern der Tastatur und des Displays beinhalten. Desweiteren stellt die Bibliothek "motor.mak" alle Funktionen zum Steuern der Schrittmotoren bereit. Es gibt mehrere M├Âglichkeiten zum Ansteuern der Motoren, sei es vom PC aus, ├╝ber eine seriellen Schnittstelle, manuell oder automatisch mit den Mikrocontroller.
Das Hauptprogramm bedient sich dieser Funktionen und erf├╝llt folgende Aufgaben:
    Gegenstand aus dem Fach nehmen Gegenstand in das Fach legen Steuerung ├╝ber PC manuelle Steuerung des Roboters ├╝ber die Cursortasten Hilfe
Der Benutzer sollte mit einer m├Âglichst intuitive und einer rasch erlernbare Bedienoberfl├Ąche arbeiten.

2. Grundlagen


2.1. Speicherverwaltung

Alle Bausteine der MCS - 51 Familie haben einen getrennten Adre├čbereich f├╝r Programm - und Datenspeicher von jeweils maximal 64 KByte Gr├Â├če. Die CPU holt sich, die f├╝r die Abarbeitung von Programmen n├Âtigen Befehlen aus dem Programmspeicher (EEPROM), Speichervariablen werden jedoch in den Datenspeicher abgelegt bzw. ausgelesen. Bei einem Zugriff auf die RAM - Bausteine wird die Leseleitung (\RD) angesprochen, sobald Befehle vom Programmspeicher angefordert werden, wird die Programmspeicherfreigabeleitung (\PSEN) aktiviert. Die Funktionen des Mikrocontrollers schalten selbstst├Ąndig die Steuerleitungen frei, so das dieser Vorgang beim Programmieren transparent bleibt. Die Software des Mikrocontrollersystems wurde am PC, mit einem sogenannten Cross - Assembler entwickelt. Dieses kleine MS - DOS Programm wandelt den Assemblercode in einen funktionst├╝chtigen Maschinencode um. Diese Datei mit der Endung wird mit Hilfe einer Eprom - Brenner - Software in den Eprom geschrieben. Der Umfang der Assemblerbefehle ist sehr umfangreich. Der Mikrocontroller verf├╝gt ├╝ber 256 Befehle und ein komfortables Spezialfunktionsregister. Mit Hilfe dieser Mnemonik l├Ąsst sich der Speicher auf zwei Arten adressieren. Bei der direkten Adressierung wird der Operand mit einer 8 - Bit Adresse verkn├╝pft, somit kann nur das interne RAM und die Spezialregister angesprochen werden. Bei der indirekten Adressierung wird der Befehl mit einem Adre├čregister verkn├╝pft. Nur die 8 Bit R0/R1 Register und das 16 Bit Datenpointregister beinhalten die Adresse des Operanden. Ein Adre├čregister wird durch das Zeichen @ gekennzeichnet. Es existieren vier Registerb├Ąnke, jede dieser Registerb├Ąnke besitzen acht Register, somit kann mit dieser Adressierungsmethode auf die ersten vierundzwanzig RAM - Pl├Ątze zugegriffen werden. Der Zugriff auf dieses 8 Bit Register wird durch die Registerbefehle R0 - R7 vereinfacht. Die Registerb├Ąnke werden mit dem 3. und 4. Bit des Programmstatuswortes angesprochen. Weiterhin besteht die M├Âglichkeit Konstanten, mit dem DB - Befehl zu vereinbaren. Die Interrupts beginnen nach der Programmeinsprungadresse auf der Adresse 0003 und weitere Interrupts folgen im Abstand von 8 Bytes. Interrupts sind z.B. Externer Interrupt 0, Timer 0, Externer Interrupt 1, Timer 1, serieller Port Interrupt und Timer 2.

2.2. Spezialfunktionsregister (SFR)

Im oberen Datenspeicher befindet sich im Bereich der Adresse 80 - FF die Spezialfunktionsregister (SFR) die weitere umfangreiche Funktionen bieten :
SFR
Code
Beschreibung
Akkumulator
Acc
Bei Operationen der ALU wird dieses Register benutzt.
B Register
B
Wird bei der Division und Multiplikation benutzt.
Programmstatuswort
P
Das Flagregister bietet folgende Informationen:
CY - Carry Flag AC - Hilfscarryflag
F0 - freies Flag RS1,RS2 - Registerb├Ąnke
OV - ├ťberlaufflag P - Parityflag
Stackpointer
SP
Durch Beschreiben dieses Registers legt man den Stack an eine andere Stelle des Speichers.(default=07)
Datenpointer
DPL, DPH, (DPTR)
Der 16 - Bit Datenpointer teilt sich in Low und Highbyte. Damit ist eine Adressierung bis zu 64k Byte m├Âglich.
Ports 0 - 3
P0, P1, P2, P3
Ports k├Ânnen eingelesen bzw. beschrieben werden.
serieller Datenbuffer
SBUF
Besteht aus zwei getrennten 8 - Bit - Registern. Beim Lesen wird der Empfangspuffer, beim Schreiben der Sendepuffer angespochen.
Timer
TL0, TL1, TH0, TH1
Diese Register stehen f├╝r die beiden 16 - Bit Timer - register.
Kontrollregister
PCON, TCON, TMOD, SCON, IE, IP
Diese Register dienen zum Steuern der Timer und Interrupts.

2.3. ├ťbersicht ├╝ber die Maschinenbefehle

2.3.1. Arithmetische Befehle

Die arithmetischen Befehle kennzeichnen einfache mathematische Befehle wie Addieren, Subtrahieren, Multiplizieren, Dividieren und Erh├Âhen bzw. Erniedrigen eines Wertes. F├╝r Berechnungen dieser Art verwendet die ALU (arithmetic logic unit) den Akkumulator und das B - Register. Die Funktionen ADD,SUBB, INC und DEC setzt beim ├ťberschreiten von 0ffh bzw. Unterschreiten von 0 das ├ťbertragsflag. Die Befehle ADDC und SUBB beziehen das ├ťbertragflag in die Berechnung mit ein. So k├Ânnen gr├Â├čere Zahlen addiert bzw. subtrahiert werden. Eine M├Âglichkeit, zwei Zahlen nach Gr├Â├če zu vergleichen, ist z.b. das Subtrahieren zweier Zahlen und das Auswerten des ├ťbertragflags. Nach jeder BCD - Addition muss der DA A - Befehl zur Korrektur ausgef├╝hrt werden.

2.3.2. Logische Befehle

Die logischen Befehle bieten verschiedenste Verkn├╝pfungsmethoden zwischen zwei Bytes. Logikbefehle sind AND(ANL), OR(ORL), XOR(XRL), NOT(CPL). Weiterhin bietet der Mikrocontroller Befehle wie Rotate(RR,RL), Swap(SWAP), Clear(CRL). Die Rotatefunktion schiebt die 8 Bit des Akumulators nach rechts oder links. Damit l├Ąsst sich z.b. ein schnelles Multiplizieren mit einer Zweierpotenz gew├Ąhrleisten. XOR - Logik wird auch dazu verwendet zwei Werte zu vergleichen. Sind beide Werte identisch, so ist der Akkumulator null und kann mit dem bedingten Sprungbefehl JZ ( jump zero) und JNZ (jump not zero) ausgewertet werden.

2.3.3. Datentransferbefehle

Die Datentransferbefehle MOVX und MOVC greifen auf den externen Speicherbereich der RAM - bzw. der ROM - Bausteine zu. Der MOV - Befehl kann nur auf internen Speicher zugreifen, somit k├Ânnen Register, Spezialfunktionsregister und Variablen bearbeitet werden. Alle Datentransferbefehle verschieben 8 oder 16 Bit gro├če Datenpakete zu beliebigen Zielen. Interrupts und Subprozeduren unterbrechen den Ablauf des Hauptprogrammes, um deshalb wieder in den normalen Programmablauf zur├╝ckzukehren, werden alle Registerinhalte mit Pop in den Stack gesichert und nach Beenden der Routine mit Push wiederhergestellt.

2.3.4. Boolsche Befehle

Mit Hilfe von boolschen Befehlen ist die Verkn├╝pfung von einzelnen Bits m├Âglich. Alle logischen Befehle arbeiten auch mit Bits. Weiterhin bietet der Mikrocontroller bedingte Sprungbefehle, welche den Zustand der Bits auswerten und einen Sprung an einer relativen Programmadresse veranlassen. Die Carry - Flag - Befehle spielen ein gro├če Rolle, da sie den ├ťbertrag bei Addition, Subtraktion, Inkrement - oder Dekrementierung registrieren.

2.3.5. Bedingte und unbedingte Spr├╝nge

Ohne bedingte und unbedingte Spr├╝nge ist nur eine sequenzielle Abarbeitung des Programmes m├Âglich. Spr├╝nge erlauben erst das Arbeiten mit Unterprogrammen, Subroutinen und Interrupts. Prozeduren werden mit aufgerufen. Die vorherige Adresse wird auf den Stack abgelegt und es wird zu der Adresse des Unterprogrammes gesprungen. Mit dem RET - Befehl wird die alte Adresse vom Stack gelesen und so zum Hauptprogramm zur├╝ckgekehrt. Mit einer einfachen Konstruktion < loop: ... CJNE z├Ąhler,loop>erh├Ąlt man eine funktionierende Schleife. Der CJNE - Befehl ist ein bedingter Sprung, der ├Ąhnlich wie die repeat - until Schleife funktioniert.

2.4. Assemblerfunktionen

Der verwendete MCS - 51 Assembler besitzt ├╝ber die einfache Mnemonik hinaus, Kontrollstrukturen, Verwaltung von Variabeln und Labels. Konstanten werden im Programmspeicher abgelegt Es k├Ânnen 8 - Bit gro├če Zahlen mit dem Befehl DB abgelegt werden, 16 - Bit gro├če Zahlen werden mit der DW - Anweisung im ROM deklariert. Mit der ORG - Anweisung wird eine absolute Adresse festgelegt. Diese Anweisung wird z.b. f├╝r die Programmeinsprungsadresse und der Speicheradresse der Konstanten verwendet. Die Registerb├Ąnke werden mit der Funktion USING umgeschaltet. Variablen k├Ânnen als unterschiedlichste Typen definiert werden. Die CODE - Anweisung definiert die Varible als ROM - Adresse. DATA, IDATA, XDATA definiert sie als direkte, indirekte bzw. externe RAM - Adresse. Bitadressen werden mit Befehl BIT festgelegt. Das Arbeiten mit Bibliotheken macht den Quellcode ├╝bersichtlicher und portabler. Deshalb bietet der Assembler die M├Âglichkeit eine oder mehrere externe Programmdateien in das Hauptprogramm, mit der $INCLUDE() - Anweisung, einzubinden. Die IF - ELSE - ENDIF Struktur vergleicht eine Varible mit null. Liefert das Ergebnis den Wert true so werden die Anweisungen nach dem IF ausgef├╝hrt, ansonsten werden die Anweisungen nach dem ENDIF ausgef├╝hrt. Die Kontrollstruktur wird mit der ENDIF - Anweisung abgeschlossen. Das Programm wird mit der END - Anweisung beendet. Vordefinierte Variblen sind vor allem die Spezialfunktionsregister. Eine Ausf├╝hrliche Beschreibung lesen Sie bitte weiter oben.

2.5. Programmierung der Peripherie

2.5.1. Ansteuerung der Tastatur


Es wird eine 3x4 Tastaturmatrix verwendet. Die Tastaturinformation liegt an Adresse 04000h. Der eingelesende Wert wird in ASCII - Code umgewandelt:
Wert
ASCII - Code
Wert
ASCII - Code
6Fh
30 - ‘0’
F5h
36 - ‘6’
DEh
31 - ‘1’
DBh
37 - ’7’
7Eh
32 - ‘2’
7Bh
38 - ‘8’
F6h
33 - ‘3’
F3h
39 - ‘9’
DDh
34 - ‘4’
CFh
20 - ‘ ’
7Dh
35 - ‘5’
E7h
A0 - ‘ ’

2.5.2. Ansteuerung des Displays


Ist das 1./2. und 9.Bit des Adressbytes gesetzt, so wird das Display angesprochen.Das 2.Bit gibt an, ob es sich bei dem empfangende Byte um eine Date oder ein Befehl handelt. Somit tr├Ągt die Befehlsadresse den Wert 4001h und die Datenadresse den Wert 4002h. Erkl├Ąrung zum Befehlsbyte:
Wert - bin├Ąr
Befehl
Beschreibung
0000 0001
Clear Display
l├Âscht das Display und setzt den Cursor an Position 0
0000 001 -
Return Home
setzt den Cursor an Position 0
0000 01xy
Eintragemodus
regelt die Richtung der Cursorbewegung (x) und das Displayshift (y)
0000 1xyz
Display on/off
schaltet Anzeige (x), Cursor (y) u. Cursorblinken (z) an/aus,
0001 xy - -
Shift
Bewegt den Cursor (x) und verschiebt die Anzeige (y)
001x yz - -
Interface
setzt Datenbreite(x), Zahl der Zeilen (y) und Gr├Â├če des Zeichens (z)
01xx xxxx
setzeBefehlsadr.
alle nachfolgenden Daten gelangen in den gesetzten Charakter - RAM
1xxx xxxx
setze Datenadr.
alle nachfolgenden Daten gelangen in den gesetzten Daten - RAM
xyyy yyyy
lese Adr.&Busy
setzt das Busy flag (x) und liest den Adre├čz├Ąhler der Anzeige (x)

2.5.3. Motorsteuerung

Die Hauptaufgabe besteht nat├╝rlich darin, den Hochregalroboter zu steuern. Der Roboter kommuniziert ├╝ber die Adresse C000h. Lie├čt der Microcontroller von dieser Adresse, wird der Zustand der Taster ├╝bermittelt. Mit einem Schreibbefehl werden die Motoren angesteuert. Es ist m├Âglich, bis zu drei Bitfolgen miteinander zuverkn├╝pfen, um so die Motoren gleichzeitig laufen zu lassen. So k├Ânnen Anfahrtswege mit einen Linienalgorithmus verk├╝rzt werden. Der Breesenham - Algorithmus arbeitet nur mit Integerwerten und ist somit sehr schnell. Es sind keine komplitzierten Realzahlberechnungen notwendig.

Bewegungsrichtung des Roboters
horizontal
vertikal
Greifer
vor
1111 1110=FEh
1111 1011=FBh
1110 1111=EFh
zur├╝ck (init)
1111 1100=FCh
1111 0011=F3h
1100 1111=CFh

Taster in Bewegungsrichtung des Roboters
R├╝ckgabewert
links
FEh
rechts
FDh
hoch/vor
E7h
runter/zur├╝ck
EBh

Jeder Motor muss mit einer Linksdrehung initialisiert werden. Es gen├╝gt, wenn der Microcontroller ein Byte mit dem Wert 0h zur Motorsteuerung schickt. Die Wartezeit zwischen den Betrieb eines Motors sollte nicht 4,0 ms unterschreiten, da die Motoren bei k├╝rzeren Signalzwischenzeiten nicht die n├Âtige Kraft zum Bewegen des Roboters aufbringen k├Ânnen. Wird ein Taster gedr├╝ckt, muss der Motor in dieser Richtung gestoppt werden.

2.5.4. Serielle Schnittstelle zum PC


Der Lagerroboter soll die M├Âglichkeit besitzen, ├╝ber einen PC komfortabler gesteuert zu werden, daf├╝r besitzt der Mircocontroller die M├Âglichkeit ├╝ber serielle Ports mit anderen Prozessoren in Verbindung zu treten. Auf dieser seriellen Schnittstelle k├Ânnen gleichzeitig Daten versendet und empfangen werden. Damit der Mircocontroller, der ├╝ber den UART - Standart verf├╝gt, mit einen PC kommunizieren kann, wird der Baustein MAX232 verwendet. Dieser wandelt die Logik von 0V/5V des UART - Standard in den RS - 232 - Standart mit der Logik von - 12V/ +12V um. Der Ein - und Ausgang der seriellen Ports ist gebuffert. Die Empfangs - und Sendebuffer liegen zwar auf der selben Adresse (99h), sind aber physikalisch zwei verschiedene Register. Ein Schreibbefehl auf diese Adresse lenkt die Daten in das Senderegister, ein Lesebefehl holt die Daten aus den Empfangsregister. Der serielle Port kann in vier Modi arbeiten. Sie werden ├╝ber das SCON - Register gesetzt. Modi 2und 3 sind Multiprozessormodi und spielen in der Verst├Ąndigung zwischen Prozessoren eine gro├če Rolle, da simultane Datensendung und - empfang m├Âglich ist. Modus 0 schiebt mit konstanten Geschwindigkeit die Bits mit Hilfe eines Schieberegisters ├╝ber die serielle Schnittstelle, Modi 1 bis 3 arbeitet im ├╝blichen UART/RS232 - Format. Dieses Protokall arbeitet mit einem Startbit, acht (Modus 1) oder neun (Modi 2/3) Datenbits und einem oder zwei Stoppbits. F├╝r die Anwendung des Hochregalroboters gen├╝gt Modus 1, da nie Daten gleichzeitig gesendet und empfangen werden m├╝ssen. Au├čerdem arbeitet der Modus mit 8 - bit Datenbits und die Baudrate ist beliebig, ├╝ber das TH1 - Register, einstellbar. Die Timer werden mit dem Register TMOD gesetzt, um eine konstante Baudrate zu erzeugen.



3. Realisierung / Implementierung


3.1. Allgemeines

In der Testphase wurde der Eprom - Baustein mit einem Bootstrapprogramm beschrieben. Dieses 8K Byte gro├če Programm liefert Debug - Informationen an den PC. ├ťber die serielle Schnittstelle wird das Hochregalroboter - programm mit dem Programm Term95 auf das RAM geschrieben. Die Projektsoftware muss im Adressbereich 2000h - 3FFFh organisiert werden, da hier der RAM - Bereich liegt. Es wurde ein Shareware - Crossassembler benutzt, welcher ├╝ber Internet bezogen wurde.

3.2. Befehlsbibleothek

Die Befehlsbibleothek enth├Ąlt elementare Funktionen zum Ansteuern des Displays, der Tastatur und des Roboters.

3.2.1. Display

    Zeichen ausgeben Befehl an das Display schicken Display initialisieren Display l├Âschen Zeichenkette vom ROM lesen und auf Display ausgeben


Das Unterprogramm DISPLAY hat die Aufgabe den Buchstaben, welcher im Akkumulator liegt, auf dem Display anzuzeigen. Da das Display wie langsamer RAM - Speicher angesprochen wird, muss mit Hilfe des Busy - Signals auf das Display gewartet werden. Erst dann k├Ânnen die Daten an die Adresse E003 geschickt werden. DISPLAY_BEFEHL funktioniert ├Ąhnlich wie die Subroutine DISPLAY, hier wird jedoch ein Befehlsbyte zum Display, an die Adresse E001 gesendet. Diese beiden Funktionen sind Grundlage f├╝r alle weiteren Displayfunktionen.Das Display wird in der Subroutine "DISPINI" initialiesiert. Der Display - Controller wird in den 2 Zeilenmodus - geschalten, der Bildschirm wird gel├Âscht, das automatische Weiterbewegen des Cursors wird angeschalten und als letzes wird der Cursor ausgestellt. Die Funktion "DISPCLR" l├Âscht den Bildschirm. Die Funktion "CURSOR" lie├čt aus dem Akkumulator die Cursorposition. Die erste Position der Zeile 1 hat dem Wert 00h, die erste Position in Zeile 2 wird mit Cursorwert 40h aktiviert. Mit dem Befehl DB k├Ânnen Daten und Zeichenketten ins ROM abgelegt werden. Die Subroutine "ROM2DISP" bedient sich desMaschienenbefehles MOVC, der diese Zeichenketten aus dem ROM ausliest. Eine Zeichenkette ist definiert als Menge von ASCII - Zeichen, die mit dem Byte 0 abgeschlossen wird. Das DPTR - Register enth├Ąlt die Adresse des Strings und eine Anzahl von 256 Zeichen kann eingelesen werden.

3.2.2. Tastatur

    Taste einlesen Zeichenkette einlesen 2 Byte String in eine Dezimalzahl umwandeln Tastaturstatus ├╝bergeben

Als Eingabemedium wird eine 3x4 Tastaturmatrix verwendet. Die Tastatur schickt an die Adresse ein Byte, welches den momentanen Status der Tastatur zur├╝ckgibt. Die Funktion "TASTE" lie├čt ein Zeichen von Tastatur, wandelt dieses Zeichen in ein ASCII - Zeichen um und legt diesen Wert in den Akkumulator ab. Die Tastaturmatrix muss ├╝ber die Software entprellt werden. Das erledigt eine sehr kurze Warteschleife, danach wird noch ein Zeichen vom Eingabeger├Ąt gelesen und mit dem vorherigen Zeichen verglichen. Sind beide Zeichen gleich, hat ist die Taste immer noch gedr├╝ckt. Das Zeichen wird erst an das Hauptprogramm zur├╝ckgegeben, wenn der Benutzer die Taste losl├Ąsst. Die Subroutine "READLN" nutzt diese Funktion, um ein komplette Zeichenkette von der Tastatur zu lesen. Die Eingabe wird mit dem Enterzeichen oder mit der maximalen Anzahl der Zeichen beendet. Mit der Cancel - Taste kann jederzeit die Eingabe abgebrochen werden. Mit dem Unterprogramm "STR2DEZ" kann eine mehrstellige Zahl, welche im ASCII - Code im Speicher liegt, in eine Dezimalzahl umgewandelt werden.

3.2.3. Motorsteuerung

    Drehe Motor automatische Motorsteuerung nach dem Linienalgorithmus von Breesenham manuelle Motorsteuerung PC - Steuerung Motorstatus ausgeben
Die Subroutine DREH ├╝bermittelt den Akkumulatorinhalt an die Adresse C000h des Motors 96 mal hintereinander. Damit bewegt sich der Greifer um einen Millimeter. Zwischen den Motoraufrufen befindet sich eine Warteschleife von 4 ms. Weiterhin ruft diese Routine die Funktion Motor_status auf. Es wird getestet, ob einer der Endtaster bereits bet├Ątigt ist. Ist dies der Fall, wird der Akkumulatorinhalt so modifiziert, dass sich der Greifer vom jeweiligen Endtaster wegbewegt. Die Ansteuerung der einzelnen Motoren ist weiter oben beim Themapunkt Grundlagen erkl├Ąrt. Die Funktion "MOTOR" f├Ąhrt automatisch von Position 0 zu einen angegebenen Fach und nimmt einen Gegenstand auf oder legt diesen ab. Der Funktion m├╝ssen zwei Werte ├╝bergeben werden. Im Register R0 befindet sich die horizontale Position des Faches und im Register R1 wird die vertikale Position ├╝bergeben. Um die n├Âtige Aufl├Âsung zu erhalten, werden die X - und Y - Koordinaten mit den Fachabst├Ąnden multipliziert, daraus ergibt sich eine 16 - Bit Information. Die Register R3,R5 sind die Lowbytes und die Register R4, R6 sind die High - Bytes der beiden Koordinaten. Mit den Anfangskoordinaten (0, 0) und den Endkoordinaten bewegt der Roboter seinen Greifer auf einer Linie. Ein schneller Linienalgorithmus ist der Bresenham - Algorithmus. Beide 16 - Bit Zahlen werden verglichen. Ist der Anstieg in X gr├Â├čer als Anstieg in Y, wird der Programmteil "ABARBEITUNGX" aufgerufen, ist der Y - Anstieg jedoch gr├Â├čer, wird die Subroutine "ABARBEITUNGY" aufgerufen. Der Breesenham - Algorithmus funktioniert nun folgenderma├čen. Der Roboter bewegt sich Schritt f├╝r Schritt auf der ausgew├Ąhlten Achse und benutzt das 16 - Bit Hilfsregister zum testen. Das Hilfsregister wird um den maximalen Achsenwert der k├╝rzeren Seite erh├Âht. Das Hilfsregister wird mit der l├Ąngeren Seite verglichen. Ist das Hilfsregister gr├Â├čer, wird der der Robotor vertikal und horizontal bewegt und das Hilfregister gel├Âscht, ansonsten wird der Roboter nur horzontal bewegt. Die Prozedur "manuell_Steuern" fragt st├Ąndig den Tastaturstatus mit dem Befehl "Press" ab. Ist die Taste "cancel" gedr├╝ckt, wird aus dem Programm gesprungen und zum Hauptmenu zur├╝ckgekehrt. Die anderen Tasten werden weiter ausgewertet und in den Code der Motorsteuerung umgewandelt. Mit diesem Parameter, der im Akkumulator liegt, wird die Funktion "Dreh" aufgerufen. Die Cursorsteuerung bewegt den Greifer horizontal und Vertikal, Taste "0" und "Enter" bewegen den Greifer vor und zur├╝ck. Die Funktion "PC - Steuerung" wartet auf ein Zeichen von der Seriellen Schnittstelle. Dieses Warten kann mit der Taste "Abbruch" beendet werden und der Benutzer kehrt zum Hauptprogramm zur├╝ck. Wird ein Wert vom PC empfangen, wertet der Mircocontroller dieses Byte aus, welches die Nummer der Funktion beinhaltet. Der Funktion m├╝ssen jedoch noch Parameter ├╝bergeben werden. Also wartet der Mircocontroller auf weitere Daten. Wenn alle notwendige Daten ├╝bermittelt wurden, wird die Funktion mit diesen Parametern gestartet. Ist die Funktion beendet schickt der Mircocomputer dem PC ein Signal, welches die Bereitschaft bekannt gibt, neue Befehle aufzunehmen.

3.2.4. Serielle Schnittstelle zum PC

Die Prozeduren f├╝r die serielle Schnittstelle liegen in der Befehlsbibliothek "motor.mak" und ist unter PC - Steuerung zu finden. Die Register werden initialisiert. Der serielle Modus 1, 8 bit UART und 4800 Baud wird eingestellt und der Timer1 wird gestartet. Der Mircrocontroller wartet auf einen Datenbyte. Dieses Byte gibt an, wie der Roboter sich bewegt. Der ASCII - Code der numerischen Tastatur ├╝bernimmt die Funktion der Steuerung. Nur die Tasten "+" und " - " varieren zum 3x4 Tastaturblock. Bei Bet├Ątigung dieser Tasten wird der Greifer vor und zur├╝ck bewegt. Wenn der auzuf├╝hrende Prozess des Mircocontrollers beendet ist, schickt das Programm ein Zeichen zum PC. Damit gibt der Mircocontroller dem PC bekannt, dass er neue Befehlsdaten emfangen kann.

3.3. Hauptprogramm des Hochregalroboters

3.3.1. Bedienung


Der Benutzer kann ohne Vorkennis den Roboter bedienen. Dies ist durch eine intuitive Menusteuerung m├Âglich:








1
links/hoch
2
hoch
3
rechts/hoch
4
links
5
6
rechts
7
links/runter
8
runter
9
rechts/runter
Abbruch
0
Greifer vor
Best├Ątigen
Greifer zur├╝ck



Men├╝steuerung im Programm des
Hochregalroboters



Mehrfachbelegung der 3x4 Tastaturmatrix

Der jeweilige Menupunkt wird mit den Cursortasten ausgew├Ąhlt und mit der Taste "Best├Ątigen" aktiviert. Der Punkt "Ablegen" fordert die Fachnummer vom Benutzer. Nach der Eingabe f├Ąhrt der Roboter das gew├╝nschte Fach an, legt den Gegenstand ab und kehrt zum Ausgangspunkt zur├╝ck. Der Menupunkt "Nehmen" f├Ąhrt nach der Eingabe das gew├╝nschte Fach an, nimmt den Gegenstand und kehrt zur Anfangsposition zur├╝ck. Der Benutzer hat weiterhin die M├Âglichkeit den Roboter manuell oder ├╝ber einen Computer zu steuern. Der Menupunkt "Steuern" gibt ein Untermenu auf dem Display aus. Dieses Menu hat die Auswahlm├Âglichkeiten "PC - Steuerung" und "manuell Steuern". Der Mircocontroller besitzt die M├Âglichkeit mit einem Personalcomputer ├╝ber die serielle Schnittstelle zu kommunizieren. Der PC sendet ein Befehlsbyte an den Mircocontroller, welcher den Roboter steuert. Der zweite Menupunkt erm├Âglicht es dem Benutzer den Hochregalroboter manuell zu steuert. Die Cursortasten bewegen den Greifer in horizontaler und vertikaler Richtung. Die Tasten "0" und "Enter" Bewegen den Greifer vor und zur├╝ck. Mit den "Abbruch" Taste wird zum Hauptmenu zur├╝ckgesprungen. Mit dem Menupunkt "Hilfe" wird dem Benutzer eine kurze Hilfe in Form einer Scrollschrift gegeben. Mit der "Abbruch" Taste gelangt der Benutzer ins Hauptmenu zur├╝ck.

3.3.2. Programmroutinen des Hauptprogrammes
















Programmablaufplan des Hauptprogrammes


Das Unterprogramm MENU gibt, nach der kurzen Information, ein Auswahlmen├╝ auf dem Display aus. Das Auswahlmen├╝ wird mit Hilfe des DB - Befehls in den EPROM abgelegt und mit der Subroutine ROM2DISP auf das Display geschrieben. Ein beliebiger Menupunkt kann mit den Cursortasten ausgew├Ąhlt werden. Die folgenden Zahlen stehen f├╝r Cursorbewegungen < 2 - oben, 8 - unten, 4 - links, 6 - rechts>. Mit der Funktion TASTE werden diese Zahlen eingelesen und mit der Entertaste (Zeichen 12) best├Ątigt. Die Varible Menu_status gibt die Cursorposition an. Die Funktion ABLEGEN ruft das Programm EINGABE auf. Die Funktion READLN lie├čt die Fachnummer ein. Die Zeichenkette wird mit STR2DEZ in die Nummer des Faches umgewandelt. Diese Date wird mit Hilfe der Variable Fachx dividiert. Die Y - Koordinate steht nun im Akkumulator und die X - Koordinate liegt im B - Register. Diese Werte werden in das Register R0,R1 geschrieben und der Funktion "MOTOR" ├╝bergeben. Der Funktion wird weiterhin das Befehlsbit F0 ├╝bergeben. Ist dieses Bit gel├Âscht wird die Funktion Ablegen aktiviert. Das Unterprogramm NEHMEN arbeitet mit den gleichen Funktionen wie ABLEGEN. Diese Funktion wird mit dem gesetzten Bit F0 aktiviert. Das Unterprogramm STEUERN ruft den Befehl ROM2DISP auf, um die Menupunkte auf den Bildschirm anzuzeigen. Der Benutzer hat die M├Âglichkeit zwischen den Men├╝punkten PC - STEUERUNG, MANUELL STEUERN auszuw├Ąhlen. Die Funktion Menu_Steuerung2 gibt den ausgew├Ąhlten Menupunkt zum Hauptprogramm zur├╝ck. Die Funktion Menu_steuerung2 funktioniert nach dem Prinzip der Funktion Menu_steuerung. Das Unterprogramm PC - Steuerung erm├Âglicht die Kommunikation zwischen PC und Mircocontroller mit Hilfe der seriellen Schnittstelle. Der zweite Menupunkt Manuell Steuern erm├Âglicht es dem Benutzer den Greifarm ├╝ber die Cursortasten zu steuern. Mit der Funktion Press wird st├Ąndig der Tastaturstatus ├╝berpr├╝ft. Wird ein anderer Wert als FFh an das Hauptprogramm ├╝bergeben, wertet das Programm den Tastaturstatus aus. Je nach gedr├╝ckter Taste wird der Akkumulator mit den Wert der Motorsteuerung geladen und die Funktion Dreh aufgerufen. Dieses Programm schleift solange, bis die Taste "Abbruch" gedr├╝ckt wird. Der letzte Hauptmenupunkt HILFE schreibt eine Zeichenkette an die Cursorposition 040h. Die Zeichenkette wird vorher im ROM mit dem DB - Befehl abgelegt. Es wird ein 16 - Zeichen gro├čer Ausschnitt vom kompletten String an Cursorposition 0 des Displays ausgegeben. Nach einer kurzen Warteschleife wird dieser Auschnitt, um zwei Zeichen nach links verschoben, wieder an Position 0 angezeigt. Der Tastaturstatus wird st├Ąndig mit der Funktion Press ├╝berpr├╝ft und solange die Laufschrift ausgegeben, bis die Taste "Abbruch" gedr├╝ckt wird.

Quellnachweis :

B├╝cher

"8 bit - Einchip - Mikrocontroller" - Datenbuch Phillips - 1988
"Das Mikrocontroller Kochbuch", "Das Mikrocontroller Applikations Kochbuch"
- Andreas Roth IWT Thomson, Bonn 97

Internet

Suche im Worlwideweb: http://www.altavista.digital.com
FTP - Server : http://www.ftp - search.com
Datenbl├Ątter und Tutorials im PDF, WORD und HTML Format.
http:://www.hitex.com
http:://www.ece.orst.edu/
Shareware - Crossassembler 1.2 : Copyright (c) 1994, 1996 by W.W. Heinz

4050 Worte in "deutsch"  als "hilfreich"  bewertet