fix bugs and more...

This commit is contained in:
Yohan Simard 2020-11-14 18:00:25 +01:00
parent 89867cd01e
commit e1773afbbe
12 changed files with 215 additions and 77 deletions

View file

@ -345,7 +345,7 @@
<SetRegEntry>
<Number>0</Number>
<Key>DLGDARM</Key>
<Name>(1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=1554,213,1920,450,0)(1009=-1,-1,-1,-1,0)(100=-1,-1,-1,-1,0)(110=-1,-1,-1,-1,0)(111=-1,-1,-1,-1,0)(1011=-1,-1,-1,-1,0)(180=-1,-1,-1,-1,0)(120=-1,-1,-1,-1,0)(121=1509,217,1920,660,0)(122=-1,-1,-1,-1,0)(123=-1,-1,-1,-1,0)(140=-1,-1,-1,-1,0)(240=-1,-1,-1,-1,0)(190=-1,-1,-1,-1,0)(200=-1,-1,-1,-1,0)(170=-1,-1,-1,-1,0)(130=-1,-1,-1,-1,0)(131=-1,-1,-1,-1,0)(132=1336,105,1920,897,0)(133=1148,116,1732,908,0)(160=-1,-1,-1,-1,0)(161=-1,-1,-1,-1,0)(162=-1,-1,-1,-1,0)(210=-1,-1,-1,-1,0)(211=-1,-1,-1,-1,0)(220=-1,-1,-1,-1,0)(221=-1,-1,-1,-1,0)(230=-1,-1,-1,-1,0)(234=-1,-1,-1,-1,0)(231=-1,-1,-1,-1,0)(232=-1,-1,-1,-1,0)(233=-1,-1,-1,-1,0)(150=915,87,1508,879,0)(151=-1,-1,-1,-1,0)</Name>
<Name>(1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=1554,213,1920,450,0)(1009=-1,-1,-1,-1,0)(100=-1,-1,-1,-1,0)(110=-1,-1,-1,-1,0)(111=-1,-1,-1,-1,0)(1011=-1,-1,-1,-1,0)(180=-1,-1,-1,-1,0)(120=129,555,687,1080,0)(121=1509,217,1920,660,0)(122=-1,-1,-1,-1,0)(123=-1,-1,-1,-1,0)(140=-1,-1,-1,-1,0)(240=-1,-1,-1,-1,0)(190=-1,-1,-1,-1,0)(200=-1,-1,-1,-1,0)(170=-1,-1,-1,-1,0)(130=-1,-1,-1,-1,0)(131=-1,-1,-1,-1,0)(132=150,46,938,969,0)(133=1148,116,1732,908,0)(160=1046,190,1640,699,1)(161=-1,-1,-1,-1,0)(162=-1,-1,-1,-1,0)(210=-1,-1,-1,-1,0)(211=-1,-1,-1,-1,0)(220=-1,-1,-1,-1,0)(221=-1,-1,-1,-1,0)(230=-1,-1,-1,-1,0)(234=-1,-1,-1,-1,0)(231=-1,-1,-1,-1,0)(232=-1,-1,-1,-1,0)(233=-1,-1,-1,-1,0)(150=130,96,930,1019,0)(151=127,38,927,961,0)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
@ -382,9 +382,25 @@
<Bp>
<Number>0</Number>
<Type>0</Type>
<LineNumber>84</LineNumber>
<LineNumber>20</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>134226236</Address>
<Address>134226220</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>1</BreakIfRCount>
<Filename>..\Services\RFEmitter.c</Filename>
<ExecCommand></ExecCommand>
<Expression>\\NUCLEO_F103RB\../Services/RFEmitter.c\20</Expression>
</Bp>
<Bp>
<Number>1</Number>
<Type>0</Type>
<LineNumber>43</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>134231406</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
@ -393,14 +409,62 @@
<BreakIfRCount>1</BreakIfRCount>
<Filename>../Src/main.c</Filename>
<ExecCommand></ExecCommand>
<Expression>\\NUCLEO_F103RB\../Src/main.c\84</Expression>
<Expression>\\NUCLEO_F103RB\../Src/main.c\43</Expression>
</Bp>
<Bp>
<Number>2</Number>
<Type>0</Type>
<LineNumber>82</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>134231536</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>1</BreakIfRCount>
<Filename>../Src/main.c</Filename>
<ExecCommand></ExecCommand>
<Expression>\\NUCLEO_F103RB\../Src/main.c\82</Expression>
</Bp>
<Bp>
<Number>3</Number>
<Type>0</Type>
<LineNumber>44</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>0</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>0</BreakIfRCount>
<Filename>../Src/main.c</Filename>
<ExecCommand></ExecCommand>
<Expression></Expression>
</Bp>
<Bp>
<Number>4</Number>
<Type>0</Type>
<LineNumber>87</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>0</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>0</BreakIfRCount>
<Filename>../Src/main.c</Filename>
<ExecCommand></ExecCommand>
<Expression></Expression>
</Bp>
</Breakpoint>
<WatchWindow1>
<Ww>
<count>0</count>
<WinNumber>1</WinNumber>
<ItemText>counter,0x10</ItemText>
<ItemText>msCounter,0x0A</ItemText>
</Ww>
<Ww>
<count>1</count>
@ -417,6 +481,31 @@
<WinNumber>1</WinNumber>
<ItemText>angle,0x0A</ItemText>
</Ww>
<Ww>
<count>4</count>
<WinNumber>1</WinNumber>
<ItemText>displayStr</ItemText>
</Ww>
<Ww>
<count>5</count>
<WinNumber>1</WinNumber>
<ItemText>adcStatus</ItemText>
</Ww>
<Ww>
<count>6</count>
<WinNumber>1</WinNumber>
<ItemText>val1</ItemText>
</Ww>
<Ww>
<count>7</count>
<WinNumber>1</WinNumber>
<ItemText>val2</ItemText>
</Ww>
<Ww>
<count>8</count>
<WinNumber>1</WinNumber>
<ItemText>message</ItemText>
</Ww>
</WatchWindow1>
<Tracepoint>
<THDelay>0</THDelay>
@ -424,7 +513,7 @@
<DebugFlag>
<trace>0</trace>
<periodic>1</periodic>
<aLwin>1</aLwin>
<aLwin>0</aLwin>
<aCover>0</aCover>
<aSer1>0</aSer1>
<aSer2>0</aSer2>
@ -438,7 +527,7 @@
<AscS3>0</AscS3>
<aSer3>0</aSer3>
<eProf>0</eProf>
<aLa>1</aLa>
<aLa>0</aLa>
<aPa1>0</aPa1>
<AscS4>0</AscS4>
<aSer4>0</aSer4>
@ -464,9 +553,19 @@
<Wi>
<IntNumber>0</IntNumber>
<FirstString>((PORTB &amp; 0x00000100) &gt;&gt; 8 &amp; 0x100) &gt;&gt; 8</FirstString>
<SecondString>FF000000000000000000000000000000E0FFEF400100000000000000000000000000000028504F5254422026203078303030303031303029203E3E2038000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000001000000000000000000F03F1300000000000000000000000000000000000000AE110008</SecondString>
<SecondString>FF000000000000000000000000000000E0FFEF400100000000000000000000000000000028504F5254422026203078303030303031303029203E3E2038000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000001000000000000000000F03F1700000000000000000000000000000000000000AE110008</SecondString>
</Wi>
</LogicAnalyzers>
<SystemViewers>
<Entry>
<Name>System Viewer\ADC1</Name>
<WinId>35904</WinId>
</Entry>
<Entry>
<Name>System Viewer\ADC2</Name>
<WinId>35905</WinId>
</Entry>
</SystemViewers>
<DebugDescription>
<Enable>1</Enable>
<EnableFlashSeq>0</EnableFlashSeq>
@ -603,7 +702,7 @@
<GroupNumber>2</GroupNumber>
<FileNumber>10</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\Services\RFEmitter.c</PathWithFileName>

