Ansteuerung des Grafik-LC-Display NLC-122B032 (mit PIC-Mikrocontroller) Buchgeher Stefan

Größe: px
Ab Seite anzeigen:

Download "Ansteuerung des Grafik-LC-Display NLC-122B032 (mit PIC-Mikrocontroller) Buchgeher Stefan"

Transkript

1 Ansteuerung des Grafik-LC-Display NLC-122B032 (mit PIC-Mikrocontroller) Buchgeher Stefan 16. September 2006

2 Inhaltsverzeichnis 1 Allgemeines 3 2 Hardware 4 3 Ansteuerung des Grafik-LC-Displays Befehle zur Ansteuerung des Grafik-LC-Displays Zeitdiagramm Zeichensatz Software (in Assembler) Benötigte Register und Portdefinitionen Initialisierung (Unterprogramm INIT) Unterprogramme für die Grafik-LCD-Ansteuerung Unterprogramm GLCD INIT Unterprogramm GLCD COMMAND Unterprogramm GLCD DATA Unterprogramm GLCD DATA Unterprogramm GLCD CLEAR Unterprogramm GLCD SETCURSOR ZEILE Unterprogramm GLCD SETCURSOR SPALTE Software (in C mit CC5X) Portdefinitionen und externe Register Initialisierung (Unterprogramm INIT) Unterprogramme für die Grafik-LCD-Ansteuerung Unterprogramm GLCD INIT Unterprogramm GLCD COMMAND Unterprogramm GLCD DATA Unterprogramm GLCD DATA Unterprogramm GLCD DATA ZEICHEN Unterprogramm GLCD CLEAR Unterprogramm GLCD SETCURSOR ZEILE Unterprogramm GLCD SETCURSOR SPALTE Unterprogramm GLCD ZEICHEN 5x Unterprogramm GLCD ZEICHEN 8x Unterprogramm GLCD ZEICHEN 10x

3 INHALTSVERZEICHNIS 2 6 Demonstrationsbeispiele Hardware Nachbauanleitung (der Hardware) Softwarebeispiel 1 ( HELLO WORLD in Assembler) Listing Anmerkungen zur Assembler-Software Softwarebeispiel 2 in C mit CC5X Listings Anmerkungen zur C-Software A Layout (Demonstrationsbeispiele) 61 B Stückliste 62 C Zeichensätze 63 D Programmieren mit ICSP 81 E Umgehen der 1k-Grenze (beim CC5X-Compiler) 84

4 Kapitel 1 Allgemeines Alphanumerische LC-Displays sind in den letzten Jahren auch für den Hobbyelektroniker preiswert geworden und eignen sich aufgrund der geringen zusätzlichen Hardware sehr gut für die Anzeige von Werten, Informationen oder zur Eingabe von Parametern. Der Nachteil an alphanumerischen LC-Displays ist aber, dass hier keine Grafiken oder Bilder angezeigt werden können, und auch der Zeichensatz ist fix vorgegeben. Grafik-LC-Displays sind im Allgemeinen sehr teuer. Eine Ausnahme scheint aber das hier verwendete Grafik-Display vom Typ NLC-122B032 zu sein. Es bietet eine Auflösung von 122x32 Pixel. Nachteilig an den grafikfähigen LC-Displays ist wohl, dass sich hier kein einheitlicher Controller (so wie bei den alphanumerischen LC-Displays) durchgesetzt hat. Dies macht die Ansteuerung nicht gerade einfacher. Das hier verwendete Grafik-LC-Display verwendet den Epson-Controller SED1520. Dieses Dokument soll zeigen, wie relativ einfach die Ansteuerung des Grafik-LC-Display (NLC-122B032) mit einem PIC-Mikrocontroller ist. Als Programmiersprachen für die PIC-Software wurden Assembler und C (mit dem CC5X- Compiler) verwendet. 3

5 Kapitel 2 Hardware Abbildung 2.1 zeigt die minimale Beschaltung des Grafik-LC-Displays. Abbildung 2.1: Grafik-LCD-Ansteuerung Das hier verwendete Grafik-LC-Display (NLC-122B032) besitzt die folgenden Anschlusspins: Spannungsversorgung (V ss und V dd, Pin 1 und 2): Das Grafik-LC-Display wird mit einer Betriebsspannung V dd von +5V betrieben. V ss ist der Masseanschluss. Spannung zur Kontrasteinstellung (V ee, Pin 3): Die Kontrasteinstellung wird üblicherweise mit einem 10k-Trimmer realisiert. 4

6 KAPITEL 2. HARDWARE 5 A0, Pin 4: Dieser Anschluss bestimmt, ob es sich bei den zum Display geschriebenen Daten um Steuerbefehle für das Display (A0 = 0), oder um am Display darstellbare Zeichen (A0 = 1) handelt. Chipselekt (CS1 und CS2, Pin 6 und 5): Mit CS1 = 0 wird die rechte Displayhälfte und mit CS2 = 0 die linke Displayhälfte ausgewählt. Taktleitung (CL, Pin 7): Mit dieser Leitung wird dem Display ein externer 2-kHz- Takt zugeführt. Dieser Takt wird mit einem Timer-IC (IC1) vom Typ 7555, einem Widerstand (R2) und den Kondensatoren (C1 und C2) erzeugt. Read-Leitung (RD, Pin 8): Dieser Anschluss bestimmt, ob Daten vom Display gelesen werden sollen. Write-Leitung (W R, Pin 9): Dieser Anschluss bestimmt, ob Daten zum Display geschrieben werden. 8-Bit-Datenbus (DB0 bis DB7, Pin 10 bis 17): Dieser Datenbus dient zur Übertragung der Daten zum/vom Display (schreiben oder lesen). Resetleitung (RES, Pin 18): Dieser Anschluss bestimmt, welches Interface verwendet wird. Grundsätzlich stehen zwei Interfaces zur Verfügung: 80 Family MPU (RES = 0) 68 Family MPU (RES = 1) Hier wird die 80 Family MPU verwendet. Daher kann der Resetpin auf Massepotential gelegt werden. Wichtig: Da sich die beiden Interfaces im Zeitverhalten unterscheiden, muss dies in der Software ebenfalls berücksichtigt werden! Da ich hier die 80 Family MPU verwende gehe ich in dieser Dokumentation gar nicht näher auf die 68 Family MPU ein. Optional: Hintergrundbeleuchtung (A und K, Pin 19 und 20): Sofern diese beiden Anschlüsse vorhanden sind, kann damit das Display beleuchtet werden. Dabei muss der Anschluss A (Anode) mit der Betriebsspannung (+5V) und der Anschluss K (Kathode) mit der Masse verbunden werden.

7 Kapitel 3 Ansteuerung des Grafik-LC-Displays 3.1 Befehle zur Ansteuerung des Grafik-LC-Displays Tabelle 3.1 zeigt die Anweisungen zur Kommunikation mit dem Grafik-LC-Display. Tabelle 3.1: Display-Befehle 6

8 KAPITEL 3. ANSTEUERUNG DES GRAFIK-LC-DISPLAYS 7 Achtung: Beim Einschalten (oder beim Anlegen einer Betriebsspannung) befindet sich das Grafik- LC-Display im folgenden Zustand: Display off Display start line register: First line Static drive off Column address counter: Address 0 Page address register: Page 0 Select duty: 1/32 Select ADC: Forward (ADC command D0= 0, ADC status flag = 1 ) Read modify write off Das Grafik-LC-Display befindet sich also schon in einem initialisierten Zustand. Trotzdem sollte das Grafik-LC-Display auch in der Software initialisiert werden, z.b. wenn bestimmte Parameter geändert werden sollen. Mehr zur Initialisierung siehe Abschnitt Unterprogramm GLCD INIT (für Assembler) bzw. Abschnitt Unterprogramm GLCD INIT (für C). 3.2 Zeitdiagramm Das Zeitdiagramm in Abbildung 3.1 bezieht sich auf die Verwendung der 80-Family-MPU. Siehe auch Abschnitt 2 (Hardware). Abbildung 3.1: Zeitdiagramm

9 KAPITEL 3. ANSTEUERUNG DES GRAFIK-LC-DISPLAYS 8 Symbol Min Typ Max Einheit Address setup time t AW 8 20 ns Address hold time t AH8 10 ns System cycle time t CY C ns Control pulse width t CC 200 ns Data setup time t DS8 80 ns Data hold time t DH8 10 ns Read access time t AW 8 90 ns Output disable time t AW 8 90 ns Tabelle 3.2: Zeiten 3.3 Zeichensatz Das hier verwendete Grafik-LC-Display verfügt über keinen eigenen Zeichensatz. Alle benötigten Zeichen (Buchstaben, Ziffern, Sonderzeichen) müssen daher selbst erzeugt werden. Dieser Abschnitt zeigt wie man dazu prinzipiell vorgeht, während Demonstrationsbeispiel 1 (Abschnitt 6.3.) dies an einem praktischen Beispiel zeigt. Beispiel 1: Buchstabe A Abbildung 3.2: Zeichensatz (Beispiel 1) Abbildung 3.2 zeigt wie der Buchstabe A aussehen soll. Nun müssen die 6 Spalten berechnet werden. Die Wertigkeit der Zeilen nimmt von oben nach unten zu. Zeile 1 besitzt die Wertigkeit 1 (= 2 0 ), Zeile 2 die Wertigkeit 2 (=2 1 ), Zeile 3 die Wertigkeit 4 (=2 2 ) usw. bis zur letzten (=8ten) Zeile mit der Wertigkeit 128 (=2 8 ). Für jede Spalte müssen nun die Wertigkeiten der Zeilen welche aufleuchten sollen addiert werden. Für den Buchstaben A gemäß Abbildung 3.2 bedeutet dies: 1. Spalte: = Spalte: = Spalte: = Spalte: = Spalte: = Spalte: 0

10 KAPITEL 3. ANSTEUERUNG DES GRAFIK-LC-DISPLAYS 9 Die Werte dieser sechs Spalten müssen nun nacheinander an das Grafik-LC-Display übertragen werden. Dazu ist die Anweisung Write display data gemäß Tabelle 3.1 zuständig. Beispiel 2: Sonderzeichen % Abbildung 3.3: Zeichensatz (Beispiel 2) Bei diesem Sonderzeichen ergeben sich für die Spalten folgende Werte (siehe auch Abbildung 3.3). 1. Spalte: = Spalte: = Spalte: 8 4. Spalte: = Spalte: = Spalte: 0

11 Kapitel 4 Software (in Assembler) 4.1 Benötigte Register und Portdefinitionen Register: Für die softwaremäßige Grafik-LC-Display-Ansteuerung werden neben einigen PIC internen Registern (SFR, Spezielle Funktions-Register) noch folgende Register benötigt: GLCD ZEILEN ZAEHLER: Dieses Register beinhaltet ständig die aktuelle Zeile des Cursors (0 bis 3). Achtung: Mit Zeile ist hier das Page address register (gemäß Datenblatt) gemeint. GLCD SPALTEN ZAEHLER: Dieses Register beinhaltet ständig die aktuelle Spalte des Cursors (0 bis 121). Achtung: Mit Spalte ist hier nicht der Column address counter (gemäß Datenblatt) gemeint. Zwei Hilfsregister (TEMP1 und TEMP2): Diese beiden Register sind so genannte temporäre Register. D.h. Sie werden nur kurzzeitig verwendet, entweder zum kurzzeitigen Zwischenspeichern von Werten, oder als Übergabeparameter beim Aufruf eines Unterprogramms. Sie können daher auch in beliebigen anderen Unterprogrammen verwendet werden. Portdefinition: Im Allgemeinen wird bei jeder Anwendung das Grafik-LC-Display an einem beliebigen Port angeschlossen. Damit dies in der Software nur an einer Stelle berücksichtigt werden muss befindet sich in der Software eine Portdefinition. Diese besteht aus den folgenden Parametern: GLCD DATA: Dieser Parameter gibt den Port für den 8-bit-Datenbus (DB0 bis DB7) an. (zum Beispiel Port A, Port B,..). GLCD DATA TRIS: Dieser Parameter ist für die Initialisierung des Ports für den Datenbus zuständig. Achtung: Wird für den Parameter LCD DATA der PORTA verwendet, so muss der Parameter LCD DATA TRIS den Parameter TRISA beinhalten! GLCD CTRL: Dieser Parameter gibt den Port für die Steuerleitungen an. (z.b. Port A, Port B,..). 10

12 KAPITEL 4. SOFTWARE (IN ASSEMBLER) 11 GLCD CTRL TRIS: Dieser Parameter ist für die Initialisierung des Ports für die Steuerleitungen zuständig. Achtung: Wird für den Parameter LCD CTRL der PORTA verwendet, so muss der Parameter LCD CTRL TRIS den Parameter TRISA beinhalten! GLCD A0: Dieser Parameter gibt den Portpin der Steuerleitung A0 an. GLCD CS1: Dieser Parameter gibt den Portpin der Steuerleitung Chipselect 1 (CS1) an. GLCD CS2: Dieser Parameter gibt den Portpin der Steuerleitung Chipselect 2 (CS2) an. GLCD RD: Dieser Parameter gibt den Portpin der Steuerleitung Read (RD) an. GLCD WR: Dieser Parameter gibt den Portpin der Steuerleitung Write (W R) an. Eine mögliche Portdefinition ist: GLCD_DATA equ PORTD GLCD_DATA_TRIS equ TRISD GLCD_CTRL equ PORTB GLCD_CTRL_TRIS equ TRISB GLCD_A0 equ 5 GLCD_CS2 equ 4 GLCD_CS1 equ 3 GLCD_RD equ 2 GLCD_WR equ 1 Anmerkung: Für den Pin RES ist hier keine Portdefinition notwendig, da dieser Anschluss (Pin) direkt mit GND verbunden ist. 4.2 Initialisierung (Unterprogramm INIT) Dieses Unterprogramm dient zur Initialisierung des Mikrocontrollers. Bei diesem Beispiel ist hier, für die Ansteuerung des Grafik-LC-Displays, nur die Definition der verwendeten Portpins als Ausgang notwendig. Der folgende Programmausschnitt zeigt eine mögliche Initialisierungsroutine für den PIC16F877. Das Grafik-LC-Display ist hier am Port B (Steuerleitungen) und Port D (Daten) angeschlossen. INIT bank1 ;Registerseite 1 movlw b ;Port B und Port D als Ausgang ; definieren movwf TRISB movwf TRISD bank0 ;Registerseite 0 return Anmerkung: Bei den Anweisungen bank1 bzw. bank0 handelt es sich um so genannte Makros.

13 KAPITEL 4. SOFTWARE (IN ASSEMBLER) Unterprogramme für die Grafik-LCD-Ansteuerung Zur Ansteuerung des Grafik-LC-Displays sind zumindest die folgenden Basis-Unterprogramme notwendig: Zuerst muss das Grafik-LC-Display initialisiert werden. Das Unterprogramm GLCD INIT übernimmt diese Aufgabe. Befehle an das Grafik-LC-Display werden mit dem Unterprogramm GLCD COMMAND erzeugt. Daten an das Grafik-LC-Display werden mit den Unterprogrammen GLCD DATA1 und GLCD DATA2 erzeugt. Da das Grafik-LC-Display in zwei Hälften unterteilt ist mit je einer eigenen Chip-Select-Steuerleitung, sind auch hier zwei Unterprogramme nötig. GLCD DATA1 schreibt Daten in die rechte Display-Hälfte, während GLCD DATA2 für die linke Displayhälfte zuständig ist. Ein weiteres Unterprogramm dient zum Löschen des Grafik-LC-Display (GLCD CLEAR). Der Cursor kann mit den beiden Unterprogrammen GLCD SETCURSOR ZEILE und GLCD SETCURSOR SPALTE an eine beliebige Position gesetzt werden. Nun aber zu den einzelnen Unterprogrammen im Detail: Unterprogramm GLCD INIT Aufgabe: Dieses Unterprogramm initialisiert das Grafik-LC-Display (siehe auch Kapitel 3. Befehle zur Ansteuerung des Grafik-LC-Display). Vorgehensweise: Übergibt nacheinander die Befehle zur Initialisierung an das Grafik-LC-Display. Hier das Unterprogramm: GLCD_INIT movlw.175 ;Display on call GLCD_COMMAND movlw.164 ;static drive off call GLCD_COMMAND movlw.169 ;duty cyle: 1/32 call GLCD_COMMAND movlw.160 ;ADC: CW output (forward) call GLCD_COMMAND movlw.238 ;read modify write off call GLCD_COMMAND movlw.192 ;line 0 call GLCD_COMMAND movlw.184 ;1. Zeile call GLCD_COMMAND movlw.0 ;1. Spalte call GLCD_COMMAND return

14 KAPITEL 4. SOFTWARE (IN ASSEMBLER) Unterprogramm GLCD COMMAND Aufgabe: Umsetzung des Zeitdiagramms (gemäß Abschnitt 3.2) zum Senden eines Befehls an das Grafik-LC-Display. Anmerkung: A0 ist bei einem Befehl immer 0 (Low). Übergabeparameter: Das Arbeitsregister (w-register) beinhaltet den Befehl. Hier das Unterprogramm: GLCD_COMMAND bcf GLCD_CTRL,GLCD_A0 bcf GLCD_CTRL,GLCD_CS1 bcf GLCD_CTRL,GLCD_CS2 bsf bcf GLCD_CTRL,GLCD_RD GLCD_CTRL,GLCD_WR movwf GLCD_DATA ;Befehl am Datenport ausgeben bsf bsf bsf GLCD_CTRL,GLCD_WR GLCD_CTRL,GLCD_CS1 GLCD_CTRL,GLCD_CS2 return Unterprogramm GLCD DATA1 Aufgabe: Umsetzung des Zeitdiagramms (gemäß Abschnitt 3.2) zum Senden von Daten an die erste Hälfte des Grafik-LC-Display. Anmerkung: A0 ist bei den Daten immer 1 (High). Übergabeparameter: Das Arbeitsregister (w-register) beinhaltet die Daten. Hier das Unterprogramm: GLCD_DATA1 bsf GLCD_CTRL,GLCD_A0 bsf GLCD_CTRL,GLCD_CS1 bcf GLCD_CTRL,GLCD_CS2 bsf bcf GLCD_CTRL,GLCD_RD GLCD_CTRL,GLCD_WR movwf GLCD_DATA ;Daten am Datenport ausgeben bsf bsf bsf GLCD_CTRL,GLCD_WR GLCD_CTRL,GLCD_CS1 GLCD_CTRL,GLCD_CS2 return

15 KAPITEL 4. SOFTWARE (IN ASSEMBLER) Unterprogramm GLCD DATA2 Aufgabe: Umsetzung des Zeitdiagramms (gemäß Abschnitt 3.2) zum Senden von Daten an die zweite Hälfte des Grafik-LC-Display. Anmerkung: A0 ist bei den Daten immer 1 (High). Übergabeparameter: Das Arbeitsregister (w-register) beinhaltet die Daten. Hier das Unterprogramm: GLCD_DATA2 bsf GLCD_CTRL,GLCD_A0 bcf GLCD_CTRL,GLCD_CS1 bsf GLCD_CTRL,GLCD_CS2 bsf bcf GLCD_CTRL,GLCD_RD GLCD_CTRL,GLCD_WR movwf GLCD_DATA ;Daten am Datenport ausgeben bsf bsf bsf GLCD_CTRL,GLCD_WR GLCD_CTRL,GLCD_CS1 GLCD_CTRL,GLCD_CS2 return Unterprogramm GLCD CLEAR Aufgabe: Löschen des Grafik-LC-Displays. Vorgehensweise: Beginnend bei der letzten Zeile und letzten Spalte mit Hilfe zweier geschachtelten Schleifen Nullen zum Grafik-LC-Display (in beide Display-Hälften) schreiben. Dies bewirkt, dass am Display nichts angezeigt wird bzw. das Display wird somit gelöscht. Hier das Unterprogramm: GLCD_CLEAR movlw.4 movwf TEMP1 GLCD_CLR_SCHL1: decf TEMP1,w addlw.184 ;Befehl (184 + TEMP1 = Zeile ) call GLCD_COMMAND ; an das Grafik-LC-Display movlw.61 movwf TEMP2 movlw.0 ;Befehl: 1. Spalte an das Grafik-LC- ; Display call GLCD_COMMAND GLCD_CLR_SCHL2: movlw.0 call GLCD_DATA2 decfsz goto TEMP2,f GLCD_CLR_SCHL2

16 KAPITEL 4. SOFTWARE (IN ASSEMBLER) 15 decfsz goto TEMP1,f GLCD_CLR_SCHL1 return Anmerkung: Die beiden temporären Register (TEMP1 und TEMP2) dienen hier nur als Schleifenzähler. Sie können daher auch in anderen Unterprogrammen verwendet werden. TEMP1...Zeilenzähler (3 bis 0) TEMP2...Spaltenzähler (61 bis 0) Unterprogramm GLCD SETCURSOR ZEILE Aufgabe: Den Cursor an die übergebene Zeile (0 bis 3) setzen. Vorgehensweise: Den Übergabeparameter für die Zeile (im Arbeitsregister) im globalen Register GLCD ZEILEN ZAEHLER sichern und an das Grafik-LC-Display übergeben. Übergabeparameter: Das Arbeitsregister (w-register) beinhaltet die Zeile. Hier das Unterprogramm: GLCD_SETCURSOR_ZEILE movwf GLCD_ZEILEN_ZAEHLER ;GLCD_ZEILEN_ZAEHLER = w-register addlw.184 call GLCD_COMMAND ;GLCD_BEFEHL(184 + GLCD_ZEILEN_ZAEHLER) return Unterprogramm GLCD SETCURSOR SPALTE Aufgabe: Den Cursor an die übergebene Spalte (0 bis 121) setzen. Vorgehensweise: Den Übergabeparameter für die Spalte (im Arbeitsregister) im globalen Register GLCD SPALTEN ZAEHLER sichern und an das Grafik-LC-Display übergeben. Dabei ist zu beachten, dass das Grafik-LC-Display in zwei Bereiche aufgeteilt ist, wobei beide Bereiche mit 0 beginnen. Spalten größer als 61 befinden sich im zweiten Bereich. Da dieser wieder ab 0 beginnt muss bei Spalten die größer als 61 sind, 61 abgezogen werden. Übergabeparameter: Das Arbeitsregister (w-register) beinhaltet die Spalte.

17 KAPITEL 4. SOFTWARE (IN ASSEMBLER) 16 Hier das Unterprogramm: GLCD_SETCURSOR_SPALTE movwf GLCD_SPALTEN_ZAEHLER ;GLCD_SPALTEN_ZAEHLER = w-register movlw.61 ;GLCD_SPALTEN_ZAEHLER < 61 subwf GLCD_SPALTEN_ZAEHLER,w btfsc STAT,C goto GLCD_SETCUR_W1 ;ja: GLCD_BEFEHL(GLCD_SPALTEN_ZAEHLER) movf GLCD_SPALTEN_ZAEHLER,w call GLCD_COMMAND goto GLCD_SETCUR_W2 GLCD_SETCUR_W1 GLCD_SETCUR_W2 movlw.61 ;nein: GLCD_BEFEHL(GLCD_SPALTEN_ZAEHLER ; -61) subwf GLCD_SPALTEN_ZAEHLER,w call GLCD_COMMAND return

18 Kapitel 5 Software (in C mit CC5X) 5.1 Portdefinitionen und externe Register Portdefinition: Im Allgemeinen wird bei jeder Anwendung das Grafik-LC-Display an einem beliebigen Port angeschlossen. Damit dies in der Software nur an einer Stelle berücksichtigt werden muss befindet sich in der Software eine Portdefinition. Diese besteht aus den folgenden Parametern: GLCD DATA: Dieser Parameter gibt den Port für den Datenbus an. (zum Beispiel Port A, Port B,..). GLCD DATA TRIS: Dieser Parameter ist für die Initialisierung des Ports für den Datenbus zuständig. Achtung: Wird für den Parameter LCD DATA der PORTA verwendet, so muss der Parameter LCD DATA TRIS den Parameter TRISA beinhalten! GLCD CTRL: Dieser Parameter gibt den Port für die Steuerleitungen an. (z.b. Port A, Port B,..). GLCD CTRL TRIS: Dieser Parameter ist für die Initialisierung des Ports für die Steuerleitungen zuständig. Achtung: Wird für den Parameter LCD CTRL der PORTA verwendet, so muss der Parameter LCD CTRL TRIS den Parameter TRISA beinhalten! GLCD A0: Dieser Parameter gibt den Portpin der Steuerleitung A0 an. GLCD CS1: Dieser Parameter gibt den Portpin der Steuerleitung Chipselect 1 (CS1) an. GLCD CS2: Dieser Parameter gibt den Portpin der Steuerleitung Chipselect 2 (CS2) an. GLCD RD: Dieser Parameter gibt den Portpin der Steuerleitung Read (RD) an. GLCD WR: Dieser Parameter gibt den Portpin der Steuerleitung Write (W R) an. 17

