Arduino - PCF8591 hogy?

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
Válasz küldése
Avatar
martinus115
DrótVégénSzéndarab
Hozzászólások: 33
Csatlakozott: 2010. december 12. vasárnap, 7:00

Arduino - PCF8591 hogy?

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

Sziasztok,

Valaki tudna egy mintaprogramot kreálni? (esetleg kommentezve)

Köszönöm előre is a segítséget!
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

Hol akadtál el?

A PCF8563 ill 8583-as minták alapján nézted?
Avatar
martinus115
DrótVégénSzéndarab
Hozzászólások: 33
Csatlakozott: 2010. december 12. vasárnap, 7:00

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

Azért írtam, hogy kompletten érdekelne egy program, mert ez az I2C nem tiszta. És nem találtam kifejezetten hasonlót arduino.cc lapon.


Azt látom először meg kell címezni, majd config, majd mehet az adat.

Tehát az érdekelne mi az a legkisebb adatmennyiség amivel mondjuk 5V-ot meg tudod jeleníteni az output lábán.

AIN0-3 lekötöttem Földre
A0-A3 szintén
Vss föld
Vdd táp
Vref táp
AGND föld
EXT és OSC levegő
SCL SDA 4.7k-val tápra felhúzva

Előre is köszi a segítséget!
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

Az I2C alapok a Bascom könyvben szépen benne vannak. Illetve jó kiindulási adat még a Philips I2C leírása (magyar nyelven).

Bascomhoz mintha lett volna ilyen minta.

Amúgy röviden (nem lestem meg az adatlapot)

I2Cinit
i2cstart
I2Cwbyte eszköz írási címe
i2cwbyre melyik regiszterébe írsz?
i2cwbyte kiirandó adat
i2cstop
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

Google: pcf8591 arduino (3. találat)

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

//
// Title        : ADDA-Umsetzer mit PCF8591
// Author       : Claus Kühnel
// Date         : 2010-03-14
// Id		: PCF8591.pde
// Version      : 0018
// Micro        : Arduino 2009 w/ ATmega328
//
// DISCLAIMER:
// The author is in no way responsible for any problems or damage caused by
// using this code. Use at your own risk.
//
// LICENSE:
// This code is distributed under the GNU Public License
// which can be found at http://www.gnu.org/licenses/gpl.txt
//
// -----------------------------------------------------------------------------------------
// Verbindungen I2C-Analog - Arduino
//             SCL     SDA     GND     +5V
// I2C-Analog  ST1-SCL ST1-SDA ST1-GND ST1-5V
// Arduino     A5      A4      GND     5  
// 
#include <Wire.h>

#define PCF8591 (0x9E >> 1)      // Deviceadresse = 7       
#define PCF8591_DAC_ENABLE 0x40
#define PCF8591_ADC_CH0 0x40
#define PCF8591_ADC_CH1 0x41
#define PCF8591_ADC_CH2 0x42
#define PCF8591_ADC_CH3 0x43

#define PURPOSE "Test of PCF8591"

const byte LED = 13;

byte adc_value, dac_value=0;

void putDAC(byte dac_value)
{
  Wire.beginTransmission(PCF8591);
  Wire.send(PCF8591_DAC_ENABLE);
  Wire.send(dac_value);
  Wire.endTransmission();
}    

byte getADC(byte config)
{
  Wire.beginTransmission(PCF8591);
  Wire.send(config);
  Wire.endTransmission();
  
  Wire.requestFrom((int) PCF8591,2);
  while (Wire.available()) 
  {
    adc_value = Wire.receive();
    adc_value = Wire.receive();
  }
  return adc_value;
}

void setup()
{
  pinMode(LED, OUTPUT);
  Serial.begin(19200);
  Wire.begin();
  Serial.println(PURPOSE);
  Serial.println("DAC\tADC\tADC-DAC");
}

void loop()
{
  putDAC(dac_value);                      // DAC Wert setzen
  digitalWrite(LED, 1);                   // LED ein
  delay(10);
  adc_value = getADC(PCF8591_ADC_CH0);    // ADC Wert von Kanal0 auslesen
  digitalWrite(LED, 0);                   // LED aus
  Serial.print(dac_value, HEX);          // DAC Wert ausgeben
  Serial.print("\t");
  Serial.print(adc_value, HEX);          // ADC Wert ausgeben
  Serial.print("\t");
  Serial.println(dac_value - adc_value);  // Abweichung berechnen und ausgeben
  dac_value++; 
  delay(200);
}


Avatar
martinus115
DrótVégénSzéndarab
Hozzászólások: 33
Csatlakozott: 2010. december 12. vasárnap, 7:00

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

köszönöm a segítséget este próbálkozok vele
Avatar
martinus115
DrótVégénSzéndarab
Hozzászólások: 33
Csatlakozott: 2010. december 12. vasárnap, 7:00

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

#include <Wire.h>

#define PCF8591 (0x9E >> 1) // Deviceadresse = 7
#define PCF8591_DAC_ENABLE 0x40


#define PURPOSE "Test of PCF8591"

dac_value=255;

void putDAC(byte dac_value)
{
Wire.beginTransmission(PCF8591);
Wire.send(PCF8591_DAC_ENABLE);
Wire.send(dac_value);
Wire.endTransmission();
}



void setup()
{


Wire.begin();

}

void loop()
{
putDAC(dac_value); // DAC Wert setzen

}

Ennyire leegyszerűsítettem, és a Taviros http://avr.tavir.hu/modules.php?name=Co ... age&pid=17 cikk alapján kötöttem be az IC-t nem akar a Out-on semmi megjelenni. 2x átköttem már próbálkoztam más értékek beadásával is. Mi lehet a probléma?
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

Az előző minta mit csinál?
Rövidítés nélkül.... :)
Avatar
martinus115
DrótVégénSzéndarab
Hozzászólások: 33
Csatlakozott: 2010. december 12. vasárnap, 7:00

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

Villog a 13-as lábon a led és valamit tól ki soros portra, de maga a kimeneten nincs fesz.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

Az I2C lábakon a felhúzóellenállás ott van?
Avatar
martinus115
DrótVégénSzéndarab
Hozzászólások: 33
Csatlakozott: 2010. december 12. vasárnap, 7:00

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

jaja 10k
Avatar
martinus115
DrótVégénSzéndarab
Hozzászólások: 33
Csatlakozott: 2010. december 12. vasárnap, 7:00

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

AIN-eket kössem le földre?
Avatar
martinus115
DrótVégénSzéndarab
Hozzászólások: 33
Csatlakozott: 2010. december 12. vasárnap, 7:00

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

Nah írtam egy újabb progit. Amúgy az Adress itt 0x9E ami 1001 1111 viszont alapból földre lett húzva tehát akkor 0x90. googleban keresgélve találtam progikat és 0x90-nel adták meg simán nem csináltak jobbra shiftelést az addressnél.

#include <Wire.h>

void setup()
{

Wire.begin();

}

void loop()
{
Wire.beginTransmission(0x90);
Wire.send(0x40);
Wire.send(255);
Wire.endTransmission();

}

Még mindig nemjó nincs a kimeneten 5V.
Avatar
martinus115
DrótVégénSzéndarab
Hozzászólások: 33
Csatlakozott: 2010. december 12. vasárnap, 7:00

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

Jó lett :)

(0x90 >> 1) ez a címzése azaz 10010000 (GND esetén), de a 7 bit miatt shifteli jobbra egyet, 0b0100100 -val is elfogadta
Válasz küldése