Ich habe eine Arduino mega und diverse Bauteile (Lüfter, Relais, Bewegungsmelder ... etc) auf ein Brett montiert, um verschiedene Komponenten miteinander zu kombinieren. Zuerst habe ich einige Komponenten separat
ausprobiert und dann teilweise kombiniert. Unter anderem auch ein I2C LCD Display mit 20x4 Anzeige.
Das funktionierte soweit ganz gut. Bis ich einen 12V Lüfter mit Transistor und Freilaufdiode betrieben habe.
Der Lüfter machte zuerst laute Geräusche. Auf einer Webseite habe ich den Grund dafür rausgefunden.
Der Takt des PWM - Signals war zu niedrig. Also habe ich nach einiger Recherche herausgefunden, das ich fogenden Befehl einsetzen muss, um die Frequenz zu erhgöhen:
TCCR2B = (TCCR2B & 0b11111000) | 0x01;
fälschlicher weise habe ich zuerst noch folgenden genommen:
TCCR0B = (TCCR0B & 0b11111000) | 0x01;
Danach (so vermute ich) konnte ich das Display nicht mehr vernünftig ansprechen. Auch Pullup - Widerstände brachten kein Erfolg.
Ich benutze die Bibliothek von:
Francisco Malpartida New LiquidCrystal 1.51
Mittlerweile weiss ich schon gar nicht mehr, durch vielem Herumprobieren, wie ich das Display ansprechen muss.
Meine Frage ist auch, wenn ich einen Timer einmal geändert habe, bleibt diese Änderung auch, wenn der Arduino stromlos gemacht wird oder wenn ein anderer Sketch hochgeladen wird.?
Eine PWM Stromversorgung eines DC Lüfters funktioniert nicht richtig weil der Motor nicht dafür geeignet ist. Die Elektronik, die den bürstenlosen Motor antreibt, mag es nicht andauernd ausgeschaltet zu werden.
Nimm einen Lüfter mit PWM Eingang (4 polige PC-Füfter). Den kannst Du direkt mit einem 500 bzw 1000Hz Signal steuern.
Grüße Uwe
Also ich habe alle meine Teil - Projekte durchgegangen und habe folgende funktionierende Einstellungen gefunden:
// Bibliotheken einbinden
//#######################
#include <Wire.h> // für das Display
#include <LiquidCrystal_I2C.h> // für das Display (Francisco Malpartida
// New LiquidCrystal 1.51)
//Display einrichten
//#######################
#define BACKLIGHT_PIN 13
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Set the LCD, I2C address
void setup()
{
digitalWrite ( BACKLIGHT_PIN, HIGH);
delay(1000); // 1 Sekunde Pause
//Anfangstext auf dem Display anzeigen
//####################################
lcd.begin(20,4); // Initialize Das Display mit 20 Zeichen und 4 Zeilen
lcd.home (); // go home
lcd.setCursor ( 3, 0 ); // Setzte den Cursor auf Zeichen 3 in der ersten Zeile
lcd.print("Geht doch! "); // Zeige den Text an
delay ( 4000 ); // 4 Sekunden Pause
Warum ich da etwas verändert habe, ist mir ein Rätsel. Ich glaube, der Osterhase war schon dar!
1 1/2 Tage Fehlersuche.