19 KAPITEL 5. SOFTWARE (IN C MIT CC5X) 18 Eine mögliche Portdefinition ist: /* Port B */ #pragma char GLCD_CTRL #pragma char GLCD_CTRL_TRIS #pragma bit GLCD_WR #pragma bit GLCD_RD #pragma bit GLCD_CS1 #pragma bit GLCD_CS2 #pragma bit GLCD_A0 /* Port D */ #pragma char GLCD_DATA #pragma char TRISD Anmerkung: Für den Pin RES ist hier keine Portdefinition notwendig, da dieser Anschluss (Pin) direkt mit GND verbunden ist. Externe Register: Die Cursorposition wird mit den beiden externen Registern hlp zeilen zaehler und hlp spalten zaehler gesichert und ist somit immer für jedes Unterprogramm verfügbar. 5.2 Initialisierung (Unterprogramm INIT) Dieses Unterprogramm dient zur Initialisierung des Mikrocontrollers. Bei diesem Beispiel ist hier, für die Ansteuerung des Grafik-LC-Displays, nur die Definition der verwendeten Portpins als Ausgang notwendig. Der folgende Programmausschnitt zeigt eine mögliche Initialisierungsroutine für den PIC16F877. Das Grafik-LC-Display ist hier am Port B (Steuerleitungen) und Port D (Daten) angeschlossen. void INIT(void) TRISB = 0; TRISD = 0; } // Port B als Ausgang definieren // Port D als Ausgang definieren 5.3 Unterprogramme für die Grafik-LCD-Ansteuerung Abbildung 5.1 zeigt wie die einzelnen Unterprogramme zur Ansteuerung des Grafik-LC- Displays miteinander verschachtelt sind. Zur Ansteuerung des Grafik-LC-Displays sind zumindest die folgenden Basis-Unterprogramme notwendig: Zuerst muss das Grafik-LC-Display initialisiert werden. Das Unterprogramm GLCD INIT übernimmt diese Aufgabe. Befehle an das Grafik-LC-Display werden mit dem Unterprogramm GLCD COMMAND erzeugt.

20 KAPITEL 5. SOFTWARE (IN C MIT CC5X) 19 Abbildung 5.1: Softwarestruktur Daten an das Grafik-LC-Display werden mit den Unterprogrammen GLCD DATA1 und GLCD DATA2 erzeugt. Da das Grafik-LC-Display in zwei Hälften unterteilt ist, mit je einer eigenen Chip-Select-Steuerleitung, sind auch hier zwei Unterprogramme nötig. GLCD DATA1 schreibt Daten in die rechte Display-Hälfte, während GLCD DATA2 für die linke Displayhälfte zuständig ist. Das Unterprogramm GLCD DATA ZEICHEN bestimmt dabei, welches dieser beiden Unterprogramme verwendet werden soll. Ein weiteres Unterprogramm dient zum Löschen des Display (GLCD CLEAR). Der Cursor kann mit den beiden Unterprogrammen GLCD SETCURSOR ZEILE und GLCD SETCURSOR SPALTE an eine beliebige Position gesetzt werden. Für die Text- und Werteausgabe sind weitere Unterprogramme abhängig von der Schriftgröße notwendig: Das Unterprogramm GLCD ZEICHEN 5x7 für die Standardgröße Das Unterprogramm GLCD ZEICHEN 8x14 für die mittlere Größe Das Unterprogramm GLCD ZEICHEN 10x22 für die großen Zeichen Diese Unterprogramme geben nur ein Zeichen (Charakter) aus. Die Unterprogramme zur Grafikausgabe sind noch nicht ausgeführt! Nun aber zu den einzelnen Unterprogrammen im Detail:

21 KAPITEL 5. SOFTWARE (IN C MIT CC5X) Unterprogramm GLCD INIT Aufgabe: Dieses Unterprogramm initialisiert das Grafik-LC-Display (siehe auch Kapitel 3. Befehle zur Ansteuerung des Grafik-LC-Display). Vorgehensweise: Übergibt nacheinander die Befehle zur Initialisierung an das Grafik-LC-Display. Hier das Unterprogramm: void GLCD_INIT(void) GLCD_COMMAND(175); // Display on GLCD_COMMAND(164); // static drive off GLCD_COMMAND(169); // duty cyle: 1/32 GLCD_COMMAND(160); // ADC: CW output (forward) GLCD_COMMAND(238); // read modify write off GLCD_COMMAND(192); // line 0 GLCD_COMMAND(184); // 1. Zeile GLCD_COMMAND(0); // 1. Spalte } Unterprogramm GLCD COMMAND Aufgabe: Umsetzung des Zeitdiagramms (gemäß Abschnitt 3.2) zum Senden eines Befehls an das Grafik-LC-Display. Anmerkung: A0 ist bei einem Befehl immer 0 (Low). Hier das Unterprogramm: void GLCD_COMMAND(unsigned char command) GLCD_A0 = 0; GLCD_CS1 = 0; GLCD_CS2 = 0; GLCD_RD = 1; GLCD_WR = 0; GLCD_DATA = command; GLCD_WR = 1; } GLCD_CS1 = 1; GLCD_CS2 = 1; Unterprogramm GLCD DATA1 Aufgabe: Umsetzung des Zeitdiagramms (gemäß Abschnitt 3.2) zum Senden von Daten an die erste Hälfte des Grafik-LC-Display. Anmerkung: A0 ist bei den Daten immer 1 (High).

22 KAPITEL 5. SOFTWARE (IN C MIT CC5X) 21 Hier das Unterprogramm: void GLCD_DATA1(unsigned char data) GLCD_A0 = 1; GLCD_CS1 = 1; GLCD_CS2 = 0; GLCD_RD = 1; GLCD_WR = 0; GLCD_DATA = data; GLCD_WR = 1; } GLCD_CS1 = 1; GLCD_CS2 = 1; Unterprogramm GLCD DATA2 Aufgabe: Umsetzung des Zeitdiagramms (gemäß Abschnitt 3.2) zum Senden von Daten an die zweite Hälfte des Grafik-LC-Display. Anmerkung: A0 ist bei den Daten immer 1 (High). Hier das Unterprogramm: void GLCD_DATA2(unsigned char data) GLCD_A0 = 1; GLCD_CS1 = 0; GLCD_CS2 = 1; GLCD_RD = 1; GLCD_WR = 0; GLCD_DATA = data; GLCD_WR = 1; } GLCD_CS1 = 1; GLCD_CS2 = 1; Unterprogramm GLCD DATA ZEICHEN Aufgabe: Je nach aktueller Position des Cursors den übergebenen Wert (data) an die erste oder zweite Displayhälfte übergeben. Vorgehensweise: Befindet sich der Cursor an der 62. Spalte (hlp spalten zaehler = 61), die so genannte Column Address auf 0 setzen (gemäß Datenblatt). Dies bewirkt, dass der displayinterne Speicherzähler wieder bei 0 beginnt. (siehe Datenblatt) Befindet sich der Cursor an eine Spalte größer als 61 (also zweite Displayhälfte) den Übergabewert (data) mit dem Unterprogramm GLCD DATA2 an die zweite

23 KAPITEL 5. SOFTWARE (IN C MIT CC5X) 22 Displayhälfte übergeben. Andernfalls den Übergabewert (data) mit dem Unterprogramm GLCD DATA1 an die erste Displayhälfte übergeben. Hier das Unterprogramm: void GLCD_DATA_ZEICHEN(unsigned char data) if (hlp_spalten_zaehler == 61) // Wenn Cursorspalte = 61 GLCD_COMMAND(0); //... "Column Address" auf 0 setzen } if (hlp_spalten_zaehler > 60) // Cursorspalte > 60 GLCD_DATA2(data); // ja: Uebergabewert (data) mit dem an } // die zweite Displayhaelfte uebergeben else GLCD_DATA1(data); // nein: Uebergabewert (data) mit dem an } // die erste Displayhaelfte uebergeben } hlp_spalten_zaehler++; Anmerkung: Das (externe) Hilfsregister hlp spalten zaehler gibt an, an welcher Spalte sich der Cursor befindet Unterprogramm GLCD CLEAR Aufgabe: Löschen des Grafik-LC-Displays. Vorgehensweise: Beginnend bei der ersten Zeile und ersten Spalte mit Hilfe zweier geschachtelten Schleifen Nullen zum Grafik-LC-Display (in beide Display-Hälften) schreiben. Dies bewirkt, dass am Display nichts angezeigt wird bzw. das Display wird somit gelöscht. Hier das Unterprogramm: void GLCD_CLEAR(void) unsigned char Zeile, Spalte; for(zeile = 0; Zeile < 4; Zeile++) GLCD_COMMAND(184 + Zeile); GLCD_COMMAND(0); // Befehl: naechste Zeile // Befehl: 1.Spalte der Zeile } } for(spalte = 0; Spalte < 61; Spalte++) GLCD_DATA1(0); GLCD_DATA2(0); }

24 KAPITEL 5. SOFTWARE (IN C MIT CC5X) Unterprogramm GLCD SETCURSOR ZEILE Aufgabe: Den Cursor an die übergebene Zeile (0 bis 3) setzen. Vorgehensweise: Übergabeparameter für die Zeile im globalen Register hlp zeilen zaehler sichern und an das Grafik-LC-Display übergeben. Übergabeparameter: zeile: 0-3 Hier das Unterprogramm: void GLCD_SETCURSOR_ZEILE(unsigned char zeile) hlp_zeilen_zaehler = zeile; GLCD_COMMAND(184 + zeile); } Unterprogramm GLCD SETCURSOR SPALTE Aufgabe: Den Cursor an die übergebene Spalte (0 bis 121) setzen. Vorgehensweise: Übergabeparameter für die Spalte im globalen Register hlp spalten zaehler sichern und an das Grafik-LC-Display übergeben. Dabei ist zu beachten, dass das Grafik-LC-Display in zwei Bereiche aufgeteilt ist, wobei beide Bereiche mit 0 beginnen. Spalten größer als 61 befinden sich im zweiten Bereich. Da dieser wieder ab 0 beginnt, muss bei Spalten die größer als 61 sind, 61 abgezogen werden. Übergabeparameter: spalte: Hier das Unterprogramm: void GLCD_SETCURSOR_SPALTE(unsigned char spalte) hlp_spalten_zaehler = spalte; if (spalte < 61) GLCD_COMMAND(spalte); } else GLCD_COMMAND(spalte - 61); } }

25 KAPITEL 5. SOFTWARE (IN C MIT CC5X) Unterprogramm GLCD ZEICHEN 5x7 Aufgabe: Ein Zeichen (Charakter im Format 5x7) am Grafik-LC-Display ausgeben. Vorgehensweise: Nacheinander die Spalten eines Zeichens an das Grafik-LC-Display mit dem Unterprogramm GLCD DATA ZEICHEN übergeben. Die Daten für die Spalten sind in Tabellen abgelegt, wobei für jede Spalte des Zeichens eine eigene Tabelle vorhanden ist. Diese Tabellen müssen an anderer Stelle hinzugefügt werden! Die letzte Spalte muss eine 0 enthalten, also eine Leerspalte. Übergabeparameter: zeichen (im ASCII-Code) Hier das Unterprogramm: void GLCD_ZEICHEN_5x7(unsigned char zeichen) // 1. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz5x7_sp1[zeichen]); // 2. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz5x7_sp2[zeichen]); // 3. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz5x7_sp3[zeichen]); // 4. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz5x7_sp4[zeichen]); // 5. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz5x7_sp5[zeichen]); } // 6. Spalte des Zeichens GLCD_DATA_ZEICHEN(0); Unterprogramm GLCD ZEICHEN 8x14 Aufgabe: Ein Zeichen (Charakter im Format 8x14) am Grafik-LC-Display ausgeben. Vorgehensweise: Die externen Hilfsregister hlp zeilen zaehler und hlp spalten zaehler sichern, da sie hier benötigt, aber gleichzeitig hier auch verändert werden. Nacheinander die Spalten für die erste Zeile des auszugebenden Zeichens an das Grafik-LC-Display mit dem Unterprogramm GLCD DATA ZEICHEN übergeben. Die Daten für die Spalten sind in Tabellen abgelegt, wobei für jede Spalte des Zeichens eine eigene Tabelle vorhanden ist. Diese Tabellen müssen an anderer Stelle hinzugefügt werden! Die letzte Spalte muss eine 0 enthalten, also eine Leerspalte. Den Cursor an die nächste Zeile (tmp zeile + 1) und an die erste Spalte des Zeichens (tmp spalte) setzen.

26 KAPITEL 5. SOFTWARE (IN C MIT CC5X) 25 In gleicher Weise wie vorher die Spalten für die zweite Zeile des auszugebenden Zeichens an das Grafik-LC-Display mit dem Unterprogramm GLCD DATA ZEICHEN übergeben. Den Cursor an die erste Zeile des Zeichens (tmp zeile) setzen. Übergabeparameter: zeichen Hier das Unterprogramm: void GLCD_ZEICHEN_8x14(unsigned char zeichen) char tmp_zeile = hlp_zeilen_zaehler; char tmp_spalte = hlp_spalten_zaehler; // 1.Zeile // 1. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz8x14_z1sp1[zeichen]); // 2. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz8x14_z1sp2[zeichen]); // 3. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz8x14_z1sp3[zeichen]); // 4. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz8x14_z1sp4[zeichen]); // 5. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz8x14_z1sp5[zeichen]); // 6. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz8x14_z1sp6[zeichen]); // 7. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz8x14_z1sp7[zeichen]); // 8. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz8x14_z1sp8[zeichen]); // 9. Spalte des Zeichens GLCD_DATA_ZEICHEN(0); // 2. Zeile und 1.Spalte des Zeichen GLCD_SETCURSOR_ZEILE(tmp_zeile + 1); GLCD_SETCURSOR_SPALTE(tmp_spalte); // 1. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz8x14_z2sp1[zeichen]); // 2. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz8x14_z2sp2[zeichen]); // 3. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz8x14_z2sp3[zeichen]); // 4. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz8x14_z2sp4[zeichen]); // 5. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz8x14_z2sp5[zeichen]); // 6. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz8x14_z2sp6[zeichen]); // 7. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz8x14_z2sp7[zeichen]); // 8. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz8x14_z2sp8[zeichen]); // 9. Spalte des Zeichens GLCD_DATA_ZEICHEN(0); } // 1. Zeile und Spalte vom Ende des Zeichen GLCD_SETCURSOR_ZEILE(tmp_zeile);

27 KAPITEL 5. SOFTWARE (IN C MIT CC5X) Unterprogramm GLCD ZEICHEN 10x22 Aufgabe: Ein Zeichen (Charakter im Format 10x22) am Grafik-LC-Display ausgeben. Vorgehensweise: Die externen Hilfsregister hlp zeilen zaehler und hlp spalten zaehler sichern, da sie hier benötigt, aber gleichzeitig hier auch verändert werden. Nacheinander die Spalten für die erste Zeile des auszugebenden Zeichens an das Grafik-LC-Display mit dem Unterprogramm GLCD DATA ZEICHEN übergeben. Die Daten für die Spalten sind in Tabellen abgelegt, wobei für jede Spalte des Zeichens eine eigene Tabelle vorhanden ist. Diese Tabellen müssen an anderer Stelle hinzugefügt werden! Die letzte Spalte muss eine 0 enthalten, also eine Leerspalte. Den Cursor an die nächste Zeile (tmp zeile + 1) und an die erste Spalte des Zeichens (tmp spalte) setzen. In gleicher Weise wie vorher die Spalten für die zweite Zeile des auszugebenden Zeichens an das Grafik-LC-Display mit dem Unterprogramm GLCD DATA ZEICHEN übergeben. Den Cursor an die nächste Zeile (tmp zeile + 2) und an die erste Spalte des Zeichens (tmp spalte) setzen. In gleicher Weise wie vorher die Spalten für die dritte Zeile des auszugebenden Zeichens an das Grafik-LC-Display mit dem Unterprogramm GLCD DATA ZEICHEN übergeben. Den Cursor an die erste Zeile des Zeichens (tmp zeile) setzen. Übergabeparameter: zeichen Hier das Unterprogramm: void GLCD_ZEICHEN_10x22(unsigned char zeichen) char tmp_zeile = hlp_zeilen_zaehler; char tmp_spalte = hlp_spalten_zaehler; // 1.Zeile // 1. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz10x22_z1sp1[zeichen]); // 2. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz10x22_z1sp2[zeichen]); // 3. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz10x22_z1sp3[zeichen]); // 4. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz10x22_z1sp4[zeichen]); // 5. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz10x22_z1sp5[zeichen]); // 6. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz10x22_z1sp6[zeichen]);

28 KAPITEL 5. SOFTWARE (IN C MIT CC5X) 27 // 7. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz10x22_z1sp7[zeichen]); // 8. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz10x22_z1sp8[zeichen]); // 9. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz10x22_z1sp9[zeichen]); // 10. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz10x22_z1sp10[zeichen]); // 11. Spalte des Zeichens GLCD_DATA_ZEICHEN(0); // 12. Spalte des Zeichens GLCD_DATA_ZEICHEN(0); // 2. Zeile und 1.Spalte des Zeichen GLCD_SETCURSOR_ZEILE(tmp_zeile + 1); GLCD_SETCURSOR_SPALTE(tmp_spalte); // 1. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz10x22_z2sp1[zeichen]); // 2. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz10x22_z2sp2[zeichen]); // 3. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz10x22_z2sp3[zeichen]); // 4. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz10x22_z2sp4[zeichen]); // 5. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz10x22_z2sp5[zeichen]); // 6. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz10x22_z2sp6[zeichen]); // 7. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz10x22_z2sp7[zeichen]); // 8. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz10x22_z2sp8[zeichen]); // 9. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz10x22_z2sp9[zeichen]); // 10. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz10x22_z2sp10[zeichen]); // 11. Spalte des Zeichens GLCD_DATA_ZEICHEN(0); // 12. Spalte des Zeichens GLCD_DATA_ZEICHEN(0); // 3. Zeile und 1.Spalte des Zeichen GLCD_SETCURSOR_ZEILE(tmp_zeile + 2); GLCD_SETCURSOR_SPALTE(tmp_spalte); // 1. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz10x22_z3sp1[zeichen]); // 2. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz10x22_z3sp2[zeichen]); // 3. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz10x22_z3sp3[zeichen]); // 4. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz10x22_z3sp4[zeichen]); // 5. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz10x22_z3sp5[zeichen]); // 6. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz10x22_z3sp6[zeichen]); // 7. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz10x22_z3sp7[zeichen]); // 8. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz10x22_z3sp8[zeichen]); // 9. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz10x22_z3sp9[zeichen]); // 10. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz10x22_z3sp10[zeichen]); // 11. Spalte des Zeichens GLCD_DATA_ZEICHEN(0); // 12. Spalte des Zeichens

29 KAPITEL 5. SOFTWARE (IN C MIT CC5X) 28 GLCD_DATA_ZEICHEN(0); } // 1. Zeile und Spalte vom Ende des Zeichen GLCD_SETCURSOR_ZEILE(tmp_zeile);

30 Kapitel 6 Demonstrationsbeispiele Die folgenden Beispiele dienen nur zur Demonstration. Sie zeigen eine mögliche Einbindung der zuvor beschriebenen Unterprogramme. 6.1 Hardware Abbildung 6.1: Schaltung zur Demonstration der Grafik-LCD-Routinen Bei diesen Demonstrationsbeispielen soll ein Mikrocontroller (PIC16F877) beliebige Texte (z.b. Hello, World) und Daten (z.b. Uhrzeit und Datum) ausgeben. Später auch Grafi- 29

31 KAPITEL 6. DEMONSTRATIONSBEISPIELE 30 ken (Linien, Rechtecke, usw.). Die Beschaltung des Grafik-LC-Displays erfolgt gemäß Abschnitt 2. Für die Takterzeugung dient eine Standardbeschaltung bestehend aus einem 4-MHz-Quarz (X1), zwei Kondensatoren (C3, C4) und einem Widerstand (R2). Zur Erzeugung des Reset (für den Mikrocontroller) wurde ebenfalls eine einfache Standardlösung bestehend aus einem Widerstand (R1) und einem Elektrolyt-Kondensator (C1) gewählt. Da diese RC-Kombination nur beim Anlegen der Betriebsspannung (also beim Einschalten) einen Reset erzeugt, wurde zusätzlich der Taster S1 hinzugefügt. Mit diesem Taster kann nun jeder Zeit ein Reset ausgelöst werden. Da der Reseteingang des Mikrocontrollers (M CLR, Pin 1) auch gleichzeitig die Programmierspannung (ca. 13V) bei der ICSP-Programmierung ist, darf während einer Programmierung kein Reset ausgelöst werden. Durch die Diode D2 ist ein Reset durch das RC-Glied (R1 und C1) während einer Programmierung via ICSP nicht möglich. Die Diode D1 ist notwendig, damit beim Programmieren des Mikrocontroller (IC1) das Programmiergerät nicht die gesamte Hardware versorgt, sondern nur den Mikrocontroller. Der Kondensator C2 dient zur Entkoppelung der Betriebsspannung für den Mikrocontroller. Für diesen Koppelkondensator sollte ein Keramiktyp verwendet werden. Dieser muss möglichst nahe an diesen IC angebracht werden. Die ICSP-Schnittstelle (K1) dient zur Programmierung des Mikrocontrollers (IC1), wobei bei dieser Methode der Mikrocontroller nicht aus der Schaltung entfernt werden muss. (siehe auch Anhang D ab Seite 81) Diese ICSP-Schnittstelle beinhaltet folgende Leitungen: Betriebsspannung (V dd, Pins 11 und 32): Damit beim Programmieren das Programmiergerät nicht die gesamte Hardware versorgen muss (könnte das Programmiergerät überlasten) wird mit Hilfe der Diode D1 nur der Mikrocontroller IC1 mit dem Programmiergerät versorgt. Taktleitung (RB6, Pin 39): Hier wird dieser Pin nur für die ICSP-Schnittstelle benötigt. Datenleitung (RB7, Pin 40): Hier wird dieser Pin nur für die ICSP-Schnittstelle benötigt. Programmierspannung (M CLR/V pp, Pin 1): Dieser Pin hat eine Doppelfunktion, er ist auch der Reset-Eingang, und muss deshalb mit einer Diode (D2) vor einem Reset durch das RC-Glied, bestehend aus R1 und C1, geschützt werden. Masse (V ss, Pins 12 und 31) Die Stromversorgung besteht ebenfalls aus einer einfachen Standardlösung. Ein Festspannungsregler (IC3) vom Typ 7805 übernimmt mit den Kondensatoren C7 bis C10

32 KAPITEL 6. DEMONSTRATIONSBEISPIELE 31 die Spannungsregelung. Als Spannungsquelle dient beispielsweise ein unstabilisiertes 9-V- Steckernetzteil. Die Diode D3 dient hier als Verpolungsschutz, und die Leuchtdiode D4 dient zusammen mit dem Vorwiderstand R5 als Spannungskontrolle. 6.2 Nachbauanleitung (der Hardware) Dieser Abschnitt beschreibt den Nachbau dieses Demonstrationsbeispiels. Das Herstellen der Platine wird hier nicht beschrieben, da hier jeder seine eigene Methode besitzt, außerdem werden industriell gefertigte Platinen (auch in der Einzelfertigung und auch für eine Privatperson) immer günstiger, so dass die Eigenfertigung immer mehr abnimmt. Schritt 1: Platine herstellen Zu diesem Zweck ist im Anhang A (Seite 61) das Layout zu diesem Demonstrationsbeispiel abgedruckt, welches üblicherweise seitenverkehrt ist. Selbstverständlich kann eine eigene Platine entworfen werden, die den eigenen Anforderungen entspricht. Schritt 2: Platine bestücken Das Bestücken der Platine ist erst dann sinnvoll, wenn alle für diese Platine benötigten Bauteile vorhanden sind. Es sollten generell nur erstklassige und neuwertige Bauteile verwendet werden. Auf Bauteile aus ausgeschlachteten Geräten sollte grundsätzlich verzichtet werden, da ihre Funktionalität nicht gewährleistet ist, und eine unnötige Fehlersuche dadurch vermieden werden kann. Weiters sollte ausreichend Platz und vor allem ausreichend Zeit für die Bestückung der Platine vorhanden sein. Die Bauelemente entsprechend Abbildung 6.2 (Bestückungsplan), der folgenden Reihenfolge, der Stückliste (Anhang B) und dem Schaltplan (Abschnitt 6.1) bestücken. Die nach dem anlöten überstehenden Anschlüsse mit einem kleinen Seitenschneider entfernen. Reihenfolge zur Bestückung der Platine: 1 Drahtbrücke (unter IC1) Dioden D1 und D2 (je 1N5711): Achtung: Polarität beachten! Widerstände R1 (10k), R2 (270 Ohm), R3 (36k), und R5 (1k): Tipp: Vor dem Einlöten des Widerstandes diesen überprüfen, auch wenn die Bauteile in einem Regal sortiert sind. (z.b. mit einem Multimeter). Die Praxis hat gezeigt, dass sich hin und wieder doch falsche Bauteilwerte in das Regal eingeschlichen haben. Dies gilt nicht nur für Widerstände, sondern auch für Dioden, Kondensatoren, Transistoren usw. Diode D3 (1N4001): Achtung: Polarität beachten!

