- LiFePO4 Speicher Test         
Ergebnis 1 bis 7 von 7

Thema: LCD Flackert

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    25.07.2012
    Beiträge
    47

    LCD Flackert

    Anzeige

    Powerstation Test
    Hallo,
    Ich bin gerade dabei ein Programm zu erstellen bei dem eine Heizung je nach Temperatur ein bzw. ausgeschalten werden soll. Die soll Temperatur kann über Taster eingestellt werden.
    Auf einem LCD Display wird die Soll und Ist Temperatur angezeigt . Das Programm funktionier soweit auch (Ausgänge per LED simuliert), allerdings habe ich das Problem das die Temperatur werte im Display leicht flackern (nur die Grad Angabe, der Text "Soll Temp:" und "Ist Temp" wird ohne Flackern angezeigt). Ich habe gelesen das man diese werte nur aktualisieren soll wenn sie sich auch ändern, daher kann das Flackern kommen. Ist das richtig? Wenn ja weis ich aber nicht so richtig wie ich das im Programm umsetzen soll.
    Danke im voraus

    Code:
    #include <LiquidCrystal.h>
    LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
    
    float sensor = 0;
    int celsius = 0;
    int soll_temp = 30;
    int einschalt_temp = 0;
    int abschalt_temp = 0;
    int taster_temp_hoch = 2;
    int taster_temp_runter = 3;
    int heizung = 4; //LED rot
    int lueftung = 5; //LED grün
    unsigned long previousMillis = 0;
    unsigned long interval = 1000;
    unsigned long previousMillis2 = 0;
    unsigned long interval2 = 1000;
    
    void setup() 
    {
      lcd.begin(16, 2);
      pinMode(taster_temp_hoch, INPUT_PULLUP);
      pinMode(taster_temp_runter, INPUT_PULLUP); 
      pinMode(heizung, OUTPUT); 
      pinMode(lueftung, OUTPUT);
    }
    
    void temp_einstellung()
    {
      if(digitalRead(taster_temp_hoch) == LOW)
      {
        if(millis()-previousMillis > interval)
        { 
          previousMillis = millis();
          soll_temp++;
        }
      }
      if(digitalRead(taster_temp_runter) == LOW)
      {
        if(millis()-previousMillis > interval)
        {
          previousMillis = millis();
          soll_temp--;
        }
      }
    }
    
    void temp_regelung()
    {
      if(celsius > abschalt_temp)
      {
        digitalWrite(heizung, LOW);
      }
      else if(celsius < soll_temp)
      {
        digitalWrite(heizung, HIGH);
      }
    }
    
    void LCD_ausgabe()
    {
        lcd.setCursor(0, 0);
        lcd.print("Soll Temp:    C");
        lcd.setCursor(11, 0);
        lcd.print(soll_temp);
        lcd.setCursor(0, 1);
        lcd.print("Ist Temp:    C");
        lcd.setCursor(10, 1);
        lcd.print(celsius);
    }
    
    void loop() 
    {
      digitalWrite(lueftung, HIGH);
      
      sensor = analogRead(0);
      celsius = (580.0-sensor)/10; 
      
      abschalt_temp = soll_temp + 2;
      
      temp_einstellung();
      temp_regelung();
      LCD_ausgabe();
    }

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von BMS
    Registriert seit
    21.06.2006
    Ort
    TT,KA
    Alter
    32
    Beiträge
    1.192
    Hallo,
    an deiner Stelle würde ich einfach eine kleine Verzögerung in die LOOP programmieren (z.B. 50-100ms).
    Spricht etwas dagegen?
    Grüße, Bernhard
    "Im Leben geht es nicht darum, gute Karten zu haben, sondern auch mit einem schlechten Blatt gut zu spielen." R.L. Stevenson

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.01.2014
    Beiträge
    454
    Blog-Einträge
    3
    In LCD_ausgabe() schreibst du erst Leerzeichen, um sie dann sofort mit Temperaturwerten zu überschreiben -> Flackern. Versuchs mal mit printf.

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Du verwendest doch millis(); Warum verwendest du das nicht auch um nur alle 500msec etwas auf das LCD zu geben.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  5. #5
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.652
    .. das Problem das die Temperatur werte im Display leicht flackern ..
    Die üblichen LCD-Routinen haben relativ lange Wartezeiten bei der Ausgabe der einzelnen Befehlen ans LCD. Wenn man da eine schnelle Schleife zum Anzeigen/Ausgeben von Werten hat, dann ist dieses Flackern nicht unüblich. Aber Deine Sensor+Celsius-Berechnung enthält ja Gleitkommaoperationen, deren Ablauf die Ausgabe verlängert (ich kenne aber keine arduino-Bibliothek, weder für FP noch für LCD). Die Vorschläge von Bernhard und Hubert.G sehe ich als erfolgversprechend an.
    Zuletzt: Ich habe eine Schaltung aus "meiner Frühzeit" mit einem zweizeiligen, beleuchteten LCD direkt mit dem Controller an/hinter einem LDO-Spannungswandler (2950) - da flackern die Ausgaben immer, weil der mit dem Strom für die LCD-Beleuchtung und eine Messoperation durch Bestromung von Bauteilen wohl am oberen Ende der Spezifikation oder darüber ausgelastet ist.
    Ciao sagt der JoeamBerg

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2013
    Ort
    Region Basel
    Alter
    66
    Beiträge
    2.435
    Code:
    void LCD_ausgabe()
    {
        static int last_Celsius   = -1000;
        static int last_soll_temp = -1000;
    
        if (last_soll_temp != soll_temp)
          {
             last_soll_temp = soll_temp;
    
             lcd.setCursor(0, 0);
             lcd.print("Soll Temp:    C");
             lcd.setCursor(11, 0);
             lcd.print(soll_temp);
    
          }
        if (last_celsius != celsius)
          {
             last_celsius = celsius;
    
             lcd.setCursor(0, 1);
             lcd.print("Ist Temp:    C");
             lcd.setCursor(10, 1);
             lcd.print(celsius);
          }
    }
    Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    25.07.2012
    Beiträge
    47
    Sehr gut, vielen dank für eure Tipps.

    Eine frage noch gibt es ein Buch welches man für den einstieg empfehlen kann?

    Danke

Ähnliche Themen

  1. Notebook TFT Flackert
    Von Kaiser-F im Forum PC-, Pocket PC, Tablet PC, Smartphone oder Notebook
    Antworten: 7
    Letzter Beitrag: 24.10.2007, 15:11
  2. LCD (4*27) an ATMega32 flackert...
    Von dexter26 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 07.10.2007, 21:04
  3. Analogheingang flackert
    Von wkatze im Forum Elektronik
    Antworten: 4
    Letzter Beitrag: 30.01.2006, 20:18
  4. Relais flackert
    Von Marten83 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 6
    Letzter Beitrag: 11.08.2005, 14:43
  5. LEDs flackert
    Von GastGast im Forum Elektronik
    Antworten: 3
    Letzter Beitrag: 21.02.2005, 17:09

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad