Hallo zusammen,
vor kurzem bin ich auf den Geschmack der MicroController und Elektrotechnik gekommen. Zum lernen habe ich mir das Sensorpaket von Sunfounder für Raspberry Pi gegönnt, der einzigste Unterschied ist das ich die Sensoren mit einem ESP8266 NodeMCU und dem SDK RTOS welches der Hersteller anbietet nutze.
Nun habe ich die Situation das ich gerne den Wert eines Analogen Potentiometer Moduls welches am AD/DA Wandler PCF8591 angeschlossen ist über den ESP8266 auslesen möchte. Leider erhalte ich bei der Kommunikation über das I2C Protokoll immer nur den Wert 255.
Der Aufbau ist gleich wie auf dem SunFounder Projekt (https://www.sunfounder.com/lea…-kit-v2-0-for-b-plus.html). Bei dem ESP8266 kamen dann die Pins D2 und D4 zum Einsatz.
Vielleicht hat ja jemand nen Tipp für mich wie das doch noch was wird?!
Anbei noch der Code für das ganze:
#include "esp_common.h"
#include "freertos/task.h"
#include "i2c_master.h"
#define PCF8591 0x48
#define WRITE 0
#define READ 1
/******************************************************************************
* FunctionName : user_rf_cal_sector_set
* Description : SDK just reversed 4 sectors, used for rf init data and paramters.
* We add this function to force users to set rf cal sector, since
* we don't know which sector is free in user's application.
* sector map for last several sectors : ABCCC
* A : rf cal
* B : rf init data
* C : sdk parameters
* Parameters : none
* Returns : rf cal sector
*******************************************************************************/
uint32 user_rf_cal_sector_set(void)
{
flash_size_map size_map = system_get_flash_size_map();
uint32 rf_cal_sec = 0;
switch (size_map) {
case FLASH_SIZE_4M_MAP_256_256:
rf_cal_sec = 128 - 5;
break;
case FLASH_SIZE_8M_MAP_512_512:
rf_cal_sec = 256 - 5;
break;
case FLASH_SIZE_16M_MAP_512_512:
case FLASH_SIZE_16M_MAP_1024_1024:
rf_cal_sec = 512 - 5;
break;
case FLASH_SIZE_32M_MAP_512_512:
case FLASH_SIZE_32M_MAP_1024_1024:
rf_cal_sec = 1024 - 5;
break;
default:
rf_cal_sec = 0;
break;
}
return rf_cal_sec;
}
void I2cCommunication(void* parameters)
{
printf("SDK version:%s\n", system_get_sdk_version());
uint8 ackValue;
i2c_master_gpio_init();
// Settings
i2c_master_start();
i2c_master_writeByte(0x92);
ackValue = i2c_master_getAck();
printf("%u \r\n", ackValue);
i2c_master_writeByte(0x00);
ackValue = i2c_master_getAck();
printf("%u \r\n", ackValue);
i2c_master_stop();
// READ
i2c_master_start();
i2c_master_writeByte(0x93);
ackValue = i2c_master_getAck();
printf("%u \r\n", ackValue);
while(1) {
uint8 value = i2c_master_readByte();
i2c_master_setAck(0);
printf("%u \r\n", value);
i2c_master_readByte();
value = i2c_master_readByte();
i2c_master_setAck(1);
printf("%u \r\n", value);
vTaskDelay(300 / portTICK_RATE_MS);
}
i2c_master_stop();
vTaskDelete(NULL);
}
/******************************************************************************
* FunctionName : user_init
* Description : entry of user application, init user function here
* Parameters : none
* Returns : none
*******************************************************************************/
void user_init(void)
{
xTaskCreate(&I2cCommunication, "i2c", 2048, NULL, 1, NULL);
}
Display More