树莓派系列教程17:PCF8591 AD/DA

树莓派本身没有AD/DA功能,如果树莓派外接模拟传感器,则必须外接AD/DA功能扩展板才能用。Pioneer 600扩展带有AD/DA芯片PCF8591,pcf85911通道8DA,4通道8AD,通过I2C控制。

一、DAC

1bcm2835程序

  cpp代码:

01#include <bcm2835.h> 
02#include <stdio.h>
03#include <unistd.h>
04 
05int main(int argc, char **argv) 
06
07    char Buf[]={0,0};
08    unsigned char value=0;
09 
10    if (!bcm2835_init())return 1; 
11    bcm2835_i2c_begin();
12    bcm2835_i2c_setSlaveAddress(0x48); 
13    bcm2835_i2c_set_baudrate(10000); 
14    printf("start..........\n");
15 
16    while(1) 
17    
18        Buf[0] = 0x40;
19        Buf[1] = value++;
20        bcm2835_i2c_write(Buf,2);
21        printf("AOUT: %d\n",value);
22 
23        bcm2835_delay(20); 
24    
25 
26    bcm2835_i2c_end(); 
27    bcm2835_close(); 
28    return 0; 
29}

编译并执行

1gcc –Wall pcf8591.c –o pcf8591 –lbcm2835
2sudo ./ pcf8591

2、Python程序

01#!/usr/bin/python
02# -*- coding:utf-8 -*-
03import smbus
04import time
05 
06address = 0x48
07cmd = 0x40
08value = 0
09 
10bus = smbus.SMBus(1)
11while True:
12    bus.write_byte_data(address,cmd,value)
13    value += 1
14    if value == 256:
15        value =0
16    print("AOUT:%3d" %value)
17    time.sleep(0.01)

执行程序

1sudo python pcf8591

3、wiringPi程序

  cpp代码:

01#include <wiringPi.h>
02#include <pcf8591.h>
03#include <stdio.h>
04 
05#define Address 0x48
06#define BASE 64
07#define A0 BASE+0
08#define A1 BASE+1
09#define A2 BASE+2
10#define A3 BASE+3
11 
12int main(void)
13{
14    unsigned char value;
15    wiringPiSetup();
16    pcf8591Setup(BASE,Address);
17 
18    while(1)
19    {  
20        analogWrite(A0,value);
21        printf("AOUT: %d\n",value++);
22        delay(20);
23    }  
24}


编译并执行程序

1gcc –Wall pcf8591.c –o pcf8591 –lbcm2835 -lwiringPi
2sudo ./ pcf8591

二、ADC

1、bcm2835程序

  cpp代码:

01#include <bcm2835.h>
02#include <stdio.h>
03#include <unistd.h>
04 
05int main(int argc, char **argv) 
06
07    char Buf[]={0};
08    unsigned char i;
09 
10    if (!bcm2835_init())return 1; 
11    bcm2835_i2c_begin();
12    bcm2835_i2c_setSlaveAddress(0x48); 
13    bcm2835_i2c_set_baudrate(10000); 
14    printf("start..........\n");
15 
16    while(1) 
17    {  
18        for(i = 0;i < 4;i++)
19        {  
20            Buf[0] = i; 
21            bcm2835_i2c_write_read_rs(Buf,1,Buf,1); 
22            bcm2835_i2c_read (Buf,1);
23            printf("AIN%d:%5.2f  ",i,(double)Buf[0]*3.3/255);
24        }  
25        printf("\n");
26        bcm2835_delay(100); 
27    }  
28     
29    bcm2835_i2c_end(); 
30    bcm2835_close(); 
31    return 0; 
32}


编译并执行

1gcc –Wall pcf8591.c –o pcf8591 –lbcm2835
2sudo ./ pcf8591

2Python程序

01#!/usr/bin/python
02# -*- coding:utf-8 -*-
03import smbus
04import time
05 
06address = 0x48
07A0 = 0x40
08A1 = 0x41
09A2 = 0x42
10A3 = 0x43
11bus = smbus.SMBus(1)
12while True:
13    bus.write_byte(address,A0) 
14    value = bus.read_byte(address)
15    print("AOUT:%1.3f  " %(value*3.3/255))
16    time.sleep(0.1)

执行程序

1sudo python pcf8591

3、wiringPi程序

  cpp代码:

01#include <wiringPi.h>
02#include <pcf8591.h>
03#include <stdio.h>
04 
05#define Address 0x48
06#define BASE 64
07#define A0 BASE+0
08#define A1 BASE+1
09#define A2 BASE+2
10#define A3 BASE+3
11 
12int main(void)
13{
14    int value;
15    wiringPiSetup();
16    pcf8591Setup(BASE,Address);
17 
18    while(1)
19    {  
20        value = analogRead(A0);
21        printf("Analoge: %dmv\n",value*3300/255);
22        delay(1000);
23    }  
24}


编译并执行程序

1gcc –Wall pcf8591.c –o pcf8591 -lwiringPi
2sudo ./ pcf8591
TAG: Milk-V Duo UART X1005树莓派5 PCIE转M.2 NVME双SSD固态硬盘2230/2242/2260/2280 树莓派PICO键盘 ESP32开发板C3 1.28寸圆形旋钮显示屏带蓝牙WIFI可按压240x240 树莓派红外摄像头 树莓派UPS ESP32-S3圆形LCD斑梨教程 地平线旭日D-Robotics RDK X5开发板 Sunrise 5 Cortex A55 10TOPs算力 教程 树莓派7寸DSI MIPI显示屏LCD 720x1280 ESP32-P4 Luckfox Lyra RK3506/Omni3576 Jetson摄像头 MPS2280 POE树莓派5 PCIE M.2 NVME SSD固态硬盘 Pi5 2280/2242/2230 RP2040 LoRa HF 树莓派13.3寸电子墨水屏(E) E6全彩色 e-Paper 1600x1200 适用于Arduino/STM32/ESP32 ESP32 C3 WiFi 蓝牙开发板GPIO布局兼容树莓派PICO适用于Arduino IDE MaixPy主页 幸狐Luckfox Pico Core1106 瑞芯微Rockchip RV1106 Linux开发板 ESP32-S3摄像头开发板2寸LCD显示屏240x320 触摸屏 QMI8658传感器 STM32 MX25R6435 树莓派8.8寸LCD DSI显示屏MIPI触摸屏480x1920