#1 2019-10-13 23:45:13

Krepton85
Учасник
Зареєстрований: 2017-11-24
Повідомлень: 8

Проблема с библиотекой Wire для Ардуино DUE.

Есть проблема с функцией Wire.endTransmission(stop) для Ардуино DUE, эта функция игнорирует аргумент stop , когда я отправляю команду Wire.endTransmission(false) то все равно выполняется команда Wire.endTransmission(true), это делает не возможным использовать RESTART с последующей командой  Wire.requestFrom();
Заглянул в библиотеку wire.cpp

uint8_t TwoWire::endTransmission(uint8_t sendStop) {
	uint8_t error = 0;
	// transmit buffer (blocking)
	TWI_StartWrite(twi, txAddress, 0, 0, txBuffer[0]);
	if (!TWI_WaitByteSent(twi, XMIT_TIMEOUT))
		error = 2;	// error, got NACK on address transmit
	
	if (error == 0) {
		uint16_t sent = 1;
		while (sent < txBufferLength) {
			TWI_WriteByte(twi, txBuffer[sent++]);
			if (!TWI_WaitByteSent(twi, XMIT_TIMEOUT))
				error = 3;	// error, got NACK during data transmmit
		}
	}
	
	if (error == 0) {
		
			TWI_Stop(twi);
		if (!TWI_WaitTransferComplete(twi, XMIT_TIMEOUT))
			error = 4;	// error, finishing up
		
	}

	txBufferLength = 0;		// empty buffer
	status = MASTER_IDLE;
	return error;
}

И что мы видим, что аргумент  uint8_t sendStop переданный в функцию
в самой функции не где не используется, это фэйк.
Как исправить эту функцию что бы она работала так же замечательно как на  AVR микроконтроллерах?
В архиве библиотека wire для для Ардуино DUE. Wire_DUE.rar

Неактивний

#2 2019-10-14 10:34:16

Watchdog
Гість

Re: Проблема с библиотекой Wire для Ардуино DUE.

Krepton85 пише:

... это фэйк.
Как исправить эту функцию что бы она работала так же замечательно как на  AVR микроконтроллерах?
В архиве библиотека wire для для Ардуино DUE. http://forum.arduino.ua/img/members/1759/Wire_DUE.rar

lol Самостоятельно! Вы также можете обсудить эту проблему с её разработчикми. Отут: https://github.com/arduino/ArduinoCore-sam/issues

#3 2019-10-14 18:21:10

Krepton85
Учасник
Зареєстрований: 2017-11-24
Повідомлень: 8

Re: Проблема с библиотекой Wire для Ардуино DUE.

Watchdog пише:
Krepton85 пише:

... это фэйк.
Как исправить эту функцию что бы она работала так же замечательно как на  AVR микроконтроллерах?
В архиве библиотека wire для для Ардуино DUE. http://forum.arduino.ua/img/members/1759/Wire_DUE.rar

lol Самостоятельно! Вы также можете обсудить эту проблему с её разработчикми. Отут: https://github.com/arduino/ArduinoCore-sam/issues

Действительно моя проблема уже поднималась здесь: https://github.com/arduino/ArduinoCore-sam/issues/70  но ни кто так и не решил ее.
Я пробовал сам исправить но тогда данная функция возвращает ошибку error 3, при попытке использовать false.

Неактивний

#4 2019-10-14 20:30:06

Kaka
Учасник
Зареєстрований: 2018-03-21
Повідомлень: 384

Re: Проблема с библиотекой Wire для Ардуино DUE.

Krepton85 пише:

Действительно моя проблема уже поднималась здесь: https://github.com/arduino/ArduinoCore-sam/issues/70  но ни кто так и не решил ее.
Я пробовал сам исправить но тогда данная функция возвращает ошибку error 3, при попытке использовать false.

Беда.

И чего ж ты хочешь?

Неактивний

#5 2019-10-14 21:13:20

Krepton85
Учасник
Зареєстрований: 2017-11-24
Повідомлень: 8

Re: Проблема с библиотекой Wire для Ардуино DUE.

Kaka пише:

И чего ж ты хочешь?

Что бы показали как правильно нужно сделать.

Неактивний

#6 2019-10-15 00:16:09

Kaka
Учасник
Зареєстрований: 2018-03-21
Повідомлень: 384

Re: Проблема с библиотекой Wire для Ардуино DUE.

Так ты покажи как сам-то делаешь, а то пока я вижу. что ты хочешь, чтобы за тебя сделали.

Неактивний

#7 2019-10-15 20:36:07

Krepton85
Учасник
Зареєстрований: 2017-11-24
Повідомлень: 8

Re: Проблема с библиотекой Wire для Ардуино DUE.

uint8_t TwoWire::endTransmission(uint8_t sendStop) {
	uint8_t error = 0;
	// transmit buffer (blocking)
	TWI_StartWrite(twi, txAddress, 0, 0, txBuffer[0]);
	if (!TWI_WaitByteSent(twi, XMIT_TIMEOUT))
		error = 2;	// error, got NACK on address transmit
	
	if (error == 0) {
		uint16_t sent = 1;
		while (sent < txBufferLength) {
			TWI_WriteByte(twi, txBuffer[sent++]);
			if (!TWI_WaitByteSent(twi, XMIT_TIMEOUT))
				error = 3;	// error, got NACK during data transmmit
		}
	}
	
	if (error == 0) {
		if(sendStop == true) {//  вот здесь я дописал
			TWI_Stop(twi);
} 
		if (!TWI_WaitTransferComplete(twi, XMIT_TIMEOUT))
			error = 4;	// error, finishing up
		
	}

	txBufferLength = 0;		// empty buffer
	status = MASTER_IDLE;
	return error;
}

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму