LCD

1. Einstellungen

  │ │          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"

1.2 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)
 ')

2. Versuch einer Erklärung

2.2 Erklärung am beiliegenden C6 Script

Ich habe ein Standart 4×20 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

2.3 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