Nuvoton M032 i2c scanner kodu hk.

Başlatan MCansız, 29 Aralık 2022, 10:17:58

MCansız

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.

MCansız

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

MCansız

Forumda pek nuvotona ilgi yok galiba