Вс сен 26, 2021 12:25:34
Сб окт 23, 2021 12:25:29
TIMER2->TOP = (REFL_PERIOD*50/8) - 1; // Period is 2.5ms
TIMER2->CC[2].CTRL = TIMER_CC_CTRL_MODE_PWM | TIMER_CC_CTRL_PRSCONF_PULSE;
TIMER2->CC[2].CCV = (REFL_PERIOD-200)*50 / 8; // Считывание за 50 мкс до включения подсветки
TIMER2->CC[0].CTRL = TIMER_CC_CTRL_MODE_PWM | TIMER_CC_CTRL_PRSCONF_LEVEL;
TIMER2->CC[0].CCV = (REFL_PERIOD-150)*50 / 8; // Подсветку включаем за 150 мкс до конца цикла
TIMER2->CC[1].CTRL = TIMER_CC_CTRL_MODE_PWM | TIMER_CC_CTRL_PRSCONF_PULSE;
TIMER2->CC[1].CCV = (REFL_PERIOD-50)*50 / 8; // Считывание через 100 мкс после включения подсветки
// (и за 50 мкс до выключения)
#ifndef RESOURCES_H_
#define RESOURCES_H_
// LDMA channels
#define LDMA_USART3_RX_CHANNEL 1
#define LDMA_USART3_TX_CHANNEL 2
#define LDMA_USART_OLED_CHANNEL 2
#define LDMA_ADC_CHANNEL 3
#define LDMA_MEM2MEM_CHANNEL 7
// PRS channels
#define TACH_PRS_CH 1
// Должен быть канал 2 для вывода через PF5
#define REFL_LED_PRS_CH 2
// Следующие два должны быть по порядку так как объединяются по ИЛИ!
#define REFL_CAPT_LIGHT_PRS_CH 3
#define REFL_CAPT_DARK_PRS_CH 4
// IRQ priorities:
#define I2C_IRQ_PRI 2
#define TIMER0_IRQ_PRI 3
#define TIMER1_IRQ_PRI 3
#define USART0_IRQ_PRI 4
#define USART3_TX_IRQ_PRI 4
#define LDMA_IRQ_PRI 5
#endif /* RESOURCES_H_ */
unsigned int mask = 0x01;
for (unsigned int ii = 0; ii < 8; ii++) {
if (photo_array[ii+8] < (data.threshold >> 3)) current_sensor &= ~mask;
else if ((photo_array[ii] > 100) && (((photo_array[ii]-80)*8ul/10) > photo_array[ii+8])) {
current_sensor &= ~mask;
} else {
current_sensor |= mask;
}
mask <<= 1;
}
So, it should be possible to adjust for this at the contest. I am not sure if I will make the adjustment by changing the offset of the curve automatically or manually. This is an area I am way behind compared to other people since I have not had to deal with it before – all suggestions for what works and doesn’t work are greatly appreciated!
Вс дек 12, 2021 14:05:34
ColorRed 970
ColorGreen 1024
ColorBlue 1200
ColorThr 512
Saturation 900
When a burst write reaches a protected block address, the automatic address increment stops and all the subsequent data bytes received for write will be ignored by the device.
Сб янв 01, 2022 18:54:12
Время напряж. задаваемая реальная одометр
Время левый правый левый правый левый правый
6035 # 67 15266 16000 13923 15030 8936 9467 15633 14477
6040 # 69 15266 16000 14581 15648 8938 9469 15633 15115
6045 # 70 15266 16000 14581 15648 8940 9471 15633 15115
6050 # 69 15266 16000 14209 -16871 8942 9473 15633 -1331
6055 # 67 15266 16000 14209 -16871 8944 9475 15633 -1331
6060 # 68 15266 16000 14893 18475 8947 9478 15633 16684
6065 # 70 15266 16000 14893 18475 8949 9480 15633 16684
6070 # 70 15266 16000 14587 16370 8951 9482 15633 15479
Sf = 2aS/4a = S/2
Сб янв 15, 2022 19:32:36
Сб фев 19, 2022 18:26:58
Конечно, то что финиш находится строго в центре, облегчает жизнь, но если правила изменятся? В других соревнованиях финиш обозначается только как 4 клеточки в любом месте лабиринта и на одних соревнованиях (кажется, в японии) даже имел 2 входа! Пока я не придумал способа, как определить что найден финиш в таком "общем" случае. Пока финиш определяется просто: если координата стала X=(7 или 8) и Y=(7 или 8) , то первое совпадение и является финишной точкой.The start of the maze is located at one of the four corners. The start square is
bounded on three sides by walls. The start line is located between the first and
second squares. The destination goal is the four 18 cm × 18 cm cells at the centre of
the maze. The finish line is at the entrance to the destination square.
Вопрос, насколько широко это можно трактовать. Можно ли подключать конфигурационный дисплей? или это нарушение пункта, что "The Micromouse shall be self-contained"? или так как он отключаемый, то нарушается пункт, что "The Micromouse shall not leave any part of its body behind". Про работу через блютус, похоже речь не идёт - явно указано - "no remote control". Правда, полагаю, что за телеметрию бить не будут. Хотя кто знает. Ну по крайней мере, один переключатель надо поставить, для указания с какого угла лабиринта я стартую (вернее указатель направления север или восток, так как стартовая координата в любом случае [0:0].The contestants are allowed to:
change switch positions;
adjust sensors;
make repairs in case the Micromouse breaks down.
Вс мар 27, 2022 11:57:02
Вс май 08, 2022 14:42:45
EEdescLinktx[1] = (LDMA_Descriptor_t)LDMA_DESCRIPTOR_LINKREL_WRITE(USART_ROUTELOC0_CLKLOC_LOC0 | USART_ROUTELOC0_CSLOC_LOC1 |
USART_ROUTELOC0_RXLOC_LOC0 | USART_ROUTELOC0_TXLOC_LOC0,
&USART3->ROUTELOC0, 1);
EEdescLinktx[2] = (LDMA_Descriptor_t)LDMA_DESCRIPTOR_LINKREL_WRITE(USART_CMD_RXEN | USART_CMD_CLEARRX, &USART3->CMD, 1);
EEdescLinktx[3] = (LDMA_Descriptor_t)LDMA_DESCRIPTOR_LINKREL_M2P_BYTE(cmd_ptr, &USART3->TXDATA, cmd_count, 1);
EEdescLinktx[4] = (LDMA_Descriptor_t)LDMA_DESCRIPTOR_SINGLE_M2P_BYTE(send_data_ptr, &USART3->TXDATA, count);
EEdescLinkrx[0] = (LDMA_Descriptor_t)LDMA_DESCRIPTOR_LINKREL_P2M_BYTE(&USART3->RXDATA, cmd_ptr, cmd_count, 1);
EEdescLinkrx[1] = (LDMA_Descriptor_t)LDMA_DESCRIPTOR_LINKREL_P2M_BYTE(&USART3->RXDATA, send_data_ptr, count, 1);
EEdescLinkrx[2] = (LDMA_Descriptor_t)LDMA_DESCRIPTOR_SINGLE_WRITE(0, &tx_busy);
LDMA_Descriptor_t tx_descriptor[] = {
LDMA_DESCRIPTOR_LINKREL_SYNC(0, 0x80, 0x00, 0x00, 1),
LDMA_DESCRIPTOR_LINKREL_WRITE(USART_CMD_RXDIS, &USART3->CMD, 1),
LDMA_DESCRIPTOR_LINKREL_WRITE(USART_ROUTELOC0_CLKLOC_LOC0 | USART_ROUTELOC0_CSLOC_LOC0 |
USART_ROUTELOC0_RXLOC_LOC0 | USART_ROUTELOC0_TXLOC_LOC0,
&USART3->ROUTELOC0, 1),
LDMA_DESCRIPTOR_LINKREL_WRITE(0, &GPIO->P[gpioPortA].DOUT, 1),
LDMA_DESCRIPTOR_LINKREL_M2P_BYTE(start_col, &USART3->TXDATA, sizeof(start_col), 1),
LDMA_DESCRIPTOR_LINKREL_SYNC(0, 0x80, 0x80, 0x80, 1),
LDMA_DESCRIPTOR_LINKREL_WRITE(USART_CMD_RXDIS, &USART3->CMD, 1),
LDMA_DESCRIPTOR_LINKREL_WRITE(USART_ROUTELOC0_CLKLOC_LOC0 | USART_ROUTELOC0_CSLOC_LOC0 |
USART_ROUTELOC0_RXLOC_LOC0 | USART_ROUTELOC0_TXLOC_LOC0,
&USART3->ROUTELOC0, 1),
LDMA_DESCRIPTOR_LINKREL_WRITE(0, &GPIO->P[gpioPortA].DOUT, 1),
LDMA_DESCRIPTOR_LINKREL_M2P_BYTE(buffer, &USART3->TXDATA, sizeof(buffer), 1),
LDMA_DESCRIPTOR_SINGLE_WRITE(0, &tx_busy)
};
void USART3_TX_IRQHandler(void) {
if(USART3->IF & USART_IF_TXC) {
USART3->IFC = USART_IFC_TXC;
BUS_RegMaskedSet(&LDMA->SYNC, 0x80);
}
}
void test_profile(void) {
put_command(command_wait | 2 * FRAMESCANPERSECOND);
put_command(command_entrance | (data.cell_step/2));
put_command(command_forward);
put_command(command_turn | left);
put_command(command_forward | 350);
put_command(command_forward | 300);
put_command(command_wait | 1 * FRAMESCANPERSECOND);
put_command(command_turn | back);
put_command(command_wait | 1 * FRAMESCANPERSECOND);
put_command(command_forward | 300);
put_command(command_forward | 350);
put_command(command_turn | right);
put_command(command_forward);
put_command(command_finish | 100);
}
Вс май 29, 2022 09:59:09
1 ---------- 0
|
|
2 ---------- 3 ---------- 7
| | |
| | 8
6 ---------- 4 -------- 5
Вс июн 19, 2022 08:34:15
count = (int32_t)((int16_t)PCNT0->CNT) + (int32_t)((int16_t)PCNT1->CNT)
Пт июн 24, 2022 21:18:11
Сб июн 25, 2022 07:26:30
Сб июл 30, 2022 13:22:54
Вт окт 04, 2022 20:04:45
void init_battery(void) {
GPIO_PinModeSet(gpioPortA, 6, gpioModeDisabled, 0);
CMU_ClockEnable(cmuClock_VDAC0, 1);
VDAC0->OPA[2].MUX = VDAC_OPA_MUX_POSSEL_APORT1XCH6 | VDAC_OPA_MUX_NEGSEL_UG | VDAC_OPA_MUX_RESINMUX_DISABLE;
VDAC0->OPA[2].OUT = 0;
VDAC0->CMD = VDAC_CMD_OPA2EN;
ADC0->SINGLECTRL = ADC_SINGLECTRL_CMPEN | ADC_SINGLECTRL_AT_256CYCLES |
// ADC_SINGLECTRL_POSSEL_APORT1XCH6 | ADC_SINGLECTRL_REF_2V5 | ADC_SINGLECTRL_RES_12BIT;
ADC_SINGLECTRL_POSSEL_OPA2 | ADC_SINGLECTRL_REF_2V5 | ADC_SINGLECTRL_RES_12BIT;
ADC0->SINGLECTRLX = ADC_SINGLECTRLX_FIFOOFACT_OVERWRITE | ADC_SINGLECTRLX_VREFSEL_VBGR;
BUS_RegMaskedSet(&ADC0->IEN, ADC_IEN_SINGLE);
NVIC_SetPriority(ADC0_IRQn, ADC0_IRQ_Priority);
NVIC_EnableIRQ(ADC0_IRQn);
}
Ср окт 05, 2022 04:04:23
Ср окт 05, 2022 19:30:32
Чт окт 06, 2022 04:06:53
Чт окт 06, 2022 19:39:05
Чт окт 06, 2022 21:19:59
Пт окт 07, 2022 22:06:40