Inhaltsverzeichnis:
- Schritt 1: Anschlüsse des DS1803
- Schritt 2: Befehlsbyte
- Schritt 3: Steuerung des DS1803
- Schritt 4: Einrichten
- Schritt 5: Das Programm
Video: DS1803 Duales digitales Potentiometer mit Arduino - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:21
Ich teile gerne die Verwendung eines digitalen Potmeters DS1803 mit einem Arduino. Dieser IC enthält zwei digitale Potmeter, die über eine Zweidrahtschnittstelle angesteuert werden können, dafür verwende ich die Bibliothek wire.h.
Dieser IC kann ein normales analoges Potmeter ersetzen. Auf diese Weise können Sie beispielsweise einen Verstärker oder ein Netzteil steuern.
In diesem anweisbaren steuere ich die Helligkeit von zwei LEDs, um das Arbeiten zu zeigen.
Das Arduino zählt die Impulse eines Drehgebers und legt den Wert in die Variablen pot[0] und pot[1]. Wenn Sie den Schalter am Encoder drücken, können Sie zwischen Pot[0] und Pot[1] umschalten.
Der Istwert der Potis wird vom DS1803 zurückgelesen und in die Variablen potValue[0] und potValue[1] gelegt und auf einem LCD angezeigt.
Schritt 1: Anschlüsse des DS1803
Hier sehen Sie die Anschlüsse des DS1803. H ist die hohe Seite des Potentiometers, L die niedrige Seite und W der Schleifer. SCL und SDA sind die Busverbindungen.
Mit den Anschlüssen A0, A1 und A2 können Sie dem DS1803 eine eigene Adresse geben, so können Sie mehrere Geräte über einen Bus steuern. In meinem Beispiel habe ich der DS1803-Adresse 0 gegeben, indem ich alle Pins mit Masse verbunden habe.
Schritt 2: Befehlsbyte
Die Arbeitsweise des DS1803 kann im Befehlsbyte verwendet werden. Wenn Sie "potentiometer-0 schreiben" wählen, sind beide Potentiometer ausgewählt, wenn Sie nur Potentiometer-0 einstellen möchten, müssen Sie nur das erste Datenbyte senden. "Potentiometer-1 schreiben" nur Potentiometer-1 verstellen. "Auf beide Potentiometer schreiben" gibt beiden Potentiometern den gleichen Wert.
Schritt 3: Steuerung des DS1803
Das Control-Byte (Bild 3) hat eine Gerätekennung, diese bleibt immer gleich. In meinem Beispiel sind A0, A1 und A2 0, weil wir die Adresse auswählen, indem wir alle A-Pins auf Masse legen. Das letzte Bit R/W wird durch die Befehle "Wire.beginTransmission" und "Wire.requestFrom" im Arduino auf 0 oder 1 gesetzt. In Abbildung 5 sehen Sie das gesamte Telegramm. Das Lesetelegramm ist in Abbildung 4 dargestellt.
Schritt 4: Einrichten
Diese Schaltung zeigt, wie man alles verbindet. Das Nokia LCD ist mit verschiedenen Anschlüssen erhältlich, stellen Sie sicher, dass Sie Ihre richtig anschließen. Auch der Drehgeber hat seine verschiedenen Ausführungen, einige haben den gemeinsamen Stift am Mittelstift, andere nicht. Ich habe ein kleines Filternetzwerk (470 Ohm Widerstand mit 100nF Kappe) eingebaut, um die A- und B-Ausgangssignale des Encoders zu filtern. Ich brauche diesen Filter, weil die Ausgabe viel Rauschen hatte. Ich habe auch einen Entprell-Timer in mein Programm eingebaut, um etwas Rauschen zu unterdrücken. Für den Rest denke ich, dass die Schaltung klar ist. Das LCD kann über Adafruit https://www.adafruit.com/product/338 bestellt werden.
Schritt 5: Das Programm
Für die Nutzung des 2-Draht-Busses füge ich die Bibliothek Wire.h hinzu. Um das LCD zu verwenden, füge ich die Adafruit-Bibliothek hinzu, die Sie von https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library herunterladen können. Außerdem ist die Adafruit_GFX.h-Bibliothek hier https://github verfügbar. com/adafruit/Adafruit-GFX-Bibliothek.
#enthalten
#enthalten
#enthalten
Adafruit_PCD8544-Anzeige = Adafruit_PCD8544(7, 6, 5, 4, 3);
Hier sehen Sie alle Variablen. Steuerbyte und Befehlsbyte wie zuvor beschrieben. Die deBounceTime kann je nach Rauschen Ihres Encoders angepasst werden.
Bytepot[2] = {1, 1};Byte controlByte = B0101000; // 7 Bit, Byte commandByte = B10101001; // Die letzten 2 Bits sind die Potmeter-Auswahl. Byte-PotValue[2]; int i = 0; int deBounceTime = 10; // Passen Sie diesen Wert abhängig vom Rauschen an const int encoder_A = 8; const int Encoder_B = 9; const int buttonPin = 2; unsigned long newDebounceTime = 0; lange alte Zeit ohne Vorzeichen; boolesch gedrückt = 0; boolesche Zahl = 1;
Im Setup definiere ich die richtigen Pins und lege den statischen Text auf das LCD
Void setup () { Wire.begin (); Serial.begin (9600); pinMode (Encoder_A, INPUT); pinMode (Encoder_B, INPUT); pinMode (buttonPin, INPUT); newDebounceTime = millis();
display.begin();
display.setContrast(50); display.clearDisplay(); display.setTextSize(1); display.setTextColor (SCHWARZ); display.setCursor(0, 10); display.println("POT 1="); display.setCursor(0, 22); display.println("POT 2="); display.display();
}
In der Schleife überprüfe ich zuerst, ob das Intervall mehr als 500 ms beträgt, wenn ja, wird das LCD aktualisiert. Wenn nicht, wird die Schaltfläche am Encoder überprüft. Wenn gedrückt, wird der toggleBuffer aufgerufen. Danach wird der Encoder überprüft. Wenn Eingang 0 niedrig ist (Drehung erkannt) überprüfe ich Eingang B, wenn Eingang B 0 ist, inkrementiere ich pot, andere dekrementiere ich. Danach wird der Wert per wire.write an das DS1803 gesendet.
Leere Schleife () {
Intervall();
if(digitalRead(buttonPin)== 1 && (gedrückt == 0)){toggleBuffer();} if(digitalRead(buttonPin)== 0){gedrückt = 0;}
if (digitalRead(encoder_A) == 0 && count == 0 && (millis() - newDebounceTime > deBounceTime)){ if (digitalRead(encoder_B) == 0){ pot++; if(pot > 25){pot = 25;} }sonse{ pot--; if(pot < 1){pot = 1;} } count = 1; newDebounceTime = millis();
Wire.beginTransmission(controlByte); // beginne zu senden
Wire.write (BefehlsByte); // Auswahl der Potmeter Wire.write (pot[0] * 10); // 1. Byte Potmeterdaten senden Wire.write (pot [1] * 10); // 2. Byte Potmeterdaten senden Wire.endTransmission (); // Stoppen Sie die Übertragung} sonst if (digitalRead (encoder_A) == 1 && digitalRead (encoder_B) == 1 && count == 1 && (millis() - newDebounceTime > deBounceTime)) {count = 0; newDebounceTime = millis(); } }
Void toggleBuffer () { gedrückt = 1; wenn (i == 0){i = 1;}sonst{i = 0;} }
Zuerst räume ich den Bereich frei, in den ich die Variablen schreiben muss. Ich tue dies, um ein Rechteck in diesem Bereich zu zeichnen. Danach schreibe ich die Variablen auf den Bildschirm.
Void writeToLCD () { Wire.requestFrom (controlByte, 2); potValue[0] = Wire.read(); // Erstes Potmeterbyte lesen potValue [1] = Wire.read (); // zweites Potmeter-Byte lesen display.fillRect (40, 0, 40, 45, WEISS); // Variablenbildschirm auf LCD-Display löschen.setCursor (40, 10); display.print(potValue[0]); // 1. Potmeterwert auf LCD-Display schreiben.setCursor (40, 22); display.print (potValue[1]); // 2. Potmeterwert auf LCD-Display schreiben.setCursor (60, (10 + i * 12)); display.print("<"); display.display(); }
Void interval () {// Intervall-Timer zum Schreiben von Daten auf das LCD if ((millis (- oldTime) > 500) { writeToLCD (); oldTime = millis(); } }
Empfohlen:
Heimwerken -- Einen Spinnenroboter herstellen, der mit einem Smartphone mit Arduino Uno gesteuert werden kann – wikiHow
Heimwerken || Wie man einen Spider-Roboter herstellt, der mit einem Smartphone mit Arduino Uno gesteuert werden kann: Während man einen Spider-Roboter baut, kann man so viele Dinge über Robotik lernen. Wie die Herstellung von Robotern ist sowohl unterhaltsam als auch herausfordernd. In diesem Video zeigen wir Ihnen, wie Sie einen Spider-Roboter bauen, den wir mit unserem Smartphone (Androi
Schnittstellentastatur mit Arduino. [Einzigartige Methode]: 7 Schritte (mit Bildern)
Schnittstellentastatur mit Arduino. [Einzigartige Methode]: Hallo, und willkommen zu meinem ersten instructable! :) In diesem instructables möchte ich eine fantastische Bibliothek für die Schnittstelle der Tastatur mit Arduino teilen - 'Password Library' einschließlich 'Keypad Library'. Diese Bibliothek enthält die besten Funktionen, die wir wi
SCARA-Roboter: Lernen über Vorwärts- und inverse Kinematik !!! (Plot Twist Erfahren Sie, wie Sie mit PROCESSING eine Echtzeitschnittstelle in ARDUINO erstellen !!!!): 5 Schritte (mit Bildern)
SCARA-Roboter: Lernen über Vorwärts- und inverse Kinematik !!! (Plot Twist Learn How to Make a Real Time Interface in ARDUINO Using PROCESSING !!!!): Ein SCARA-Roboter ist eine sehr beliebte Maschine in der Industriewelt. Der Name steht sowohl für Selective Compliant Assembly Robot Arm als auch für Selective Compliant Articulated Robot Arm. Es ist im Grunde ein Roboter mit drei Freiheitsgraden, da er die ersten beiden Displ
Wie erstelle ich ein digitales Thermometer # 1: 4 Schritte
So erstellen Sie ein digitales Thermometer Nr. 1: In diesem Artikel werde ich ein Projekt namens "Digitales Thermometer" erstellen. Ich verwende "DHT11" für den Temperatursensor. Und verwenden Sie das "7Segmrnt-Modul" als Anzeige. Ich empfehle, diesen Artikel zuerst zu lesen "DHT11" und &q
Einfaches BLE mit sehr geringem Stromverbrauch in Arduino Teil 3 - Nano V2-Ersatz - Rev 3: 7 Schritte (mit Bildern)
Einfaches BLE mit sehr geringem Stromverbrauch in Arduino Teil 3 - Nano V2-Ersatz - Rev 3: Update: 7. April 2019 - Rev 3 von lp_BLE_TempHumidity, fügt Datums- / Zeitdiagramme mit pfodApp V3.0.362+ hinzu und automatische Drosselung beim Senden von DatenUpdate: 24. März 2019 – Rev 2 von lp_BLE_TempHumidity, fügt weitere Plotoptionen hinzu und i2c_ClearBus, fügt GT832E