33 KAPITEL 6. DEMONSTRATIONSBEISPIELE 32 IC-Fassungen für IC1 (40polig) und IC2 (8polig): Tipp 1: Obwohl es bei den Fassungen elektrisch gesehen egal ist wie die Fassungen eingelötet sind, sollte man doch die Fassung so einlöten, dass die Kerbe in die richtige Richtung zeigt. Dies erleichtert das spätere Einsetzten der ICs bzw. erleichtert die Arbeit bei einem IC-Tausch. Tipp 2: Beim Einlöten der Fassungen sollte man wie folgt vorgehen: Fassung an der einzusetzenden Stelle lagerichtig einsetzen und zunächst nur einen beliebigen Eckpin anlöten. Fassung kontrollieren und eventuell Nachlöten. Sitzt die Fassung ordentlich, den gegenüberliegenden Pin anlöten. Fassung wieder kontrollieren und eventuell nachlöten. Erst wenn Sie mit der Lage der Fassung zufrieden sind, die restlichen Pins anlöten. Buchsenleiste für LCD1 (20polig, Grafik-LC-Display), ICSP-Schnittstelle (5polig) und optional für die hier nicht verwendeten Anschlüsse (=Ports) des Mikrocontrollers IC1: Tipp: Bei mehrpoligen Buchsenleisten zuerst den ersten Pin anlöten, Buchsenleiste anschließend ausrichten, eventuell nachlöten, dann den letzten Pin anlöten, Buchsenleiste eventuell ausrichten und/oder nachlöten. Erst danach die restlichen, dazwischen liegenden Pins anlöten. Keramikkondensatoren C3 und C4 (je 22pF) Tantal C10 (1µF/35V): Achtung: Polarität beachten! (der längere Anschluss ist der +-Pol) Taster S1 Keramikkondensatoren C2, C8, C9 (je 100nF) und C5, C6 (je 10nF) Leuchtdiode D4 (low current, 3mm, grün): Achtung: Der längere Anschluss ist die Anode (plus), der kürzere demnach die Kathode (minus). Trimmer R4 (10k) Stiftleiste für Jumper Elkos C1, C7 (je 10µF/35V): Achtung: Polarität beachten Anschlussklemme (2polig) Quarz X1 (4 MHz) Spannungsregler IC3 (7805): Achtung: Polarität beachten!

34 KAPITEL 6. DEMONSTRATIONSBEISPIELE 33 Abbildung 6.2: Bestückungsplan (Demonstrationsbeispiele) Zum Schluss alle Lötstellen noch einmal sorgfältig auf Kurzschlüsse oder kalte Lötstellen überprüfen. Hier sollte man sich ausreichend Zeit nehmen! Schritt 3: Grafik-LC-Display vorbereiten Auf der Unterseite des Grafik-LC-Displays eine 20polige Kontaktleiste anlöten. Beim Löten ist dabei äußerste Vorsicht geboten. Kurzschlüsse zwischen Grafik-LC-Display und Kontaktleiste können nur sehr schwer gefunden und entfernt werden. Schritt 4: Test Abbildung 6.3: Grafik-LC-Display (Ansicht von unten) IC1 (PIC16F877), IC2 (7555) und LCD1 (Grafik-LC-Display) noch nicht in die Fassungen einsetzen, und auch noch nicht die Betriebsspannung anschließen. Zuerst mit einem Multimeter prüfen, ob zwischen Betriebsspannung und Masse kein Kurzschluss herrscht. (Multimeter im Mode Durchgangstester an der Anschlussklemme). Ist kein Kurzschluss feststellbar, als nächstes am z.b. IC-Sockel für IC1 an

35 KAPITEL 6. DEMONSTRATIONSBEISPIELE 34 den Pins 12 oder 31 (V ss bzw. GND) und 11 oder 32 (V cc bzw. +5V ) messen. Diese Messung kann auch am IC-Sockel für IC2 an den Pins 1 (GND) und 8 (V cc bzw. +5V) durchgeführt werden. Multimeter nach wie vor im Mode Durchgangstester. Eventuell festgestellte Kurzschlüsse müssen natürlich aufgespürt und entfernt werden! Eine Spannungsquelle mit einer Spannung zwischen 7V und 9V anschließen. Spannung an IC1 zwischen den Pins 12 oder 31 (V ss bzw. GND) und 11 oder 32 (V dd bzw. +5V ) messen. Wird hier (bei angestecktem Netzteil) keine oder eine grob abweichende Spannung als 5V gemessen, so liegt ein Bestückungsfehler vor, welcher unbedingt aufgespürt und beseitigt werden muss. Ist die Spannung okay, diesen Vorgang bei IC2 zwischen den Pins 1 (GND) und 8 (V cc bzw. +5V ) wiederholen. Auch hier gilt: Wird hier (bei angestecktem Netzteil) keine oder eine grob abweichende Spannung als 5V gemessen, so liegt ein Bestückungs- und/oder Verdrahtungsfehler vor, welcher unbedingt aufgespürt und beseitigt werden muss. Ist die Spannung okay, diesen Vorgang bei LCD1 zwischen den Pins 1 (V ss bzw. GND) und 2 (V dd bzw. +5V ) wiederholen. Auch hier gilt: Wird hier (bei angestecktem Netzteil) keine oder eine grob abweichende Spannung als 5V gemessen, so liegt ein Bestückungs- und/oder Verdrahtungsfehler vor, welcher unbedingt aufgespürt und beseitigt werden muss. Ist die Spannung okay, entweder die Stromversorgung abschalten, oder die Platine von der Stromversorgung trennen. Den Mikrocontroller PIC16F877 (IC1) sowie den Timer 7555 (IC2) im ausgeschalteten Zustand einsetzen. Achtung: Auf die Polarität achten! Stromversorgung wieder einschalten oder anschließen. Falls vorhanden: mit einem Oszilloskop oder mit einem Logic-Analyser am Pin 3 von IC2 (7555) messen: hier sollte eine rechteckförmige Spannung mit einer Frequenz von ca. 2kHz und eine Amplitude von 5V gemessen werden. Schritt 5: Zusammenbau An den 4 Ecken je eine Distanz M3x10 mit je einer Zahnscheibe und einer Mutter M3 gemäß Bild 6.4. anbringen. Zur Befestigung des Grafik-LC-Display 4 Distanzen M2,5x8 mit je einer Zahnscheibe und Zylinderkopfschraube M2,5x6 gemäß Abbildund 6.4 anbringen. Eventuell Grafik-LC-Display mit M2,5-Muttern befestigen.

36 KAPITEL 6. DEMONSTRATIONSBEISPIELE 35 Abbildung 6.4: Zusammenbau 6.3 Softwarebeispiel 1 ( HELLO WORLD in Assembler) Das erste Demonstrationsbeispiel soll mit Hilfe der Assembler-Basis-Routinen (aus Abschnitt 4.3) den Text HELLO WORLD am Grafik-LC-Display ausgeben. (Abbildung 6.5) Die Programmierung des Mikrocontrollers erfolgt mittels ICSP-Schnittstelle (siehe Anhang D ab Seite 81). Abbildung 6.5: Demo 1 (alte Platinenversion) Listing ;********************************************************************************************** ;** Routinen zur Ansteuerung des Grafik-LCD (mit SED1520-Controller) ** ;** ** ;** Demonstrationsbeispiel 1 ** ;** Ausgabe des Textes "HELLO WORLD" nur mit Hilfe der "Basisroutinen" **

37 KAPITEL 6. DEMONSTRATIONSBEISPIELE 36 ;** ** ;** Entwickler: Buchgeher Stefan ** ;** Entwicklungsbeginn der Software: 22. Juli 2005 ** ;** Funktionsfaehig seit: 22. Juli 2005 ** ;** Letzte Bearbeitung: 8. September 2006 ** ;********************************************************************************************** List p=pic16f877 ;******************************** Register (in Registerseite 0) ******************************* STAT equ 3 ;Statusregister PORTB equ 6 ;Port B-Register PORTD equ 8 ;Port D-Register ;******************************** Register (in Registerseite 1) ******************************* TRISB equ 6 ;Richtungsregister Port B TRISD equ 8 ;Richtungsregister Port D ;******************************** Eigene Register (in Registerbank 0) ************************* TEMP1 equ 20 ;allgemeines Hilfsregister 1 TEMP2 equ 21 ;allgemeines Hilfsregister 2 ;******************************** Bits in Registern ******************************************* RP0 equ 5 ;Seitenauswahlbit 1 im Statuswort-Register RP1 equ 6 ;Seitenauswahlbit 2 im Statuswort-Register ;******************************** Portbelegung ************************************************ GLCD_DATA equ PORTD GLCD_DATA_TRIS equ TRISD GLCD_CTRL equ PORTB GLCD_CTRL_TRIS equ TRISB GLCD_A0 equ 5 GLCD_CS2 equ 4 GLCD_CS1 equ 3 GLCD_RD equ 2 GLCD_WR equ 1 ;******************************** Konstanten ************************************************* ; keine Konstanten ;******************************** Ziele der Registeroperationen ****************************** w equ 0 f equ 1 ;******************************** Makros ***************************************************** bank0 MACRO bcf STAT,RP0 bcf STAT,RP1 ENDM bank1 MACRO bsf bcf ENDM STAT,RP0 STAT,RP1 ;******************************** Konfigurations-Bits ***************************************** config b ; Bit 13-12, 5-4 (CP1:CP0): FLASH Memory Code Protection ; 0 0 : 0000h to 1FFFh code protected ; 0 1 : 1000h to 1FFFh code protected ; 1 0 : 1F00h to 1FFFh code protected

38 KAPITEL 6. DEMONSTRATIONSBEISPIELE 37 ; -> 1 1 : Code protection off ; Bit 11 (DEBUG): In-Circuit Debugger Mode ; 0 : DEBUG on (= enabled) ; -> 1 : DEBUG off (= disabled) ; Bit 10 : Reserve ; Bit 9 (WRT): FLASH Programm Memory Write Enable ; -> 0 : WRT off (= diasbled) ; 1 : WRT on (= enabled) ; Bit 8 (CPD): Data EE Memory Code Protection ; 0 : CPD on (= enabled) ; -> 1 : CPD off (= disabled) ; Bit 7 (LVP): Low Voltage ICSP Enable Bit ; -> 0 : LVP off (= disabled) ; 1 : LVP on (= enabled) ; Bit 6 (BODEN): Brown-Out Detection ; -> 0 : BODEN on (= disabled) ; 1 : BODEN off (= enabled) ; Bit 3 (PWRTE): Power Up Timer ; 0 : PWRT on (= enabled) ; -> 1 : PWRT off (= disabled) ; Bit 2 (WDTE): Watchdog Timer ; -> 0 : WDT off (= disabled) ; 1 : WDT on (= enabled)) ; ++-- Bit 1-0 (FOSC2:FOSC0): Oszillator Selection ; 0 0 : LP Oszillator ; 0 1 : XT Oszillator ; -> 1 0 : HS Oszillator ; 1 1 : RC Oszillator ORG goto ORG goto 0x000 Beginn 0x004 ISR ;******************************** ISR ********************************************************* ISR retfie ;keine ISR vorhanden ;******************************** Unterprogramme ********************************************** ;********************************************************************************************** ;** Initialisierung des Prozessor: ** ;** + Ports: Port A: unbenutzt ** ;** Port B: Steuersignale fuer Grafik-LC-Display (Ausgaenge) ** ;** Port C: unbenutzt ** ;** Port D: 8-Bit-Daten fuer Grafik-LC-Display (Ausgaenge) ** ;** Port E: unbenutzt ** ;********************************************************************************************** INIT bank1 ;Registerseite 1 movlw b ;Port B und Port D als Ausgang definieren movwf TRISB movwf TRISD bank0 ;Registerseite 0 return ;******************************** Grafik-LCD Routinen ***************************************** ;********************************************************************************************** ;** GLCD_INIT ** ;** ** ;** Aufgabe: ** ;** Grafik-LC-Display initialisieren ** ;** ** ;** Vorgehensweise: ** ;** Uebergibt nacheinander die Befehle zur Initialisierung an das Grafik-LC-Display. ** ;********************************************************************************************** GLCD_INIT movlw.175 ;Display on

39 KAPITEL 6. DEMONSTRATIONSBEISPIELE 38 call GLCD_COMMAND movlw.164 ;static drive off call GLCD_COMMAND movlw.169 ;duty cyle: 1/32 call GLCD_COMMAND movlw.160 ;ADC: CW output (forward) call GLCD_COMMAND movlw.238 ;read modify write off call GLCD_COMMAND movlw.192 ;line 0 call GLCD_COMMAND movlw.184 ;1. Zeile call GLCD_COMMAND movlw.0 ;1. Spalte call GLCD_COMMAND return ;********************************************************************************************** ;** GLCD_COMMAND ** ;** ** ;** Aufgabe: ** ;** Umsetzung des Zeitdiagramms zum Senden eines Befehls an das Grafik-LC-Display. ** ;** ** ;** ** ;** A0 X X ** ;** ** ;** ncs1,ncs2 X X ** ;** ** ;** nrd ** ;** ** ;** nwr \ / ** ;** ** ;** Data X X ** ;** ** ;** Uebergabeparameter ** ;** Das Arbeitsregister (w-register) beinhaltet den Befehl. ** ;********************************************************************************************** GLCD_COMMAND bcf GLCD_CTRL,GLCD_A0 bcf GLCD_CTRL,GLCD_CS1 bcf GLCD_CTRL,GLCD_CS2 bsf bcf GLCD_CTRL,GLCD_RD GLCD_CTRL,GLCD_WR movwf GLCD_DATA ;Befehl am Datenport ausgeben bsf bsf bsf GLCD_CTRL,GLCD_WR GLCD_CTRL,GLCD_CS1 GLCD_CTRL,GLCD_CS2 return ;********************************************************************************************** ;** GLCD_DATA1 ** ;** ** ;** Aufgabe: ** ;** Umsetzung des Zeitdiagramms zum Senden von Daten an die erste Haelfte des ** ;** Grafik-LC-Display. ** ;** ** ;** **

40 KAPITEL 6. DEMONSTRATIONSBEISPIELE 39 ;** A0, ncs1 X X ** ;** ** ;** ncs2 X X ** ;** ** ;** nrd ** ;** ** ;** nwr \ / ** ;** ** ;** Data X X ** ;** ** ;** Uebergabeparameter ** ;** Das Arbeitsregister (w-register) beinhaltet die Daten. ** ;********************************************************************************************** GLCD_DATA1 bsf GLCD_CTRL,GLCD_A0 bsf GLCD_CTRL,GLCD_CS1 bcf GLCD_CTRL,GLCD_CS2 bsf bcf GLCD_CTRL,GLCD_RD GLCD_CTRL,GLCD_WR movwf GLCD_DATA ;Daten am Datenport ausgeben bsf bsf bsf GLCD_CTRL,GLCD_WR GLCD_CTRL,GLCD_CS1 GLCD_CTRL,GLCD_CS2 return ;********************************************************************************************** ;** GLCD_DATA2 ** ;** ** ;** Aufgabe: ** ;** Umsetzung des Zeitdiagramms zum Senden von Daten an die zweite Haelfte des ** ;** Grafik-LC-Display. ** ;** ** ;** ** ;** A0, ncs2 X X ** ;** ** ;** ncs1 X X ** ;** ** ;** nrd ** ;** ** ;** nwr \ / ** ;** ** ;** Data X X ** ;** ** ;** Uebergabeparameter ** ;** Das Arbeitsregister (w-register) beinhaltet die Daten. ** ;********************************************************************************************** GLCD_DATA2 bsf GLCD_CTRL,GLCD_A0 bcf GLCD_CTRL,GLCD_CS1 bsf GLCD_CTRL,GLCD_CS2 bsf bcf GLCD_CTRL,GLCD_RD GLCD_CTRL,GLCD_WR movwf GLCD_DATA ;Daten am Datenport ausgeben bsf bsf bsf GLCD_CTRL,GLCD_WR GLCD_CTRL,GLCD_CS1 GLCD_CTRL,GLCD_CS2 return ;********************************************************************************************** ;** GLCD_CLEAR ** ;** **

41 KAPITEL 6. DEMONSTRATIONSBEISPIELE 40 ;** Aufgabe: ** ;** Loeschen des Grafik-LC-Displays. ** ;** ** ;** Vorgehensweise: ** ;** Beginnend bei der letzten Zeile und letzten Spalte mit Hilfe zweier geschachtelten ** ;** Schleifen Nullen zum Grafik-LC-Display (in beide Display-Haelften) schreiben. Dies ** ;** bewirkt, dass am Display nichts angezeigt wird bzw. das Display wird somit geloescht. ** ;** ** ;** Anmerkung: ** ;** Die beiden temporaeren Register (TEMP1 und TEMP2) dienen hier nur als Schleifen- ** ;** zaehler. Sie koennen daher auch in anderen Unterprogrammen verwendet werden. ** ;** - TEMP1...Zeilenzaehler (3 bis 0) ** ;** - TEMP2...Spaltenzaehler (61 bis 0) ** ;********************************************************************************************** GLCD_CLEAR movlw.4 movwf TEMP1 GLCD_CLR_SCHL1: decf TEMP1,w addlw.184 ;Befehl (184 + TEMP1 = Zeile ) call GLCD_COMMAND ; an das Grafik-LC-Display movlw.61 movwf TEMP2 movlw.0 ;Befehl: 1. Spalte an das Grafik-LC-Display call GLCD_COMMAND GLCD_CLR_SCHL2: movlw.0 call GLCD_DATA2 decfsz TEMP2,f goto GLCD_CLR_SCHL2 decfsz TEMP1,f goto GLCD_CLR_SCHL1 return ;******************************** Demobeispiel 1 ********************************************** ;********************************************************************************************** ;** AUSGABE ** ;** ** ;** Aufgabe: ** ;** Den Text "HELLO WORLD" am Grafik-LC-Display ausgeben. ** ;** ** ;** Vorgehensweise: ** ;** - Display loeschen (mit Hilfe des Unterprogramms GLCD_CLEAR). ** ;** - "Cursor" an die 1.Zeile und 1.Spalte setzen (mit Hilfe des Unterprogramms ** ;** GLCD_COMMAND). ** ;** - Hier nun den Text "HELLO" ausgeben. Dazu muessen nacheinander die Daten fuer die ** ;** einzelnen Buchstaben mit Hilfe des Unterprogramms GLCD_DATA1 an das Grafik-LC- ** ;** Display uebergeben werden. ** ;** 1 X X XXXXX X X XXX ** ;** 2 X X X X X X X ** ;** 4 X X X X X X X ** ;** 8 XXXXX XXXX X X X X ** ;** 16 X X X X X X X ** ;** 32 X X X X X X X ** ;** 64 X X XXXXX XXXXX XXXXX XXX ** ;** 128 ** ;** ** ;** ** ;** ** ;** ** ;** ** ;** ** ;** ** ;** ** ;** **

42 KAPITEL 6. DEMONSTRATIONSBEISPIELE 41 ;** usw. ** ;** ** ;** - "Cursor" an die 2.Zeile und 1.Spalte setzen (mit Hilfe des Unterprogramms ** ;** GLCD_COMMAND). ** ;** - Hier nun den Text "WORLD" ausgeben. Dazu muessen nacheinander die Daten fuer die ** ;** einzelnen Buchstaben mit Hilfe des Unterprogramms GLCD_DATA1 an das Grafik-LC- ** ;** Display uebergeben werden. ** ;** 1 X X XXX XXXX X XXXX ** ;** 2 X X X X X X X X X ** ;** 4 X X X X X X X X X ** ;** 8 X X X X X XXXX X X X ** ;** 16 X X X X X X X X X X ** ;** 32 XX XX X X X X X X X ** ;** 64 X X XXX X X XXXXX XXXX ** ;** 128 ** ;** ** ;** ** ;** ** ;** ** ;** ** ;** ** ;** ** ;** ** ;** ** ;** usw. ** ;********************************************************************************************** AUSGABE call GLCD_CLEAR ;Display loeschen movlw.184 ;1. Zeile Call GLCD_COMMAND movlw.0 ;1. Spalte (der ersten Haelfte) call GLCD_COMMAND ;Code fuer "HELLO" movlw.127 ;Code fuer "H" movlw.8 movlw.8 movlw.8 movlw.127 movlw.0 movlw.127 ;Code fuer "E" movlw.73 movlw.73 movlw.73 movlw.65 movlw.0 movlw.127 ;Code fuer "L" movlw.64 movlw.64 movlw.64 movlw.64

43 KAPITEL 6. DEMONSTRATIONSBEISPIELE 42 movlw.0 movlw.127 ;Code fuer "L" movlw.64 movlw.64 movlw.64 movlw.64 movlw.0 movlw.62 ;Code fuer "O" movlw.65 movlw.65 movlw.65 movlw.62 movlw.0 movlw.185 ;2. Zeile call GLCD_COMMAND clrw call GLCD_COMMAND ;1. Spalte (der ersten Haelfte) ;Code fuer "WORLD" movlw.127 ;Code fuer "W" movlw.32 movlw.24 movlw.32 movlw.127 movlw.0 movlw.62 ;Code fuer "O" movlw.65 movlw.65 movlw.65 movlw.62 movlw.0 movlw.127 ;Code fuer "R" movlw.9 movlw.25 movlw.41 movlw.70

44 KAPITEL 6. DEMONSTRATIONSBEISPIELE 43 movlw.0 movlw.127 ;Code fuer "L" movlw.64 movlw.64 movlw.64 movlw.64 movlw.0 movlw.127 ;Code fuer "D" movlw.65 movlw.65 movlw.65 movlw.62 movlw.0 return ;******************************** Hauptprogramm *********************************************** ;********************************************************************************************** ;** Aufgaben des Hauptprogramms: ** ;** + Controller initialisieren (Unterprogramm INIT) ** ;** + Grafik-LCD initialisieren (Unterprogramm GLCD_INIT) ** ;** + Text zur Demonstration ausgeben (Unterprogramm AUSGABE) ** ;** + Endlosschleife ** ;********************************************************************************************** Beginn call INIT ;Controller initialisieren call GLCD_INIT ;Grafik-Display initialisieren Schleife goto Schleife call AUSGABE ;Ausgabe eines Textes end Anmerkungen zur Assembler-Software Die Software besteht im Wesentlichen aus einem kurzen Hauptprogramm, die im Abschnitt 4 beschriebenen Unterprogramme und einem weiteren Unterprogramm namens AUSGABE. Das Hauptprogramm besteht nach der Initialisierung des Controllers (Unterprogramm INIT) und des Grafik-LC-Displays (Unterprogramm GLCD INIT) nur mehr aus einem Unterprogramm zur Ausgabe des Textes am Grafik-LC-Display (Unterprogramm AUSGABE) und aus einer Endlosschleife. Das Unterprogramm INIT dient zur Initialisierung des Mikrocontrollers. In diesem Beispiel werden nur die Ports B und D als Ausgang konfiguriert. Das Unterprogramm GLCD INIT

45 KAPITEL 6. DEMONSTRATIONSBEISPIELE 44 initialisiert das Grafik-LC-Display (siehe Abschnitt 4.3.1). Nach der Initialisierung des Grafik-LC-Displays (Unterprogramm GLCD INIT) ist das Grafik-LC-Display bereit Zeichen oder Werte anzuzeigen. Die Ausgabe der anzuzeigenden Zeichen übernimmt hier das Unterprogramm AUSGABE. Zuerst muss das Display mit dem Unterprogramm GLCD CLEAR gelöscht werden und der Cursor an die erste Zeile und erste Spalte gesetzt werden. Nun können beliebige Zeichen, oder Symbole an das Grafik-LC- Display gemäß Abschnitt 3.3. übertragen werden. 6.4 Softwarebeispiel 2 in C mit CC5X Das zweite Demonstrationsbeispiel soll mit Hilfe der C-Routinen (aus Abschnitt 5.3.) die Informationen gemäß Abbildung 6.6 (Uhrzeit und Datum) am Grafik-LC-Display anzeigen. Die angezeigten Daten (hier Uhrzeit und Datum) sind in den Registern UHRZEIT STD, UHRZEIT MIN, UHRZEIT SEK, DATUM TAG und KALENDERWOCHE gespeichert. Die Texte für den Wochentag, Monat und das Jahr werden direkt als ASCII-Zeichen an das Grafik- LC-Display gesendet. Wie die Uhrzeit und das Datum zustande kommen ist bei diesem Demonstrationsbeispiel nicht von Bedeutung. Abbildung 6.6: Demo 2 Aufgrund der 1k-Grenze des CC5X-Kompilers muss der C-Code in mehrere C-Dateien aufgeteilt werden. (siehe Anhang E ab Seite 84). Die Programmierung des Mikrocontrollers erfolgt auch hier mittels ICSP-Schnittstelle (siehe Anhang D ab Seite 81) Listings Datei demo2.c /* Demonstrationsbeispiel 2 zur Ansteuerung des Grafik-LCD (mit SED1520-Controller) in */ /* C (CC5X) */ /* Entwickler: Buchgeher Stefan */ /* Entwicklungsbeginn der Software: 3. Maerz 2006 */ /* Funktionsfaehig seit: 2. April 2006 */ /* Letzte Bearbeitung: 8. September 2006 */ /****************** Include-Dateien *****************************************************/ #include "PROJEKT.H"

