Archiv der Kategorie: Arduino

3 Tasten einlesen im Arduino

Ich möchte mit möglichst wenig Aufwand 3 Tasten einlesen. Dazu werden die analogen Eingänge verwendet.

3 Tasten werden einseitig an GND geschaltet und die andere Seite kommt an A0, A1 und A2.
Die Analogeingänge werden als Eingang geschaltet und mit digitalWrite(A0,HIGH); wird der interne Pullup Widerstand von 20kOhm zu +5V eingeschaltet. Dann wird immer 5V oder der Digitalwert 1023 gelesen. Nur wenn der Taster gedrückt ist, wird 0V oder der digitale Wert 0 gelesen. Weiterlesen

Der Frequenzgenerator und Frequenzzähler

Ich habe mit einem wahren Kabelgrab den Rechteckgenerator LTC1799 an mein 5V Netzteil mit einem 7805 angeschlossen.

Dem Rechteckausgang habe ich zu etwas mehr Leistung verholfen mit einem 7400 IC bei dem alle 4 NAND parallel geschaltet sind und so für einen niedrigen Ausgangswiderstand sorgen.

Diese Ausgangs Rechteckfrequenz geht auf meinen neuen Arduino Nano USB. Hier wird die Frequenz ermittelt und auf einem 16×2 LCD Display angezeigt. Die Beschreibung mit dem Uno gibt es hier. Weiterlesen

Barometer Display mit 1h / 3h Differenz und Temperatur Ausgabe. Mit dem 5110 Display, BMP-180, Uno

Nun nehme ich die vorhergehenden Artikel und stelle daraus ein Barometer zusammen.

Aus diesen Artikeln ist die Schaltung und die Software entstanden.

Mit dem BMP180 wird der Luftdruck und die Temperatur jede Minute 1 x gemessen und über 5 Werte gemittelt. Dadurch bekomme ich eine relativ stabile 2. Kommastelle hin und kann den aktuellen Wert und den alten Wert später mit 2 Kommastellen vergleichen.

Der Luftdruck wird im EEPROM abgelegt und mit dem Luftdruck vor einer Stunde verglichen.
Die Differenz wird zusätzlich ausgegeben.
Da der Wert als Long (4 Byte) abgelegt wird, können 1024 / 4 = 256 Werte verglichen werden, sodass ich auch mit dem Wert vor 3 Stunden (180 Minuten) vergleichen kann.

Die Daten werden auf dem Nokia 5110 Display ausgegeben. Weiterlesen

Das LCD Display Nokia 5110 ansteuern.

Das Nokia LCD Display 5110 ist preiswert und stromsparend und es lässt sich vom Arduino seriell ansteuern. Es hat 48 x 84 Pixel auf einer Fläche vom ca. 3 x 2 cm.

Meist wird auf einen Pegelwandler 5V > 3,3V hingewiesen. Das brauchte ich aber bei meinem Display gar nicht. Ich habe es mit 5V Spannung versorgt und auch die 5V Datenpegel direkt an das Display gegeben. Dazu sollte man aber vorher beim Lieferanten nachfragen.

Die Verkabelung ist dann wie folgt.
Arduino Uno > LCD Display
+5V > VCC Weiterlesen

Vergleich der Stromaufnahme von Arduino Schaltungen, vom Uno bis zum IC im Schlafmodus auf dem Steckbrett

Der Stromverbrauch der ATMEGA329P-PU Schaltungen wird hier verglichen

1. Arduino Uno im Normalbetrieb, LED13 ist aus
54 mA

2. Arduino Uno im Schlafmodus: SLEEP_MODE_PWR_DOWN
39 mA Weiterlesen

ATMEGA328P-PU Bootloader laden vom Arduino Uno als ISP

Der Arduino Bootloader soll in einen neuen ATMEGA 328P-PU IC auf dem Steckbrett geladen werden.

Dazu wird der Arduino Uno als ISP (In-System-Programmer) verwendet. Dazu sind 4 Schritte notwendig.

1. Den UNO zum ISP Programmer umfunktionieren

Als erstes wird der UNO mit der Programmer Software geladen.
Dazu darf das Steckbrett noch nicht angeschlossen sein. Weiterlesen

Den Arduino in den Schlaf Modus setzen und wieder aufwecken.

Mein Arduino Uno soll für eine stromsparende Anwendung in den SLEEP_MODE_PWR_DOWN Modus gesetzt werden um Strom aus dem Akku zu sparen und so eine möglichst lange Akkulaufzeit zu bekommen.

In einer normale loop() Schleife mit delay() liegt der Stromverbrauch bei gemessenen 54mA.
Im Schlaf Modus geht er auf 38mA zurück. Das ist immer noch erstaunlich viel Verbrauch, liegt aber an den zusätzlichen Elementen auf der Uno Platine. Die Power LED nimmt gut 10 mA und die USB Schnittstelle nimmt auch einiges auf. Weiterlesen

Das digitale Poti DS1666 am Arduino betreiben, Teil 2.

Auf Basis des ersten Teils wird das Programm zum DS1666 jetzt erweitert.

Als erstes kommt die Funktion DS1666Min() hinzu um den Wert auf Position 0 ( O Ohm) zu setzen.

void DS1666Min() {
  // auf 0 einstellen
  digitalWrite(CS, LOW);    // DS1666 aktiv
  digitalWrite(UD, LOW);   // Richtung runter vorgeben
  for (int i=0; i < 128; i++) {
    digitalWrite(INC, LOW);   // 1 Schritt machen
    digitalWrite(INC, HIGH);
  }
  digitalWrite(CS, HIGH);
}

Hinweis: Wenn in Zeile 4 UD auf HIGH gesetzt wird kann die Funktion auch den maximalen Wert einstellen. Weiterlesen

Das digitale Poti DS1666 am Arduino betreiben.

Das digital einstellbare Potentiometer IC DS1666-50 soll vom Arduino angesteuert werden. Hier das Datenblatt DS1666. Ich habe die Version -50 mit 50 kOhm Einstellbereich hier.

Als erstes wird die Schaltung aufgebaut.

DS1666 Pinbelegung

DS1666 Pinbelegung

Anschlüsse DS1666  >  Arduino
U/D (2) >  Pin 3
INC (3) >  Pin 4 Weiterlesen

Den Arduino Quarz Takt genauer bestimmen mit einer RTC oder mit GPS

Für einen Frequenzzähler mit dem Arduino ist es wichtig den Quarz Takt genau zu bestimmen. Beim Arduino Uno ist er mit 16 MHz angegeben. Der eingebaute Quarz hat einen typischen Fehler von \pm 30ppm (parts per million) also \pm30*10^{-6}.

Das entspricht 30 Sekunden auf 1.000.000 Sekunden beim Arduino.

Für den Frequenzzähler bedeutet das einen Fehler für 100.000 Hz von \pm 3Hz. Da dieser Fehler auch bei 99.999 Hz gilt, können wir von dieser Genauigkeit ausgehen:
> Die ersten 4 Stellen der Frequenz werden korrekt dargestellt. Weiterlesen