INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Problem bei Temperatur/volt Ampere Abfrage LCD Flimmern
04.03.2016, 15:44 (Dieser Beitrag wurde zuletzt bearbeitet: 04.03.2016 17:03 von nuernie66.)
Beitrag #1
Problem bei Temperatur/volt Ampere Abfrage LCD Flimmern
Hi Leute könntet ihr bei meinen Problem helfen?

und zwar habe ich das Problem das mein LCD flackert da ich bei jedem loop
die Temperatur abfragen will. Die Temperatur ändert sich ja stetig und die Spannung
auch jetzt wollte ich fragen ob es möglich ist die schrift Temp.Mo und Temp Um.
bzw Volt und Amp stehen zu lassen ohne diese im loop aufzurufen ?

Eingesetzt wird das ganze in einem selbst gebautem elektro Mofa Temp Um. = ist die Umrichter Temp Temp Mo soll die Motortemperatur darstellen. Zudem will ich noch eine Volt bzw Ampere messung realisieren. Der code ist noch nicht ganz fertig mir geht es hauptsächlich ums flimmern.

hier der CODE:

Code:
#include <LiquidCrystal.h>
LiquidCrystal lcd (9, 8 ,6 ,5 ,4 ,3);


// Konstanten
const int analogInPin = A5;     // Die Nummer des Pins des Spannungsteilers für die 55V
const int buttonPin = 2;     // Die Nummer des Pins des Menüschalters
const int fanPin = 10;                 // Pin für den Lüfter
const int ntc = A0;                   // Pin für den 10kO NTC Wiederstand
const int ntcNominal = 550;         // Wiederstand des NTC bei Nominaltemperatur
const int tempNominal = 25;           // Temperatur bei der der NTC den angegebenen Wiederstand hat
const int bCoefficient = 490;        // Beta Coefficient(B25 aus Datenblatt des NTC)
const int serienWiederstand = 475;  // Wert des Wiederstands der mit dem NTC in Serie geschalten ist
const int abfrageZahl = 9;            // Je mehr abfragen, desto stabiler isr das Ergebnis, dauert aber länger

// Variablen
int fanSpeed = 0;          // Variable für die Lüftergeschwindigkeit
int fanMin = 60;           // Kleinster PWM Wert für den Lüfter befor er abschält
int fanOut = 1;            // Variable zum pürfen ob der Lüfter aus war
int tMin = 20;             // Untere Grenze des Temperaturbereichs
int tMax = 60;             // Obere Grenze des Temperaturbereichs
int abfrage[abfrageZahl];  // Array Variable für das Mitteln der Temperatur
int buttonState = 0;       // Zustands Variable des Tasters
float durchschnitt = 0;    // Variable für das Mitteln der Temperatur
float temp1;                // Variable für die Berechnung der temperatur nach Steinhart








void setup()
{

  pinMode(fanPin, OUTPUT);        // Setzt den Pin des Lüfters als Ausgang
  pinMode(ntc, INPUT);            // Setzt den Pin des NTC Wiederstands als Eingang
  pinMode(2, INPUT);      // Setzt den Taster als Eingang


  
  
  TCCR1B = TCCR1B & 0b11111000 | 0x01;   // Setzt Timer1 (Pin 9 und 10) auf 31300Hz
}