View file

@ -185,7 +185,6 @@
<uocXRam>0</uocXRam>
<RvdsVP>0</RvdsVP>
<RvdsMve>0</RvdsMve>
<RvdsCdeCp>0</RvdsCdeCp>
<hadIRAM2>0</hadIRAM2>
<hadIROM2>0</hadIROM2>
<StupSel>8</StupSel>
@ -352,7 +351,7 @@
<NoWarn>0</NoWarn>
<uSurpInc>0</uSurpInc>
<useXO>0</useXO>
<ClangAsOpt>4</ClangAsOpt>
<uClangAs>0</uClangAs>
<VariousControls>
<MiscControls></MiscControls>
<Define></Define>
@ -559,7 +558,7 @@
<TargetName>Simulateur</TargetName>
<ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName>
<pCCUsed>5060750::V5.06 update 6 (build 750)::.\ARMCC</pCCUsed>
<pCCUsed>5060750::V5.06 update 6 (build 750)::ARMCC</pCCUsed>
<uAC6>0</uAC6>
<TargetOption>
<TargetCommonOption>
@ -734,7 +733,6 @@
<uocXRam>0</uocXRam>
<RvdsVP>0</RvdsVP>
<RvdsMve>0</RvdsMve>
<RvdsCdeCp>0</RvdsCdeCp>
<hadIRAM2>0</hadIRAM2>
<hadIROM2>0</hadIROM2>
<StupSel>8</StupSel>
@ -901,7 +899,7 @@
<NoWarn>0</NoWarn>
<uSurpInc>0</uSurpInc>
<useXO>0</useXO>
<ClangAsOpt>4</ClangAsOpt>
<uClangAs>0</uClangAs>
<VariousControls>
<MiscControls></MiscControls>
<Define></Define>
@ -1120,19 +1118,4 @@
<files/>
</RTE>
<LayerInfo>
<Layers>
<Layer>
<LayName>&lt;Project Info&gt;</LayName>
<LayDesc></LayDesc>
<LayUrl></LayUrl>
<LayKeys></LayKeys>
<LayCat></LayCat>
<LayLic></LayLic>
<LayTarg>0</LayTarg>
<LayPrjMark>1</LayPrjMark>
</Layer>
</Layers>
</LayerInfo>
</Project>

