Forum: Mikrocontroller und Digitale Elektronik Arduino, LCD und PWM


von Arduinoquest (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich habe eine Frage zum Arduino mit angeschlossen Display 16x2 über eine 
4bit Ansteuerung. Sowie einer Nutzung des PWM Ausgangs.

Es werden Werte von einem Temperatursensor analog eingelesen und über 
eine Formel in float Temperaturwerte umgewandelt. Dies steuert dann 
einen Analogausgang PWM. Ein Motor wird angesteuert um die Motordrehzahl 
(Lüfter) zu erhöhen


Das Programm funktioniert soweit wenn man die folgenden Befehle 
ausklammert, allerdings ist dann die Motorregelung inaktiv.

//analogWrite(motor, 0); // läuft der Motor nicht,
//analogWrite(motor, Wertint); //fängt der Motor langsam an zu drehen 
und wird immer schneller (je nach Wert und Temperatur),
//analogWrite(motor, 255); //läuft Motor mit höchster Geschwindigkeit,

sobald man das aber wieder einkommentiert, hat das Display 2 Zyklen etwa 
eine korrekte Anzeige, danach wird es mit Hyroglyphen überschrieben.

Kann es sein, das der PWM Timer und das Display zusammen nicht können. 
Benutzt die Funktion Liquidcrystal auch Timer?

Habt ihr eine Idee?

Danke

: Verschoben durch User
von Stefan K. (stefan64)


Lesenswert?

Vielleicht wird das Display durch Störimpulse des Motors gestört. Zieh 
mal den Motor ab und lass Dein Programm mit Motorausgabe laufen. Wenn 
Dein Problem danach verschwunden ist, hast Du kein Code-, sondern ein 
elektrisches Problem.

Viele Grüße, Stefan

von Arduinoquest (Gast)


Lesenswert?

Das können wir ausschließen, da wir den Motor nicht bestromt haben. Wir 
hatten die externe Motorversorgung auch getrennt und aktiv.

Grüße

von Hubert G. (hubertg)


Lesenswert?

Habe das mal getestet, bei mir wird nichts überschrieben.
Allerdings passte die Displaybelegung nicht.
Habe das umgeändert auf:
LiquidCrystal lcd(12,11,2,3,4,5);
Es könnte ein Problem mit Pin13 sein.

Das ist es auch, ändere nur 13 auf 11.

: Bearbeitet durch User
von Arduinoquest (Gast)


Lesenswert?

Leider bringt das bei uns den selben Effekt. Wir haben auch schon ein 
anderes Display von einem anderen Hersteller eingebaut. Jedoch bringt 
das auch den selben fehlerhaften defekt.

if (temperature <0.0) { //Wenn Temperatur kleiner als 0°C ist,
    //analogWrite(motor, 0); // läuft der Motor nicht,
    analogWrite(LED, 0); // leuchtet die LED nicht,
    digitalWrite(LED1, LOW); //LED aus,
    digitalWrite(LED2, LOW); //LED aus

Hast bestimmt vergessen das analogWrite einzukommentieren ist, falls es 
noch ausgeklammert ist funktioniert es bei uns auch fehlerfrei!!

von grundschüler (Gast)


Lesenswert?

Bibliotheken wie Arduinio sind gut, wenn sie sicher funktionieren. Tun 
sie
wahrscheinlich auch.

Fehlersuche gestaltet sich aber schwieriger, wenn man den Fehler in 
fremden Libraries suchen muss. Also zwecks Fehlersuche die Funktion 
analogWrite() selbst schreiben und schauen, bei welchem Registerzugriff 
das Problem entsteht.

Auf float-Werte sollte man bei mcus nach Möglichkeit verzichten. Gib die 
Temperaturen als Integer mit 10tel Grad Genauigkeit an. Das ist besser 
als die float-Berechnung.

von Hubert G. (hubertg)


Angehängte Dateien:

Lesenswert?

Arduinoquest schrieb:
> Hast bestimmt vergessen das analogWrite einzukommentieren ist, falls es
> noch ausgeklammert ist funktioniert es bei uns auch fehlerfrei!!

Nein ist nicht auskommentiert. Die Temperaturanzeige ist unsinnig. Wenn 
ist den A0 auf 3,3V stecke, dann ist die Anzeige 283.01 . Ist aber eine 
andere Baustelle.
Habe die *.ino angehängt wie ich sie geladen habe.

von Arduinoquest (Gast)


Lesenswert?

Vielen Dank, es geht jetzt!

Wir hatten ein Stör-Problem. Hatten alles auf einem Breadboard aufgebaut 
und dann hat es Störungen eingekoppelt.

Vielen Dank für die perfekte Unterstützung!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.