Digitális ellenállás

photogyulai
DrótVégénSzéndarab
Hozzászólások: 25
Csatlakozott: 2015. május 19. kedd, 0:37

Digitális ellenállás

Hozzászólás Szerző: photogyulai »

Sziasztok!

Digitális ellenállással igyekszem boldogulni egy power led lámpához.
Ez a digi ellenállás:
http://store.digilentinc.com/pmod-dpot- ... ntiometer/

ilyesmi kódokat próbáltam, de vmi sztem elnézek, rosszul csinálok mert nem műkszik:
https://www.arduino.cc/en/Tutorial/DigitalPotControl

bekötés jó, mindent ellenőriztem, de semmi nem változik, akár mit is futtatok rajta!

Ha vki tudna annyit segíteni, hogy legyen egy bármilyen működőképes kódom az nagy lépés lenne!

Köszönöm!
vargham
Chipgyilok
Hozzászólások: 308
Csatlakozott: 2014. január 8. szerda, 8:32

Re: Digitális ellenállás

Hozzászólás Szerző: vargham »

> Ha vki tudna annyit segíteni, hogy legyen egy bármilyen működőképes kódom az nagy lépés lenne!
Szívesen, ha elmeséled PONTOSAN, hogy mit szeretnél. :-)

Kevés az információ.
Legfontosabb kérdés: Mit szeretnél elérni? Mi a célod?

> Digitális ellenállással igyekszem boldogulni egy power led lámpához.
Mit értesz a boldogulni alatt? (Ezt ne nekünk kelljen kitalálni...) Világítson, ne világítson, füstöljön...
Mi a power LED típusa? Milyen a meghajtása, a tápfeszültsége, az áramfelvétele?

> Ez a digi ellenállás:
> http://store.digilentinc.com/pmod-dpot- ... ntiometer/

OK, ezt látjuk. Adatlapját olvastad? Melyik verziót használod, a 10 kOhm-osat?

> ilyesmi kódokat próbáltam, de vmi sztem elnézek, rosszul csinálok mert nem műkszik:
A "nem műkszik" az nem elég pontos meghatározás.
1. Mit szeretnél, szerinted mi lenne a helyes működés?
2. Mit tapasztalsz helyette?
3. Az "ilyesmi kódokat" sem pontos. Másold be ide, hogy mivel próbálkoztál. (Figyelj oda, hogy kódként másold be, ne folyó szövegként.)

> bekötés jó, mindent ellenőriztem, de semmi nem változik, akár mit is futtatok rajta!
1. Honnan tudod, hogy jó a bekötés? Kérlek, mellékelj kapcsolási rajzot, pontos leírást, fotót az áramkörről.
2. "akár mit is futtatok rajta" Min futtatod? Arduino melyik? ESP? Kávéfőző? Telefon? Biztos, hogy feltöltötted rá a programot, biztos, hogy fut?
3. "de semmi nem változik" Mit változtattál az eredeti kódhoz képest?
Például:
Ezt a sort:

Kód: Egész kijelölése

for (int level = 0; level < 255; level++)
Kicseréltem erre:

Kód: Egész kijelölése

for (int level = 0; level < 65535; level++)
Mire az USB port füstölni kezdett.
photogyulai
DrótVégénSzéndarab
Hozzászólások: 25
Csatlakozott: 2015. május 19. kedd, 0:37

Re: Digitális ellenállás

Hozzászólás Szerző: photogyulai »

kösziii!

ok.. tehát >>
egy digitális ellenállást szeretnék, amit encoderrel tudok változtatni, de azt hiszem csak annyi a baj, hogy nem változik az ellenállás... ha 0-255 alapon egy értékkel lehetne változtatni és a kimeneten x-y ellenállás változás lenne belőle az nekem tökéletes onnantól már megoldom.
Ez egy max 10k-s digi poti, nekem ebből csak 2k kéne... de tudtommal az értékekkel ezt lehet változtatni.

a power led egy 100w-os panel, de -tisztelettel- szerintem a kód és az ellenállás szempontjából irreleváns, analóg potival működik, ezzel nincs gond. nem az egész lámpát szeretném "veletek" összerakatni :-) csak abban kérek segítséget, hogy egy ~x value értékkel lehessen változtatni a digipoti ellenállását.
Tulajdonképpen irreleváns hogy mire van kötve (a teljesítmény értékek figyelembe vételével).