View file

@ -18,8 +18,6 @@ void ADC_conf(ADC_TypeDef *adc)
// Fixe le nombre de conversion à 1
adc->SQR1 &= ADC_SQR1_L;
// Calibration
adc->CR2 |= ADC_CR2_CAL_Msk;
while ((adc->CR2 & ADC_CR2_CAL_Msk));
@ -31,16 +29,15 @@ void ADC_start(ADC_TypeDef *adc)
adc->CR2 |= ADC_CR2_ADON;
}
uint16_t ADC_readRaw(ADC_TypeDef *adc, int channel)
{
// Indique la voie a convertir
adc->SQR3 = channel;
// Lancement de la conversion
adc->CR2 |= ADC_CR2_ADON;
while(!(ADC1->SR & ADC_SR_EOC)) {}
while(!(adc->SR & ADC_SR_EOC)) {}
return ADC1->DR & ADC_DR_DATA_Msk;
return adc->DR & ADC_DR_DATA_Msk;
}

View file

@ -1,7 +1,11 @@
#include "RFEmitter.h"
#include "GPIO.h"
void RFEmitter_conf(USART_TypeDef * usart)
void RFEmitter_conf(USART_TypeDef * usart, GPIO_TypeDef *gpioTXEnable, int pinTXEnable)
{
// Configuration du pin TXEnable
GPIO_conf(gpioTXEnable, pinTXEnable, LL_GPIO_MODE_OUTPUT, LL_GPIO_OUTPUT_PUSHPULL, 0);
// Configuration de l'USART
Usart_conf(usart);
}
@ -10,7 +14,15 @@ void RFEmitter_start(USART_TypeDef * usart)
Usart_enable(usart);
}
void RFEmitter_send(USART_TypeDef * usart, char * message, int longueur)
void RFEmitter_send(USART_TypeDef * usart, char * message, int longueur, GPIO_TypeDef *gpioTXEnable, int pinTXEnable)
{
// set PA11 (TXEnable)
GPIO_setPin(gpioTXEnable, pinTXEnable, 1);
// Envoi du message
Usart_send(usart, message, longueur);
// reset PA11 (TXEnable)
GPIO_setPin(gpioTXEnable, pinTXEnable, 0);
}

View file

