完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
大家好,
我刚刚将 ADS8344 8 通道 SPI ADC 连接到我的 ESP8266-12E,并确信它们将是一个移植到 Arduino IDE 环境的 SPI 库。我错了! 他们是 2006 年关于 avrfreak 的一些神秘信息,但我不明白,原作者是 MIA。 我如何与这个 ADC 芯片通信?想想看,espressif 的 SPI 端口上没有太多可用信息! 我不知道如何使用他们的 SDK,而且他们的文档也很神秘。 我多么想念我的 PIC18F 和 Microchip 的精彩技术手册 谁能帮助我?谢谢。 代码:全选// ********************************************** // Define the Arduino pins used for SPI interface // ********************************************** #define SELPIN 10 // Selection pin #define DATAOUT 11 // MOSI #define DATAIN 12 // MISO #define SPICLOCK 13 // Clock // ************************************************************************************ // Declare (and initialize where necessary) global variables available to all functions // ************************************************************************************ long readValue; double readVoltage; // ********************************************************* // Setup function - initializes the board and sets pin modes // ********************************************************* void setup() { // set pin modes pinMode(SELPIN, OUTPUT); pinMode(DATAOUT, OUTPUT); pinMode(DATAIN, INPUT); pinMode(SPICLOCK, OUTPUT); // disable device at the outset digitalWrite(SELPIN, HIGH); digitalWrite(DATAOUT, LOW); digitalWrite(SPICLOCK, LOW); // Setup communications rate Serial.begin(9600); analogReference(DEFAULT); } // **************************** // Loop function - main program // **************************** void loop() { int iChannel = 1; for(iChannel=1; iChannel <= 5; iChannel++) { // Loop to read all five channels and send it to serial readValue = read_adc(iChannel); if (readValue < 0) { readValue += 65535; } readVoltage = (double(readValue)*5000)/65535; Serial.print(readVoltage); if (iChannel < 5) { Serial.print(","); } } Serial.println(); // Wait a bit for the analog-to-digital converter // to stabilize after the last reading: delay(10); } // ********************************************* // Function that reads the requested ADC channel // ********************************************* int read_adc(int channel) { long adcvalue = 0; byte commandbits = B00000000; // Read nothing.... switch(channel) // Switch case to select channel { case 1: { commandbits = B10000111; // Select channel 0 (LPS-1 Uout) } break; case 2: { commandbits = B11000111; // Select channel 1 (LPS-2 Uout) } break; case 3: { commandbits = B10010111; // Select channel 2 (LPS-2 Kout) } break; case 4: { commandbits = B11010111; // Select channel 3 (External) } break; case 5: { commandbits = B10100111; // Select channel 4 (2.500V Reference) } break; } digitalWrite(SELPIN,LOW); // Select adc // We need 24 cycles for a full conversion // 8 cycles for control byte and 16 for // setup bits to be written for (int i=7; i>=0; i--) { digitalWrite(DATAOUT,commandbits&1<=0; i--) { adcvalue+=digitalRead(DATAIN)<=0; i--) { digitalRead(DATAIN)<<0; // Cycle the clock 7 times digitalWrite(SPICLOCK,HIGH); digitalWrite(SPICLOCK,LOW); } // 32 cycles total digitalWrite(SELPIN, HIGH); //turn off device return adcvalue; } |
|
相关推荐
1个回答
|
|
您可以尝试使用ESP8266的官方SPI库,该库包含在Arduino IDE中。这是一个比较简单的使用示例:
``` #include void setup() { // 初始化SPI总线 SPI.begin(); } void loop() { // 选择SPI从设备 digitalWrite(SS, LOW); // 发送命令并接收数据 byte data = SPI.transfer(0x01); // 取消SPI从设备选择 digitalWrite(SS, HIGH); // 处理数据 // ... } ``` 在这个例子中,我们使用`SPI.begin()`函数初始化SPI总线,并使用`digitalWrite()`函数选择SPI从设备。然后,我们使用`SPI.transfer()`函数发送命令并接收数据,并使用`digitalWrite()`函数取消SPI从设备选择。最后,我们可以在`loop()`函数中对数据进行处理。 您需要将它们与ADS8344通信的具体命令和数据格式集成到这个示例中,但是这是一个基本的框架。希望这可以帮助您开始与ESP8266和SPI通信。 |
|
|
|
只有小组成员才能发言,加入小组>>
982 浏览 1 评论
553浏览 6评论
463浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
447浏览 5评论
448浏览 4评论
418浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-27 21:05 , Processed in 0.815356 second(s), Total 76, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号