void loop()
{
  
//LCD Menü
  
  

//LCD Menü wechsel auf Knopfdruck wenn HIGH dann VOLT und Ampere Wenn LOW dann Temp Umrichter und Motor

buttonState = digitalRead(2);
delay(200);



if (buttonState == HIGH) {
  
  lcd.begin(16, 2);
  lcd.print("Temp.Mo:");
  lcd.setCursor(0,1);
  lcd.print("Temp.Um:");
  lcd.setCursor(9,1);
  lcd.print("20");
  lcd.print("\337C");        //Celsius Zeichen
  lcd.setCursor(9, 0);
  lcd.print(temp1);          // Temperatur wird angezeigt
  lcd.print("\337C");        //Celsius Zeichen
  





} else {
  
lcd.print("VOLT:");
lcd.setCursor(9,0);
int sensorValue = analogRead(A5);
float voltage = sensorValue * (55.0 / 1023.0);
lcd.print(voltage);
lcd.setCursor(15,0);
lcd.print("V");
lcd.setCursor(0,1);
lcd.print("AMP:");
  }
  
  
  

  
  
  
  temperaturberechnung();      // Startet die Temperaturerfassungsroutine //Temperaturberechnung für Motortemp.
  
  // Lüftergeschwindigkeit über den Temperaturbereich einstellen
  // TMin->0% PWM | TMax->100% PWM
  fanSpeed = map(temp1, tMin, tMax, 0, 255);    
  
  // Wenn der PWM Wert unter den van FanMin fällt, schält der Lüfter ab
  if (fanSpeed < fanMin)
  {
    fanSpeed = 0;
    fanOut = 1;
  }
  
  // Hysterese
  if (fanOut == 1)
  {
    fanSpeed = 0;
  }
  
  if(temp1 >= 32)
  {
    if(fanOut == 1)
    {
      fanOut = 0;
      analogWrite(fanPin, 255);
    }
  }
  
  // PWM Wert auf 255 begerenzen  
  if (fanSpeed > 255)
  {
    fanSpeed = 255;
  }
  


  analogWrite(fanPin, fanSpeed);      // Den Lüfter mit dem PWM Wert ansteuern
  delay(500);  
}







void temperaturberechnung()
{
  // Nimmt N Abfragen in einer Reihe, mit einem kurzen delay
  for (int i=0; i < abfrageZahl; i++)
  {
    abfrage[i] = analogRead(ntc);
    delay(10);
  }
  
  // Mittelt alle Abfragen
  durchschnitt = 0;
  for (int i=0; i < abfrageZahl; i++)
  {
    durchschnitt += abfrage[i];
  }
  durchschnitt /= abfrageZahl;
  
  // Umwandlung des Wertes in Wiederstand
  durchschnitt = 1023 / durchschnitt - 1;
  durchschnitt = serienWiederstand / durchschnitt;
  
  // Umrechnung aller Ergebnisse in die Temperatur mittels einer Steinhard Berechnung
  temp1 = durchschnitt / ntcNominal;     // (R/Ro)
  temp1 = log(temp1);                     // ln(R/Ro)
  temp1 /= bCoefficient;                 // 1/B * ln(R/Ro)
  temp1 -= 1.0 / (tempNominal + 273.15); // + (1/To)
  temp1 = -1.0 / temp1;                    // Invertieren
  temp1 -= 273.15;                       // Umwandeln in °C
    
    // Ausgabe an den Seriellen Monitor



}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
04.03.2016, 16:26
Beitrag #2
RE: Problem bei Temperatur/volt Ampere Abfrage LCD Flimmern
Das flimmern wirst du wohl nicht ganz weg bekommen, wenn deine Loop so schnell durchläuft. Das LCD ist einfach zu träge.

Aber du kannst es reduzieren, indem du den
Code:
lcd.clear();
aus der Loop entfernst. Dann überschreibst du bei jedem Durchlauf nur die veränderlichen Werte. Texte lässt du stehen.

Damit gewinnst du schon einiges.

Noch mehr gewinnst du, wenn du deinen Sketch in Code-Tags setzt. Dann wird er für uns auch lesbar. So ganz ohne Formatierung ist das schwierig.
Code-Tags erreichst du mit der Schaltfläche "#". Oder vor den Sketch [*code] und nach dem Sketch [*/code], jeweils ohne den *Stern, einfügen.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
04.03.2016, 16:58
Beitrag #3
RE: Problem bei Temperatur/volt Ampere Abfrage LCD Flimmern
Okay ja das Problem ist aber. Wenn ich das Display nicht cleare dann funktioniert es nicht da ich 2 menü punkte hab siehe If Abfrage. Somit überschriebt das eine das andere und dann funktioniert nichts mehr also ist lcd.clear(); doch notwendig oder sehe ich das falsch? Aber LCD zu träge kann doch keine ausrede sein andere Hersteller bekommen es doch auch irgendwie hin?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
04.03.2016, 17:18
Beitrag #4
RE: Problem bei Temperatur/volt Ampere Abfrage LCD Flimmern
(04.03.2016 16:58)nuernie66 schrieb:  Okay ja das Problem ist aber. Wenn ich das Display nicht cleare dann funktioniert es nicht da ich 2 menü punkte hab siehe If Abfrage. Somit überschriebt das eine das andere und dann funktioniert nichts mehr also ist lcd.clear(); doch notwendig oder sehe ich das falsch?
Das siehst du falsch.
Du kannst doch auch den Text überschreiben, der neu angezeigt werden soll.