@ -3,11 +3,11 @@
#include "USART.h"
void RFEmitter_conf(USART_TypeDef * usart);
void RFEmitter_conf(USART_TypeDef * usart, GPIO_TypeDef *gpioTXEnable, int pinTXEnable);
void RFEmitter_start(USART_TypeDef * usart);
void RFEmitter_send(USART_TypeDef * usart, char * message, int longueur);
void RFEmitter_send(USART_TypeDef * usart, char * message, int longueur, GPIO_TypeDef *gpioTXEnable, int pinTXEnable);
#endif

View file

@ -17,5 +17,6 @@ void Voltage_start(ADC_TypeDef * adc)
float Voltage_getVoltage(ADC_TypeDef * adc, int channel)
{
return ADC_readVolt(adc, channel);
// 13 * la valeur de l'ADC, car pont diviseur de tension en amont de l'ADC
return 13.0f * ADC_readVolt(adc, channel);
}

View file

@ -1,18 +1,23 @@
#include "Display.h"
#include "Voltage.h"
#include "RFEmitter.h"
#include "Sail.h"
#include "stdio.h"
#include "string.h"
USART_TypeDef * EMITTER_USART = USART1;
GPIO_TypeDef * EMITTER_GPIO = GPIOA;
const int EMITTER_PIN = LL_GPIO_PIN_11;
ADC_TypeDef * VOLTAGE_ADC = ADC2;
const int VOLTAGE_CHANNEL = LL_ADC_CHANNEL_12;
const int VOLTAGE_CHANNEL = 12;
GPIO_TypeDef * VOLTAGE_GPIO = GPIOC;
const int VOLTAGE_PIN = LL_GPIO_PIN_2;
void Display_conf()
{
Voltage_conf(VOLTAGE_ADC, VOLTAGE_GPIO, VOLTAGE_PIN);
RFEmitter_conf(EMITTER_USART);
RFEmitter_conf(EMITTER_USART, EMITTER_GPIO, EMITTER_PIN);
}
void Display_start()
@ -21,7 +26,30 @@ void Display_start()
RFEmitter_start(EMITTER_USART);
}
void Display_background()
void Display_background(int secCounter)
{
float voltage = Voltage_getVoltage(ADC2, LL_ADC_CHANNEL_12);
static int previousEmergencyState = 0;
static int prevSendSec = 0;
const int emergency = Sail_getEmergencyState();
if (secCounter - prevSendSec == 3 || (emergency && !previousEmergencyState)) {
prevSendSec = secCounter;
const float voltage = Voltage_getVoltage(VOLTAGE_ADC, VOLTAGE_CHANNEL);
const int sailAngle = Sail_getSailAngle();
const int relativeAngle = sailAngle >= 180 ? 360 - sailAngle : sailAngle;
const int sailPercent = (90 - relativeAngle) * 100 / 90;
char displayStr[100];
sprintf(displayStr, "Bordage actuel = %d%%\nTension de la batterie = %fV\n", sailPercent, voltage);
if (emergency)
sprintf(displayStr, "Limite de roulis atteinte !\n%s", displayStr);
RFEmitter_send(EMITTER_USART, displayStr, strlen(displayStr), EMITTER_GPIO, EMITTER_PIN);
}
previousEmergencyState = emergency;
}

View file

@ -5,6 +5,6 @@ void Display_conf(void);
void Display_start(void);
void Display_background(void);
void Display_background(int msCounter);
#endif

View file

@ -3,9 +3,9 @@
#include "Accelerometer.h"
#include "stdlib.h"
ADC_TypeDef * ROLL_ADC = ADC1;
const int ROLL_X_CHANNEL = LL_ADC_CHANNEL_11;
const int ROLL_Y_CHANNEL = LL_ADC_CHANNEL_10;
ADC_TypeDef * ROLL_ADC = ADC2;
const int ROLL_X_CHANNEL = 11;
const int ROLL_Y_CHANNEL = 10;
GPIO_TypeDef * ROLL_GPIO = GPIOC;
const int ROLL_X_PIN = LL_GPIO_PIN_0;
const int ROLL_Y_PIN = LL_GPIO_PIN_1;

View file