46 KAPITEL 6. DEMONSTRATIONSBEISPIELE 45 /****************** Strukturen *********************************************************/ /* keine Strukturen verwendet */ /****************** Externe Register ***************************************************/ unsigned char UHRZEIT_STD; // beinhaltet die Stunden unsigned char UHRZEIT_MIN; // beinhaltet die Minuten unsigned char UHRZEIT_SEK; // beinhaltet die Sekunden unsigned char DATUM_TAG; // beinhaltet den Kalendertag unsigned char KALENDERWOCHE; // beinhaltet die Kalenderwoche /****************** Bits in den externen Registern **************************************/ /* keine externe Register */ /****************** Konstanten **********************************************************/ /* keine Konstanten */ /****************** Konfigurations-Bits *************************************************/ #pragma config = 0b /* Bit 13-12, 5-4 (CP1:CP0): FLASH Memory Code Protection 0 0 : 0000h to 1FFFh code protected 0 1 : 1000h to 1FFFh code protected 1 0 : 1F00h to 1FFFh code protected -> 1 1 : Code protection off Bit 11 (DEBUG): In-Circuit Debugger Mode 0 : DEBUG on (= enabled) -> 1 : DEBUG off (= disabled) Bit 10 : Reserve Bit 9 (WRT): FLASH Programm Memory Write Enable -> 0 : WRT off (= diasbled) 1 : WRT on (= enabled) Bit 8 (CPD): Data EE Memory Code Protection 0 : CPD on (= enabled) -> 1 : CPD off (= disabled) Bit 7 (LVP): Low Voltage ICSP Enable Bit -> 0 : LVP off (= disabled) 1 : LVP on (= enabled) Bit 6 (BODEN): Brown-Out Detection -> 0 : BODEN on (= disabled) 1 : BODEN off (= enabled) Bit 3 (PWRTE): Power Up Timer 0 : PWRT on (= enabled) -> 1 : PWRT off (= disabled) Bit 2 (WDTE): Watchdog Timer -> 0 : WDT off (= disabled) 1 : WDT on (= enabled)) Bit 1-0 (FOSC2:FOSC0): Oszillator Selection 0 0 : LP Oszillator 0 1 : XT Oszillator -> 1 0 : HS Oszillator 1 1 : RC Oszillator */ /****************** Funktionsprototypen *************************************************/ /* Initialisierung des Mikrocontroller */ void INIT(void); /* Unterprogramme zur Datenausgabe */ void AUSGABE(void); void AUSGABEBCD_5x7(unsigned char wert); void AUSGABEBCD_8x14(unsigned char wert); void AUSGABEBCD_10x22(unsigned char wert); /****************** ISR - Timer0 ********************************************************/ /* keine ISR verwendet */

47 KAPITEL 6. DEMONSTRATIONSBEISPIELE 46 /****************** Unterprogramme und Funktionen ***************************************/ /****************** externe Unterprogramme einbinden ************************************/ /* Mathematik-Routinen */ #include <MATH16.H> /* INIT: */ /* Aufgabe: */ /* Initialisierung des Prozessor: */ /* + Port B und Port D als Ausgang definieren. */ /* + Die (externen) Register fuer die Uhrzeit und Datum mit (plausiblen) Werten */ /* laden (dient hier nur zur Demonstration!) */ /* Uebergabeparameter: */ /* zeichen */ /* Rueckgabeparameter: */ /* keiner */ void INIT(void) TRISB = 0; // Port B als Ausgang definieren TRISD = 0; // Port D als Ausgang definieren } UHRZEIT_STD = 14; // Die (externen) Register fuer die Uhrzeit UHRZEIT_MIN = 57; // und Datum mit (plausiblen) Werten laden UHRZEIT_SEK = 36; // (dient hier nur zur Demonstration!) DATUM_TAG = 9; KALENDERWOCHE = 14; /* AUSGABE: */ /* Aufgabe: */ /* Uhrzeit und Datum am Grafik-LC-Display ausgeben. */ /* Uebergabeparameter: */ /* keine */ /* Rueckgabeparameter: */ /* keiner */ /* Vorgehensweise: */ /* + Grafik-LC-Display loeschen (Unterprogramm GLCD_CLEAR) */ /* + Fuer jeden auszugebenden Wert oder Text gilt: */ /* + Cursor an die gewuenschte Position setzen (Unterprogramm GLCD_SETCURSOR_ZEILE */ /* fuer die Zeile und Unterprogramm GLCD_SETCURSOR_ZEILE fuer die Spalte). */ /* + Den Wert oder Text in der gewuenschten Groesse am Grafik-LC-Display ausgeben. */ void AUSGABE(void) GLCD_CLEAR(); // Display loeschen // Uhrzeit (Stunde) GLCD_SETCURSOR_ZEILE(0); // Cursor an die 1.Zeile und 1. Spalte GLCD_SETCURSOR_SPALTE(0); // setzen AUSGABEBCD_10x22(UHRZEIT_STD); // Stunde am Grafik-LC-Display ausgeben // Doppelpunkt GLCD_SETCURSOR_SPALTE(25); GLCD_DATA_ZEICHEN(224); GLCD_DATA_ZEICHEN(224); GLCD_DATA_ZEICHEN(224);

48 KAPITEL 6. DEMONSTRATIONSBEISPIELE 47 GLCD_SETCURSOR_ZEILE(2); GLCD_SETCURSOR_SPALTE(25); GLCD_DATA_ZEICHEN(7); GLCD_DATA_ZEICHEN(7); GLCD_DATA_ZEICHEN(7); // Uhrzeit (Minute) GLCD_SETCURSOR_ZEILE(0); // Cursor an die 1.Zeile und 32. Spalte GLCD_SETCURSOR_SPALTE(31); // setzen AUSGABEBCD_10x22(UHRZEIT_MIN); // Minute am Grafik-LC-Display ausgeben // Doppelpunkt GLCD_SETCURSOR_SPALTE(56); GLCD_DATA_ZEICHEN(224); GLCD_DATA_ZEICHEN(224); GLCD_DATA_ZEICHEN(224); GLCD_SETCURSOR_ZEILE(2); GLCD_SETCURSOR_SPALTE(56); GLCD_DATA_ZEICHEN(7); GLCD_DATA_ZEICHEN(7); GLCD_DATA_ZEICHEN(7); // Uhrzeit (Sekunde) GLCD_SETCURSOR_ZEILE(0); // Cursor an die 1.Zeile und 63. Spalte GLCD_SETCURSOR_SPALTE(62); // setzen AUSGABEBCD_10x22(UHRZEIT_SEK); // Sekunde am Grafik-LC-Display ausgeben // Datum GLCD_SETCURSOR_ZEILE(3); // Cursor an die 4.Zeile und 8. Spalte GLCD_SETCURSOR_SPALTE(7); // setzen GLCD_ZEICHEN_5x7( S ); // Datum am Grafik-LC-Display ausgeben GLCD_ZEICHEN_5x7( o ); GLCD_ZEICHEN_5x7(. ); GLCD_ZEICHEN_5x7( ); AUSGABEBCD_5x7(DATUM_TAG); GLCD_ZEICHEN_5x7(. ); GLCD_ZEICHEN_5x7( ); GLCD_ZEICHEN_5x7( A ); GLCD_ZEICHEN_5x7( p ); GLCD_ZEICHEN_5x7( r ); GLCD_ZEICHEN_5x7( i ); GLCD_ZEICHEN_5x7( l ); GLCD_ZEICHEN_5x7( ); GLCD_ZEICHEN_5x7( 2 ); GLCD_ZEICHEN_5x7( 0 ); GLCD_ZEICHEN_5x7( 0 ); GLCD_ZEICHEN_5x7( 6 ); // Kalenderwoche GLCD_SETCURSOR_ZEILE(0); // Cursor an die 1.Zeile und 105. Spalte GLCD_SETCURSOR_SPALTE(104); // setzen GLCD_ZEICHEN_5x7( K ); // Text ( KW ) am Grafik-LC-Display ausgeben GLCD_ZEICHEN_5x7( W ); } GLCD_SETCURSOR_ZEILE(1); // Cursor an die 2.Zeile und 101. Spalte GLCD_SETCURSOR_SPALTE(100); // setzen AUSGABEBCD_8x14(KALENDERWOCHE); // Kalenderwoche am Grafik-LC-Display ausgeben /* AUSGABEBCD_5x7: */ /* Aufgabe: */ /* Den uebergeben Wert in BCD-Form umwandeln und am Display ausgeben. */ /* Uebergabeparameter: */ /* wert */

49 KAPITEL 6. DEMONSTRATIONSBEISPIELE 48 /* Rueckgabeparameter: */ /* keiner */ /* Vorgehensweise: */ /* + Hunderterstelle ermitteln (diese wird aber nicht Grafik-LC-Display ausgegeben!) */ /* + Zehnerstelle ermitteln und mit dem Unterprogramm GLCD_ZEICHEN_5x7 am Grafik-LC- */ /* Display ausgeben. */ /* + Die uebrigbleibende Einerstelle mit dem Unterprogramm GLCD_ZEICHEN_5x7 am */ /* Grafik-LC-Display ausgeben. */ void AUSGABEBCD_5x7(unsigned char wert) unsigned char help; unsigned char help_modulo; // Hunderterstelle help = (char)(wert / 100); // GLCD_ZEICHEN_5x7(help); help_modulo = wert % 100; // "Hunderterstelle" ermitteln // Zehnerstelle help = (char)(help_modulo / 10); // "Zehnerstelle" ermitteln GLCD_ZEICHEN_5x7(help); // und am LC-Display ausgeben help_modulo = help_modulo % 10; } // Einerstelle GLCD_ZEICHEN_5x7(help_modulo); // "Einerstelle" am LC-Display ausgeben /* AUSGABEBCD_8x14: */ /* Aufgabe: */ /* Den uebergeben Wert in BCD-Form umwandeln und am Display ausgeben. */ /* Uebergabeparameter: */ /* wert */ /* Rueckgabeparameter: */ /* keiner */ /* Vorgehensweise: */ /* + Hunderterstelle ermitteln (diese wird aber nicht Grafik-LC-Display ausgegeben!) */ /* + Zehnerstelle ermitteln und mit dem Unterprogramm GLCD_ZEICHEN_8x14 am Grafik-LC- */ /* Display ausgeben. */ /* + Die uebrigbleibende Einerstelle mit dem Unterprogramm GLCD_ZEICHEN_8x14 am */ /* Grafik-LC-Display ausgeben. */ void AUSGABEBCD_8x14(unsigned char wert) unsigned char help; unsigned char help_modulo; // Hunderterstelle help = (char)(wert / 100); // GLCD_ZEICHEN_8x14(help); help_modulo = wert % 100; // "Hunderterstelle" ermitteln // Zehnerstelle help = (char)(help_modulo / 10); // "Zehnerstelle" ermitteln GLCD_ZEICHEN_8x14(help); // und am LC-Display ausgeben help_modulo = help_modulo % 10; } // Einerstelle GLCD_ZEICHEN_8x14(help_modulo); // "Einerstelle" am LC-Display ausgeben /* AUSGABEBCD_10x22: */

50 KAPITEL 6. DEMONSTRATIONSBEISPIELE 49 /* Aufgabe: */ /* Den uebergeben Wert in BCD-Form umwandeln und am Display ausgeben. */ /* Uebergabeparameter: */ /* wert */ /* Rueckgabeparameter: */ /* keiner */ /* Vorgehensweise: */ /* + Hunderterstelle ermitteln (diese wird aber nicht Grafik-LC-Display ausgegeben!) */ /* + Zehnerstelle ermitteln und mit dem Unterprogramm GLCD_ZEICHEN_10x22 am Grafik- */ /* LC-Display ausgeben. */ /* + Die uebrigbleibende Einerstelle mit dem Unterprogramm GLCD_ZEICHEN_10x22 am */ /* Grafik-LC-Display ausgeben. */ void AUSGABEBCD_10x22(unsigned char wert) unsigned char help; unsigned char help_modulo; // Hunderterstelle help = (char)(wert / 100); // GLCD_ZEICHEN_10x22(help); help_modulo = wert % 100; // "Hunderterstelle" ermitteln // Zehnerstelle help = (char)(help_modulo / 10); // "Zehnerstelle" ermitteln GLCD_ZEICHEN_10x22(help); // und am LC-Display ausgeben help_modulo = help_modulo % 10; } // Einerstelle GLCD_ZEICHEN_10x22(help_modulo); // "Einerstelle" am LC-Display ausgeben /****************** Hauptprogramm *******************************************************/ /* Aufgaben des Hauptprogramms: */ /* + Controller initialisieren (Unterprogramm INIT) */ /* + Grafik-LC-Display initialisieren (Unterprogramm GLCD_INIT) */ /* + Uhrzeit und Datum am Grafik-LC-Display ausgeben (Unterprogramm AUSGABE) */ /* + Endlsschleife */ void main(void) INIT(); // Controller initialisieren GLCD_INIT(); // Grafik-LC-Display initialisieren } AUSGABE(); while(1); // Text am Grafik-LC-Display ausgeben // Endlosschleife Datei GLCD BASIS ROUTINEN.C /* Basis-Unterprogramme zur Ansteuerung des Grafik-LCD (mit SED1520-Controller) */ /* in C (CC5X) */ /* Entwickler: Buchgeher Stefan */ /* Entwicklungsbeginn der Software: 5. Maerz 2006 */ /* Funktionsfaehig seit: 2. April 2006 */ /* Letzte Bearbeitung: 8. September 2006 */ /****************** Projekt-Header einbinden ********************************************/ #include "PROJEKT.H"

51 KAPITEL 6. DEMONSTRATIONSBEISPIELE 50 /****************** externe Register ****************************************************/ unsigned char hlp_zeilen_zaehler; unsigned char hlp_spalten_zaehler; /****************** Basis-Unterprogramme zur Grafik-LCD-Ansteuerung *********************/ /* GLCD_INIT */ /* Aufgabe: */ /* Grafik-LC-Display initialisieren. */ /* Uebergabeparameter: */ /* keine */ /* Rueckgabeparameter: */ /* keiner */ /* Vorgehensweise: */ /* Uebergibt nacheinander die Befehle zur Initialisierung an das Grafik-LC-Display. */ void GLCD_INIT(void) GLCD_COMMAND(175); // Display on GLCD_COMMAND(164); // static drive off GLCD_COMMAND(169); // duty cyle: 1/32 GLCD_COMMAND(160); // ADC: CW output (forward) GLCD_COMMAND(238); // read modify write off GLCD_COMMAND(192); // line 0 GLCD_COMMAND(184); // 1. Zeile GLCD_COMMAND(0); // 1. Spalte ("Column Address" auf 0 setzen) } /* GLCD_COMMAND */ /* Aufgabe: */ /* Umsetzung des Zeitdiagramms zum Senden eines Befehls an das Grafik-LC-Display. */ /* */ /* A0 X X */ /* */ /* ncs1,ncs2 X X */ /* */ /* nrd */ /* */ /* nwr \ / */ /* */ /* Data X X */ /* Uebergabeparameter: */ /* command */ /* Rueckgabeparameter: */ /* keiner */ void GLCD_COMMAND(unsigned char command) GLCD_A0 = 0; GLCD_CS1 = 0; GLCD_CS2 = 0; GLCD_RD = 1; GLCD_WR = 0; GLCD_DATA = command;

52 KAPITEL 6. DEMONSTRATIONSBEISPIELE 51 GLCD_WR = 1; } GLCD_CS1 = 1; GLCD_CS2 = 1; /* GLCD_DATA1 */ /* Aufgabe: */ /* Umsetzung des Zeitdiagramms zum Senden von Daten an die erste Haelfte des */ /* Grafik-LC-Display. */ /* */ /* A0, ncs1 X X */ /* */ /* ncs2 X X */ /* */ /* nrd */ /* */ /* nwr \ / */ /* */ /* Data X X */ /* Uebergabeparameter: */ /* data */ /* Rueckgabeparameter: */ /* keiner */ void GLCD_DATA1(unsigned char data) GLCD_A0 = 1; GLCD_CS1 = 1; GLCD_CS2 = 0; GLCD_RD = 1; GLCD_WR = 0; GLCD_DATA = data; GLCD_WR = 1; } GLCD_CS1 = 1; GLCD_CS2 = 1; /* GLCD_DATA2 */ /* Aufgabe: */ /* Umsetzung des Zeitdiagramms zum Senden von Daten an die zweite Haelfte des */ /* Grafik-LC-Display. */ /* */ /* A0, ncs2 X X */ /* */ /* ncs1 X X */ /* */ /* nrd */ /* */ /* nwr \ / */ /* */ /* Data X X */ /* Uebergabeparameter: */ /* data */ /* Rueckgabeparameter: */

53 KAPITEL 6. DEMONSTRATIONSBEISPIELE 52 /* keiner */ void GLCD_DATA2(unsigned char data) GLCD_A0 = 1; GLCD_CS1 = 0; GLCD_CS2 = 1; GLCD_RD = 1; GLCD_WR = 0; GLCD_DATA = data; GLCD_WR = 1; } GLCD_CS1 = 1; GLCD_CS2 = 1; /* GLCD_DATA_ZEICHEN */ /* Aufgabe: */ /* Je nach aktueller Position des Cursors den uebergebenen Wert (data) an die erste */ /* oder zweite Displayhaelfte uebergeben. */ /* Uebergabeparameter: */ /* data */ /* Rueckgabeparameter: */ /* keiner */ /* Vorgehensweise: */ /* + Befindet sich der Cursor an der 62. Spalte (hlp_spalten_zaehler = 61), die so */ /* genannte "Column Address" auf 0 setzen (gemaess Datenblatt). Dies bewirkt, dass */ /* der displayinterne Speicherzaehler wieder bei 0 beginnt. (siehe Datenblatt) */ /* + Befindet sich der Cursor an eine Spalte groesser als 61 (also zweite Display- */ /* haelfte) den Uebergabewert (data) mit dem Unterprogramm GLCD_DATA2 an die */ /* zweite Displayhaelfte uebergeben. Andernfalls den Uebergabewert (data) mit dem */ /* Unterprogramm GLCD_DATA1 an die erste Displayhaelfte uebergeben. */ /* Anmerkung: */ /* Das (externe) Hilfsregister hlp_spalten_zaehler gibt an, an welcher Spalte sich */ /* der Cursor befindet. */ void GLCD_DATA_ZEICHEN(unsigned char data) if (hlp_spalten_zaehler == 61) // Wenn Cursorspalte = GLCD_COMMAND(0); //... "Column Address" auf 0 setzen } if (hlp_spalten_zaehler > 60) // Cursorspalte > 60 GLCD_DATA2(data); // ja: Uebergabewert (data) mit dem an } // die zweite Displayhaelfte uebergeben. else GLCD_DATA1(data); // nein: Uebergabewert (data) mit dem an } // die erste Displayhaelfte uebergeben. hlp_spalten_zaehler++; } /* GLCD_CLEAR */ /* Aufgabe: */ /* Loeschen des Grafik-LC-Displays. */ /* Uebergabeparameter: */

54 KAPITEL 6. DEMONSTRATIONSBEISPIELE 53 /* keine */ /* Rueckgabeparameter: */ /* keiner */ /* Vorgehensweise: */ /* Beginnend bei der ersten Zeile und ersten Spalte mit Hilfe zweier geschachtelten */ /* Schleifen Nullen zum Grafik-LC-Display (in beide Display-Haelften) schreiben. Dies */ /* bewirkt, dass am Display nichts angezeigt wird bzw. das Display wird somit ge- */ /* loescht. */ void GLCD_CLEAR(void) unsigned char Zeile, Spalte; for(zeile = 0; Zeile < 4; Zeile++) GLCD_COMMAND(184 + Zeile); GLCD_COMMAND(0); // Befehl: naechste Zeile // Befehl: 1.Spalte der Zeile ("Column // Address" auf 0 setzen) } } for(spalte = 0; Spalte < 61; Spalte++) GLCD_DATA1(0); GLCD_DATA2(0); } /* GLCD_SETCURSOR_ZEILE */ /* Aufgabe: */ /* Den Cursor an die uebergebene Zeile (0 bis 3) setzen. */ /* Uebergabeparameter: */ /* zeile: 0-3 */ /* Rueckgabeparameter: */ /* keiner */ /* Vorgehensweise: */ /* Uebergabeparameter fuer die Zeile im globalen Register hlp_zeilen_zaehler sichern */ /* und an das Grafik-LC-Display uebergeben. */ void GLCD_SETCURSOR_ZEILE(unsigned char zeile) hlp_zeilen_zaehler = zeile; GLCD_COMMAND(184 + zeile); } /* GLCD_SETCURSOR_SPALTE */ /* Aufgabe: */ /* Den Cursor an die uebergebene Spalte (0 bis 121) setzen. */ /* Uebergabeparameter: */ /* spalte: */ /* Rueckgabeparameter: */ /* keiner */ /* Vorgehensweise: */ /* Uebergabeparameter fuer die Spalte im globalen Register hlp_spalten_zaehler */ /* sichern und an das Grafik-LC-Display uebergeben. Dabei ist zu beachten, dass das */ /* Grafik-LC-Display in zwei Bereiche aufgeteilt ist, wobei beide Bereiche mit 0 */ /* beginnen. Spalten groesser als 61 befinden sich im zweiten Bereich. Da dieser */

55 KAPITEL 6. DEMONSTRATIONSBEISPIELE 54 /* wieder ab 0 beginnen, muss bei Spalten die groesser als 61 sind, 61 abgezogen */ /* werden. */ void GLCD_SETCURSOR_SPALTE(unsigned char spalte) hlp_spalten_zaehler = spalte; if (spalte < 61) GLCD_COMMAND(spalte); } else GLCD_COMMAND(spalte - 61); } } Datei GLCD FONT5X7.C /* Unterprogramme zur Ansteuerung des Grafik-LCD (mit SED1520-Controller) in C (CC5X) */ /* (Font 5x7) */ /* Entwickler: Buchgeher Stefan */ /* Entwicklungsbeginn der Software: 5. Maerz 2006 */ /* Funktionsfaehig seit: 2. April 2006 */ /* Letzte Bearbeitung: 8. September 2006 */ /****************** Projekt-Header einbinden ********************************************/ #include "PROJEKT.H" /****************** Unterprogramme zur Grafik-LCD-Ansteuerung ***************************/ /* GLCD_ZEICHEN_5x7 */ /* Aufgabe: */ /* Ein Zeichen (Character im Format 5x7) am Grafik-LC-Display ausgeben */ /* Uebergabeparameter: */ /* zeichen (im ASCII-Format) */ /* Rueckgabeparameter: */ /* keiner */ /* Vorgehensweise: */ /* Nacheinander die Spalten eines Zeichens an das Grafik-LC-Display mit dem Unter- */ /* programm GLCD_DATA_ZEICHEN uebergeben. Die Daten fuer die Spalten sind in */ /* Tabellen abgelegt, wobei fuer jede Spalte des Zeichens eine eigene Tabelle vor- */ /* handen ist. Diese Tabellen muessen an anderer Stelle hinzugefuegt werden! Die */ /* letzte Spalte muss eine 0 enthalten, also eine "Leerspalte". */ void GLCD_ZEICHEN_5x7(unsigned char zeichen) // 1. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz5x7_sp1[zeichen]); // 2. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz5x7_sp2[zeichen]); // 3. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz5x7_sp3[zeichen]); // 4. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz5x7_sp4[zeichen]); // 5. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz5x7_sp5[zeichen]);

56 KAPITEL 6. DEMONSTRATIONSBEISPIELE 55 } // 6. Spalte des Zeichens GLCD_DATA_ZEICHEN(0); Datei GLCD FONT8X14.C /* Unterprogramme zur Ansteuerung des Grafik-LCD (mit SED1520-Controller) in C (CC5X) */ /* (Font 8x14) */ /* Entwickler: Buchgeher Stefan */ /* Entwicklungsbeginn der Software: 8. April 2006 */ /* Funktionsfaehig seit: 8. April 2006 */ /* Letzte Bearbeitung: 8. September 2006 */ /****************** Projekt-Header einbinden ********************************************/ #include "PROJEKT.H" /****************** Unterprogramme zur Grafik-LCD-Ansteuerung ***************************/ /* GLCD_ZEICHEN_8x14 */ /* Aufgabe: */ /* Ein Zeichen (Charakter im Format 8x14) am Grafik-LC-Display ausgeben. */ /* Uebergabeparameter: */ /* zeichen */ /* Rueckgabeparameter: */ /* keiner */ /* Vorgehensweise: */ /* + Die externen Hilfsregister (hlp_zeilen_zaehler und hlp_spalten_zaehler) sichern, */ /* da sie hier benoetigt, aber gleichzeitig hier auch veraendert werden. */ /* + Nacheinander die Spalten fuer die erste Zeile des auszugebenden Zeichens an das */ /* Grafik-LC-Display mit dem Unterprogramm GLCD_DATA_ZEICHEN uebergeben. Die Daten */ /* fuer die Spalten sind in Tabellen abgelegt, wobei fuer jede Spalte des Zeichens */ /* eine eigene Tabelle vorhanden ist. Diese Tabellen muessen an anderer Stelle */ /* hinzugefuegt werden! Die letzte Spalte muss eine 0 enthalten, also eine "Leer- */ /* spalte". */ /* + Den Cursor an die naechste Zeile (tmp_zeile + 1) und an die erste Spalte des */ /* Zeichens (tmp_spalte) setzen. */ /* + In gleicher Weise wie vorher die Spalten fuer die zweite Zeile des auszugebenden */ /* Zeichens an das Grafik-LC-Display mit dem Unterprogramm GLCD_DATA_ZEICHEN */ /* uebergeben. */ /* + Den Cursor an die erste Zeile des Zeichens (tmp_zeile) setzen. */ void GLCD_ZEICHEN_8x14(unsigned char zeichen) char tmp_zeile = hlp_zeilen_zaehler; char tmp_spalte = hlp_spalten_zaehler; // 1.Zeile // 1. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz8x14_z1sp1[zeichen]); // 2. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz8x14_z1sp2[zeichen]); // 3. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz8x14_z1sp3[zeichen]); // 4. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz8x14_z1sp4[zeichen]); // 5. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz8x14_z1sp5[zeichen]); // 6. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz8x14_z1sp6[zeichen]); // 7. Spalte des Zeichens

