====== LCD ====== ===== - Einstellungen ===== ==== - Menuconfig ==== │ │ Load a Default Configuration ---> │ │ General Setup ---> │ │ [*] control6 scripts (EXPERIMENTAL) │ │ I/O ---> │ │ [*] TTY Layer (EXPERIMENTAL) ---> │ │ (20) screen width │ │ (4) screen height │ │ --- TTY Low-Level Drivers │ │ [*] HD44780 Output │ │ LCD Displays ---> │ │ [*] HD44780 module driver (Character-LCD) ---> │ │ (ks0067b) Controller type // Wichtig ! │ │ (Direkt) Connection type │ │ [ ] Readback support │ │ [ ] Multiple ENABLE support │ │ [ ] Invert Backlight switch │ │ [*] Onewire support ---> │ │ [*] Onewire device detection support │ │ Applications ---> │ │ [*] System clock support ---> │ │ [*] Date and Time support │ │ [*] Synchronize using NTP protocol │ │ NTP IP: "150.101.254.110" ==== - pinning/hardware/etherrape.m4 ==== ifdef(`conf_HD44780', ` pin(HD44780_RS, PA0) pin(HD44780_RW, PA1) pin(HD44780_EN1, PA2) pin(HD44780_D4, PA3) pin(HD44780_D5, PA4) pin(HD44780_D6, PA5) pin(HD44780_D7, PA6) ') ===== - Versuch einer Erklärung ===== ==== - Passende Links ==== * Artikel #2: http://old.ethersex.de/index.php/Benutzer:Rdnzl/c6_lcd * Artikel #1: http://old.ethersex.de/index.php/Temperaturanzeige_mit_TTY * Mailinglist: http://list.zerties.org/pipermail/ethersex-devel/2010-April/002189.html ==== - Erklärung am beiliegenden C6 Script ==== Ich habe ein Standart 4x20 HD44780. Bei Controller Type ks0067b auswählen, dann funktioniert **TTY_CREATE_WINDOW** wunderbar, anders war es nicht möglich ein TTY-Fenster zu erzeugen das an der gewünschten Position dargestellt wird.\\ Am Bild ist die Ausgabe wunderbar zusehen. In der ersten Zeile wird mit **TTY_CREATE_WINDOW(clock, 0, 8, 0, 0**) die Uhrzeit ins Display geschrieben. Die Uhrzeit startet also bei 0,0 in Zeile 0 und bekommt 8 Stellen zur Verfügung. Danach folgt die Abfrage vom Temperatursensor, Ausgabe mittels **TTY_CREATE_WINDOW(temp, 0, 6, 0, 9)**, die Temperatur bekommt 6 Stellen inklusive Vorzeichen. Die Temperaturanzeige befindet sich nun wie im Bild zu sehen rechts neben der Uhrzeit. Die Temperaturausgabe startet nun bei 0,9 also in Zeile 0 AM 9ten Kästchen. In der zweiten Zeile schreiben wir "Zeile2" und danach "Weiter" mittels den Befehlen **TTY_GOTO(1,0) TTY_WRITE("Zeile2")** und **TTY_GOTO(1,8) TTY_WRITE("Weiter")**. Mittels **TTY_GOTO** die Ausgabe auf Zeile 1 setzen und bei Position 0,0 beginnen. Das Wort "Weiter" beginnt hier erst bei 1,8 somit.. zweite Zeile und AM 8ten Kästchen. Der Rest erklärt sich glaub ich von selbst, also dieses hier **TTY_GOTO(2,0) TTY_WRITE("Zeile3")** und **TTY_GOTO(3,0) TTY_WRITE("Zeile4")**. TTY_CREATE_WINDOW(WindowName, AnzahlZeilen, LängeZeile, StartPosY, StartPosX) TTY_GOTO(0,0) ist am Display die Zeile 1 Position 1 TTY_GOTO(1,0) ist am Display die Zeile 2 Position 1 TTY_GOTO(2,0) ist am Display die Zeile 3 Position 1 TTY_GOTO(3,0) ist am Display die Zeile 4 Position 1 NOCH RAUSFINDEN MUSS --> TTY_CREATE_WINDOW(clock, 1, 8, 0, COLS - 8) // dnl Create sub-window to display a clock at the upper right-hand side {{:ethersex:img_6892.jpg?direct&200|}} ==== - Control6 Script ==== C6_HEADER(`/* This will be in control6.h */') CONTROL_START CLOCK_USED() THREAD(temploop) int16_t Temperatur = ONEWIRE_GET(10a00599010800da); dnl max. Laenge des erzeugten Strings: 5 (123.4 bzw. -12.3) char temp_str[5]; itoa_fixedpoint(Temperatur, 1, temp_str); TTY_SELECT(temp) TTY_HOME() TTY_WRITE(`"%5sC"', temp_str) WAIT(2) THREAD_END(temploop) THREAD(MAINLOOP) TTY_SELECT(clock) TTY_HOME() TTY_WRITE_TIME() WAIT(1) THREAD_END(MAINLOOP) ON STARTUP DO TTY_CLEAR() TTY_GOTO(1,0) TTY_WRITE("Zeile2") TTY_GOTO(1,8) TTY_WRITE("Weiter") TTY_GOTO(2,0) TTY_WRITE("Zeile3") TTY_GOTO(3,0) TTY_WRITE("Zeile4") TTY_CREATE_WINDOW(clock, 0, 8, 0, 0) TTY_CREATE_WINDOW(temp, 0, 6, 0, 9) THREAD_START(MAINLOOP) THREAD_START(temploop) END CONTROL_END