@ -28,7 +28,7 @@ void Sail_start()
IncrementalEncoder_start(ENCODER_TIMER);
}
int getSailAngle(int windAngle)
int windToSailAngle(int windAngle)
{
if (windAngle > 180)
return 90 * (windAngle - 45) / 135;
@ -36,6 +36,12 @@ int getSailAngle(int windAngle)
return 360 - 90 * ((360 - windAngle) - 45) / 135;
}
int Sail_getSailAngle(void)
{
return ServoMotor_getAngle(MOTOR_TIMER, MOTOR_CHANNEL);
}
void Sail_background()
{
if (Sail_isEmergencyState)
@ -46,7 +52,7 @@ void Sail_background()
if (windAngle < 45 || windAngle > 315)
ServoMotor_setAngle(MOTOR_TIMER, MOTOR_CHANNEL, 0);
else
ServoMotor_setAngle(MOTOR_TIMER, MOTOR_CHANNEL, getSailAngle(windAngle));
ServoMotor_setAngle(MOTOR_TIMER, MOTOR_CHANNEL, windToSailAngle(windAngle));
}
void Sail_setEmergency(int state)
@ -55,3 +61,8 @@ void Sail_setEmergency(int state)
if (Sail_isEmergencyState)
ServoMotor_setAngle(MOTOR_TIMER, MOTOR_CHANNEL, RESET_ANGLE);
}
int Sail_getEmergencyState()
{
return Sail_isEmergencyState;
}

View file

@ -25,6 +25,10 @@ void Sail_background(void);
*/
void Sail_setEmergency(int state);
int Sail_getEmergencyState(void);
int Sail_getSailAngle(void);
/**
* @brief Réinitialise la voile à sa position initiale
* @note

View file

@ -29,44 +29,34 @@
#include "ADC.h"
#include "GPIO.h"
#include "Accelerometer.h"
#include "RFEmitter.h"
#include "stdio.h"
void SystemClock_Config(void);
int secCounter = 0;
/* Private functions ---------------------------------------------------------*/
int counter = 1;
int adcRaw1 = 0;
int adcRaw2 = 0;
double adcVolt1 = 0.0;
double adcVolt2 = 0.0;
int angle = 0;
void backgroundTask()
{
counter++;
static int msCounter;
msCounter++;
if (msCounter == 1000) {
msCounter = 0;
secCounter++;
}
Sail_background();
Roll_background();
Orientation_background();
// DEBUG
angle = Accelerometer_getAngle(ADC1, LL_ADC_CHANNEL_11);
adcRaw1 = ADC_readRaw(ADC1, LL_ADC_CHANNEL_11);
adcRaw2 = ADC_readRaw(ADC1, LL_ADC_CHANNEL_10);
adcVolt1 = ADC_convertToVolt(adcRaw1);
adcVolt2 = ADC_convertToVolt(adcRaw2);
}
void configurePeripherals()
{
Sail_conf();
Roll_conf();
Display_conf();
Orientation_conf();
// DEBUG
ADC_conf(ADC1);
}
void startPeripherals()
@ -74,9 +64,6 @@ void startPeripherals()
Sail_start();
Roll_start();
Display_start();
// DEBUG
ADC_start(ADC1);
}
/**
@ -85,7 +72,7 @@ void startPeripherals()
* @retval None
*/
int main(void)
{
{
/* Configure the system clock to 72 MHz */
SystemClock_Config();
@ -97,8 +84,24 @@ int main(void)
Scheduler_start();
while (1) {
Display_background();
Display_background(secCounter);
}
//// ADC 2 marche niquel, ADC1 ne marche pas :(
// ADC_conf(ADC1);
// ADC_start(ADC1);
//
// ADC_conf(ADC2);
// ADC_start(ADC2);
//
// while (1) {
// val1 = ADC_readRaw(ADC1, 10);
// val2 = ADC_readRaw(ADC2, 10);
// }
}
@ -177,8 +180,8 @@ void SystemClock_Config(void)
*/
void assert_failed(uint8_t *file, uint32_t line)
{
/* User can add his own implementation to report the file name and line number,
ex: printf("Wrong parameters value: file %s on line %d", file, line) */
/* User can add his own implementation to report the file name and line number*/
printf("Wrong parameters value: file %s on line %d", file, line);
/* Infinite loop */
while (1)