Libreria per il controllo del chip DS1803

Ciao a tutti, ho scritto una libreria per il controllo del chip DS1803, un doppio potenziometro digitale. E’ qui per chi la vuole provare!

DS1803.h

/*
  Library for controlling the DS1803 ic with Arduino
  Tested with arduino-0018
  22/02/2010 Release 0.1
  Written by Federico and Riccardo Galli
  http://www.sideralis.org
*/
#ifndef DS1803_h
#define DS1803_h
#include "WProgram.h"
#include <Wire.h>

#define WIPER_0 0xA9
#define WIPER_1 0xAA
#define WIPER_01 0xAF


class DS1803
{
  int8_t addr;
  public:
    DS1803(int8_t addr);
    void setPot(int value, int wiper);
    int8_t *getValue();
  //private:
    //;
};

#endif

DS1803.cpp

#include "WProgram.h"
#include "DS1803.h"
#include <Wire.h>

DS1803::DS1803(int8_t addr)
{
  this->addr=addr;
  Wire.begin();
}

/* Set the values of the wiper (potentiometers)
    wiper 0 is pot0, wiper 1 is pot1 and wiper2 is pot0 and pot1
    Value is between 0 and 255
*/
void DS1803::setPot(int value,int wiper)
{
    Wire.beginTransmission(this->addr);
    
    if (wiper==2) Wire.send(WIPER_01);
    else Wire.send(wiper ? WIPER_1 : WIPER_0);
    
    Wire.send(value);
    Wire.endTransmission();
}

// Return an array of two values read from the IC
int8_t *DS1803::getValue()
{
      Wire.requestFrom(this->addr,2);
      int8_t *values=(int8_t*)malloc(sizeof(int8_t)*2);
      
      int k=0;
      while (Wire.available()) {
            values[k]=Wire.receive();
      }

      return values;
}

Sketch di esempio

/* Example sketch for controlling the DS1803 ic with Arduino
   Tested with arduino-0018
   22/02/2010 Release 0.1
   Written by Federico and Riccardo Galli
   http://www.sideralis.org */

#include <DS1803.h>
#include <Wire.h>

/* Create an instance of the class
   0x28 is the address of the DS1803
   with three pin grounded. */
DS1803 pot(0x28) 

void setup() {  
  //Begin serial connection at 9600 baud
  Serial.begin(9600) ;
} 

void loop() {
  //Set the first potentiometer at 200 
  pot.setPot(200,0);
  //Set the second potentiometer at 255
  pot.setPot(255,1);
  
  //Read the values saved on the DS1803
  int8_t *value=pot.getValue();
  Serial.println(value[0],DEC);
  Serial.println(value[1],DEC);
}

Ecco a cosa può servire! (Sto lavorando a una pcb che indredibilmente alla quarta produzione ancora è sbagliata…)

Quindi con questo potenziometro doppio digitale potrei utilizzarlo per dimmerare 2 colori di led diversi nel tempo che voglio io x arrivare da 0 al 100% di luminosita'?

Per quello meglio utilizzare la tecnica PWM. Con un potenziometro digitale doppio ad esempio puoi regolare dal PC il volume del tuo stereo di casa o anche i toni alti e bassi solo sostituendo i potenziometri originali con il ds1803. Sempre come sopra puoi trasformare un vecchio stereo ( ma che suona benissimo ) in uno telecomandato a distanza.

Puoi regolare il VFO di un ricevitore da radiomatore ( anche se per quello sarebbe mglio un Varicap digitale :-) ) per scannare frequenze radio in automatico.

Ecc.. Ecc...

In pratica dove devi lavorare in analogico sostituisci il controllo manuale del potenziometro con il potenziometro controllato da Arduino.

Ciao, è proprio una cosa che mi serviva…

E’ facile reperire qust’integrato???Tu dove lo hai preso? ::slight_smile:

Sicuramente per il potenziometro e per il suo utilizzo ci sono diversi sistemi. Questo progetto nasce con lo scopo di creare un modulo su una pcb grande come l'lcd stesso sul quale poi questo puo' essere pluggato.

Inoltre avevo la necessita' di utilizzare il minor numero di fili da arduino e poter comunque settare automagicamente luminosità e contrasto dell'lcd.

Ecco perche' ho utilizzato il ds1803-010 (in questo caso) Sul playground trovate la mia libreria definitiva con esempio.

Il DS1803 e' stato preso dalla MAXIM anche se sto cercando un posto piu' comodo per prenderne una certa quantità... Fede

