Відповісти

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

Назад

Огляд теми (нові повідомленні вгорі)

Krepton85
2019-10-15 20:36:07
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;
}
Kaka
2019-10-15 00:16:09

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

Krepton85
2019-10-14 21:13:20
Kaka пише:

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

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

Kaka
2019-10-14 20:30:06
Krepton85 пише:

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

Беда.

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

Krepton85
2019-10-14 18:21:10
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.

Watchdog
2019-10-14 10:34:16
Krepton85 пише:

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

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

Krepton85
2019-10-13 23:45:13

Есть проблема с функцией 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

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