arduino nano és mega... ezen a két eszközön próbáltam. feltöltődik a kód gond nélkül és a serialprint/serial monitor szerint a kódókban beállított value értékek változnak. pl ebben a kódban >>

Kód: Egész kijelölése

// set pin 10 as the slave select for the digital pot:
const int slaveSelectPin = 10;
// little delay
const int dl=50;
// channel
// watch datasheet, why there is only one usable value
const byte chnl=0x11;

///
/// Main loop
///
void loop() {
  Serial.println("from 0 to 255");
  // change the resistance on this channel from min to max:
  for (int level = 0; level < 256; level++) {
    digitalPotWrite(chnl, level);
    delay(dl);
  }
}

///
/// Modify wiper
///
void digitalPotWrite(byte address, byte value) {
  Serial.println(value);
  // take the SS pin low to select the chip
  digitalWrite(slaveSelectPin,LOW);
  //  send in the address and value via SPI
  SPI.transfer(address);
  SPI.transfer(value);
  // take the SS pin high to de-select the chip
  digitalWrite(slaveSelectPin,HIGH);
}
és hiába mérek bárhogy bármit a kimeneten semmi nem változik, se feszkó se ohm....

bekötés:
A - connect this to voltage a + 5 V-re kötve
W - this is the pot's wiper, which changes when you set it -
B - connect this to ground. Földre kötve

CS - to digital pin 10 (SS pin) 10-es láb a digipot cs lábára kötve
* SDI - to digital pin 11 (MOSI pin) 11-es a digipot sdi -re
* CLK - to digital pin 13 (SCK pin) sck a 13-ra


köszönöm szépen ha bárki bármit hozzá tud tenni :-)
photogyulai
DrótVégénSzéndarab
Hozzászólások: 25
Csatlakozott: 2015. május 19. kedd, 0:37

Re: Digitális ellenállás

Hozzászólás Szerző: photogyulai »

természetesen a digipoti is rá van kötve a vcc +5-re a gnd a földre :-)
Avatar
csegebiga
Chipgyilok
Hozzászólások: 288
Csatlakozott: 2015. március 27. péntek, 21:27

Re: Digitális ellenállás

Hozzászólás Szerző: csegebiga »

ezt nem látom a kód elején?

Kód: Egész kijelölése

// inslude the SPI library:
#include <SPI.h>

// set pin 10 as the slave select for the digital pot:
const int slaveSelectPin = 10;

void setup() {
  // set the slaveSelectPin as an output:
  pinMode(slaveSelectPin, OUTPUT);
  // initialize SPI:
  SPI.begin();
}
Ha spi kommunikációt akarsz csinálni, akkor illik az arduinonak megmondani azt.
https://www.arduino.cc/en/Tutorial/DigitalPotControl


és meg kéne nézned, hogy melyik csatornán fogadja az utasításokat a digitpotid?
mert a fenti példában egy 6csatornás eszközt vezérelnek, míg te egy egycsatornás eszközt szólongatsz.

Kód: Egész kijelölése

// channel
// watch datasheet, why there is only one usable value
const byte chnl=0x11;
photogyulai
DrótVégénSzéndarab
Hozzászólások: 25
Csatlakozott: 2015. május 19. kedd, 0:37

Re: Digitális ellenállás

Hozzászólás Szerző: photogyulai »

köszi!

igen! csak lemaradt a ctrl+c ctrl+v ből... nemértem hogyan... fel se engedné tölteni ha nem lenne benne :-)

Tehát nálam benne van a kódban csak ide tettem fel hiányosan sorry fór det!!
photogyulai
DrótVégénSzéndarab
Hozzászólások: 25
Csatlakozott: 2015. május 19. kedd, 0:37

Re: Digitális ellenállás

Hozzászólás Szerző: photogyulai »

hogyan kell megnézni hogy melyik csatin fogad utasításokat?!?! :-)
köszönöm
Avatar
csegebiga
Chipgyilok
Hozzászólások: 288
Csatlakozott: 2015. március 27. péntek, 21:27

Re: Digitális ellenállás

Hozzászólás Szerző: csegebiga »

