Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => ARM => Cortex ARM => Konuyu başlatan: MCansız - 29 Aralık 2022, 10:17:58

Başlık: Nuvoton M032 i2c scanner kodu hk.
Gönderen: MCansız - 29 Aralık 2022, 10:17:58
Merhabalar

 Nuvoton m032SE geliştirme bordu ile denemeler yapıyorum. Öncelikle i2c için stm32f407-discovery kartında  i2c1 hattı üzerinde bulunan CS43L22 ses chipini hal kütüphanesi ile taratıp bulabiliyorum.

stm32 ile i2c tarama yaptığımda

arr[0] = 0x1A
arr[1] = 0x4A

adreslerini bulabiliyorum. ve bu değerler datasheet ile uyuşuyor.

stm32f hal kod:



int main(void)
{

HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_I2C1_Init();

HAL_GPIO_WritePin(Audio_RST_GPIO_Port, Audio_RST_Pin, GPIO_PIN_SET);

while (1)
{

memset(arr, 0, 10);
counter = 0;

for (int i = 1; i < 128; i++)
{
ret = HAL_I2C_IsDeviceReady(&hi2c1, (uint16_t) (i<<1), 3, 5);
if (ret != HAL_OK)
{

Buffer[i] = 0;

}
else if (ret == HAL_OK)
{
Buffer[i] = i;
arr[counter] = i;
counter++;

}
}





}

}



stm32 i2c pinlerinden arduinoya bağlantı yaptım arduino i2c scanner kodu (https://playground.arduino.cc/Main/I2cScanner ) ile aynı adresleri bulabiliyorum.

Amacım Nuvoton için bu olayı gerçekleştirmek. Nu-eclips ide aşağıdaki kodu yazdım.

i2c tarama yaptığımda

arr[0] = 0x25
arr[1] = 0x65

adreslerini bulabiliyorum. adresler neden uyuşmuyor.

nuvoton kod:


int ret;
char Buffer[300];
char arr[10];
char arr2[10];
int counter;

void System_Init(void)
{
/* Unlock protected registers */
SYS_UnlockReg();

Clock_Init();
Pin_Init();
Periph_Init();

/* Lock protected registers */
SYS_LockReg();
}

int32_t main(void)
{

System_Init();

while (1)
{

memset(arr, 0, 10);
counter = 0;


for (int i = 1; i < 128; i++)
{
ret = 0;
while (ret == 0)
{
static int ct = 0;
ret = I2C_ReadByte(I2C1, (uint16_t) (i<<1));
ct++;
if (ct > 5)
{
ct = 0;
break;
}

}

if (ret == 0)
{

Buffer[i] = 0;

}
else if (ret != 0)
{
Buffer[i] = i;
arr[counter] = i;
counter++;

}
}

}

}


Nuvotonda nerede yanlış yapıyorum. Yardımlarınız için teşekkür ederim.
Başlık: Ynt: Nuvoton M032 i2c scanner kodu hk.
Gönderen: MCansız - 30 Aralık 2022, 14:46:27
Problem cözümü olarak

ret = I2C_ReadByte(I2C1, (uint16_t) (i<<1));

yerine

ret = I2C_ReadByte(I2C1,  (i));

kullanmak gerekiyor burada slave adresi 7 bit kaydırılmamış olarak girilmeli. STM de kaydırılmış olarak giriliyordu

taramada sadece 0x4A ID bulabiliyorum 0x1A adresini bulamıyorum nedense
Başlık: Ynt: Nuvoton M032 i2c scanner kodu hk.
Gönderen: MCansız - 30 Aralık 2022, 19:44:13
Forumda pek nuvotona ilgi yok galiba