Praktikum DST MRT 2.Termin Inhalt Praktikum DST MRT 2.Termin... 1 2.1 LCD Anzeige ( 2_01_LCD und Taster)... 2 2.1b Anhang: ASCII Code Tabelle (LCD-Display: Displaytech 164A)... 3 2.2 V24-Datenschnittstelle (RS232)... 4 2.3 Entwickeln Sie ein Uhr... 5 2.4 Uhrzeiteinstellung mittels Taster (wie Armbanduhr)... 5! LCD- und V24- Software ist noch nicht voll auf Statemachines umgestellt => Aufrufe nur von main()-endlosschleife, also nicht durch Timer-Interrupts aufrufen! 161020_Praktikum_2_DST_MRT.doc 1 of 5 2016 Zielinski
20.10.2016 2. Termin Praktikum DST (MRT Teil) 2.1 LCD Anzeige ( 2_01_LCD und Taster) Neues Projekt 2.1 aus 1.4: Für viele Projekte und zur besseren Fehlerfindung sind Ausgabeeinheiten sinnvoll. Auf dem Board ein 4-zeiliges Displays implementiert! Fügen Sie die beiden Routinen aus P: LCD.c und LCD.h in Ihr neues Projekt 2_01_LCD&Taster ein! Fügen Sie in main.c die Zeile #include LCD.h und im Initialisierungsteil die Zeile LCD_init(LCD_DISP_ON, ); ein. Nach Programmierung des Controllers sollte o.ä. in der 1. Zeile des LCD-Displays erscheinen. Die Software von Aufgabe 1.4 sollte immer noch funktionieren! Schreiben Sie ab dieser Aufgabe immer die Aufgabennummer in die 1.Zeile des Displays mit: #define Header A2.1 und LCD_init(LCD_DISP_ON,Header); Realisieren Sie folgende Anzeige in LCD_Ausgabe.c und LCD_Ausgabe.h: P(0,0) T3 T2 T1 T0 P(15,3)!! LCD-Ausgaben in der Endlos-Schleife aus main.c als Funktion LCD_Ausgabe(); aufrufen!!!! Nicht in Zeit-Statemachines aufrufen (dauert zu lange => System kackt ab!)!! Definieren Sie die Konstante PI (#define PI 31415) // als Int * 10000 Geben Sie die Zahl PI an Pos. 5,1 mit 4 Nachkommastellen aus! [ PI= 3,1415] (LCD_putif();) Geben Sie die Zahl PI an Pos. 5,2 mit 4 Nachkommastellen negativ aus! [-PI=-3,1415] Geben Sie die Tastenzählwerte von T1 an Pos 9,3 und T0 an 13,3 aus (LCD_puti();)! LCD_init(uint8_t dispattr,const char *Title); // s.o. void LCD_clrscr(void); // Löscht Display void LCD_home(void); // Cursor an Pos. [0,0] void LCD_gotoxy(uint8_t x, uint8_t y); // Spalte 0-15 Zeile 0-3 void LCD_putc(char c); // Gibt char aus void LCD_puts(const char *s); // Gibt String aus hallo Welt void LCD_puti(int zahl, int sges); // Zahl mit sges Stellen ausgeben void LCD_putif(int zahl, int sges, int floats); // Zahl als float mit sges Ziffern // und floats Nachkommastellen // Vorzeichen fügt eine Stelle hinzu void LCD_putb(uint8_t a); // uint8 als Binärzahl mit 8 Stellen Weitere LCD-Funktionen finden Sie am Ende der Datei LCD.h. 2016 Zielinski 2 of 5 161020_Praktikum_2_DST_MRT.doc
2.1b Anhang: ASCII Code Tabelle (LCD-Display: Displaytech 164A) 161020_Praktikum_2_DST_MRT.doc 3 of 5 2016 Zielinski
20.10.2016 2. Termin Praktikum DST (MRT Teil) 2.2 V24-Datenschnittstelle (RS232) Neues Projekt 2_02_V24_Out aus 2.1: Zur Kommunikation über die V24-Schnittstelle müssen wir die Terminalemulation WINTERM starten (siehe rechts). Das Einlesen von V24-Inputdaten geschieht über Interrupt mit einem Ringpuffer [siehe V24.h], es kann also nichts verloren gehen! Am PC Verbinden Sie den V24-Kabel mit dem linken Anschluss des MC-Boards. Fügen Sie die beiden Files V24.h und V24.c in Ihr Projekt ein. V24_init_intr(9600, 16000000, ); // 9600 Baud bei // 16Mhz Takt Der Text auf der Terminalemulation erscheinen. o.ä., sollte Ändern Sie die Headerdefinition und fügen Sie auch in der V24-Initialisierung Ihre Aufgaben Nr. ein. #define Header "A 2.2" // allg. gültige Definitionen => main.h V24_init_intr(9600, 16000000, Header); // Sonderzeichen ANSI-C \t = Tabulator \r = neue Zeile (Trennzeichen zwischen den Daten soll der Tabulator \t sein, damit EXCEL die Daten später auswerten kann! Wenn Sie nun das Programm in den Controller laden müsste, im WINTERM-Fenster, der Header ausgegeben werden. Geben Sie die LCD-Ausgaben jetzt auch über die V24-Schnittstelle aus. V24_Ausgabe(); in V24_InOut.c und V24_InOut.h! Die V24-Routinen sind kompatibel zu den LCD-Routinen (nur gotoxy(); gibt es natürlich nicht)! Beseitigen Sie den Ausgabefehler (wird viel zu schnell ausgegeben s.u.) und formatieren Sie die Zeile! Ausgabe jede Sekunde: ++V24_sek_um; // in int1hz() einfügen ------------------------------------------------------------------------------------------------ if(v24_sek_um!= 0) { // in V24_Ausgabe() --V24_sek_um; // Sekunde ist um V24_... // Alle Ausgaben } // fertig Ausgabe : T3= 003 T2= 002 T1= 002 T0= 000 PI= 3,1415 -PI= -3,1415 2016 Zielinski 4 of 5 161020_Praktikum_2_DST_MRT.doc
2.3 Entwickeln Sie ein Uhr Neues Projekt 2_03_Uhr_1 aus 2.2: Zeigen Sie die Uhrzeit (Start mit 23:59:54) vor den Daten an! Auf dem LCD-Display ab Position (8,0), V24-Ausgabe: A2.3 23:59:54 T3 = 010 T2 = 003... Neue Funktion UHR_Mathe(); in UHR.c und UHR.h. Ausgaben als V24_Ausgabe_Uhr(); und LCD_Ausgabe_Uhr(); in V24_InOut.c bzw. LCD_Ausgabe.c. Daten in: unsigned char UHR_Stunde, UHR_Minute, UHR_Sekunde;. LCD-Display: V24 Display: void V24_Ausgabe_Uhr(void)! void LCD_Ausgabe_Uhr(unsigned char x, unsigned char y) bzw. 2.4 Uhrzeiteinstellung mittels Taster (wie Armbanduhr) Neues Projekt 2_04_Uhr_mit_Tasten aus 2.3. Erweitern Sie Ihre 2-Tasten Statemachines auf alle 4 Tasten mit entsprechenden Ausgaben. V24-Ausgabe: A2.4 00:01:28 T3 = 010 T2 = 005 T1 = 005 T0 = 005 LCD-Ausgabe: T3 T2 T1 T0 A3 = fertig A2=nächste Stelle A1= -1 A0 = +1 Schreiben Sie die Funktion UHR_init_4_Tasten(); (aus Ordner P:) im File UHR.c. Rufen Sie die Funktion als letzte Initialisierungsfunktion im main(); auf. Die Cursor-Blinkfrequenz beträgt ca. 1Hz. Damit man den Cursor sehen kann, sollte die neue Routine: void LCD_A_Uhr_C(unsigned char x, unsigned char y, unsigned char cdx); // cdx Cursor dx zu x nur aufgerufen werden, wenn eine Taste betätigt wurde. Der Cursor blinkt LCD_command(LCD_DISP_ON_BLINK); auf dem LCD-Display an der Stundenzahl. Blinken aus: LCD_command(LCD_DISP_ON);. Mit T1(T0) kann jetzt die Stunde eingestellt werden. Mit T2 wird zu den Minuten geschaltet dann zu den Sekunden und wieder die Stunden. T3 übernimmt die eingestellte Zeit, startet die Uhr und beendet die Uhrzeiteinstellung für immer. Ist die Uhrzeit einmal eingestellt kann sie vorerst nicht mehr nachgestellt werden! - Ende Termin 2-161020_Praktikum_2_DST_MRT.doc 5 of 5 2016 Zielinski