kell-e egyáltalán az AD5160 egycsatornás eszköznek csatorna címzés?
photogyulai
DrótVégénSzéndarab
Hozzászólások: 25
Csatlakozott: 2015. május 19. kedd, 0:37

Re: Digitális ellenállás

Hozzászólás Szerző: photogyulai »

hát én nem tom Te írtad :-)
photogyulai
DrótVégénSzéndarab
Hozzászólások: 25
Csatlakozott: 2015. május 19. kedd, 0:37

Re: Digitális ellenállás

Hozzászólás Szerző: photogyulai »

ez a másik kód amit próbáltam de ezzel sem ment:
persze ez elé is beirtam az spi meghívását

Kód: Egész kijelölése

// set pin 10 as the slave select for the digital pot:
const int slaveSelectPin = 10;
// little delay
const int dl=50;
// channel
// watch datasheet, why there is only one usable value
const byte chnl=0x11;

///
/// Main loop
///
void loop() {
  Serial.println("from 0 to 255");
  // change the resistance on this channel from min to max:
  for (int level = 0; level < 256; level++) {
    digitalPotWrite(chnl, level);
    delay(dl);
  }
}

///
/// Modify wiper
///
void digitalPotWrite(byte address, byte value) {
  Serial.println(value);
  // take the SS pin low to select the chip
  digitalWrite(slaveSelectPin,LOW);
  //  send in the address and value via SPI
  SPI.transfer(address);
  SPI.transfer(value);
  // take the SS pin high to de-select the chip
  digitalWrite(slaveSelectPin,HIGH);
}

Avatar
csegebiga
Chipgyilok
Hozzászólások: 288
Csatlakozott: 2015. március 27. péntek, 21:27

Re: Digitális ellenállás

Hozzászólás Szerző: csegebiga »

channel nélkül mit csinál?

Kód: Egész kijelölése

void digitalPotWrite(byte value) {
  Serial.println(value);
  // take the SS pin low to select the chip
  digitalWrite(slaveSelectPin,LOW);
  
   SPI.transfer(value);
   
  // take the SS pin high to de-select the chip
  digitalWrite(slaveSelectPin,HIGH);
}
photogyulai
DrótVégénSzéndarab
Hozzászólások: 25
Csatlakozott: 2015. május 19. kedd, 0:37

Re: Digitális ellenállás

Hozzászólás Szerző: photogyulai »

nézem pillanat!
photogyulai
DrótVégénSzéndarab
Hozzászólások: 25
Csatlakozott: 2015. május 19. kedd, 0:37

Re: Digitális ellenállás

Hozzászólás Szerző: photogyulai »

Na vannak fejlemények :-)
Ha átírom a kódot ahogy írtad úgy nem műkszik egyátalán.
ezt írja ki:
error: too many arguments to function 'void digitalPotWrite(int)'
digitalPotWrite(channel, 255 - level);


DE :-)

Ha a post végén található, a jelen állás szerinti leginkább működő kódot használom.... akkor néha néha bevillan egy érték a mérés közben
(felmerült h rossz a digipot de másik kettőt is próbáltam és uez a szitu)
Bevillan értsd: >> fut le-föl az értéke a kód szerint >> és az idő olyan 10-20%ában be be villannak 4-6-9 kohm-os mérési eredmények a multiméteren a wiper és a föld között. egyéb esetekben végtelen vagy egy fix értéket mutat (még nem jöttem rá hogy ez utóbbi mitől függ)

SZÓVAL

szerintem jó irány ez a chanel irány mert ahogy a kód komment is írja jelen állás szerint 6 csatornán zongoráz át a cucc.. nekem meg tudtommal csak egy van. próbáltam átírni azt a részt h ne zongorázgasson, lgyen fixY de csak végtelen ellenállás jött ki a kimeneten.

most itt tartok.... ha van bárkinek bámi ötlete akkor örömmel hallgatom :-)

Kód: Egész kijelölése

