Display 1,14 Zoll 135x240 Pixel Treiber ST7789V

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    • Thomas1964 wrote:

      jetzt gibt es keine 33Uhr 97 mehr.

      Wie langweilig
      Schön wäre eine Umbenennung des Codes. Jetzt habe ich dreimal Version 114_6.( An anderer Stelle hat das gefühlte 30 Beiträge gedauert bis wir wieder auf den gleichen Stand waren) Es gab immer Mißverständnisse da die Codes verschiede Zeilennummern für die jeweiligen Befehle hatten.
      z.B. Das Incr Stunden der Isr steht in Zeile 392/934/400.

      Dann gibt es noch das Problem das das Programm nach mehreren Änderungen unter Umständen nicht mehr funktioniert. a_217_27b18bee
      Ganz blöd wenn dann die funktionierende Version überschrieben wurde weil keine neue angelegt wurde.
      Da bin ich ein bisschen faul, hat mir schon viele Stunden gekostet a_67_e210de67

      Laufen die Dispays stundenweise oder über Tage/Wochen? Wie lange dauert es bis sie verschiedene Zeiten haben/ wieviele Minuten gehn sie falsch nach Tagen/WochenMonaten?

      The post was edited 1 time, last by Pluto25 ().

    • Hallo Pluto,

      Bei der Leiterplatte die ich gemacht habe, sind beide Controller verbunden, habe ich aber noch
      nicht in das Programm gemacht, da soll der eine Controller dem anderem den Sekunden oder Minutentakt
      senden.
      Die Displays können auch entweder nur Stundenweise laufen, dann muss aber immer die Uhrzeit gestellt werden, oder
      halt immer an, dann läuft die Uhrzeit mit ca. 1 Minute Fehler am Tag.



      Gruß Thomas
      Files
    • Thomas1964 wrote:

      Hallo Pluto,
      bei den einzel Display funktioniert das ohne Sync.
      Aber wenn ich vorne Abfahrt und hinten Ankunft habe, muss das synchron laufen.
      Sonst laufen mir die Zeiten weg.

      Gruß Thomas
      Zwei Controller könnte man über einen Pin synchronisieren.
      Der zeitgebende Controller muss dann im Sekundentakt an einen Pin einen Puls ausgeben.
      Im 2. Controller wird damit ein Interrupt ausgelöst und die Uhr weitergestellt.

      Blöd nur, wenn man die Uhren stellen muss.

      Dann müsste man die Controller über eine Schnittstelle verbinden. Hier könnte man die I2C oder SPI-Schnittstelle nehmen. Natürlich geht auch seriell.
      Aber das ist dann vermutlich deutlich mehr Aufwand, als beide Anzeigen in einem Controller zu verwalten.
      Dann läuft das synchron und die Uhr muss auch nur 1x gestellt werden.

      Dann muss man aber das Problemchnen mit der CS-Leitung lösen. Hier ist dann vermutlich ein Eingriff in die Lib notwendig.
      Kannst ja mal Pluto oder HKIpnik fragen ob jemand Zeit hat das zu ändern.

      Für dich würde sich im Programm dann nur ändern, dass du die CS-Leitung selber aktivieren must, jenachdem, welches Display eine folgende Ausgabe erhalten soll.

      Ich würde den letzteren Weg favorisieren.

      Ist deine Uhr zu langsam oder zu schnell? Hier könnte man mit einem Dreko die Frequenz bestimmt noch hinziehen.
      Oder einfach mal ein anderes Quarz probieren. Vielleicht ist das genauer.

      Allerdings solltest du dann deinen Code anders aufbauen, sonst wird es mit 2 Anzeigen auch nix.
      Der Controller kann das locker.
    • Thomas1964 wrote:

      weiß einer, ob es eine Schriftart gibt
      die ähnlich wie eine 7 Segmentanzeige ist ?
      Das gibts bestimmt. Einfach mal Dr. Google fragen.
      Oder selber einen Font machen, speziell für 7-Segment-Anzeige. So schwer ist das nicht.
      Ich denke das möchtest du für die Uhr-Anzeige? Sieht dann bestimmt super aus.

      Die Umlaute kann man auch in einem bestehenden Font ergänzen.

      Leider funktioniert der Fonteditor von Bascom nicht.
    • Mitch64 wrote:

      Leider funktioniert der Fonteditor von Bascom nicht.
      -Nicht perfekt. Aber es ist möglich den Font zu verlängern: Einfach mit einem Text Editor soviele Zeilen hinzufügen wie gebraucht werden. Danach die eingefügten im fonteditor richtig desinen. Links zeigt er wie das Zeichen aussehen soll und rechts das falsch eingefügte.
      Oder mit Peers Fontmaker (Lexikon). Der hakelt da auch etwas. Nach dem Verlängern die Datei neu einladen dann hat er alle Zeichen die dann gefüllt werden können.

      Thomas1964 wrote:

      Sonst laufen mir die Zeiten weg.
      Erst nach Wochen (<= 1 Min pro Tag)
    • @Thomas1964
      Ich habe gerade in die Lib geschaut.
      Es sind keine Änderungen an der Lib bezüglich Chip-Select notwendig.
      Einfach den CS1 in der Configuration fürs Display nicht angeben und selbst zwei Pins für CS (Display A und B) definieren und manuell schalten.
      Auf diese weise ist es möglich auch mehrere Displays (3 oder mehr) zu betreiben. Pro Display einen CS-Pin notwendig.
    • Warum das aber vorher nicht geklappt hat ist dir nicht klar?

      BASCOM Source Code

      1. sub ZeiteinstellungStunden()
      2. cls
      3. Setfont Color16x16
      4. Boxfill(0 , 0) -(240 , 135) , blue
      5. For S =1 to 23 step 1
      6. tmpString = "00"+Str(Stunden)
      7. Zeit = Right(tmpString , 2) + ":"
      8. tmpString ="00" +Str(Minuten)
      9. Zeit = Zeit + Right(tmpString,2)
      10. Lcdat 70,70,Zeit,White, Blue
      11. Lcdat 100 , 60 ,"Uhrzeit", White, Blue
      12. incr Stunden
      13. waitms 800
      14. if Taste_Stunden = 0 then decr Stunden
      15. if Taste_Stunden = 0 then Exit sub
      16. If Stunden >= 24 then Stunden = 0
      17. next S
      18. end sub
      Display All
      Bevor du deine For-Schleife verlässt dekrementierst du den Wert, den du davor inkrementierst.
      Wenn du in die Routine springst, zeigst du die Zeit an, und veränderst diese gleich.
      Damit ist angezeigte Zeit <> interne Zeit. Das ist dein Fehler.

      Wenn du den Wert am Anfang inkrementierst und danach die Zeit anzeigst,
      musst du auch den Fehler nicht mehr korrigieren, wenn du die Schleife verlässt.

      Das ist ein logischer Fehler im Ablauf, den du da mit der Zeile 14 kompensierst (Symptombehandlung).

      Damit dein Code mal etwas mehr struktur bekommt, solltest du den etwas aufräumen.

      Ein Punkt ist, dass du in der Hauptschleife und in der Routinen ZeiteinstellungStunden und ZeiteinstellungMinuten den gleichen Code hast, um die Zeit anzuzeigen.

      Du kannst den Code der da gleich ist in eine Sub verlagern (z.B. ShowTime) und dann von den 3 Orten einfach per Call aufrufen.

      Als 2. würde ich die For-Schleifen in den ZeiteinstellungStunden/Minuten raus nehmen. Das ist eher kontraproduktiv.

      In den Routinen müsste nur stehen Inktement Stunden bzw. Minuten, Dann prüfen, ob ein Überlaufstatt findet und wieder 0 setzen, dann Call ShowTime und fertig.
      Auf das Waitms 800 kannst du auch verzichten, wenn du die Tasten per Debounce abfrägst.

      Da gibt's noch mehr, was man vereinfachen kann.
      Das hilft dir später beim Implementieren des 2. Displays, falls du das noch vor hast.

      Falls du jetzt nicht verstanden hast, was ich dir da versuche zu sagen, dann frage einfach und wir können es Schritt für Schritt machen.
    • Mitch64 wrote:

      Wenn du den Wert am Anfang inkrementierst und danach die Zeit anzeigst,
      musst du auch den Fehler nicht mehr korrigieren, wenn du die Schleife verlässt.
      Das hatte aber den gewollten? Effect das die Zeit sich erst nach einer Weile Änderte. Ist das Incr Oben ändert es die Zeit sofort beim Tastendruck. Also kein Chance das Menue zu sehen ohne Änderung daher vielleicht gewollt.
    • Hallo Mitch,

      bin leider im Augenblick zu nichts gekommen, habe die Leiterplatte mal aufgebaut.
      Da ich die Leiterplatte mit 3,3Volt und den Controller mit Quartz mit 16Mhz betreibe habe ich
      das Problem, das er über den Datenblattangaben liegt.
      Normal sollte er bei 3,3 Volt mit maximal 10 Mhz takten.
      Jetzt müsste ich den Quartz auf 10Mhz ändern : die jetzige Timer Einstellung ist

      Config Timer1 = Timer , Prescale = 1024 , CLEAR_TIMER = 1
      Compare1A = 15625 - 1 ' Timer auf 1 Hz stellen

      On OC1A ISR_Sekundentakt 'ISR-Routine für OC1A-Interrupt
      Enable OC1A 'OC1A-Interrupt erlauben
      Enable Interrupts

      Es gibt ja hier im Bascom eine Timer Berechnung von rmc-sachsen.de/?nav=bascom-timer-berechnung.

      Dort sollte folgende Einstellung vorgenommen werden :

      'Quarzfrequenz: 10 MHz
      'Gewünschte Zeit: 1000 ms
      'Erreichbare Zeit: 999.9872 ms
      'Abweichung: 0.00128 % bzw. 12.8 ppm


      Const Timer1_Preload = 26474

      Config Timer1 = Timer, Prescale = 256
      Enable Timer1
      Timer1 = Timer1_Preload
      On Timer1 Isr_Timer1
      Enable Interrupts

      Aber wie wäre das denn in meinem Code ?
    • Thomas1964 wrote:

      Normal sollte er bei 3,3 Volt mit maximal 10 Mhz takten
      Bei 2,7V kann er 10Mhz bei 3,3V sind 16 Mhz nur knapp zuviel sollte aber gehen (als Eigenprojekt)

      Der Teiler ist Ok, könnte nach einigen Tagen vielleicht der Quarzabweichung angepasst werden.(Falls es mehr als 2,2Sekunden/Tag sind)
      Ganz genau (außer Quarzabweichung ) sind 200 ms "erzählbar" ( Prescaler 64, Oc1a 31249)