57 KAPITEL 6. DEMONSTRATIONSBEISPIELE 56 GLCD_DATA_ZEICHEN(TabZeichensatz8x14_z1sp7[zeichen]); // 8. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz8x14_z1sp8[zeichen]); // 9. Spalte des Zeichens GLCD_DATA_ZEICHEN(0); // 2. Zeile und 1.Spalte des Zeichen GLCD_SETCURSOR_ZEILE(tmp_zeile + 1); GLCD_SETCURSOR_SPALTE(tmp_spalte); // 1. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz8x14_z2sp1[zeichen]); // 2. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz8x14_z2sp2[zeichen]); // 3. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz8x14_z2sp3[zeichen]); // 4. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz8x14_z2sp4[zeichen]); // 5. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz8x14_z2sp5[zeichen]); // 6. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz8x14_z2sp6[zeichen]); // 7. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz8x14_z2sp7[zeichen]); // 8. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz8x14_z2sp8[zeichen]); // 9. Spalte des Zeichens GLCD_DATA_ZEICHEN(0); } // 1. Zeile und Spalte vom Ende des Zeichen GLCD_SETCURSOR_ZEILE(tmp_zeile); Datei GLCD FONT10X22.C /* Unterprogramme zur Ansteuerung des Grafik-LCD (mit SED1520-Controller) in C (CC5X) */ /* (Font 10x22) */ /* Entwickler: Buchgeher Stefan */ /* Entwicklungsbeginn der Software: 5. Maerz 2006 */ /* Funktionsfaehig seit: 2. April 2006 */ /* Letzte Bearbeitung: 8. September 2006 */ /****************** Projekt-Header einbinden ********************************************/ #include "PROJEKT.H" /****************** Unterprogramme zur Grafik-LCD-Ansteuerung ***************************/ /* GLCD_ZEICHEN_10x22 */ /* Aufgabe: */ /* Ein Zeichen (Charakter im Format 10x22) am Grafik-LC-Display ausgeben. */ /* Uebergabeparameter: */ /* zeichen */ /* Rueckgabeparameter: */ /* keiner */ /* Vorgehensweise: */ /* + Die externen Hilfsregister (hlp_zeilen_zaehler und hlp_spalten_zaehler) sichern, */ /* da sie hier benoetigt, aber gleichzeitig hier auch veraendert werden. */ /* + Nacheinander die Spalten fuer die erste Zeile des auszugebenden Zeichens an das */ /* Grafik-LC-Display mit dem Unterprogramm GLCD_DATA_ZEICHEN uebergeben. Die Daten */

58 KAPITEL 6. DEMONSTRATIONSBEISPIELE 57 /* fuer die Spalten sind in Tabellen abgelegt, wobei fuer jede Spalte des Zeichens */ /* eine eigene Tabelle vorhanden ist. Diese Tabellen muessen an anderer Stelle */ /* hinzugefuegt werden! Die letzten beiden Spalten muessen eine 0 enthalten, also */ /* eine "Leerspalte". */ /* + Den Cursor an die naechste Zeile (tmp_zeile + 1) und an die erste Spalte des */ /* Zeichens (tmp_spalte) setzen. */ /* + In gleicher Weise wie vorher die Spalten fuer die zweite Zeile des auszugebenden */ /* Zeichens an das Grafik-LC-Display mit dem Unterprogramm GLCD_DATA_ZEICHEN */ /* uerbergeben. */ /* + Den Cursor an die naechste Zeile (tmp_zeile + 2) und an die erste Spalte des */ /* Zeichens (tmp_spalte) setzen. */ /* + In gleicher Weise wie vorher die Spalten fuer die dritte Zeile des auszugebenden */ /* Zeichens an das Grafik-LC-Display mit dem Unterprogramm GLCD_DATA_ZEICHEN */ /* uerbergeben. */ /* + Den Cursor an die erste Zeile des Zeichens (tmp_zeile) setzen. */ void GLCD_ZEICHEN_10x22(unsigned char zeichen) char tmp_zeile = hlp_zeilen_zaehler; char tmp_spalte = hlp_spalten_zaehler; // 1.Zeile // 1. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz10x22_z1sp1[zeichen]); // 2. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz10x22_z1sp2[zeichen]); // 3. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz10x22_z1sp3[zeichen]); // 4. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz10x22_z1sp4[zeichen]); // 5. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz10x22_z1sp5[zeichen]); // 6. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz10x22_z1sp6[zeichen]); // 7. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz10x22_z1sp7[zeichen]); // 8. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz10x22_z1sp8[zeichen]); // 9. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz10x22_z1sp9[zeichen]); // 10. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz10x22_z1sp10[zeichen]); // 11. Spalte des Zeichens GLCD_DATA_ZEICHEN(0); // 12. Spalte des Zeichens GLCD_DATA_ZEICHEN(0); // 2. Zeile und 1.Spalte des Zeichen GLCD_SETCURSOR_ZEILE(tmp_zeile + 1); GLCD_SETCURSOR_SPALTE(tmp_spalte); // 1. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz10x22_z2sp1[zeichen]); // 2. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz10x22_z2sp2[zeichen]); // 3. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz10x22_z2sp3[zeichen]); // 4. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz10x22_z2sp4[zeichen]); // 5. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz10x22_z2sp5[zeichen]); // 6. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz10x22_z2sp6[zeichen]); // 7. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz10x22_z2sp7[zeichen]); // 8. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz10x22_z2sp8[zeichen]); // 9. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz10x22_z2sp9[zeichen]);

59 KAPITEL 6. DEMONSTRATIONSBEISPIELE 58 // 10. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz10x22_z2sp10[zeichen]); // 11. Spalte des Zeichens GLCD_DATA_ZEICHEN(0); // 12. Spalte des Zeichens GLCD_DATA_ZEICHEN(0); // 3. Zeile und 1.Spalte des Zeichen GLCD_SETCURSOR_ZEILE(tmp_zeile + 2); GLCD_SETCURSOR_SPALTE(tmp_spalte); // 1. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz10x22_z3sp1[zeichen]); // 2. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz10x22_z3sp2[zeichen]); // 3. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz10x22_z3sp3[zeichen]); // 4. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz10x22_z3sp4[zeichen]); // 5. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz10x22_z3sp5[zeichen]); // 6. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz10x22_z3sp6[zeichen]); // 7. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz10x22_z3sp7[zeichen]); // 8. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz10x22_z3sp8[zeichen]); // 9. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz10x22_z3sp9[zeichen]); // 10. Spalte des Zeichens GLCD_DATA_ZEICHEN(TabZeichensatz10x22_z3sp10[zeichen]); // 11. Spalte des Zeichens GLCD_DATA_ZEICHEN(0); // 12. Spalte des Zeichens GLCD_DATA_ZEICHEN(0); } // 1. Zeile und Spalte vom Ende des Zeichen GLCD_SETCURSOR_ZEILE(tmp_zeile); Datei PROJEKT.H /* Header zum Demoprojekt 2 zur Ansteuerung des Grafik-LCD (mit SED1520-Controller) */ /* in C (CC5X) */ /* Entwickler: Buchgeher Stefan */ /* Entwicklungsbeginn der Software: 5. Maerz 2006 */ /* Funktionsfaehig seit: 2. April 2006 */ /* Letzte Bearbeitung: 8. April 2006 */ #ifndef #define PROJEKT PROJEKT /****************** Pragma-Anweisungen **************************************************/ #pragma chip PIC16F877 // PICmicro Device //#pragma library 1 //.. library functions that are deleted if unused /****************** Externe Strukturen *************************************************/ /* keine externen Strukturen verwendet */ /****************** Externe Register ***************************************************/ extern bank0 unsigned char hlp_zeilen_zaehler;

60 KAPITEL 6. DEMONSTRATIONSBEISPIELE 59 extern bank0 unsigned char hlp_spalten_zaehler; /****************** Bits in den externen Registern **************************************/ /* keine externen Register verwendet */ /****************** Konstanten **********************************************************/ /* keine Konstanten */ /****************** Zeichensaetzen einbinden *******************************************/ #include "zeichensatz5x7_b.inc" // Zeichensatz (5x7) einbinden #include "zeichensatz8x14_a.inc" // Zeichensatz (8x14) einbinden #include "zeichensatz10x22_b.inc" // Zeichensatz (10x22) einbinden /****************** Portbelegung ********************************************************/ /* Port B */ #pragma char PORTB #pragma char TRISB #pragma bit GLCD_WR #pragma bit GLCD_RD #pragma bit GLCD_CS1 #pragma bit GLCD_CS2 #pragma bit GLCD_A0 /* Port D */ #pragma char GLCD_DATA #pragma char TRISD /****************** Funktionsprototypen *************************************************/ /* Unterprogramme fuer Grafik-LC-Display */ extern page0 void GLCD_INIT(void); extern page0 void GLCD_COMMAND(bank0 unsigned char command); extern page0 void GLCD_DATA1(bank0 unsigned char data); extern page0 void GLCD_DATA2(bank0 unsigned char data); extern page0 void GLCD_DATA_ZEICHEN(bank0 unsigned char data); extern page0 void GLCD_CLEAR(void); extern page0 void GLCD_SETCURSOR_ZEILE(bank0 unsigned char zeile); extern page0 void GLCD_SETCURSOR_SPALTE(bank0 unsigned char spalte); extern page0 void GLCD_ZEICHEN_5x7(bank0 unsigned char zeichen); extern page0 void GLCD_ZEICHEN_8x14(bank0 unsigned char zeichen); extern page0 void GLCD_ZEICHEN_10x22(bank0 unsigned char zeichen); #endif Datei glcd2.bat C:\Programme\bknd\CC5X\CC5X.EXE GLCD_BASIS_ROUTINEN.C -IC:\Programme\bknd\CC5X\ -u -r -a -r2 C:\Programme\bknd\CC5X\CC5X.EXE GLCD_FONT5X7.C -IC:\Programme\bknd\CC5X\ -u -r -a -r2 C:\Programme\bknd\CC5X\CC5X.EXE GLCD_FONT8X14.C -IC:\Programme\bknd\CC5X\ -u -r -a -r2 C:\Programme\bknd\CC5X\CC5X.EXE GLCD_FONT10X22.c -IC:\Programme\bknd\CC5X\ -u -r -a -r2 C:\Programme\bknd\CC5X\CC5X.EXE demo2.c -IC:\Programme\bknd\CC5X\ -u -r -a -r Anmerkungen zur C-Software Die Software besteht auch hier im Wesentlichen aus einem sehr kurzen Hauptprogramm (main in der Datei demo2.c), die im Abschnitt 5 beschriebenen Unterprogramme (in den Dateien GLCD BASIS ROUTINE.C, GLCD FONT5X7.C, GLCD FONT8X14.C und

61 KAPITEL 6. DEMONSTRATIONSBEISPIELE 60 GLCD FONT10X22.C) einem weiteren Unterprogramm namens AUSGABE (in der Datei demo2.c) und je einem Unterprogramm zur Umwandlung in BCD-Darstellung der 8- Bit-Zahlenwerte für jede Schriftgröße (auch in der Datei demo2.c). Das Hauptprogramm besteht nach der Initialisierung des Controllers (Unterprogramm INIT) und des Grafik-LC-Displays (Unterprogramm GLCD INIT) nur mehr aus dem Unterprogramm zur Ausgabe der Daten gemäß Abbildung 6.6 am Grafik-LC-Display (Unterprogramm AUSGABE). Das Unterprogramm INIT dient zur Initialisierung des Controllers. In diesem Beispiel werden nur die Ports B und D als Ausgang konfiguriert und die Datenregister für Uhrzeit und Datum mit Demonstrationsinhalten geladen. Das Unterprogramm GLCD INIT initialisiert das LC-Display (siehe Abschnitt 5.3.1). Nach der Initialisierung des Grafik-LC-Displays (Unterprogramm GLCD INIT) ist das Grafik-LC-Display bereit Zeichen oder Werte anzuzeigen. Die Ausgabe der anzuzeigenden Zeichen übernimmt hier das Unterprogramm AUSGABE. Zuerst muss das Display mit dem Unterprogramm GLCD CLEAR gelöscht werden. Anschließend den Cursor mit den beiden Unterprogrammen GLCD SETCURSOR ZEILE und GLCD SETCURSOR SPALTE an die gewünschte Position am Grafik-LC-Display (Zeile und Spalte) setzen. Nun können beliebige Daten (z.b. mit dem Unterprogramm AUSGABEBCD 5x7) oder Zeichen und Symbole (z.b. mit dem Unterprogramm GLCD ZEICHEN 5x7) an das Grafik-LC-Display übergeben werden.

62 Anhang A Layout (Demonstrationsbeispiele) 61

63 Anhang B Stückliste Nr. Bezeichnung St. Lieferant Bestell-Nr. E-Preis Bemerkungen R2 Widerstand 270 Ohm 1 Conrad ,14 R5 Widerstand 1k 1 Conrad ,14 R1 Widerstand 10k 1 Conrad ,14 R3 Widerstand 36k 1 Conrad ,14 R4 Trimmer 10 k 1 Conrad ,40 C3, C4 Keramikkondensator 22pF 2 Conrad ,14 C5, C6 Keramikkondensator 10nF 2 Conrad ,23 C2, C8, C9 Keramikkondensator 100nF 3 Conrad ,25 C10 Tantal 1µF/35V 1 Conrad ,62 C1, C7 Mini-Elko 10µF/25V 2 Conrad ,14 D1, D2 Diode 1N Conrad ,30 D3 Diode 1N Conrad ,08 D4 Low-current-LED 3mm grün 1 Conrad ,21 IC1 PIC16F877 1 Farnell ,50 IC2 Timer Conrad ,78 IC3 Spannungsregler Conrad ,54 X1 Quarz 4 MHz 1 Conrad ,15 LCD1 Grafik-LC-Display 122x32 Pixel 1 Conrad ,99 IC-Präzisions-Sockel 8polig 1 Conrad ,35 für IC2 IC-Präzisions-Sockel 40polig 1 Conrad ,15 für IC1 S1 Taster 1 Conrad ,43 JP1 Stiftleiste 2polig 1 Conrad ,79 Preis für 36polig Buchsenleiste 16polig 1 Conrad ,15 Preis für 32polig Kontaktstreifen 1 Conrad ,57 Preis für 32polig Schraubklemme 2polig 1 Conrad ,42 Platine-Basismaterial 1 Conrad ,71 Preis für Euroformat Distanz M3x10 4 optional Mutter M3 4 optional Distanz M2,5x8 4 optional Zylinderkopfschraube M2,5x6 4 optional Zahnscheibe M3 4 optional 62

64 Anhang C Zeichensätze Zeichensatz 1a (5x7): 63

65 ANHANG C. ZEICHENSÄTZE 64 Includedatei in C (für CC5X) zeichensatz5x7 a.inc /* zeichensatz5x7_a.inc */ /* ASCII-Zeichensatz fuer 5x7 grosse Zeichen */ /* Entwickler: Buchgeher Stefan */ /* Entwicklungsbeginn der Software: 5. Maerz 2006 */ /* Funktionsfaehig seit: 5. Maerz 2006 */ /* Letzte Bearbeitung: 12. Juli 2006 */ const char TabZeichensatz5x7_sp1[128] = 62,0,66,33,24,39,60,1,54,6,126,127,62,127,127,127, 121,32,56,60,126,0,0,0,72,21,20,0,124,72,4,16, 0,0,0,20,36,35,54,0,0,0,20,8,0,8,0,32, 62,0,66,33,24,39,60,1,54,6,0,0,8,20,65,2, 50,126,127,62,127,127,127,62,127,0,32,127,127,127,127,62, 127,62,127,38,1,63,7,127,99,7,97,0,2,0,4,64, 0,32,127,56,56,56,8,12,127,0,32,0,0,120,124,56, 124,8,124,72,2,60,28,60,68,12,68,8,0,0,8,8 const char TabZeichensatz5x7_sp2[128] = 81,66,97,65,20,69,74,1,73,73,17,73,65,65,73,9, 36,85,69,65,1,0,0,0,126,22,62,7,16,72,2,32, 0,0,7,127,42,19,73,5,28,65,8,8,80,8,96,16, 81,66,97,65,20,69,74,1,73,73,54,86,20,20,34,1, 73,17,73,65,65,73,9,65,8,65,64,8,64,2,4,65, 9,65,9,73,1,64,24,32,20,8,81,127,4,65,2,64, 1,84,72,68,68,84,126,82,8,72,64,127,65,4,8,68, 20,20,8,84,63,64,32,64,40,80,100,54,0,65,8,28 const char TabZeichensatz5x7_sp3[128] = 73,127,81,69,18,69,73,121,73,73,17,73,65,65,73,9, 34,84,68,64,37,0,0,0,73,124,85,5,32,126,127,127, 0,95,0,20,127,8,85,3,34,34,62,62,48,8,96,8, 73,127,81,69,18,69,73,121,73,73,54,54,34,20,20,81, 121,17,73,65,65,73,9,73,8,127,65,20,64,12,8,65, 9,81,25,73,127,64,96,24,8,112,73,65,8,65,1,64, 2,84,68,68,68,84,9,82,4,122,68,16,127,24,4,68, 20,20,4,84,66,64,64,48,16,80,84,65,127,65,42,42 const char TabZeichensatz5x7_sp4[128] = 69,64,73,75,127,69,73,5,73,41,17,73,65,34,73,9, 36,85,69,65,37,0,0,0,65,22,85,7,32,72,2,32, 0,0,7,127,42,100,34,0,65,28,8,8,0,8,0,4, 69,64,73,75,127,69,73,5,73,41,0,0,65,20,8,9, 65,17,73,65,34,73,9,73,8,65,63,34,64,2,16,65, 9,33,41,73,1,64,24,32,20,8,69,65,16,127,2,64, 4,84,68,68,72,84,1,82,4,64,61,40,64,4,4,68, 20,20,4,84,64,32,32,64,40,80,76,65,0,54,28,8 const char TabZeichensatz5x7_sp5[128] = 62,0,70,49,16,57,48,3,54,30,126,54,34,28,65,1, 121,120,56,60,26,0,0,0,66,21,85,0,28,72,4,16, 0,0,0,20,18,98,80,0,0,0,20,8,0,8,0,2, 62,0,70,49,16,57,48,3,54,30,0,0,0,20,0,6, 62,126,54,34,28,65,1,58,127,0,1,65,64,127,127,62, 6,94,70,50,1,63,7,127,99,7,67,0,32,0,4,64, 0,120,56,40,127,24,2,62,120,0,0,68,0,120,120,56, 8,124,8,32,32,124,28,60,68,60,68,0,0,8,8,8

66 ANHANG C. ZEICHENSÄTZE 65 Zeichensatz 1b (5x7):

67 ANHANG C. ZEICHENSÄTZE 66 Includedatei in C (für CC5X) zeichensatz5x7 b.inc /* zeichensatz5x7_b.inc */ /* ASCII-Zeichensatz fuer 5x7 grosse Zeichen */ /* Entwickler: Buchgeher Stefan */ /* Entwicklungsbeginn der Software: 5. Maerz 2006 */ /* Funktionsfaehig seit: 5. Maerz 2006 */ /* Letzte Bearbeitung: 12. Juli 2006 */ const char TabZeichensatz5x7_sp1[128] = 62,0,66,33,24,39,60,1,54,6,126,127,62,127,127,127, 121,120,56,60,126,0,0,0,72,21,20,0,124,72,4,16, 0,0,0,20,36,35,54,0,0,0,20,8,0,8,0,32, 62,0,66,33,24,39,60,1,54,6,0,0,8,20,65,2, 50,126,127,62,127,127,127,62,127,0,32,127,127,127,127,62, 127,62,127,38,1,63,7,127,99,7,97,0,2,0,4,64, 0,120,124,56,124,124,124,56,124,0,32,124,124,124,124,56, 124,56,124,72,4,60,28,60,68,4,68,8,0,0,8,8 const char TabZeichensatz5x7_sp2[128] = 81,66,97,65,20,69,74,1,73,73,17,73,65,65,73,9, 36,37,69,65,1,0,0,0,126,22,62,7,16,72,2,32, 0,0,7,127,42,19,73,5,28,65,8,8,80,8,96,16, 81,66,97,65,20,69,74,1,73,73,54,86,20,20,34,1, 73,17,73,65,65,73,9,65,8,65,64,8,64,2,4,65, 9,65,9,73,1,64,24,32,20,8,81,127,4,65,2,64, 1,36,84,68,68,84,20,68,16,68,68,16,64,8,8,68, 20,68,20,84,4,64,32,64,40,8,100,54,0,65,8,28 const char TabZeichensatz5x7_sp3[128] = 73,127,81,69,18,69,73,121,73,73,17,73,65,65,73,9, 34,36,68,64,37,0,0,0,73,124,85,5,32,126,127,127, 0,95,0,20,127,8,85,3,34,34,62,62,48,8,96,8, 73,127,81,69,18,69,73,121,73,73,54,54,34,20,20,81, 121,17,73,65,65,73,9,73,8,127,65,20,64,12,8,65, 9,81,25,73,127,64,96,24,8,112,73,65,8,65,1,64, 2,36,84,68,68,84,20,68,16,124,60,40,64,16,16,68, 20,84,52,84,124,64,64,32,16,112,84,65,127,65,42,42 const char TabZeichensatz5x7_sp4[128] = 69,64,73,75,127,69,73,5,73,41,17,73,65,34,73,9, 36,37,69,65,37,0,0,0,65,22,85,7,32,72,2,32, 0,0,7,127,42,100,34,0,65,28,8,8,0,8,0,4, 69,64,73,75,127,69,73,5,73,41,0,0,65,20,8,9, 65,17,73,65,34,73,9,73,8,65,63,34,64,2,16,65, 9,33,41,73,1,64,24,32,20,8,69,65,16,127,2,64, 4,36,84,68,68,84,20,84,16,68,4,68,64,8,32,68, 20,36,84,84,4,64,32,64,40,8,76,65,0,54,28,8 const char TabZeichensatz5x7_sp5[128] = 62,0,70,49,16,57,48,3,54,30,126,54,34,28,65,1, 121,120,56,60,26,0,0,0,66,21,85,0,28,72,4,16, 0,0,0,20,18,98,80,0,0,0,20,8,0,8,0,2, 62,0,70,49,16,57,48,3,54,30,0,0,0,20,0,6, 62,126,54,34,28,65,1,58,127,0,1,65,64,127,127,62, 6,94,70,50,1,63,7,127,99,7,67,0,32,0,4,64, 0,120,40,40,56,68,4,48,124,0,0,0,64,124,124,56, 8,88,8,32,4,60,28,60,68,4,68,0,0,8,8,8

68 ANHANG C. ZEICHENSÄTZE 67 Zeichensatz 3a (8x14):

69 ANHANG C. ZEICHENSÄTZE 68 Includedatei in C (für CC5X) zeichensatz8x14 a.inc /* zeichensatz8x14_a.inc */ /* Zeichensatz fuer 8x14 grosse Zeichen (Ziffern 0 bis 9) */ /* Entwickler: Buchgeher Stefan */ /* Entwicklungsbeginn der Software: 8. April 2006 */ /* Funktionsfaehig seit: 8. April 2006 */ /* Letzte Bearbeitung: 12. Juli 2006 */ const char TabZeichensatz8x14_z1sp1[10] = 248,0,24,8,0,254,248,14,56,248 const char TabZeichensatz8x14_z1sp2[10] = 252,48,28,12,192,254,252,14,124,252 const char TabZeichensatz8x14_z1sp3[10] = 14,56,14,14,240,230,206,14,238,142 const char TabZeichensatz8x14_z1sp4[10] = 6,28,6,6,60,102,198,6,198,6 const char TabZeichensatz8x14_z1sp5[10] = 6,254,6,134,14,102,198,198,198,6 const char TabZeichensatz8x14_z1sp6[10] = 14,254,142,206,254,230,206,254,238,142 const char TabZeichensatz8x14_z1sp7[10] = 252,0,252,252,254,198,140,254,124,252 const char TabZeichensatz8x14_z1sp8[10] = 248,0,248,120,0,134,8,62,56,248 const char TabZeichensatz8x14_z2sp1[10] = 31,0,112,16,15,16,31,0,30,16 const char TabZeichensatz8x14_z2sp2[10] = 63,96,120,48,15,48,63,0,63,49 const char TabZeichensatz8x14_z2sp3[10] = 112,96,124,112,13,112,113,124,115,115 const char TabZeichensatz8x14_z2sp4[10] = 96,96,110,96,12,96,96,127,97,99 const char TabZeichensatz8x14_z2sp5[10] = 96,127,103,97,12,96,96,127,97,99 const char TabZeichensatz8x14_z2sp6[10] = 112,127,99,115,127,112,113,3,115,115 const char TabZeichensatz8x14_z2sp7[10] = 63,96,97,63,127,63,63,0,63,63 const char TabZeichensatz8x14_z2sp8[10] = 31,0,96,30,12,31,31,0,30,31

70 ANHANG C. ZEICHENSÄTZE 69 Zeichensatz 4a (10x22):