/*
  Digital Pot Control
  This example controls an Analog Devices AD5206 digital potentiometer.
  The AD5206 has 6 potentiometer channels. Each channel's pins are labeled
  A - connect this to voltage
  W - this is the pot's wiper, which changes when you set it
  B - connect this to ground.

 The AD5206 is SPI-compatible,and to command it, you send two bytes,
 one with the channel number (0 - 5) and one with the resistance value for the
 channel (0 - 255).

 The circuit:
  * All A pins  of AD5206 connected to +5V
  * All B pins of AD5206 connected to ground
  * An LED and a 220-ohm resisor in series connected from each W pin to ground
  * CS - to digital pin 10  (SS pin)
  * SDI - to digital pin 11 (MOSI pin)
  * CLK - to digital pin 13 (SCK pin)
*/
// inslude the SPI library:
#include <SPI.h>

// set pin 10 as the slave select for the digital pot:
const int slaveSelectPin = 10;

const byte channel=0x11;

void setup() {
  // set the slaveSelectPin as an output:
  pinMode(slaveSelectPin, OUTPUT);
  Serial.begin(9600);
  // initialize SPI:
  SPI.begin();
  
}

void loop() {

  // go through the six channels of the digital pot:
  for (int channel = 0; channel < 6; channel++) {
    // change the resistance on this channel from min to max:
    for (int level = 0; level < 255; level++) {
      digitalPotWrite(channel, level);
      //Serial.println(level);
      delay(60);
    }
    // wait a second at the top:
    delay(3000);
    // change the resistance on this channel from max to min:
    for (int level = 0; level < 255; level++) {
      digitalPotWrite(channel, 255 - level);
      //Serial.println(level);
      delay(60);
    }
    delay(3000);
  }

}

void digitalPotWrite(byte address, byte value) {
  // take the SS pin low to select the chip:
  digitalWrite(slaveSelectPin, LOW);
  Serial.println(value);
  //  send in the address and value via SPI:
  SPI.transfer(address);
  SPI.transfer(value);
  // take the SS pin high to de-select the chip:
  digitalWrite(slaveSelectPin, HIGH);
  Serial.println(value);
}
Avatar
csegebiga
Chipgyilok
Hozzászólások: 288
Csatlakozott: 2015. március 27. péntek, 21:27

Re: Digitális ellenállás

Hozzászólás Szerző: csegebiga »

Na vannak fejlemények :-)
Ha átírom a kódot ahogy írtad úgy nem műkszik egyátalán.
ezt írja ki:
error: too many arguments to function 'void digitalPotWrite(int)'
digitalPotWrite(channel, 255 - level);
egen.
tudtam, hogy én vagyok a hibás...
hiszen mi is volt a kiindulási javaslatom?
channel nélkül mit csinál?

Kód: Egész kijelölése

void digitalPotWrite(byte value)
{
erre te hogy hívod meg a függvényed?

Kód: Egész kijelölése

digitalPotWrite(channel, 255 - level);
channel nélkül!
mert azt nem írtam, hogy a függvény meghívásakor nem kettő, hanem egy argumentumot kell átadni.
a level értékét.

és amikor erre panaszkodik a fordító, hogy
too many arguments to function...
vagyis túl sok argumentum (=bemenő adat) van a meghívásban, ezt elegánsan figyelmen kívül hagyod.

Kód: Egész kijelölése

digitalPotWrite(channel, 255 - level);
helyett

Kód: Egész kijelölése

digitalPotWrite(255 - level);
kellett volna.
ugye...
Avatar
csegebiga
Chipgyilok
Hozzászólások: 288
Csatlakozott: 2015. március 27. péntek, 21:27

Re: Digitális ellenállás

Hozzászólás Szerző: csegebiga »

Kód: Egész kijelölése

  // go through the six channels of the digital pot:
  for (int channel = 0; channel < 6; channel++) {
jaj mester úr!

átveszel egy hatcsatornás eszközre írt mintaprogramot egy egycsatornás eszközre.
szaraxol az itt nem is létező csatorna címzéssel.

csinálj egy tesztágyat:

Kód: Egész kijelölése

for érték 1 től 255ig
  {
  aktiválod a DS lábat
    SPI.transfer(érték)
    vársz 300ms-ot
    bejövő=SPI.transfer()
    vársz 300ms-ot
  deaktiválod a DS lábat
  kiíratod az érték és a bejövő változót a soros portra  
  vársz 3000ms-ot
  } 
https://www.arduino.cc/en/Reference/SPITransfer
Válasz küldése