Ce site contient essentiellement des notes de travail. Le contenu est en constante évolution, et loin d'être achevé. (+ d'infos)
La plupart des documentations informatiques sont orientées Debian / Ubuntu.

Electronique/Hardware/Sensors/DS1621/Linux

De Ordinoscope.net
Sauter à la navigation Sauter à la recherche

Configuration

Header I2C sur une Alix 2c3 (J13)

Cet exemple a été testé sur une carte Alix (http://www.pcengines.ch/), laquelle a un connecteur I2C disponible. Le Vdd (fil rouge) est pris sur le port sériel à gauche (J-12), qui lui est alimenté en 5V, au lieu du 3.3V fourni par le bus I2C.

Connecteur J-13

  • 1: +3.3V
  • 2: SCL
  • 3: SDA
  • 4: GND

Code

Au préalable, il est nécessaire que le driver du bus I2C soit chargé, ainsi que i2cdev. Pour une carte Alix:

# modprobe cs5535_gpio i2c-dev


C'est un exemple de code fait à la va-vite, uniquement pour démontrer qu'il est possible de lire un DS1621 en I2C. Il ne supporte ni les températures négatives, ni les ½ degrés.

#include <stdio.h>
#include <sys/ioctl.h>
#include <stdlib.h>
#include <fcntl.h>
#include <errno.h>
//#include <linux/i2c.h>
//#include <linux/i2c-dev.h>
#include "i2c-dev.hh"

int main() {
	int addr = 0x90 >> 1;
	__u8 cmd  = 0x01;
	__u8 val  = 0x00;
	__s32 res;
	int file;

	if ((file = open ("/dev/i2c-0", I2C_SMBUS)) < 0) {
		/* ERROR HANDLING; you can check errno to see what went wrong */
		printf("Cannot open adapter\n");
		exit (1);
	}
       
	if (ioctl (file, I2C_SLAVE, addr) < 0) {
		printf ("ioctl does not work\n");
		exit(1);
	}

	i2c_smbus_write_byte_data (file, 0xAC, 0x02);	// Set for continuous conversion
	i2c_smbus_write_byte (file, 0XEE);		// Start conversions

	while (1) {
		val = val == 1 ? 0 : 1;
		res = i2c_smbus_read_byte_data (file, 0xAA);
		if (res < 0) {
			printf ("Error\n");
		} else {
			printf ("Received %i\n", res);
		}
		usleep (1000000);
	}
}


# gcc -o ds1621 ds1621.c
# ./ds1621
Received 24
Received 24
...