Arduino - PCF8591 hogy?
- martinus115
- DrótVégénSzéndarab
- Hozzászólások: 33
- Csatlakozott: 2010. december 12. vasárnap, 7:00
Arduino - PCF8591 hogy?
Sziasztok,
Valaki tudna egy mintaprogramot kreálni? (esetleg kommentezve)
Köszönöm előre is a segítséget!
Valaki tudna egy mintaprogramot kreálni? (esetleg kommentezve)
Köszönöm előre is a segítséget!
- martinus115
- DrótVégénSzéndarab
- Hozzászólások: 33
- Csatlakozott: 2010. december 12. vasárnap, 7:00
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!
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!
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
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
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);
}
- martinus115
- DrótVégénSzéndarab
- Hozzászólások: 33
- Csatlakozott: 2010. december 12. vasárnap, 7:00
- martinus115
- DrótVégénSzéndarab
- Hozzászólások: 33
- Csatlakozott: 2010. december 12. vasárnap, 7:00
#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?
#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?
- martinus115
- DrótVégénSzéndarab
- Hozzászólások: 33
- Csatlakozott: 2010. december 12. vasárnap, 7:00
- martinus115
- DrótVégénSzéndarab
- Hozzászólások: 33
- Csatlakozott: 2010. december 12. vasárnap, 7:00
- martinus115
- DrótVégénSzéndarab
- Hozzászólások: 33
- Csatlakozott: 2010. december 12. vasárnap, 7:00
- martinus115
- DrótVégénSzéndarab
- Hozzászólások: 33
- Csatlakozott: 2010. december 12. vasárnap, 7:00
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.
#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.
- martinus115
- DrótVégénSzéndarab
- Hozzászólások: 33
- Csatlakozott: 2010. december 12. vasárnap, 7:00