KKM: DIGITALNI POTENCIOMETAR 10K
Početnik si s Dasduinom. Ili s elektronikom? Za oko ti je zapeo određeni modul, ali ne znaš kako ga koristiti? Bez brige, tu je KKM! Kako Koristiti Module (KKM) je serija blog tutorijala tvrtke soldered na kojoj ćeš pronaći sve što ti treba kako bi započeo rad sa svojim omiljenim modulom. Tutorijali obuhvaćaju: tehničke karakteristike, princip rada, upute kako povezati modul s Dasduinom te osnovni kod. Sve ostalo prepuštamo tebi na maštu.
UVOD
Digitalni potenciometar je modul koji je po funkciji identičan potenciometru, samo što umjesto fizičkog okretnog dijela kojim se podešava otpor koristi digitalnu komunikaciju. Naime, otpor digitalnog potenciometra podešava se putem I2C komunikacije.
Karakteristike:
• Napon: 1.8V – 5V
• Otpor potenciometra: 10k
• Otpor wipera: 100ohm
• Dimenzije: 22 x 22 mm
KAKO RADI?
Kako digitalni potenciometar za sve radnje koristi I2C komunikaciju, u daljnjem tekstu ćemo objasniti kako I2C radi. I2C protokol koristi dvije linije za slanje i primanje podataka. To su Serial Clock pin (SCL) kojim Dasduino šalje impulse u nekom određenom intervalu i Serial Data pin (SDA) preko kojega se podatci šalju između dva uređaja. Kako se Clock linija mijenja iz LOW u HIGH, tako jedan bit informacije, koji će se formirati o obliku adrese i naredbe ili podatka se prenosi sa Dasduina na I2C modul preko SDA linije. Kada se ti podaci šalju bit po bit, pozvani uređaj izvršava zahtjev i šalje podatke natrag na Dasduino preko iste linije koristeći Clock signal, generiran na SCL pinu, na glavnom (Master) uređaju.
I2C protokol omogućuje svakom pozvanom uređaju da ima svoju jedinstvenu adresu zato što master i slave uređaji naizmjenično komuniciraju preko jedne linije. Moguće je izvesti da vaš Dasduino komunicira (naizmjenično) s više uređaja, ili drugim pločicama dok koristite samo dva pina vašeg mikrokontrolera.
Tako ćemo pomoću I2C komunikacije upravljati digitalnim potenciometrom. Preko naredbi možemo smanjivati i povećavati otpor potenciometra tj. izlazne struje iz modula. Otpor možemo povećavati i smanjivati automatski, po željenom vremenskom intervalu ili zadati konstantni. Možemo kontrolirati otpor koji želimo ovisno o koracima. Naš modul baziran je na MCP4018 IC-u koji ima mogućnost ukupno 128 koraka podešavanja otpora između vrijednosti otpora 0 i 10k što je 78 ohm-a po koraku.
KAKO POVEZATI?
U ovom primjeru prikazat ćemo jedan jednostavan primjer s digitalnim potenciometrom. Napravit ćemo treptalo koje se polagano osvjetljava. Digitalni otpornik se sastoji od:
• SCL – Serial Clock (Generator signala u vremenu)
• SDA – Serial Data (Komunikacijska linija)
• VCC – Napajanje modula
• GND – Uzemljenje modula
• A – Ulaz potenciometra (5V, 3.3V)
• W – Wiper, promjenjivi dio potenciometra
• B – Izlaz potenciometra (GND)
Spojimo SCL na analogni pin 5 Dasduina. Kod Dasduina, analogni pin 5 je namijenjen za SCL priključnicu I2C komunikacije što možete vidjeti OVDJE. Tako isto vrijedi i za SDA pin koji se spaja na analogni pin 4. Zatim spajamo VCC na 5V i GND na GND Dasduina. Priključnicu A Spajamo na 5V, a priključnicu B na GND. Za spajanje LE Diode u seriju ćemo joj spojiti neki manji otpornik, u ovom primjeru otpornik od 220 ohm – a. Na jedan kraj otpornika spajamo W priključnicu, a na drugi kraj Anodu LE Diode (Paziti na polaritet pri spajanju Diode). Kraći dio, Katodu LE Diode spajamo na GND.
ARDUINO LIBRARY I KOD
Za sljedeći kod biti će nam potrebna Wire Biblioteka u slučaju da je nemate, možete je skinuti OVDJE.
#include "Wire.h" //Biblioteka potrebna za I2C komunikaciju
void
setup
() {
Wire.begin();
// pridruživanje I2C linije
// Wire.begin(Adresa za Master, neobavezna)
}
byte val = 0;
void
loop
() {
Wire.beginTransmission(47);
// emitira na uređaj #47 (0101111)
// u datasheet – u pronađemo adresu uređaja
Wire.write(byte(0x00));
// šalje instrukcijski byte
Wire.write(val);
// šalje vrijednost potenciometra (byte)
Wire.endTransmission();
// pretanak emitiranja
val++;
// inkrement vrijednosti
if
(val == 128) {
// ako dosegne 128. korak (maksimalni)
val = 0;
// počinje ispočetka od nule
}
delay
(500);
}