Rev 583 |
Go to most recent revision |
Blame |
Compare with Previous |
Last modification |
View Log
| RSS feed
Index: analog.c
===================================================================
--- analog.c (revision 1255)
+++ analog.c (working copy)
@@ -80,6 +80,40 @@
int8_t ExpandBaro = 0;
uint8_t PressureSensorOffset;
+#define AD_GYRO_YAW 0
+#define AD_GYRO_ROLL 1
+#define AD_GYRO_NICK 2
+#define AD_AIRPRESS 3
+#define AD_UBAT 4
+#define AD_ACC_TOP 5
+#define AD_ACC_ROLL 6
+#define AD_ACC_NICK 7
+
+
+int VibTestData[VIBTEST_NB_SAMPLES];
+volatile unsigned int VibTestCount;
+volatile unsigned int VibTestDone;
+int* VibTestDataP;
+uint8_t VibTestChannel;
+
+
+void StartVibTest(uint8_t channel)
+{
+ VibTestChannel = channel;
+ VibTestDataP = VibTestData;
+ VibTestCount = VIBTEST_NB_SAMPLES;
+ ADMUX = AD_ACC_ROLL;
+ VibTestDone = 0;
+
+ ADC_Enable();
+
+ while(!VibTestDone);
+
+ if(BoardRelease == 10) PORTD &= ~(1<<PORTD2);// Speaker at PD2
+ else PORTC &= ~(1<<PORTC7);// Speaker at PC7
+
+}
+
/*****************************************************/
/* Initialize Analog Digital Converter */
/*****************************************************/
@@ -202,15 +236,8 @@
*/
-#define AD_GYRO_YAW 0
-#define AD_GYRO_ROLL 1
-#define AD_GYRO_NICK 2
-#define AD_AIRPRESS 3
-#define AD_UBAT 4
-#define AD_ACC_TOP 5
-#define AD_ACC_ROLL 6
-#define AD_ACC_NICK 7
+
ISR(ADC_vect)
{
static uint8_t ad_channel = AD_GYRO_NICK, state = 0;
@@ -218,6 +245,24 @@
static int32_t filtergyronick, filtergyroroll;
static int16_t tmpAirPressure = 0;
+ if (VibTestCount)
+ {
+ *(VibTestDataP++) = ADC;
+ ADMUX = VibTestChannel;
+ ADC_Enable();
+
+ // set speaker port to high
+ if(BoardRelease == 10) PORTD |= (1<<PORTD2); // Speaker at PD2
+ else PORTC |= (1<<PORTC7); // Speaker at PC7
+
+
+ VibTestCount--;
+
+ return;
+ }
+
+ VibTestDone = 1;
+
// state machine
switch(state++)
{
Index: analog.h
===================================================================
--- analog.h (revision 1255)
+++ analog.h (working copy)
@@ -25,7 +25,12 @@
void SearchDacGyroOffset(void);
void ADC_Init(void);
+#define VIBTEST_NB_SAMPLES 1000
+extern int VibTestData[VIBTEST_NB_SAMPLES];
+extern volatile unsigned int VibTestCount;
+void StartVibTest(uint8_t channel);
+
// clear ADC enable & ADC Start Conversion & ADC Interrupt Enable bit
#define ADC_Disable() (ADCSRA &= ~((1<<ADEN)|(1<<ADSC)|(1<<ADIE)))
// set ADC enable & ADC Start Conversion & ADC Interrupt Enable bit
Index: makefile
===================================================================
--- makefile (revision 1255)
+++ makefile (working copy)
@@ -50,63 +50,8 @@
# Output format. (can be srec, ihex, binary)
FORMAT = ihex
-# Target file name (without extension).
+TARGET = Flight-Ctrl_MEGA644p_VibrationTest
-ifeq ($(VERSION_PATCH), 0)
-TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)a_SVN$(REV)
-endif
-ifeq ($(VERSION_PATCH), 1)
-TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)b_SVN$(REV)
-endif
-ifeq ($(VERSION_PATCH), 2)
-TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)c_SVN$(REV)
-endif
-ifeq ($(VERSION_PATCH), 3)
-TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)d_SVN$(REV)
-endif
-ifeq ($(VERSION_PATCH), 4)
-TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)e_SVN$(REV)
-endif
-ifeq ($(VERSION_PATCH), 5)
-TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)f_SVN$(REV)
-endif
-ifeq ($(VERSION_PATCH), 6)
-TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)g_SVN$(REV)
-endif
-ifeq ($(VERSION_PATCH), 7)
-TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)h_SVN$(REV)
-endif
-ifeq ($(VERSION_PATCH), 8)
-TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)i_SVN$(REV)
-endif
-ifeq ($(VERSION_PATCH), 9)
-TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)j_SVN$(REV)
-endif
-ifeq ($(VERSION_PATCH), 10)
-TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)k_SVN$(REV)
-endif
-ifeq ($(VERSION_PATCH), 11)
-TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)l_SVN$(REV)
-endif
-ifeq ($(VERSION_PATCH), 12)
-TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)m_SVN$(REV)
-endif
-ifeq ($(VERSION_PATCH), 13)
-TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)n_SVN$(REV)
-endif
-ifeq ($(VERSION_PATCH), 14)
-TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)o_SVN$(REV)
-endif
-ifeq ($(VERSION_PATCH), 15)
-TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)p_SVN$(REV)
-endif
-ifeq ($(VERSION_PATCH), 16)
-TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)q_SVN$(REV)
-endif
-ifeq ($(VERSION_PATCH), 17)
-TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)r_SVN$(REV)
-endif
-
# Optimization level, can be [0, 1, 2, 3, s]. 0 turns off optimization.
# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
OPT = 2
Index: menu.c
===================================================================
--- menu.c (revision 1255)
+++ menu.c (working copy)
@@ -139,7 +139,7 @@
switch(MenuItem)
{
case 0:// Version Info Menu Item
- LCD_printfxy(0,0,"+ MikroKopter +");
+ LCD_printfxy(0,0,"MK ==VIBR TEST==");
LCD_printfxy(0,1,"HW:V%d.%d SW:%d.%d%c",BoardRelease/10,BoardRelease%10,VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH+'a');
LCD_printfxy(0,2,"Setting: %d %s", GetActiveParamSet(), Mixer.Name);
if(I2CTimeout < 6)
Index: timer0.c
===================================================================
--- timer0.c (revision 1255)
+++ timer0.c (working copy)
@@ -173,18 +173,18 @@
}
// if beeper is on
- if(Beeper_On)
- {
- // set speaker port to high
- if(BoardRelease == 10) PORTD |= (1<<PORTD2); // Speaker at PD2
- else PORTC |= (1<<PORTC7); // Speaker at PC7
- }
- else // beeper is off
- {
- // set speaker port to low
- if(BoardRelease == 10) PORTD &= ~(1<<PORTD2);// Speaker at PD2
- else PORTC &= ~(1<<PORTC7);// Speaker at PC7
- }
+// if(Beeper_On)
+// {
+// // set speaker port to high
+// if(BoardRelease == 10) PORTD |= (1<<PORTD2); // Speaker at PD2
+// else PORTC |= (1<<PORTC7); // Speaker at PC7
+// }
+// else // beeper is off
+// {
+// // set speaker port to low
+// if(BoardRelease == 10) PORTD &= ~(1<<PORTD2);// Speaker at PD2
+// else PORTC &= ~(1<<PORTC7);// Speaker at PC7
+// }
#ifndef USE_NAVICTRL
// update compass value if this option is enabled in the settings
Index: uart0.c
===================================================================
--- uart0.c (revision 1255)
+++ uart0.c (working copy)
@@ -68,8 +68,11 @@
#ifdef USE_MK3MAG
#include "mk3mag.h"
#endif
+#include "printf_P.h"
+#include "analog.h"
+
#define FC_ADDRESS 1
#define NC_ADDRESS 2
#define MK3MAG_ADDRESS 3
@@ -117,6 +120,7 @@
uint16_t Data3D_Timer;
uint16_t DebugData_Interval = 500; // in 1ms
uint16_t Data3D_Interval = 0; // in 1ms
+int16_t requestedVibData;
#ifdef USE_MK3MAG
int16_t Compass_Timer;
@@ -501,6 +505,28 @@
PcAccess = 255;
break;
+ case 'f': // VibrationTest
+ {
+ requestedVibData = pRxData[1];
+ if (requestedVibData == 0)
+ {
+// while(!txd_complete); // wait for previous frame to be sent
+
+// printf("VibTest Start...\r");
+ StartVibTest(pRxData[0] /*channel*/);
+// printf("VibTest Done!\r");
+
+// {
+// int i;
+// for (i=0;i<VIBTEST_NB_SAMPLES;i++)
+// VibTestData[i]=i;
+// }
+ }
+ if (MotorTest_Active)
+ MotorTest_Active = 255; // Extend motor test Timeout
+ }
+ break;
+
case 'n':// "Get Mixer Table
while(!txd_complete); // wait for previous frame to be sent
SendOutData('N', FC_ADDRESS, 1, (uint8_t *) &Mixer, sizeof(Mixer));
@@ -637,6 +663,7 @@
loop_until_bit_is_set(UCSR0A, UDRE0);
// send character
UDR0 = c;
+ loop_until_bit_is_set(UCSR0A, UDRE0);
return (0);
}
@@ -646,6 +673,11 @@
{
if(!txd_complete) return;
+ if (requestedVibData>=0 && txd_complete)
+ {
+ SendOutData('F', FC_ADDRESS, 1, &VibTestData[requestedVibData*50], 100);
+ requestedVibData = -1;
+ }
if(Request_VerInfo && txd_complete)
{
SendOutData('V', FC_ADDRESS, 1, (uint8_t *) &UART_VersionInfo, sizeof(UART_VersionInfo));