71 ANHANG C. ZEICHENSÄTZE 70 Includedatei in C (für CC5X) zeichensatz10x22 a.inc /* zeichensatz10x22_a.inc */ /* Zeichensatz fuer 10x22 grosse Zeichen (Ziffern 0 bis 9) */ /* Entwickler: Buchgeher Stefan */ /* Entwicklungsbeginn der Software: 13. April 2006 */ /* Funktionsfaehig seit: 13. April 2006 */ /* Letzte Bearbeitung: 12. Juli 2006 */ const char TabZeichensatz10x22_z1sp1[10] = 248,112,120,120,0,254,248,62,248,248 const char TabZeichensatz10x22_z1sp2[10] = 252,120,124,124,0,254,252,62,252,252 const char TabZeichensatz10x22_z1sp3[10] = 254,124,126,126,128,254,254,62,254,254 const char TabZeichensatz10x22_z1sp4[10] = 254,254,126,126,224,254,254,62,254,254 const char TabZeichensatz10x22_z1sp5[10] = 30,254,30,30,248,30,30,30,30,30 const char TabZeichensatz10x22_z1sp6[10] = 30,254,30,30,254,30,30,30,30,30 const char TabZeichensatz10x22_z1sp7[10] = 254,254,254,254,254,30,126,254,254,254 const char TabZeichensatz10x22_z1sp8[10] = 254,0,254,254,254,30,126,254,254,254 const char TabZeichensatz10x22_z1sp9[10] = 252,0,252,252,254,30,124,254,252,252 const char TabZeichensatz10x22_z1sp10[10] = 248,0,248,248,254,30,120,254,248,248 const char TabZeichensatz10x22_z2sp1[10] = 255,0,0,0,248,31,255,0,231,31 const char TabZeichensatz10x22_z2sp2[10] = 255,0,0,0,254,31,255,0,255,63 const char TabZeichensatz10x22_z2sp3[10] = 255,0,128,0,255,31,255,0,255,127 const char TabZeichensatz10x22_z2sp4[10] = 255,255,224,60,255,31,255,192,255,127 const char TabZeichensatz10x22_z2sp5[10] = 0,255,248,60,231,30,30,248,60,120 const char TabZeichensatz10x22_z2sp6[10] = 0,255,254,60,225,30,30,255,60,120 const char TabZeichensatz10x22_z2sp7[10] = 255,255,127,255,255,254,254,255,255,255 const char TabZeichensatz10x22_z2sp8[10] = 255,0,31,255,255,254,254,63,255,255 const char TabZeichensatz10x22_z2sp9[10] = 255,0,7,255,255,252,252,7,255,255 const char TabZeichensatz10x22_z2sp10[10] = 255,0,1,231,255,248,248,0,231,255 const char TabZeichensatz10x22_z3sp1[10] = 31,120,120,30,1,120,31,0,31,30 const char TabZeichensatz10x22_z3sp2[10] = 63,120,126,62,1,120,63,112,63,62 const char TabZeichensatz10x22_z3sp3[10] = 127,120,127,126,1,120,127,126,127,126 const char TabZeichensatz10x22_z3sp4[10] = 127,127,127,126,1,120,127,127,127,126 const char TabZeichensatz10x22_z3sp5[10] = 120,127,127,120,1,120,120,127,120,120 const char TabZeichensatz10x22_z3sp6[10] = 120,127,121,120,1,120,120,15,120,120 const char TabZeichensatz10x22_z3sp7[10] = 127,127,120,127,127,127,127,1,127,127 const char TabZeichensatz10x22_z3sp8[10] = 127,120,120,127,127,127,127,0,127,127 const char TabZeichensatz10x22_z3sp9[10] = 63,120,120,63,127,63,63,0,63,63 const char TabZeichensatz10x22_z3sp10[10] = 31,120,120,31,127,31,31,0,31,31

72 ANHANG C. ZEICHENSÄTZE 71 Zeichensatz 4a (hex) (10x22):

73 ANHANG C. ZEICHENSÄTZE 72 Includedatei in C (für CC5X) zeichensatz10x22 a hex.inc /* zeichensatz10x22_a_hex.inc */ /* Zeichensatz fuer 10x22 grosse Zeichen (Ziffern 0 bis 9 und A bis F) */ /* Entwickler: Buchgeher Stefan */ /* Entwicklungsbeginn der Software: 13. April 2006 */ /* Funktionsfaehig seit: 13. April 2006 */ /* Letzte Bearbeitung: 16. September 2006 */ // 1. Zeile const char TabZeichensatz10x22_z1sp1[16] = 248,112,120,120,0,254,248,62,248,248,248,254,248,254,254,254 const char TabZeichensatz10x22_z1sp2[16] = 252,120,124,124,0,254,252,62,252,252,252,254,252,254,254,254 const char TabZeichensatz10x22_z1sp3[16] = 254,124,126,126,128,254,254,62,254,254,254,254,254,254,254,254 const char TabZeichensatz10x22_z1sp4[16] = 254,254,126,126,224,254,254,62,254,254,254,254,254,254,254,254 const char TabZeichensatz10x22_z1sp5[16] = 30,254,30,30,248,30,30,30,30,30,30,30,30,30,30,30 const char TabZeichensatz10x22_z1sp6[16] = 30,254,30,30,254,30,30,30,30,30,30,30,30,30,30,30 const char TabZeichensatz10x22_z1sp7[16] = 254,254,254,254,254,30,126,254,254,254,254,254,126,254,30,30 const char TabZeichensatz10x22_z1sp8[16] = 254,0,254,254,254,30,126,254,254,254,254,254,126,254,30,30 const char TabZeichensatz10x22_z1sp9[16] = 252,0,252,252,254,30,124,254,252,252,252,252,124,252,30,30 const char TabZeichensatz10x22_z1sp10[16] = 248,0,248,248,254,30,120,254,248,248,248,248,120,248,30,30 // 2. Zeile const char TabZeichensatz10x22_z2sp1[16] = 255,0,0,0,248,31,255,0,231,31,255,255,255,255,255,255 const char TabZeichensatz10x22_z2sp2[16] = 255,0,0,0,254,31,255,0,255,63,255,255,255,255,255,255 const char TabZeichensatz10x22_z2sp3[16] = 255,0,128,0,255,31,255,0,255,127,255,255,255,255,255,255 const char TabZeichensatz10x22_z2sp4[16] = 255,255,224,60,255,31,255,192,255,127,255,255,255,255,255,255

74 ANHANG C. ZEICHENSÄTZE 73 const char TabZeichensatz10x22_z2sp5[16] = 0,255,248,60,231,30,30,248,60,120,240,60,0,0,60,60 const char TabZeichensatz10x22_z2sp6[16] = 0,255,254,60,225,30,30,255,60,120,240,60,0,0,60,60 const char TabZeichensatz10x22_z2sp7[16] = 255,255,127,255,255,254,254,255,255,255,255,255,0,255,60,60 const char TabZeichensatz10x22_z2sp8[16] = 255,0,31,255,255,254,254,63,255,255,255,255,0,255,60,60 const char TabZeichensatz10x22_z2sp9[16] = 255,0,7,255,255,252,252,7,255,255,255,255,0,255,0,0 const char TabZeichensatz10x22_z2sp10[16] = 255,0,1,231,255,248,248,0,231,255,255,231,0,255,0,0 // 3. Zeile const char TabZeichensatz10x22_z3sp1[16] = 31,120,120,30,1,120,31,0,31,30,127,127,31,127,127,127 const char TabZeichensatz10x22_z3sp2[16] = 63,120,126,62,1,120,63,112,63,62,127,127,63,127,127,127 const char TabZeichensatz10x22_z3sp3[16] = 127,120,127,126,1,120,127,126,127,126,127,127,127,127,127,127 const char TabZeichensatz10x22_z3sp4[16] = 127,127,127,126,1,120,127,127,127,126,127,127,127,127,127,127 const char TabZeichensatz10x22_z3sp5[16] = 120,127,127,120,1,120,120,127,120,120,0,120,120,120,120,0 const char TabZeichensatz10x22_z3sp6[16] = 120,127,121,120,1,120,120,15,120,120,0,120,120,120,120,0 const char TabZeichensatz10x22_z3sp7[16] = 127,127,120,127,127,127,127,1,127,127,127,127,126,127,120,0 const char TabZeichensatz10x22_z3sp8[16] = 127,120,120,127,127,127,127,0,127,127,127,127,126,127,120,0 const char TabZeichensatz10x22_z3sp9[16] = 63,120,120,63,127,63,63,0,63,63,127,63,62,63,120,0 const char TabZeichensatz10x22_z3sp10[16] = 31,120,120,31,127,31,31,0,31,31,127,31,30,31,120,0

75 ANHANG C. ZEICHENSÄTZE 74 Zeichensatz 4b (10x22):

76 ANHANG C. ZEICHENSÄTZE 75 Includedatei in C (für CC5X) zeichensatz10x22 b.inc /* zeichensatz10x22_b.inc */ /* Zeichensatz fuer 10x22 grosse Zeichen (Ziffern 0 bis 9) */ /* Entwickler: Buchgeher Stefan */ /* Entwicklungsbeginn der Software: 13. Maerz 2006 */ /* Funktionsfaehig seit: 13. Maerz 2006 */ /* Letzte Bearbeitung: 12. Juli 2006 */ const char TabZeichensatz10x22_z1sp1[10] = 248,112,120,120,0,254,248,62,248,248 const char TabZeichensatz10x22_z1sp2[10] = 4,72,68,68,0,2,4,34,4,4 const char TabZeichensatz10x22_z1sp3[10] = 2,68,66,66,128,2,2,34,2,2 const char TabZeichensatz10x22_z1sp4[10] = 226,194,98,98,96,242,226,50,226,226 const char TabZeichensatz10x22_z1sp5[10] = 18,2,18,18,24,18,18,18,18,18 const char TabZeichensatz10x22_z1sp6[10] = 18,2,18,18,134,18,18,18,18,18 const char TabZeichensatz10x22_z1sp7[10] = 226,254,226,226,226,18,98,242,226,226 const char TabZeichensatz10x22_z1sp8[10] = 2,0,2,2,2,18,66,2,2,2 const char TabZeichensatz10x22_z1sp9[10] = 4,0,4,4,2,18,68,2,4,4 const char TabZeichensatz10x22_z1sp10[10] = 248,0,248,248,254,30,120,254,248,248 const char TabZeichensatz10x22_z2sp1[10] = 255,0,0,0,248,31,255,0,231,31 const char TabZeichensatz10x22_z2sp2[10] = 0,0,0,0,6,16,0,0,24,32 const char TabZeichensatz10x22_z2sp3[10] = 0,0,128,0,1,16,0,0,0,64 const char TabZeichensatz10x22_z2sp4[10] = 255,255,96,60,56,19,243,192,195,71 const char TabZeichensatz10x22_z2sp5[10] = 0,0,24,36,38,18,18,56,36,72 const char TabZeichensatz10x22_z2sp6[10] = 0,0,134,36,33,18,18,7,36,72 const char TabZeichensatz10x22_z2sp7[10] = 255,255,97,195,63,226,226,192,195,207 const char TabZeichensatz10x22_z2sp8[10] = 0,0,24,0,0,2,2,56,0,0 const char TabZeichensatz10x22_z2sp9[10] = 0,0,6,24,0,4,4,7,24,0 const char TabZeichensatz10x22_z2sp10[10] = 255,0,1,231,255,248,248,0,231,255 const char TabZeichensatz10x22_z3sp1[10] = 31,120,120,30,1,120,31,0,31,30 const char TabZeichensatz10x22_z3sp2[10] = 32,72,70,34,1,72,32,112,32,34 const char TabZeichensatz10x22_z3sp3[10] = 64,72,65,66,1,72,64,78,64,66 const char TabZeichensatz10x22_z3sp4[10] = 71,79,64,70,1,72,71,65,71,70 const char TabZeichensatz10x22_z3sp5[10] = 72,64,78,72,1,72,72,112,72,72 const char TabZeichensatz10x22_z3sp6[10] = 72,64,73,72,1,72,72,14,72,72 const char TabZeichensatz10x22_z3sp7[10] = 71,79,72,71,127,71,71,1,71,71 const char TabZeichensatz10x22_z3sp8[10] = 64,72,72,64,64,64,64,0,64,64 const char TabZeichensatz10x22_z3sp9[10] = 32,72,72,32,64,32,32,0,32,32 const char TabZeichensatz10x22_z3sp10[10] = 31,120,120,31,127,31,31,0,31,31

77 ANHANG C. ZEICHENSÄTZE 76 Zeichensatz 4b (hex) (10x22):

78 ANHANG C. ZEICHENSÄTZE 77 Includedatei in C (für CC5X) zeichensatz10x22 a hex.inc /* zeichensatz10x22_b.inc */ /* Zeichensatz fuer 10x22 grosse Zeichen (Ziffern 0 bis 9 und A bis F) */ /* Entwickler: Buchgeher Stefan */ /* Entwicklungsbeginn der Software: 13. Maerz 2006 */ /* Funktionsfaehig seit: 13. Maerz 2006 */ /* Letzte Bearbeitung: 16. September 2006 */ // 1. Zeile const char TabZeichensatz10x22_z1sp1[16] = 248,112,120,120,0,254,248,62,248,248,248,254,248,254,254,254 const char TabZeichensatz10x22_z1sp2[16] = 4,72,68,68,0,2,4,34,4,4,4,2,4,2,2,2 const char TabZeichensatz10x22_z1sp3[16] = 2,68,66,66,128,2,2,34,2,2,2,2,2,2,2,2 const char TabZeichensatz10x22_z1sp4[16] = 226,194,98,98,96,242,226,50,226,226,226,242,226,242,242,242 const char TabZeichensatz10x22_z1sp5[16] = 18,2,18,18,24,18,18,18,18,18,18,18,18,18,18,18 const char TabZeichensatz10x22_z1sp6[16] = 18,2,18,18,134,18,18,18,18,18,18,18,18,18,18,18 const char TabZeichensatz10x22_z1sp7[16] = 226,254,226,226,226,18,98,242,226,226,226,226,98,226,18,18 const char TabZeichensatz10x22_z1sp8[16] = 2,0,2,2,2,18,66,2,2,2,2,2,66,2,18,18 const char TabZeichensatz10x22_z1sp9[16] = 4,0,4,4,2,18,68,2,4,4,4,4,68,4,18,18 const char TabZeichensatz10x22_z1sp10[16] = 248,0,248,248,254,30,120,254,248,248,248,248,120,248,30,30 // 2. Zeile const char TabZeichensatz10x22_z2sp1[16] = 255,0,0,0,248,31,255,0,231,31,255,255,255,255,255,255 const char TabZeichensatz10x22_z2sp2[16] = 0,0,0,0,6,16,0,0,24,32,0,0,0,0,0,0 const char TabZeichensatz10x22_z2sp3[16] = 0,0,128,0,1,16,0,0,0,64,0,0,0,0,0,0 const char TabZeichensatz10x22_z2sp4[16] = 255,255,96,60,56,19,243,192,195,71,159,231,255,255,231,231

79 ANHANG C. ZEICHENSÄTZE 78 const char TabZeichensatz10x22_z2sp5[16] = 0,0,24,36,38,18,18,56,36,72,144,36,0,0,36,36 const char TabZeichensatz10x22_z2sp6[16] = 0,0,134,36,33,18,18,7,36,72,144,36,0,0,36,36 const char TabZeichensatz10x22_z2sp7[16] = 255,255,97,195,63,226,226,192,195,207,159,231,0,255,36,36 const char TabZeichensatz10x22_z2sp8[16] = 0,0,24,0,0,2,2,56,0,0,0,0,0,0,60,60 const char TabZeichensatz10x22_z2sp9[16] = 0,0,6,24,0,4,4,7,24,0,0,24,0,0,0,0 const char TabZeichensatz10x22_z2sp10[16] = 255,0,1,231,255,248,248,0,231,255,255,231,0,255,0,0 // 3. Zeile const char TabZeichensatz10x22_z3sp1[16] = 31,120,120,30,1,120,31,0,31,30,127,127,31,127,127,127 const char TabZeichensatz10x22_z3sp2[16] = 32,72,70,34,1,72,32,112,32,34,64,64,32,64,64,64 const char TabZeichensatz10x22_z3sp3[16] = 64,72,65,66,1,72,64,78,64,66,64,64,64,64,64,64 const char TabZeichensatz10x22_z3sp4[16] = 71,79,64,70,1,72,71,65,71,70,127,79,71,79,79,127 const char TabZeichensatz10x22_z3sp5[16] = 72,64,78,72,1,72,72,112,72,72,0,72,72,72,72,0 const char TabZeichensatz10x22_z3sp6[16] = 72,64,73,72,1,72,72,14,72,72,0,72,72,72,72,0 const char TabZeichensatz10x22_z3sp7[16] = 71,79,72,71,127,71,71,1,71,71,127,79,70,71,72,0 const char TabZeichensatz10x22_z3sp8[16] = 64,72,72,64,64,64,64,0,64,64,64,64,66,64,72,0 const char TabZeichensatz10x22_z3sp9[16] = 32,72,72,32,64,32,32,0,32,32,64,32,34,32,72,0 const char TabZeichensatz10x22_z3sp10[16] = 31,120,120,31,127,31,31,0,31,31,127,31,30,31,120,0

80 ANHANG C. ZEICHENSÄTZE 79 Zeichensatz 4c (10x22):

81 ANHANG C. ZEICHENSÄTZE 80 Includedatei in C (für CC5X) zeichensatz10x22 c.inc /* zeichensatz10x22_c.inc */ /* Zeichensatz fuer 10x22 grosse Zeichen (Ziffern 0 bis 9) */ /* Entwickler: Buchgeher Stefan */ /* Entwicklungsbeginn der Software: 8. April 2006 */ /* Funktionsfaehig seit: 8. April 2006 */ /* Letzte Bearbeitung: 12. Juli 2006 */ const char TabZeichensatz10x22_z1sp1[10] = 224,0,240,0,0,0,0,0,248,240 const char TabZeichensatz10x22_z1sp2[10] = 248,0,252,120,0,0,0,14,252,248 const char TabZeichensatz10x22_z1sp3[10] = 252,6,254,124,0,252,192,14,254,252 const char TabZeichensatz10x22_z1sp4[10] = 30,6,30,126,128,254,240,14,30,30 const char TabZeichensatz10x22_z1sp5[10] = 14,254,14,14,224,254,252,14,14,14 const char TabZeichensatz10x22_z1sp6[10] = 14,254,14,14,120,14,62,206,14,14 const char TabZeichensatz10x22_z1sp7[10] = 30,254,30,14,254,14,14,254,30,30 const char TabZeichensatz10x22_z1sp8[10] = 252,0,254,254,254,14,2,254,254,254 const char TabZeichensatz10x22_z1sp9[10] = 248,0,252,252,254,14,0,126,252,252 const char TabZeichensatz10x22_z1sp10[10] = 224,0,248,248,0,14,0,6,248,240 const char TabZeichensatz10x22_z2sp1[10] = 255,0,0,0,224,0,252,0,227,15 const char TabZeichensatz10x22_z2sp2[10] = 255,0,0,0,248,14,255,0,247,63 const char TabZeichensatz10x22_z2sp3[10] = 255,0,0,0,222,15,255,0,255,127 const char TabZeichensatz10x22_z2sp4[10] = 0,0,0,0,199,15,31,192,62,120 const char TabZeichensatz10x22_z2sp5[10] = 0,255,192,28,193,15,14,252,28,112 const char TabZeichensatz10x22_z2sp6[10] = 0,255,240,28,192,14,14,255,28,112 const char TabZeichensatz10x22_z2sp7[10] = 0,255,254,62,255,30,30,63,62,248 const char TabZeichensatz10x22_z2sp8[10] = 255,0,63,255,255,252,254,3,255,255 const char TabZeichensatz10x22_z2sp9[10] = 255,0,7,247,255,248,252,0,247,255 const char TabZeichensatz10x22_z2sp10[10] = 255,0,1,227,192,240,240,0,227,63 const char TabZeichensatz10x22_z3sp1[10] = 7,0,64,14,1,48,15,0,15,0 const char TabZeichensatz10x22_z3sp2[10] = 31,0,112,62,1,120,63,96,63,0 const char TabZeichensatz10x22_z3sp3[10] = 63,0,124,126,1,112,127,126,63,64 const char TabZeichensatz10x22_z3sp4[10] = 120,0,127,120,1,112,120,127,120,112 const char TabZeichensatz10x22_z3sp5[10] = 112,127,127,112,1,112,112,31,112,120 const char TabZeichensatz10x22_z3sp6[10] = 112,127,115,112,1,120,112,3,112,62 const char TabZeichensatz10x22_z3sp7[10] = 120,127,112,120,127,60,120,0,120,15 const char TabZeichensatz10x22_z3sp8[10] = 63,0,112,63,127,63,63,0,127,3 const char TabZeichensatz10x22_z3sp9[10] = 31,0,112,31,127,15,31,0,63,0 const char TabZeichensatz10x22_z3sp10[10] = 7,0,0,15,1,7,15,0,15,0

82 Anhang D Programmieren mit ICSP Allgemeines: Unter Programmieren mit ICSP versteht man das Programmieren eines (programmierbaren) Bauteils direkt in der Schaltung. Der zu programmierende Bauteil (hier der PIC) muss bei einem Software-Update oder bei der Erstprogrammierung nicht aus der Schaltung genommen werden. Je nach Bauteilfamilie sind dazu unterschiedlich viele Leitungen notwendig. Bei der PIC-Familie sind für die ICSP-Programmierung folgende 5 Leitungen notwendig: Betriebsspannung (V dd, Pins 11 und 32) Taktleitung (RB6, Pin 39) Datenleitung (RB7, Pin 40) Programmierspannung (M CLR/V pp, Pin 1) Masse (V ss, Pins 12 und 31) Weiters ist bei der PIC-Familie für die ICSP-Programmierung eine entsprechende Interfaceschaltung notwendig. Siehe dazu Abschnitt 6.1 ab Seite 29. Downloadkabel: Als Downloadkabel verwende ich ein 6poliges Flachbandkabel mit einer Länge von ca. 20 cm. Warum 6polig? Die Taktleitung ist von störenden Einstreuungen sehr empfindlich. Sie befindet sich bei mir daher zwischen zwei Leitungen mit fixem Potential (GND und +5V). Das folgende Bild zeigt die Schaltung des Downloadkabels. 81