Zitat:Aber LCD zu träge kann doch keine ausrede sein andere Hersteller bekommen es doch auch irgendwie hin?

Was heißt Ausrede. Die bekommen es hin, weil sie richtig programmieren können. Wink
Dass heißt, du musst eine kleine Pause einlegen, bevor du das LCD neu überschreibst. Dann flackert es nicht mehr so.
Probiere es aus, leg ein kleines "delay" ein.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
04.03.2016, 18:19
Beitrag #5
RE: Problem bei Temperatur/volt Ampere Abfrage LCD Flimmern
Sorry steh grad auf dem Schlauch willst du den Programmteil ausbessern ? Confused
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
04.03.2016, 18:33
Beitrag #6
RE: Problem bei Temperatur/volt Ampere Abfrage LCD Flimmern
(04.03.2016 18:19)nuernie66 schrieb:  Sorry steh grad auf dem Schlauch willst du den Programmteil ausbessern ? Confused
Huh Das kannst du doch selbst machen, wie ich es beschrieben habe.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
04.03.2016, 18:37
Beitrag #7
RE: Problem bei Temperatur/volt Ampere Abfrage LCD Flimmern
Ja so wie du das meinst hab ich es gemacht das Problem ist hier das sobald ich ins andere Menü schalte und wieder zurück dann funktioniert es nicht es wird nur wirr warr angezeigt weil ich das display nich durch die Funktion clear aktualisiert habe.
Deshalb verstehe ich nicht was du meinst und wie ich es machen soll Huh
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
04.03.2016, 18:47
Beitrag #8
RE: Problem bei Temperatur/volt Ampere Abfrage LCD Flimmern
(04.03.2016 18:37)nuernie66 schrieb:  Ja so wie du das meinst hab ich es gemacht das Problem ist hier das sobald ich ins andere Menü schalte und wieder zurück dann funktioniert es nicht es wird nur wirr warr angezeigt weil ich das display nich durch die Funktion clear aktualisiert habe.
Deshalb verstehe ich nicht was du meinst und wie ich es machen soll Huh
Weil du dem LCD nicht richtig mitteilst, wo der Text hin soll.

Beispiel:
Code:
if (buttonState == HIGH) {
   lcd.setCursor(0,0);
   lcd.print("Temp.Mo:");
   lcd.setCursor(0,1);
   lcd.print("Temp.Um:");
usw.
} else {
   lcd.setCursor(0,0);    
   lcd.print("VOLT:");
   lcd.setCursor(9,0);
   int sensorValue = analogRead(A5);
usw.
   }

und das "lcd.begin(16,2);" bitte ins Setup.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Problem mit SD Card Library BennIY 4 186 06.10.2016 18:38
Letzter Beitrag: Bitklopfer
  Temperatur mit nrf24 übertragen jgrothe 17 656 09.09.2016 14:01
Letzter Beitrag: jgrothe
  Problem mit SD.remove Eichner 6 210 22.08.2016 19:42
Letzter Beitrag: Eichner
  4x16 Tastermatrix Problem Michel 16 841 14.07.2016 10:02
Letzter Beitrag: StephanBuerger
  Problem mit Delay und Millis funnyzocker 1 454 26.06.2016 09:54
Letzter Beitrag: hotsystems
  Problem mit ESP8266 und EMail senden torsten_156 1 594 13.06.2016 21:14
Letzter Beitrag: torsten_156
  ESP8266_01 flashen - Problem torsten_156 12 1.040 30.05.2016 20:12
Letzter Beitrag: torsten_156
  Hardwareserial/Softserial: Problem mit Superklasse tuxedo0801 10 476 19.05.2016 12:25
Letzter Beitrag: amithlon
  ESP8266 HTML Problem arduino_weatherstation 1 493 25.04.2016 21:52
Letzter Beitrag: rkuehle
  Problem mit OLED 0.96" Display torsten_156 3 534 03.04.2016 15:10
Letzter Beitrag: hotsystems

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste