1,28 → 1,28 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Copyright (c) 04.2007 Holger Buss |
// + Nur für den privaten Gebrauch |
// + Nur f�r den privaten Gebrauch |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Es gilt für das gesamte Projekt (Hardware, Software, Binärfiles, Sourcecode und Dokumentation), |
// + dass eine Nutzung (auch auszugsweise) nur für den privaten (nicht-kommerziellen) Gebrauch zulässig ist. |
// + Es gilt f�r das gesamte Projekt (Hardware, Software, Bin�rfiles, Sourcecode und Dokumentation), |
// + dass eine Nutzung (auch auszugsweise) nur f�r den privaten (nicht-kommerziellen) Gebrauch zul�ssig ist. |
// + Sollten direkte oder indirekte kommerzielle Absichten verfolgt werden, ist mit uns (info@mikrokopter.de) Kontakt |
// + bzgl. der Nutzungsbedingungen aufzunehmen. |
// + Eine kommerzielle Nutzung ist z.B.Verkauf von MikroKoptern, Bestückung und Verkauf von Platinen oder Bausätzen, |
// + Eine kommerzielle Nutzung ist z.B.Verkauf von MikroKoptern, Best�ckung und Verkauf von Platinen oder Baus�tzen, |
// + Verkauf von Luftbildaufnahmen, usw. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Werden Teile des Quellcodes (mit oder ohne Modifikation) weiterverwendet oder veröffentlicht, |
// + unterliegen sie auch diesen Nutzungsbedingungen und diese Nutzungsbedingungen incl. Copyright müssen dann beiliegen |
// + Werden Teile des Quellcodes (mit oder ohne Modifikation) weiterverwendet oder ver�ffentlicht, |
// + unterliegen sie auch diesen Nutzungsbedingungen und diese Nutzungsbedingungen incl. Copyright m�ssen dann beiliegen |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Sollte die Software (auch auszugesweise) oder sonstige Informationen des MikroKopter-Projekts |
// + auf anderen Webseiten oder sonstigen Medien veröffentlicht werden, muss unsere Webseite "http://www.mikrokopter.de" |
// + auf anderen Webseiten oder sonstigen Medien ver�ffentlicht werden, muss unsere Webseite "http://www.mikrokopter.de" |
// + eindeutig als Ursprung verlinkt werden |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Keine Gewähr auf Fehlerfreiheit, Vollständigkeit oder Funktion |
// + Keine Gew�hr auf Fehlerfreiheit, Vollst�ndigkeit oder Funktion |
// + Benutzung auf eigene Gefahr |
// + Wir übernehmen keinerlei Haftung für direkte oder indirekte Personen- oder Sachschäden |
// + Wir �bernehmen keinerlei Haftung f�r direkte oder indirekte Personen- oder Sachsch�den |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die Portierung der Software (oder Teile davon) auf andere Systeme (ausser der Hardware von www.mikrokopter.de) ist nur |
// + mit unserer Zustimmung zulässig |
// + mit unserer Zustimmung zul�ssig |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist hiervon nicht betroffen |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
99,10 → 99,9 |
motor_read = 0; |
|
for (i = 0; i < MAX_MOTORS; i++) { |
motor[i].SetPoint = 0; |
motor[i].Present = 0; |
motor[i].Error = 0; |
motor[i].MaxPWM = 0; |
motor[i].throttle = 0; |
motor[i].present = 0; |
motor[i].maxPWM = 0; |
} |
|
SREG = sreg; |
206,14 → 205,14 |
I2C_WriteByte(0x52 + (motor_write * 2)); // select slave adress in tx mode |
break; |
case 1: // Send Data to Slave |
I2C_WriteByte(motor[motor_write].SetPoint); // transmit rotation rate setpoint |
I2C_WriteByte(motor[motor_write].throttle); // transmit throttle value. |
break; |
case 2: // repeat case 0+1 for all motors |
if (TWSR == TW_MT_DATA_NACK) { // Data transmitted, NACK received |
if (!missing_motor) |
missing_motor = motor_write + 1; |
if (++motor[motor_write].Error == 0) |
motor[motor_write].Error = 255; // increment error counter and handle overflow |
if (++motor[motor_write].error == 0) |
motor[motor_write].error = 255; // increment error counter and handle overflow |
} |
I2C_Stop(TWI_STATE_MOTOR_TX); |
I2CTimeout = 10; |
224,13 → 223,13 |
case 3: |
if (TWSR != TW_MR_SLA_ACK) { // SLA+R transmitted, if not ACK received |
// no response from the addressed slave received |
motor[motor_read].Present = 0; |
motor[motor_read].present = 0; |
motor_read++; // next motor |
if (motor_read >= MAX_MOTORS) |
motor_read = 0; // restart reading of first motor if we have reached the last one |
I2C_Stop(TWI_STATE_MOTOR_TX); |
} else { |
motor[motor_read].Present = ('1' - '-') + motor_read; |
motor[motor_read].present = ('1' - '-') + motor_read; |
I2C_ReceiveByte(); //Transmit 1st byte |
} |
missingMotor = missing_motor; |
237,12 → 236,12 |
missing_motor = 0; |
break; |
case 4: //Read 1st byte and transmit 2nd Byte |
motor[motor_read].Current = TWDR; |
motor[motor_read].current = TWDR; |
I2C_ReceiveLastByte(); // nack |
break; |
case 5: |
//Read 2nd byte |
motor[motor_read].MaxPWM = TWDR; |
motor[motor_read].maxPWM = TWDR; |
motor_read++; // next motor |
if (motor_read >= MAX_MOTORS) |
motor_read = 0; // restart reading of first motor if we have reached the last one |
293,7 → 292,7 |
printf("\n\rFound BL-Ctrl: "); |
|
for (i = 0; i < MAX_MOTORS; i++) { |
motor[i].SetPoint = 0; |
motor[i].throttle = 0; |
} |
|
I2C_Start(TWI_STATE_MOTOR_TX); |
304,13 → 303,13 |
for (i = 0; i < MAX_MOTORS; i++) { |
I2C_Start(TWI_STATE_MOTOR_TX); |
_delay_ms(2); |
if (motor[i].Present) |
if (motor[i].present) |
printf("%d ",i+1); |
} |
|
for (i = 0; i < MAX_MOTORS; i++) { |
if (!motor[i].Present && mixerMatrix.motor[i][MIX_THROTTLE] > 0) |
if (!motor[i].present && mixerMatrix.motor[i][MIX_THROTTLE] > 0) |
printf("\n\r\n\r!! MISSING BL-CTRL: %d !!",i + 1); |
motor[i].Error = 0; |
motor[i].error = 0; |
} |
} |