PS: in particolare esiste anche un altro potenziometro digitale interessante, il DS1844 che e' un potenziometro digitale quadruplo dal funzionamento simile al DS1803

Ciao federico è possibile capire come va collegato ii vari pin del potenziometro ad arduino.
grazie

Si, ora non ho il datasheet sotto mano e sono un po' di corsa ma non e' per nulla complicato.. Ha dei pin chiamati wiper che sono sostanzialmente le uscite regolate del potenziometro e tutto il resto e' collegato +5 e GND

ciaoo Federico scusami avrei bisogno di un consiglio. Utilizzando DS1803 o altri dispositivi ,volevo sapere se tua libreria va bene per incrementare la resistenza alla pressione in un tasto?

il DS1803 collega il contato centrale a un valore resistivo a secondo del numero che gli dai. Per quello se cambi il numero trasmesso di uno Ti cambia la resistenza di un passo. Ci sono altri modelli di resistenze elettroniche che non hanno l' interfacciao i2c o spi ma 2 ingressi per alzare o diminuire di 1 passo la resistenza. Devi scegliere l' integrato a seconda il Tuo bisogno. Ciao Uwe

chiedevo per non sbagliare uno schema elettrico tra arduino e DS1803. Mi spiego meglio io ho arduino Mega e dovrei collegarlo al DS1803, leggendo un po in giro mi sembra di aver capito che si puo collegarlo direttamente perchè atmega ha interfaccia I2C invece in altri casi usano un integrato per interfacciare con piu slave e si chiama PCA9535. Volevo sapere se dico bene.

spank_78: sei proprio come il cartone animato che le mie figlie guardavano quando erano piccine... ::)

Perchè non provi a buttare giù qualcosa di tuo (uno schemino di collegamento) e a sottoporlo all'attenzione del forum così ti diciamo se va bene o se è sbagliato dove e perchè??

ciao spark_78

vedi un po´: http://www.arduino.cc/playground/Code/I2CEEPROM oppure http://www.arduino.cc/playground/Learning/I2C

Ciao Uwe

Kokiua sei ubriaco! ma come ti viene a dire ste cose...facevi piu bella figura a leggere il post e non rispondere! A volte sei proprio fuori luogo io sono qui epr inparare non per sentirmi dire ste cose.. posso sbagliare ma nn sei autorizzato a ste risposte del ...

@spank_78: non credo sia opportuno rispondere al tuo puerile tentativo di offendere... >:(

Per il resto del forum: voglio far notare che spank_78 è lo stesso che sta testardamente tentando di ottenere da qualcuno del codice "pronto" per il suo "problemino" senza voler fare alcuno sforzo.

Basta guardare il suo precedente post: "potenziometro digitale interface SPI come si colle" (http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1276704657), le risposte ricevute e le richieste fatte qui per rendersene conto.

Scusami ma dico cosa mi dovrei vergognare? Qui si parla di I2C nell altro post SPI , ho letto su wiki la teoria ma in pratica non ho capito come si collega quindi nn capisco questa tua affermazione. E poi dimmi chi alle prima armi nn ha bisogno di un codice di base per capire...non posso mica inventarmelo. E poi la cosa è bella tu tra le righe offendi e gli altri devono stare a sentire

spank_78: sei proprio come il cartone animato che le mie figlie guardavano quando erano piccine... Roll Eyes

per me non è normale che un padre di famiglia dica questo! e te lo ridico a volte potresti anche nn rispondere se non ti piace il post

@spank_78: sei OT! e comunque il mio era un modo scherzoso per dire che saltelli qua e la come faceva quel cartone animato giapponese dal quale hai preso il nome (o mi sbaglio??) Lo scendere ad offese solo perchè mi ostino a risponderti che dovresti impegnarti con delle prove e osando un pochino di più, non giustifica il tuo comportamento. E poi, scusami bene: se tutti quelli che ti rispondono lo fanno con dei link, vorrà dire qualcosa, o no?? ;)

:P :P :P :P

Guarda sostanzialmente se vuoi il sistema chiavi in mano devi caricare su arduino lo sketch di esempio che ho messo nella libreria (per altro e' incline in alcune situazioni di codice molto evoluto ad errori, se qualcuno volesse darci uno sguardo...) e cablare il chip cosi:

pin - collegamento 1 - +5 2 - GND 3 - Output1 4 - gnd 5 - gnd 6 - gnd 7 - gnd 8 - scl 9 - sda 10 - Output2 11 - gnd 12 - +5 13 - niente 14 - +5

Comunque bastava leggere il datasheet F