83 ANHANG D. PROGRAMMIEREN MIT ICSP 82 Pin 1 des PIC ist beim 40poligen Gehäuse im normalem Betrieb die MCLR-Leitung. Bei der Programmierung via ICSP hat diese Leitung allerdings eine andere Bedeutung. Hier liefert dieser Pin die Programmierspannung. Damit nach der Programmierung das Downloadkabel nicht von der Schaltung entfernt werden muss, kann die Programmierspannung mit dem Schalter S1 abgeschaltet werden. Somit ist ein normaler Betrieb der Applikation möglich. Dies ist vor allem während der Programmentwicklung praktisch, da hier schnell die geänderte Software überprüft werden kann, ohne dass das Downloadkabel ständig angeschlossen bzw. entfernt werden muss. Das folgende Bild zeigt einen möglichen Aufbau des Downloadkabels. Eine etwa 19x52mm große Lochrasterplatine (7x20 Löcher) und zwei 20polige Stiftleisten bilden die Basis. Daran wird das 6polige Flachbandkabel entsprechend dem oberen Schaltplan angelötet. Am anderen Ende des Flachbandkabels befindet sich eine 5polige Stiftleiste (Achtung: Diese Stiftleiste muss natürlich in die entsprechende Buchsenleiste der Anwendung passen. Siehe dazu Abschnitt 6.1 ab Seite 29. Programmiergerät: Zur Programmierung der PIC-Mikrocontroller verwende ich PICSTART Plus. Dieser Programmer verwendet intern auch das ICSP-Prinzip, so dass es für den Programmer egal ist, ob nun ein PIC in der Fassung sitzt oder das hier beschriebene Downloadkabel. Es ist aber zu beachten dass die Anschlüsse für die ICSP-Programmierung von PIC zu PIC unterschiedlich sind. Das hier vorgestellte Downloadkabel lässt sich zum Beispiel nicht für einen 18poligen PIC (PIC16F84 oder PIC16F62x) verwenden, auch wenn in der Entwicklungsumgebung ein PIC16F84 oder ein PIC16F62x ausgewählt wurde. Das hier beschriebene Downloadkabel eignet sich aber für alle 40poligen und 28poligen PICs.

84 ANHANG D. PROGRAMMIEREN MIT ICSP 83 Das folgende Bild zeigt das Downloadkabel im Einsatz.

85 Anhang E Umgehen der 1k-Grenze (beim CC5X-Compiler) Zum umgehen der 1k-Grenze sind folgende drei Schritte notwendig: Schritt 1: Aufteilen des Projekts in mehrere C-Dateien Schritt 2: Kompilieren mit einer.bat-datei Schritt 3: Zusammenfügen der einzelnen.asm-dateien Das folgende Bild zeigt diesen prinzipiellen Vorgang. Schritt 1: Aufteilen des Projekts in mehrere C-Dateien Wird also eine C-Datei so groß, dass es beim Kompilieren die 1k-Grenze überschreitet, so muss es in mehrere C-Dateien aufgeteilt werden, wobei auch hier gilt: Jede C-Datei darf beim kompilieren die 1k-Grenze nicht überschreiten! Die Aufteilung, welches Unterprogramm sich in welcher C-Datei befindet ist grundsätzlich beliebig. Hier erfolgt die Aufteilung gemäß Abschnitt 6.4. Schritt 2: Kompilieren mit einer.bat-datei Im nächsten Schritt wird nun jede C-Datei (mit Hilfe des CC5X-Compilers) in eine ASM- Datei kompiliert. Diese Aufgabe übernimmt eine.bat-datei. Dazu geht man wie folgt vor: 84

86 ANHANG E. UMGEHEN DER 1K-GRENZE (BEIM CC5X-COMPILER) Im Projektordner eine neue Textdatei erzeugen. Der Name der Datei ist egal, wichtig ist nur die Endung.bat (Also z.b. glcd2.bat). Es entsteht also eine Datei vom Typ Stapelverarbeitungsdatei für MS-DOS. 2. Diese Datei (glcd2.bat) mit der rechten Maustaste anklicken und im Pop-Up- Menü bearbeiten auswählen. Im Editor nun die folgenden Einträge einfügen: C:\Programme\bknd\CC5X\CC5X.EXE GLCD_BASIS_ROUTINEN.C -IC:\Programme\bknd\CC5X\ -u -r -a -r2 C:\Programme\bknd\CC5X\CC5X.EXE GLCD_FONT5X7.C -IC:\Programme\bknd\CC5X\ -u -r -a -r2 C:\Programme\bknd\CC5X\CC5X.EXE GLCD_FONT8X14.C -IC:\Programme\bknd\CC5X\ -u -r -a -r2 C:\Programme\bknd\CC5X\CC5X.EXE GLCD_FONT10X22.C -IC:\Programme\bknd\CC5X\ -u -r -a -r2 C:\Programme\bknd\CC5X\CC5X.EXE demo2.c -IC:\Programme\bknd\CC5X\ -u -r -a -r2 Hinweis: Für jede C-Datei muss eine entsprechende Zeile eingefügt werden 3. Editor schließen (Datei natürlich vorher speichern) 4. Batch-Datei (hier glcd2.bat) mit einem Doppelklick ausführen. Wenn in den C- Dateien alles richtig ist (also die Syntax) werden die dazugehörigen.asm-dateien erzeugt (hier GLCD BASIS ROUTINEN.asm, GLCD FONT5X7.asm, GLCD FONT8X14.asm, GLCD FONT10X22.asm und demo2.asm). Bei einem Syntaxfehler (in der C-Datei) wird die eventuell schon vorhandene.asm-datei gelöscht, und die.occ-datei gibt Auskunft über die aufgetretenen Syntaxfehler. Schritt 3: Zusammenfügen der einzelnen.asm-dateien Die im vorhergehenden Schritt erzeugten Assembler-Dateien müssen nun zu einem gesamten Projekt zusammengefügt werden. Und schließlich soll daraus die zum Programmieren des PIC notwendige.hex-datei erzeugt werden. Dazu geht man wie folgt vor: MPLAB starten Project Project Wizard...

87 ANHANG E. UMGEHEN DER 1K-GRENZE (BEIM CC5X-COMPILER) 86 Taste Weiter > PIC auswählen (hier den PIC16F877) Taste Weiter >

88 ANHANG E. UMGEHEN DER 1K-GRENZE (BEIM CC5X-COMPILER) 87 Active Toolsuite: B Knudsen Data CC5X auswählen Taste Weiter > Den Projektordner auswählen, wo dieses Beispiel-Projekt abgelegt werden soll. Dieser Ordner muss schon existieren! Projektname eingeben (hier: glcd2). Anmerkung: der Projektname muss nicht identisch mit dem Ordnername sein! Taste Weiter >

89 ANHANG E. UMGEHEN DER 1K-GRENZE (BEIM CC5X-COMPILER) 88 Zunächst in der rechten Spalte die Datei demo2.asm auswählen und die Taste Add >> anklicken. Die ausgewählte Datei erscheint nun in der rechten Spalte. Diesen Vorgang für alle Assembler-Dateien (hier also GLCD BASIS ROUTINEN.asm, GLCD FONT5X7.asm, GLCD FONT8X14.asm und GLCD FONT10X22.asm) und die Header-Datei PROJEKT.H wiederholen. Taste Weiter > Taste Fertig stellen

90 ANHANG E. UMGEHEN DER 1K-GRENZE (BEIM CC5X-COMPILER) 89 Linker Script Add Files... Linker-Datei für den PIC16F877 (16f877.lkr), dieser befindet sich unter C:\\Programme\Michrochip\MPASM Suite\LKR\\ hinzufügen: Project Build

91 ANHANG E. UMGEHEN DER 1K-GRENZE (BEIM CC5X-COMPILER) 90 Für jede Assembler-Datei sollte nun nacheinander die Box Assembly Successful erscheinen. Diese muss jedes Mal mit der OK-Taste bestätigt werden. Wichtig ist die Meldung BUILD SUCCEEDED am Ende der Assemblierung.

16-Segment- Dekoder (mit CPLD)

16-Segment- Dekoder (mit CPLD) 16-Segment- Dekoder (mit CPLD) Autor: Buchgeher Stefan Letzte Bearbeitung: 20. Juli 2005 Inhaltsverzeichnis 1. EINLEITUNG...5 2. WAHRHEITSTABELLE DES 16-SEGMENT-DEKODERS...6 3. UMSETZUNG DER WAHRHEITSTABELLE

Mehr

Lötdampf- absaugegerät Autor: Buchgeher Stefan Letzte Bearbeitung: 28. September 2004

Lötdampf- absaugegerät Autor: Buchgeher Stefan Letzte Bearbeitung: 28. September 2004 Autor: Buchgeher Stefan Letzte Bearbeitung: 28. September 2004 Inhaltsverzeichnis 1. EINLEITUNG...3 2. BEDIENUNG...3 3. SCHALTUNGSBESCHREIBUNG...4 4. NACHBAUANLEITUNG...5 ANHANG A: STÜCKLISTE...10 Seite

Mehr

I²C-Routinen (für PIC-Mikrocontroller)

I²C-Routinen (für PIC-Mikrocontroller) I²C-Routinen (für PIC-Mikrocontroller) Autor: Buchgeher Stefan Letzte Bearbeitung: 27. Februar 2004 Inhaltsverzeichnis 1. GRUNDLEGENDES ZU I²C...3 2. I²C-PROTOKOLL...3 3. HARDWARE...5 4. SOFTWARE...5 4.1.

Mehr

80C535-Mikrocontroller-Board im Streichholzschachtelformat

80C535-Mikrocontroller-Board im Streichholzschachtelformat RIBU 18. A-8160 Weiz. Tel. 03172/64800. Fax 03172/64806 RIBUMühlgasse ELEKTRONIK VERSAND e-mail: office@ribu.at. Internet: http://www.ribu.at 80C535-Mikrocontroller-Board im Streichholzschachtelformat

Mehr

5x7-Dot-Matrix- Ansteuerung mit dem MAX7219 (mit PIC-Mikrocontroller)

5x7-Dot-Matrix- Ansteuerung mit dem MAX7219 (mit PIC-Mikrocontroller) 5x7-Dot-Matrix- Ansteuerung mit dem MAX7219 (mit PIC-Mikrocontroller) Autor: Buchgeher Stefan Letzte Bearbeitung: 25. September 2008 Inhaltsverzeichnis 1. EINLEITUNG... 5 2. HARDWARE... 5 3. ANSTEUERUNG

Mehr

Ansteuerung einer (Full- Color)-RGB- Leuchtdiode (mit PIC-Mikrocontroller)

Ansteuerung einer (Full- Color)-RGB- Leuchtdiode (mit PIC-Mikrocontroller) Ansteuerung einer (Full- Color)-RGB- Leuchtdiode (mit PIC-Mikrocontroller) Autor: Buchgeher Stefan Letzte Bearbeitung: 29. März 2004 Inhaltsverzeichnis 1. GRUNDLEGENDES ZUR (FULL-COLOR)-RGB-LEUCHTDIODE...3

Mehr

Entwicklungsboard 16F1824

Entwicklungsboard 16F1824 Entwicklungsboard 16F1824 Inhaltsverzeichnis 1. Einleitung...2 2. Grundlegende Eigenschaften...2 2.1 Grundlegende Eigenschaften...2 2.2 Optionale Eigenschaften...3 3. Programmierung...3 4. Hardware...5

Mehr

Basisplatine PIC-Basis-V42. Abbildung: Features : PIC Programmier- und Übungsmodule. Basismodul. Best.-Nr

Basisplatine PIC-Basis-V42. Abbildung: Features : PIC Programmier- und Übungsmodule. Basismodul. Best.-Nr PIC Programmier- und Übungsmodule Basismodul Basisplatine PIC-Basis-V42 Best.-Nr. 5035-3206 Auf dem Schellerod 22 D-53842 Troisdorf Postfach 1263 D-53822 Troisdorf Telefon (02241) 4867-29 Telefax (02241)

Mehr

Analog/Digitale Wanduhr 2

Analog/Digitale Wanduhr 2 Analog/Digitale Wanduhr 2 Autor: Buchgeher Stefan Letzte Bearbeitung: 15. Oktober 2006 Inhaltsverzeichnis 1. EINLEITUNG...3 2. GRUNDLEGENDES ZU DCF...4 3. SCHALTUNGSBESCHREIBUNG...6 4. SOFTWAREBESCHREIBUNG...10

Mehr

LISY80 LInux for SYstem80. Hardware Version 3.11 Aufbau der Platine Version 1.0

LISY80 LInux for SYstem80. Hardware Version 3.11 Aufbau der Platine Version 1.0 LISY80 LInux for SYstem80 Hardware Version 3.11 Aufbau der Platine bontango@lisy80.com 8.11.2016 Version 1.0 Inhaltsverzeichnis 1. Wichtige Anmerkung... 3 2. Stückliste... 3 3. Step by Step... 4 3.1. Step1:

Mehr

Bausatz S8DCCB 8-fach Servo-Decoder Version 2

Bausatz S8DCCB 8-fach Servo-Decoder Version 2 Bausatz S8DCCB 8-fach Servo-Decoder Version 2 Sie sollten geübt sein, feine Lötarbeiten an Platinen und Bauteilen vorzunehmen. Sie benötigen einen kleinen Lötkolben und dünnes Elektronik-Lötzinn. Ich empfehle

Mehr

0 C (Carry) Überlauf des 8ten Bits. 1 DC (Digit Carry) Überlauf des 4ten Bits. Mnemonic Parameter Beschreibung Status-Flags.

0 C (Carry) Überlauf des 8ten Bits. 1 DC (Digit Carry) Überlauf des 4ten Bits. Mnemonic Parameter Beschreibung Status-Flags. 3. Assembler-Programmierung Der PIC 16F84A Microcontroller kennt 35 verschiedene Befehle. Für eine ausführliche Beschreibung aller Befehle siehe PIC16F84A-Datenblatt Kapitel 7.1. 3.1 Wichtige Flaggen im

Mehr

Bausatz S4DCCB 4-fach Servo-Decoder

Bausatz S4DCCB 4-fach Servo-Decoder Bausatz S4DCCB 4-fach Servo-Decoder Sie sollten geübt sein, feine Lötarbeiten an Platinen und Bauteilen vorzunehmen. Sie benötigen einen kleinen Lötkolben und dünnes Elektronik-Lötzinn. Ich empfehle Sn60PbCu2

Mehr

Teach-Dongle Rev 1.1. Teach-Dongle. Rev 1.1 Stand Okt

Teach-Dongle Rev 1.1. Teach-Dongle. Rev 1.1 Stand Okt Teach-Dongle - 1 - - 2 - 1. Allgemeines Inhaltsverzeichnis 1.1 Informationen zum Teach-Dongle Überblick Features 1.2 Rechtliches Urheberrechte Warenzeichen 1.3 EMV Anmerkungen zur EMV 2. Hardwarebeschreibung

Mehr

Inhaltsverzeichnis. Aufgabenstellung 2. Idee der Schaltung 2. Blockschaltbild 3. Schaltplan 4. Stückliste 11. Routen 12. Fertigen 15.

Inhaltsverzeichnis. Aufgabenstellung 2. Idee der Schaltung 2. Blockschaltbild 3. Schaltplan 4. Stückliste 11. Routen 12. Fertigen 15. Inhaltsverzeichnis Inhalt Seite Aufgabenstellung 2 Idee der Schaltung 2 Blockschaltbild 3 Schaltplan 4 Stückliste 11 Routen 12 Fertigen 15 Prüfen 16 Steckerbelegung 17 Gehäuse 18 Änderung in letzter Minute

Mehr

LC-Display-Modul-Bausatz

LC-Display-Modul-Bausatz LC-Display-Modul-Bausatz Best.Nr. 120 487 Zum einfachen Anschluss des LCD-Moduls SHARP M078CKA-A3QKLA0057 (Best.Nr. 120 345). Pollin Electronic GmbH Tel. (08403) 920-920 www.pollin.de Stand 28.02.2007,

Mehr

LCD-GRAFIKMODUL 120x32 PIXEL

LCD-GRAFIKMODUL 120x32 PIXEL LCD-GRAFIK MODUL 120x32 PIXEL Stand 12.2010-20..+70 C EA T120L-53 EA T120A-54LED TECHNISCHE DATEN * KONTRASTREICHE SUPERTWIST ANZEIGE (GRÜN) * KONTROLLER AX6120 ODER KOMPATIBEL INTEGRIERT * ANSCHLUSS AN

Mehr

Aufbauanleitung Wortwecker 135x135mm 2

Aufbauanleitung Wortwecker 135x135mm 2 Aufbauanleitung Wortwecker 135x135mm 2 Autor: Cornelius Franz Bezugsadresse der Platine: www.du-kannst-mitspielen.de Der Wortwecker besitzt eine Platine mit 128x128mm² Größe. Passende Gehäuse in verschiedensten

Mehr

El BAMAS Bestückungsplan

El BAMAS Bestückungsplan El BAMAS Bestückungsplan und Gebrauchsanweisung Stand 15.3.2006 Bestückungsplan Oben ist der Bestückungsplan zu sehen, wobei den Zahlen Widerstandswerte zugewiesen sind. Es sind vorwiegend 10K Widerstände,

Mehr

Materialsatz: MatPwrDigiX

Materialsatz: MatPwrDigiX Materialsatz: MatPwrDigiX für die Servo- oder Funktionsdecoder: S8DCC/MOT S8-4DCC/MOT W4DCC/MOT Fu SW, A - H oder STOP 8-fach Servo-Decoder (alle 8 Servos) 4-fach Servo-Decoder (nur Servo 1-4 ) 4 Wege

Mehr

ateval-board Aufbauanleitung & Handbuch

ateval-board Aufbauanleitung & Handbuch atevalboard Aufbauanleitung & Handbuch Elektronik Hannes Jochriem Oberfeldweg 10 D 300 Oberaudorf info@ehajo.de 0033 / 695 69 9 0033 / 695 69 90 1. Inhaltsverzeichnis Aufbau... 5 Sockel...7 Summer...7

Mehr

GRAFIK 128x64 IN 2 GRÖSSEN MIT ST7565. preliminary

GRAFIK 128x64 IN 2 GRÖSSEN MIT ST7565. preliminary GRAFIK 128x64 IN 2 GRÖSSEN MIT ST7565 Stand 10.2.2009 Displayabmessungen -6X9: 56x43mm (Abbildung) -6X8: 34x25mm TECHNISCHE DATEN * INKL. KONTROLLER ST7565 * VDD = 2,7... 3,3V * LOW POWER, ALSO IDEAL FÜR

Mehr

Selbstbau-USB-Programmiergerät für AVR

Selbstbau-USB-Programmiergerät für AVR Jean-claude.feltes@education.lu 1 Selbstbau-USB-Programmiergerät für AVR Nach Christian Ullrich Homepage: www.ullihome.de Weitere Infos bei http://weigu.lu/a/pdf/micel_f6_programmieradapter.pdf Schaltung

Mehr

Spannungsversorgung für Mikrocontroller-Schaltungen DH1AAD, Ingo Gerlach, 20.11.2011, e-mail : Ingo.Gerlach@onlinehome.de

Spannungsversorgung für Mikrocontroller-Schaltungen DH1AAD, Ingo Gerlach, 20.11.2011, e-mail : Ingo.Gerlach@onlinehome.de Spannungsversorgung für Mikrocontroller-Schaltungen DH1AAD, Ingo Gerlach, 20.11.2011, e-mail : Ingo.Gerlach@onlinehome.de Ziel Der Hintergrund für die Entwicklung diese Netzteiles war, das hier am Computer-Arbeitstisch

Mehr

Einplatinen-Mikrocomputer MICO-80 Aufbauanleitung

Einplatinen-Mikrocomputer MICO-80 Aufbauanleitung Einplatinen-Mikrocomputer MICO-80 Aufbauanleitung 1985 IED München GmbH http://www.kammerer.net - 1 - Inhaltsverzeichnis: 1. Einlöten der Widerstände... 3 2. Einlöten der Dioden... 3 3. Einlöten der IC-Fassungen...

Mehr

Liquid Clock micro - Löt- und Aufbauanleitung

Liquid Clock micro - Löt- und Aufbauanleitung Liquid Clock micro - Löt- und Aufbauanleitung Arduino-kompatibler Wecker Uhrzeit wird mit Hilfe der 24 und 12 LED NeoPixel Ringe von Adafruit angezeigt 12h Alarm Funktion mit Signalgeber DCF77 Unterstützung

Mehr

Arduino für FunkAmateure

Arduino für FunkAmateure Arduino für FunkAmateure Arduino Einführung Teil 9 Taster-Platine 4x4 Wie gehe ich am besten vor? 1. Was will ich machen? 2. Bauteile 3. Überlegungen zur Schaltung und Algorithmus 4. Zuordnung Arduino-Pins

Mehr

LAB-EXP Experimentier-Platine für das LAB-537

LAB-EXP Experimentier-Platine für das LAB-537 Sven Rakers LAB-EXP Experimentier-Platine für das LAB-537 Aufbauanleitung und Referenz November 2000 1 Aufbau des Bausatzes Dieser Abschnitt wendet sich an den Besitzer des Bausatzes. Wenn Sie ein Fertigmodul

Mehr

Einbau der Interfaceplatine am Akkumatik

Einbau der Interfaceplatine am Akkumatik Einbau der Interfaceplatine am Akkumatik Stand: 04.08.2008 Die Interfaceplatine befindet sich am Gehäusedeckel oben in der Mitte A B L C D E F M Als erstes werden alle Bauteile entsprechend nebenstehendem

Mehr

I8O8-USB. Serial Input and Output Board with. 8 Inputs 8 Outputs 8 ADC-Inputs USB (FTDI) Rev rtec.rohrhofer.org

I8O8-USB. Serial Input and Output Board with. 8 Inputs 8 Outputs 8 ADC-Inputs USB (FTDI) Rev rtec.rohrhofer.org I8O8-USB Serial Input and Output Board with 8 Inputs 8 Outputs 8 ADC-Inputs USB (FTDI) Rev.20151008 rtec.rohrhofer.org 2015.10.21 r - t e c. r o h r h o f e r. o r g S e i t e 1 Inhaltsverzeichnis: Inhaltsverzeichnis:...

Mehr

Aufbauanleitung Wortwecker 135x135mm 2

Aufbauanleitung Wortwecker 135x135mm 2 Aufbauanleitung Wortwecker 135x135mm 2 Rückseite der Platine Vorderseite der Platine LED Matrix Begonnen wird mit dem Einlöten der 5mm Kurzkopf- LEDs auf der Vorderseite der Platine. Die abgeflachte Seite

Mehr

HVSP Fusebit Programmer von guloshop.de

HVSP Fusebit Programmer von guloshop.de HVSP Fusebit Programmer von guloshop.de Seite 1 Version 0.0 2012-10-24 HVSP Fusebit Programmer von guloshop.de Funktionsumfang Willkommen beim HVSP Fusebit Programmer! Wie der Name bereits verrät, können

Mehr

Termin: am Montag, 10.11.2008, 9:00-11:30 Uhr sowie am Freitag, 14.11.2008, 12:15-14:45 Uhr, jeweils im Raum 4-18

Termin: am Montag, 10.11.2008, 9:00-11:30 Uhr sowie am Freitag, 14.11.2008, 12:15-14:45 Uhr, jeweils im Raum 4-18 Technische Informatik Prof. Dr. M. Bogdan Institut für Informatik Termin: am Montag, 10.11.2008, 9:00-11:30 Uhr sowie am Freitag, 14.11.2008, 12:15-14:45 Uhr, jeweils im Raum 4-18 Inhaltsverzeichnis 1

Mehr

Parallel-IO. Ports am ATmega128

Parallel-IO. Ports am ATmega128 Parallel-IO Ansteuerung Miniprojekt Lauflicht Ports am ATmega128 PortE (PE7...PE0) alternativ, z.b. USART0 (RS232) 1 Pin von PortC Port C (PC7...PC0) 1 Parallel-IO-Port "Sammelsurium" verschiedener Speicher

Mehr

Remote-Objekt-Überwachung. von Jan Schäfer und Matthias Merk

Remote-Objekt-Überwachung. von Jan Schäfer und Matthias Merk Remote-Objekt-Überwachung von Jan Schäfer und Matthias Merk Aufgabenstellung Steuerung von Sensoren zur Remote Objektüberwachung mit einem µc PIC16F874. Welcher Sensor hat gemeldet? Die Überwachung Mehrere

Mehr

Hardware»intern« Der Schaltplan en détail. Kapitel 3

Hardware»intern« Der Schaltplan en détail. Kapitel 3 Kapitel 3 3.1 Der Schaltplan en détail An der etwas anderen Form lässt sich die Platine des Testboards leicht erkennen. Die Größe des Achtecks entspricht in etwa der Größe einer CD. Nach dem Bestücken

Mehr

Fernseh-Simulator Microcontroller ATMEL 89C4051 8 Bit Betriebsspannungsbereich von 9-35 Volt 8 leistungsfähigen Ausgänge 16 Programmspeicherplätze

Fernseh-Simulator Microcontroller ATMEL 89C4051 8 Bit Betriebsspannungsbereich von 9-35 Volt 8 leistungsfähigen Ausgänge 16 Programmspeicherplätze Fernseh-Simulator Diese Steuerung mit dem Microcontroller ATMEL 89C4051 ist für universelle Steueraufgaben bis 8 Bit ausgelegt. Der große Betriebsspannungsbereich von 9-35 Volt, die 8 leistungsfähigen

Mehr

ATmega169 Chip: Pin-Layout

ATmega169 Chip: Pin-Layout ATmega169 Chip: Pin-Layout Die logische Schnittstelle der Funktionseinheit MCU (Microcontroller Unit) entspricht der physikalischen Schnittstelle der Baueinheit (Chip). Für die Maschinenbefehle sind nur

Mehr

Bau und Programmieranleitung für den IR - Booster. Vorbemerkungen

Bau und Programmieranleitung für den IR - Booster. Vorbemerkungen Bau und Programmieranleitung für den IR - Booster Vorbemerkungen Die folgende Anleitung beschreibt den Aufbau und die Inbetriebnahme des IR - Booster. Ich möchte ausdrücklich darauf hinweisen, das es sich

Mehr

Bauanleitung für den GPS-Empfänger nach DK7NT Erstellt von DF7YC

Bauanleitung für den GPS-Empfänger nach DK7NT Erstellt von DF7YC Bauanleitung für den GPS-Empfänger nach DK7NT Erstellt von DF7YC 1. Platine Bohrungen und Durchkontaktierungen Das folgende Bild zeigt die Oberseite der Platine, also die Masseseite. Zunächst bohren wir

Mehr

Temperaturmessung mit dem ATmega8

Temperaturmessung mit dem ATmega8 Temperaturmessung mit dem ATmega8 Messaufbau: Der ADC des ATmega8 stellt uns 6 Kanäle zur Analog/Digital Wandlung zur Verfügung und wird mit der internen Spannungsquelle bzw. externen Spannungsquelle betrieben.

Mehr

Jan Monsch. Donnerstag, 2. Mai 13

Jan Monsch. Donnerstag, 2. Mai 13 101 Jan Monsch Agenda Arduino Platform Digitale Ausgaben Analoge Eingänge Digitale Eingaben I2C Geräte (Digitales Thermometer) Arduino SW Download goo.gl/dj5l2 Was ist Arduino? Open Source Einplatinen-Computer

Mehr

UART-Kommunikation mit dem Atmel AVR

UART-Kommunikation mit dem Atmel AVR Fachbereich Elektrotechnik und Informatik Labor für Angewandte Informatik und Datenbanken Praktikum Automatisierung / Echtzeitregelung (BAU/BER) Prof.Dr.-Ing. Coersmeier UART-Kommunikation mit dem Atmel

Mehr

Single Side AVR Experimentier Board. Version 1.4. erstellt von. Ulrich Radig

Single Side AVR Experimentier Board. Version 1.4. erstellt von. Ulrich Radig Single Side AVR Experimentier Board Version 1.4 erstellt von Ulrich Radig 1 Inhaltsverzeichnis: 1. Vorwort S.3 2. Spezifikation S.4 3. Beschreibung S.5 4. Steckerbelegungen S.6 4.1. Steckerbelegung JP1

Mehr

Touchpanel und Touchscreen mit PIC-Mikrocontroller

Touchpanel und Touchscreen mit PIC-Mikrocontroller Touchpanel und Touchscreen mit PIC-Mikrocontroller Stefan Buchgeher 14. September 2009 www.stefan-buchgeher.info kontakt@stefan-buchgeher.info Großambergstraße 106/3, A-4040 Linz (Österreich) ++43/699/11

Mehr

Einführung in die Welt der Microcontroller

Einführung in die Welt der Microcontroller Übersicht Microcontroller Schaltungen Sonstiges Einführung in die Welt der Microcontroller Übersicht Microcontroller Schaltungen Sonstiges Inhaltsverzeichnis 1 Übersicht Möglichkeiten Einsatz 2 Microcontroller

Mehr

1. Evaluation Board. 1.1 Schaltung

1. Evaluation Board. 1.1 Schaltung 1. Evaluation Board In der ersten Lötaktion wird auf einem gedruckten Layout die Hauptschaltung (bestehend aus Prozessor, Anzeigen, Stromversorgung und ProgrammierEinrichtung) aufgebaut. 1.1 Schaltung

Mehr

Aufbauanleitung für das Atmega-Board Version 1.1

Aufbauanleitung für das Atmega-Board Version 1.1 Aufbauanleitung für das Atmega-Board Version 1.1 Inhaltsverzeichnis 1 Einleitung 2 2 Zusammenbau 2 2.1 Teileliste................................ 2 2.2 Ausrichten der Platine........................ 2

Mehr

Lötanleitung für das Atmega-Basis-Board Version 1.2

Lötanleitung für das Atmega-Basis-Board Version 1.2 Lötanleitung für das Atmega-Basis-Board Version.2 Benjamin Reh 30. November 205 Inhaltsverzeichnis Einleitung 2 2 Zusammenbau 2 2. Teileliste........................................ 2 2.2 Ausrichten der

Mehr

Ohmmeter auf einseitiger Leiterplatte im Gehäuse.

Ohmmeter auf einseitiger Leiterplatte im Gehäuse. Ohmmeter auf einseitiger Leiterplatte im Gehäuse. Zu dem Widerstandsmessgerät von Dietmar Schröder habe ich eine einseitige Leiterplatte für ein passendes preiswertes Zweischalengehäuse entworfen habe.

Mehr

Aufbau und Programmieranleitung für das 16K Nautic Empfänger Modul für Graupner

Aufbau und Programmieranleitung für das 16K Nautic Empfänger Modul für Graupner Aufbau und Programmieranleitung für das 16K Nautic Empfänger Modul für Graupner Aufbau: Zum Aufbau des Moduls sollten nur dafür geeignete Werkzeuge und Materialien verwendet werden. 1. Lötkolben 15...30W,

Mehr

Produktinformationen. Basis Set Atmel Atmega8 & ISP Programmer. Lieferumfang :

Produktinformationen. Basis Set Atmel Atmega8 & ISP Programmer. Lieferumfang : Produktinformationen Basis Set Atmel Atmega8 & ISP Programmer Lieferumfang : 1 Steckboard 840 Pin 1 USB ISP Programmer mit Kabel 1 Kabelsatz 32-teilig 1 Atmega8L 5 LED 3mm Klar Rot/Gelb/Grün/Blau/Weiss

Mehr

Statische Prüfungen

Statische Prüfungen bequemer messen und laufen nicht Gefahr, Kurzschlüsse zu erzeugen. Schließen Sie dann eine dünne Litze an +5V/2 und drei andere an GND2 an. An die freien Enden löten Sie jeweils ein kurzes, 0,6 mm dickes

Mehr

Bauanleitung. Serielles ISP-Kabel. Ser-ISP-Kab. D. Ratschmeier

Bauanleitung. Serielles ISP-Kabel. Ser-ISP-Kab. D. Ratschmeier Bauanleitung Lauf, den 31.07.2005 geändert 15.11.2009 Serielles ISP-Kabel Ser-ISP-Kab D. Ratschmeier Inhalt 1. Allgemein: 1 2. Aufbau: 2 3. Schaltplan: 2 4. Bauteilliste: 2 5. Bestückung: 3 6. Inbetriebnahme:

Mehr

P(k, λ) = λ k /k!*exp(-λ) angegeben werden kann.

P(k, λ) = λ k /k!*exp(-λ) angegeben werden kann. Zeitintervall-Vorgabe versus Zählimpuls-Vorgabe für die Datenauswertung mit dem Arduino bei zählenden Strahlungs-Detektoren für Radioaktivität Bernd Laquai, 2. Oktober 2015 Bekanntlich unterliegt der radioaktive

Mehr

Anwendung und Programmierung von Mikrocontrollern. Anwendung und Programmierung von Mikrocontrollern

Anwendung und Programmierung von Mikrocontrollern. Anwendung und Programmierung von Mikrocontrollern Anwendung und Programmierung von Mikrocontrollern Sommersemester 2013 Dr.-Ing. Hubert Zitt Kontakt: hubert.zitt@fh-kl.de www.fh-kl.de/~zitt Dr.-Ing. Hubert Zitt Seite 1 von 24 S65 Shield (von oben) Komponenten

Mehr

Schaltungshinweise zum Linux Control System mit DIL/NetPC DNP/7520

Schaltungshinweise zum Linux Control System mit DIL/NetPC DNP/7520 Schaltungshinweise zum Linux Control System mit DIL/NetPC DNP/7520 Das Linux Control System ist eine typische Anwendung für das Linux Control Modul DIL/NetPC DNP/7520. Die Abbildung 1 zeigt die Blockschaltung.

Mehr

Baubericht für den AX81-GKR Einleitung

Baubericht für den AX81-GKR Einleitung Baubericht für den AX81-GKR Einleitung Der AX81-GKR ist eine Modifikation des AX81 auf Basis des AVRChipbasic2 von Jörg Wolfram. Siehe auch www.jcwolfram.de/projekte/avr/ax81/main.php und www.jcwolfram.de/projekte/avr/chipbasic2/main.php

Mehr

8.3 Taster am µcontroller

8.3 Taster am µcontroller 8.3 Taster am µcontroller AVR-KOMPENDIUM Nachdem im vorigen Beispiel das Port als Ausgang verwendet wurde erweitern wir dieses Beispiel um einen Taster - um auch das Einlesen von digitalen Signalen zu

Mehr

ECHOLINK INTERFACE MIT GALVANISCHER TRENNUNG UND DTMF DEKODER

ECHOLINK INTERFACE MIT GALVANISCHER TRENNUNG UND DTMF DEKODER Andreas Stefan, DL5MGD, Tratberg Nord 20, 83734 Hausham e-mail: dl5mgd@darc.de Homepage: http://www.dl5mgd.de Echolink Node: 123393, Link zu DB0PM 439.075 MHz ECHOLINK INTERFACE MIT GALVANISCHER TRENNUNG

Mehr

MC - Steuerung Microcontroller ATMEL 89C Bit Betriebsspannungsbereich von 9-35 Volt Konstantstromquellen 8 Ausgängen 16 Programmspeicherplätze

MC - Steuerung Microcontroller ATMEL 89C Bit Betriebsspannungsbereich von 9-35 Volt Konstantstromquellen 8 Ausgängen 16 Programmspeicherplätze MC - Steuerung Diese Steuerung mit dem Microcontroller ATMEL 89C4051 ist für universelle Steueraufgaben bis 8 Bit ausgelegt. Der große Betriebsspannungsbereich von 9-35 Volt, die Konstantstromquellen an

Mehr

2. Einführung/Assembler Programmierung. 2.1 Einführung. 2.1.1 Übersicht

2. Einführung/Assembler Programmierung. 2.1 Einführung. 2.1.1 Übersicht 2. Einführung/Assembler Programmierung Es soll eine einfache Einführung in die Fuktionsweise des PIC16F84A gegeben werden. Anhand eines Beispielprogramms werden einige grundlegende Assemblerbefehle besprochen.

Mehr

Johannes Kelper Universität Linz. Institut für Elektrische Messtechnik. Dokumentation. ATmeag8-USB Modul. Bernd R. Arminger ATmega8-USB Modul 1

Johannes Kelper Universität Linz. Institut für Elektrische Messtechnik. Dokumentation. ATmeag8-USB Modul. Bernd R. Arminger ATmega8-USB Modul 1 Dokumentation ATmeag8-USB Modul Bernd R. Arminger ATmega8-USB Modul 1 1. Beschreibung Das ATmega8-USB Modul besteht aus einen ATmega8 Mikrokontroller der Firma Atmel (Datenblatt/buch erhältlich unter http://www.atmel.com)

Mehr

Doku zum TFT-Adapter von UB. Inhaltsverzeichnis

Doku zum TFT-Adapter von UB. Inhaltsverzeichnis Doku zum von UB Inhaltsverzeichnis Einleitung...2 Bilder...3 Kompatible Displays :...4 1. Modul-Beschreibungen...5 1.1. Versorgung...5 1.2. TFT-Pinhead...6 1.3. Backlight-Power...7 1.4. FPC-Stecker...8

Mehr

IR-Fernbedienungs- Bausatz IR8. Montageanleitung IR8. IR-Fernbedienungs-Bausatz IR8 Best.Nr

IR-Fernbedienungs- Bausatz IR8. Montageanleitung IR8. IR-Fernbedienungs-Bausatz IR8 Best.Nr IR-Fernbedienungs- Bausatz IR8 Montageanleitung IR8 IR-Fernbedienungs-Bausatz IR8 Best.Nr. 810023 www.pollin.de 2 Rund um die Uhr auf Schnäppchen-Jagd gehen unter: www.pollin.de Montage der Bauelemente

Mehr

Physical Computing. Ralf Nolte. Bielefeld, 13. Dezember 2011

Physical Computing. Ralf Nolte. Bielefeld, 13. Dezember 2011 Physical Computing Ralf Nolte Bielefeld, 13. Dezember 2011 Überblick Motivation Definition Vorstellung der Hardware Vorstellung der Arduino IDE Hello World LC Display Gravity Plug an TWI Bus 2 Motivation

Mehr

Mikrocontroller - Schnelleinstieg

Mikrocontroller - Schnelleinstieg Mikrocontroller - Schnelleinstieg Am Beispiel des Atmel Mega8 Philipp Fabian Benedikt Maier Mikrocontroller Schnelleinstieg Seite 1 Mikrocontroller - Schnelleinstieg: - Was ist ein Mikrokontroller? - Welche

Mehr

Alles in allem ist der Aufbau recht komplex geraten, so dass ich versuchen werde, die Einzelkomponenten genau zu beschreiben.

Alles in allem ist der Aufbau recht komplex geraten, so dass ich versuchen werde, die Einzelkomponenten genau zu beschreiben. Die Hardware Es gab bei mir eine Zeit, in der der Lötkolben an jedem Tag in Betrieb war. Meine Studentenzeit fiel genau in jene Jahre, als die ersten integrierten Schaltungen auf den Markt kamen. Dies

Mehr

14 Mee Controller. 14.1 Mee Controller. 14.1.1 Blockschaltbild Mee Controller. 14.1.2 Beschleunigungssensor. HSR Hochschule für Technik Rapperswil

14 Mee Controller. 14.1 Mee Controller. 14.1.1 Blockschaltbild Mee Controller. 14.1.2 Beschleunigungssensor. HSR Hochschule für Technik Rapperswil 14 Mee Controller Der Mee Controller ist ein Gamecontroller, der eine ähnliche Funktionsweise wie jener der bekannten Wii Konsole von Nintendo hat. Dabei werden die Steuerbefehle vom Beschleunigungssensor

Mehr

Atmel AVR für Dummies

Atmel AVR für Dummies Atmel AVR für Dummies fd0@koeln.ccc.de 29.12.2005 Übersicht 1 Hardware Kurzvorstellung Atmega8 Programmierkabel (Eigenbau vs. Kommerzlösung) Alternative: Bootloader (Programmieren via rs232) Software Speicher

Mehr

I2C-Echtzeituhr am Atmel AVR

I2C-Echtzeituhr am Atmel AVR Fachbereich Elektrotechnik und Informatik Labor für Angewandte Informatik und Datenbanken Praktikum Mikrocontroller und DSP (EMD) Prof.Dr.-Ing. E. Coersmeier I2C-Echtzeituhr am Atmel AVR Name, Vorname

Mehr

Nixie Temperatur Anzeige Bausatz. Bauanleitung und Bedienung

Nixie Temperatur Anzeige Bausatz. Bauanleitung und Bedienung Nixie Temperatur Anzeige Bausatz Bauanleitung und Bedienung Hardware Revision 19.11.2006 Software Version 7.0 Revision 12.1.2008 Diese Dokumentation ist Copyright geschützt. Sie darf nicht für geschäftliche

Mehr

Serielladapter SerCon V1.1

Serielladapter SerCon V1.1 Serielladapter SerCon V1.1 Programmierinterface & V24 auf TTL Wandler Copyright 2007 Holger Buß www.mikrokopter.com Dokument-Version V0.3 SerCon www.mikrocontroller.com SerCon V1.1 Der SerCon V1.1 ist

Mehr

Elektronische Kerze Flackerlicht mit PIC-Mikrocontroller

Elektronische Kerze Flackerlicht mit PIC-Mikrocontroller Elektronische Kerze Flackerlicht mit PIC-Mikrocontroller Stefan Buchgeher 7. Juli 2009 www.stefan-buchgeher.info kontakt@stefan-buchgeher.info Großambergstraße 106/3, A-4040 Linz (Österreich) ++43/699/11

Mehr

Quanton Manual (de) Datum: 20.06.2013 URL: http://wiki:8090/pages/viewpage.action?pageid=9928792 )

Quanton Manual (de) Datum: 20.06.2013 URL: http://wiki:8090/pages/viewpage.action?pageid=9928792 ) Datum: 20.06.2013 URL: http://wiki:8090/pages/viewpage.action?pageid=9928792 ) Inhaltsverzeichnis 1 quanton flight control rev. 1 3 1.1 Anschlüsse für Peripheriegeräte 3 1.1.1 Eingänge / Ausgänge 3 1.1.2

Mehr

UK-electronic 2012/15 Bauanleitung für Tap Tremolo Rev 2.0 Basierend auf TAPLFO von Tom Wiltshire (www.electricdruid.com)

UK-electronic 2012/15 Bauanleitung für Tap Tremolo Rev 2.0 Basierend auf TAPLFO von Tom Wiltshire (www.electricdruid.com) UK-electronic 2012/15 Bauanleitung für Tap Tremolo Rev 2.0 Basierend auf TAPLFO von Tom Wiltshire (www.electricdruid.com) Seite 1..2...Grundlagen/ Bauelementeliste Seite 3...Kurze Schaltungsbeschreibung

Mehr

8.1 Grundsätzlicher Aufbau der Beispiele

8.1 Grundsätzlicher Aufbau der Beispiele 107 8 Beispiele Nachdem nun viele theoretische Grundlagen gelegt wurden, kann man mit dem Programmieren eines Mikrocontrollers beginnen. In den folgenden Kapiteln werden verschiedene Möglichkeiten der

Mehr

DTMF Sender. Es können 252 Zeichen maximal am Stück übertragen werden; die Länge des Strings wird mit einem Byte übertragen.

DTMF Sender. Es können 252 Zeichen maximal am Stück übertragen werden; die Länge des Strings wird mit einem Byte übertragen. DTMF Sender Author DK1RI, Version V02.1, 20160104 This project can be found in https://www.github.com/dk1ri Einleitung Dieses Interface ist eine Vorlage für ein Interface, das ein Gerät, das sich mit DTMF

Mehr

Bauanleitung Quantenwürfel Version 1.0

Bauanleitung Quantenwürfel Version 1.0 Bauanleitung Quantenwürfel Version 1.0 von Jörn Schneider Bauteileliste 3x Widerstand 100Ohm braun-schwarz-braun-gold R1, R2, R3 7x LED gelb 3mm 1x Widerstand 330Ohm orange-orange-braun-gold R4 1x 78M05

Mehr

Interrupts. Funktionsprinzip. Funktionsprinzip. Beispiel in C

Interrupts. Funktionsprinzip. Funktionsprinzip. Beispiel in C Interrupts Funktionsprinzip Interrupts bei ATmega128 Beispiel in C Funktionsprinzip 1 Was ist ein Interrupt? C muss auf Ereignisse reagieren können, z.b.: - jemand drückt eine Taste - USART hat Daten empfangen

Mehr

Aufbau und Inbetriebnahme, Erweiterungskarte, Digital 8I4R

Aufbau und Inbetriebnahme, Erweiterungskarte, Digital 8I4R Inhaltsverzeichnis Hinweis...2 Nachbau...2 Technische Daten...3 Schaltplan...4 Eingänge und Ausgänge...4 ATMega88, Programierstecker, RS232, Erweiterungsstecker...5 Layout...6 Stückliste...6 Bestückung

Mehr

7-Segment Spannung/Strom-Messmodul

7-Segment Spannung/Strom-Messmodul 7-Segment Spannung/Strom-Messmodul Stand: 08.02.2013 Inhalt: Seite 1: Titelblatt Seite 2: Artikel zur Schaltung Seite 4: Schaltplan Seite 5: Bestückungsliste Seite 6: Bestellliste (Fa. Reichelt) Seite

Mehr

Mit dieser kleinen Adapter-Platine können HD44780 kompatible LCD-Displays am I2C-Bus betrieben werden.

Mit dieser kleinen Adapter-Platine können HD44780 kompatible LCD-Displays am I2C-Bus betrieben werden. I2C-Bus Display Mit dieser kleinen Adapter-Platine können HD44780 kompatible LCD-Displays am I2C-Bus betrieben werden. Infos/Übersicht * Die Spannungsversorgung kommt vom I2C-Bus (kein zusätzliches Netzteil

Mehr

crazytrickler Hilfreich ist eine Lupe, eine "dritte Hand" oder ein Platinenhalter und ein Multimeter.

crazytrickler Hilfreich ist eine Lupe, eine dritte Hand oder ein Platinenhalter und ein Multimeter. crazytrickler kann mehr als Tropfen. Aufbauanleitung Hinweis Der Aufbau der crazymachine ist nicht kompliziert, jedoch auch nicht unbedingt als Anfängerprojekt gedacht. Es wird vorausgesetzt, dass gewisse

Mehr

8.0 Erweiterung mit dem 8 Bit D/A Maxim MAX5382

8.0 Erweiterung mit dem 8 Bit D/A Maxim MAX5382 8.0 Erweiterung mit dem 8 Bit D/A Maxim MAX5382 Der MAX5382 ist ein 8 Bit DA Wandler im SOT23 Gehäuse. Der MAX5380 besitzt eine interne Referenzspannung von 2 V, der MAX5381 von 4 Volt und der verwendete

Mehr

Bedienungsanleitung LCQ-Meter (DG5MK) Stand 24.10.2014

Bedienungsanleitung LCQ-Meter (DG5MK) Stand 24.10.2014 Bedienungsanleitung LCQ-Meter (DG5MK) Stand 24.10.2014 Das Bild zeigt die Bedienungs- und Anschlußelemente des LCQ-Meters: Adjust LCD Contrast UB1 7 30 V Potentiometer zum Einstellen des Display-Kontrastes

Mehr

πλ² Synthesizer Bestückungsanleitung für Bausatz Features 2 Oszillatoren 4 Wellenformen 32 Presets 32 Benutzerspeicherplätze

πλ² Synthesizer Bestückungsanleitung für Bausatz Features 2 Oszillatoren 4 Wellenformen 32 Presets 32 Benutzerspeicherplätze πλ² Synthesizer Bestückungsanleitung für Bausatz Features 2 Oszillatoren 4 Wellenformen 32 Presets 32 Benutzerspeicherplätze Spezifikationen Stromversorgung: +5V DC/50mA Maße: 100 x 100 x 23mm Wir gratulieren

Mehr

Beschreibung der Steuerung für DB0RWP DB0RWP

Beschreibung der Steuerung für DB0RWP DB0RWP Beschreibung der Steuerung für DB0RWP TX 438,575 MHz RX 430,975 MHz DB0RWP 439,125 MHz 439,325 MHz 438,575 MHz 438,575 MHz Aufgaben der LED's und Trimmer Grüne LED NF vom RX liegt an Rote LED NF zum TX

Mehr

vorläufige Dokumentation

vorläufige Dokumentation vorläufige Dokumentation DAS BOARD Auf einer Fläche von 80x00 mm sind folgende Komponenten auf der Platine bestückbar : Parallax Propeller Chip im DIP40 Gehäuse EEPROM seriell 4LC56 (K) und höher Spannungsregler,,V

Mehr

Programmierung Nibo 2 Teil 3 Display. * by nicaisystems

Programmierung Nibo 2 Teil 3 Display. * by nicaisystems by HJS Programmierung Nibo 2 Teil 3 Display * by nicaisystems Nibo 2 Programmierung Teil 3 Display Notwendige Programme: AVR Studio 4 ( mit den aktuellen Versionen und Updates ) WinAVR ( in der aktuellen

Mehr

8.3 PCA2.D12 Display-Modul mit 4 Ziffern

8.3 PCA2.D12 Display-Modul mit 4 Ziffern PCD1 - PCD2 Anzeige- und Bedienmodule 8.3 PCA2.D12 Display-Modul mit 4 Ziffern Allgemeines Das Modul PCA2.D12 ist ein Ferndisplay, welches über Ausgänge einer SAIA PCD angesteuert wird. Es besitzt eine

Mehr

CompuLok Zentrale. Uniboost Steuergerät. Aufbauvariante: USB Anschluss mit Kabel. Digitalzentrale für DCC und Motorola Format

CompuLok Zentrale. Uniboost Steuergerät. Aufbauvariante: USB Anschluss mit Kabel. Digitalzentrale für DCC und Motorola Format CompuLok Zentrale Uniboost Steuergerät Digitalzentrale für DCC und Motorola Format Aufbauvariante: USB Anschluss mit Kabel Inhalt Aufbauvariante der CompuLok Zentrale...3 Alternativer USB Anschluss...3

Mehr

Der Mikrocontroller beinhaltet auf einem Chip einen kompletten Mikrocomputer, wie in Kapitel

Der Mikrocontroller beinhaltet auf einem Chip einen kompletten Mikrocomputer, wie in Kapitel 2 Der Mikrocontroller Der Mikrocontroller beinhaltet auf einem Chip einen kompletten Mikrocomputer, wie in Kapitel 1 beschrieben. Auf dem Chip sind die, ein ROM- für das Programm, ein RAM- für die variablen

Mehr

CU-R-CONTROL. Beschreibung zur Schaltung ATMega16-32+ISP MC-Controller Steuerung auf Basis ATMEL Mega16/32. Autor: Christian Ulrich

CU-R-CONTROL. Beschreibung zur Schaltung ATMega16-32+ISP MC-Controller Steuerung auf Basis ATMEL Mega16/32. Autor: Christian Ulrich Seite 1 von 10 CU-R-CONTROL Beschreibung zur Schaltung ATMega16-32+ISP MC-Controller Steuerung auf Basis ATMEL Mega16/32 Autor: Christian Ulrich Datum: 08.12.2007 Version: 1.00 Seite 2 von 10 Inhalt Historie

Mehr

Bausatz Ethernetmodul ENC28J60 Version 1.0 -Bauanleitung und Kurzinformation-

Bausatz Ethernetmodul ENC28J60 Version 1.0 -Bauanleitung und Kurzinformation- Bausatz Ethernetmodul ENC28J60 Version 1.0 -Bauanleitung und Kurzinformation- Seite 1 www.b-redemann.de Achtung! Unbedingt lesen! Bevor Sie den Bausatz aufbauen und in Betrieb nehmen, lesen Sie sich bitte

Mehr

2017/01/23 15:50 1/5 Bedienung

2017/01/23 15:50 1/5 Bedienung 2017/01/23 15:50 1/5 Bedienung Bedienung (J.Müller, Hilfe zu JTCEMU) Das originale 2K-System Das 2 KByte große Betriebssystem bietet die wichtigsten Funktionen zur Eingabe und Verwaltung von BASIC-Programmen.

Mehr

Erste Schritte. Das Arduino-Board. Ihr Fundino-Board. Programmieren für Ingenieure Sommer 2015. Andreas Zeller, Universität des Saarlandes

Erste Schritte. Das Arduino-Board. Ihr Fundino-Board. Programmieren für Ingenieure Sommer 2015. Andreas Zeller, Universität des Saarlandes Erste Schritte Programmieren für Ingenieure Sommer 2015 Andreas Zeller, Universität des Saarlandes Das Arduino-Board Ihr Fundino-Board Anschluss über USB Anschluss über USB Programmierumgebung Download

Mehr

Thermostat PL0045 mit Rampenfunktion. und Schaltausgang. Bedienungsanleitung

Thermostat PL0045 mit Rampenfunktion. und Schaltausgang. Bedienungsanleitung Seite 1 von 8 Bedienungsanleitung Thermostat PL0045 mit Inhaltsverzeichnis 1. Einleitung...2 2. Eigenschaften...2 2.1 Grundlegende Eigenschaften...2 2.2 Schaltverhalten...4 3. Programmierung...4 4. Hardware...6

Mehr

VOLTmonitor. VOLTmonitor. Schritt 1: Schaltung. file://localhost/users/rainer/xp-exchange/erzeugte%20websites/p... 1 of 10 07.07.

VOLTmonitor. VOLTmonitor. Schritt 1: Schaltung. file://localhost/users/rainer/xp-exchange/erzeugte%20websites/p... 1 of 10 07.07. VOLTmonitor VOLTmonitor LM3914 Voltanzeige Diese Voltanzeige wurde von www.pointofnoreturn.org vorgestellt. Meine Leistung besteht lediglich darin, die Anleitung ins Deutsche zu übersetzen. Schritt 1:

Mehr

Serie 8: Microcontroller 17./18.07.2014

Serie 8: Microcontroller 17./18.07.2014 Serie 8: Microcontroller 17./18.07.2014 I. Ziel der Versuche Erster Erfahrungen mit einem Microcontroller sollen gesammelt werden, die grundlegenden Ein- Ausgabe-Operationen werden realisiert. II. Vorkenntnisse

Mehr