Adjunto 'PCF8591PG.c'
Descargar 1 #include <stdio.h>
2 #include <fcntl.h>
3 #include <unistd.h>
4 #include <sys/ioctl.h>
5 #include <linux/i2c-dev.h>
6 #include <ncurses.h> /* libncurses5-dev */
7
8 /*
9 PCF8591PG.c
10
11 Instalar curses:
12
13 sudo apt-get install libncurses5-dev
14
15 Compilar:
16
17 gcc -o PCF8591PG PCF8591PG.c -lcurses -lpigpio -lpthread
18
19 Run:
20
21 sudo ./PCF8591
22 */
23
24 /*
25 Connect Pi 3V3 - VCC, Ground - Ground, SDA - SDA, SCL - SCL.
26 */
27
28 #define PCF8591_I2C_ADDR 0x48
29
30 /*
31 P4 The thermister voltage is provided at AIN 2.
32 P5 The photocell voltage is provided at AIN 1.
33 P6 The single turn 10K ohm trim pot voltage is provided at AIN 0.
34 */
35
36 /*
37 7 6 5 4 3 2 1 0
38 0 X X X 0 X X X
39 | | | | | |
40 A B B C D D
41
42 0 1 0 0 0 1 0 0
43
44 A 0 D/A inactive
45 1 D/A active
46
47 B 00 single ended inputs
48 01 differential inputs
49 10 single ended and differential
50 11 two differential inputs
51
52 C 0 no auto inc
53 1 auto inc
54
55 D 00 select channel 0
56 01 select channel 1
57 10 select channel 2
58 11 select channel 3
59
60 */
61
62 int main(int argc, char *argv[])
63 {
64 int i;
65 int r;
66 int handle;
67 unsigned char command;
68 unsigned char value[4];
69 unsigned char str[8];
70 char *filename = (char*)"/dev/i2c-1";
71
72 int j;
73 int key;
74
75 if (gpioInitialise() < 0) return 1;
76
77 initscr();
78 noecho();
79 nodelay(stdscr, true);
80 curs_set(0);
81
82 printw("PCF8591, any key to quit.");
83
84 mvaddstr(10, 0, "Resistor");
85 mvaddstr(12, 0, "Brightness");
86 mvaddstr(14, 0, "Temperature");
87 mvaddstr(16, 0, "GND");
88
89 refresh();
90
91 handle = i2cOpen(1, PCF8591_I2C_ADDR, 0);
92
93
94 while (1)
95 {
96 for (i=0; i<4; i++)
97 {
98 command = 0x40 | ((i+1) & 0x03); // habilita la salida | selecciona el canal de lectura i
99
100 i2cWriteDevice(handle, &command, 1); //escribe la palabra de control
101
102 usleep(20000);
103
104 value[i] = i2cReadByte(handle); //lee los datos de la entrada seleccionada
105
106 sprintf(str, "%3d", value[i]); //imprime en pantalla el valor leido
107 mvaddstr(10+i+i, 12, str);
108 value[i] = value[i] / 4;
109 move(10 + i + i, 16);
110
111 for(j = 0; j < 64; j++)
112 if(j < value[i]) addch('*'); else addch(' ');
113 }
114
115 refresh();
116
117 key = getch();
118
119 if (key != -1) break;
120 }
121
122 endwin();
123
124 i2cClose(handle);
125
126 gpioTerminate();
127
128 return (0);
129 }
Archivos adjuntos
Para referirse a los adjuntos de una página, usa attachment:nombredelarchivo, como se muestra abajo en la lista de archivos. NO uses la URL del enlace [get], ya que puede cambiar fácilmente y dejar de funcionar.No tienes permisos para adjuntar un archivo a esta página.