ããŒããŠã§ã¢å®è£
圌ã¯èªåèªèº«ã®ããã«åº§ã£ãŠã16çªç®ãš18çªç®ã®pic'kiã®äžã§ã¢ã»ã³ãã©ãŒã§æžãããã圌ã¯æ²ãã¿ãç¥ããªãã£ãã ãããã32ããããã€ã¯ãã³ã³ãããŒã©ãŒãç 究ããæãæ¥ãŸããã æãææãªã®ã¯STM32ïŒã€ãŸããARM Cortex M3ã³ã¢ïŒã®éžæã§ãã-RuNetã§ã¯ãææ°é¢æ°çã«å¢å ããèšäºã®éãå€ãããããã€ã¯ãã³ã³ãããŒã©ãŒã¯äŸ¡æ Œãéåžžã«é åçã§ãå€ãã®æ©èœãåããŠããã倧ããªå¯èœæ§ããããŸã ãããžã§ã¯ãã®æé·ã«äŒŽãããã®ã«ãŒãã«ã®ããçç£çãªããŒãžã§ã³-Cortex MããCortex Aã«äœæ¥ã移ãããšãã§ããŸããããã«ãAppleã¯iPhoneãiPad-ARM Cortexã§åãã³ã¢ã䜿çšããŸãã ãã匷åãªãAãã®ã¿ã
è¡æé床èšãå®è£ ãããããã°ããŒããšããŠãeBayã§HY Redbullã¯ããŒã³ã®1ã€ãçŽ70ãã«ã§è³Œå ¥ããŸããã
ãã®ããŒãã¯ãSTM32F103VCT6ãã€ã¯ãã³ã³ãããŒã©ãŒïŒ72MHzã512Kb FLASHã64kb SRAMã3ACPã2CAPãDMAãFSMCã5xUSARTã2xI2Cã3xSPIãCANãUSB 2.0 FSãªã©ïŒãšãã®åšèŸºæ©åšã«ç²ŸéããŠããã»ããåºæ¬çãªå€éšæ©åšãç¿åŸã§ããŸã-MP3 / WMAãã³ãŒããŒVS1003ãã€ãŒãµãããã³ã³ãããŒã©ãŒENC28J60ãã¿ããã¹ã¯ãªãŒã³ä»ã3.2ã€ã³ãLCDã¹ã¯ãªãŒã³ïŒSSD1289ã³ã³ãããŒã©ãŒïŒãSDã«ãŒãïŒã³ãã¯ã¿ãŒããŒãã®äžïŒãUSBãCANãRS232 / 485ãCH376ã³ã³ãããŒã©ãŒïŒUSBãã¹ãã€ã³ã¿ãŒãã§ã€ã¹ãå®è£ ïŒ / SD <-> UART / SPI / 8ããããã©ã¬ã«ãSDã«ãŒããšUSBãã©ãã·ã¥ãã©ã€ããMKã«æ¥ç¶ããŸãïŒã
UARTçµç±ã§STM32ã«ãã¡ãŒã ãŠã§ã¢ãã¢ããããŒãã§ããŸãã å®éãããã°ã©ããŒèªäœã¯å¿ èŠãããŸããã ãã ããããŒãã®JTAGããŒãã察象ãšãããããã°ããŒã«ã䜿çšããæ¹ãã¯ããã«äŸ¿å©ã§ãã JTAGãããã¬ãŒã«ããã«20ã50ãã«ãè²»ããããšãã§ããŸãããçµã¿èŸŒã¿ã®Discoveryã·ãªãŒãºãããã¬ãŒãåããç¬èªã®STãããã°ããŒãã䜿çšããããšããå§ãããŸãã è²»çšã¯10ãã«ããã§ãïŒåæã«ãSTM32ããã¹ã¿ãŒããããã«å¿ èŠãªãã®ã®åºæ¬ã§ãããããã¯æ¬åœã«ãã¹ãŠã§ãïŒã STM32F4-Discoveryãããã°ããŒããJTAGã®ãããã¬ãŒãšããŠäœ¿çšããŸããïŒäžè¬çã«ãã»ãããŒã®èšªåè ãšããŠç¡æã§å ¥æããŸãããè²»çšã¯çŽ600ã«ãŒãã«ã§ãïŒã
-ARM Cortex M4ïŒSTM32F407ïŒã®ãããã°ãç®çãšããŠããŸããããŒãäžã«ãã«ãã€ã³ãããã¬ããããŸãïŒãžã£ã³ããŒã¯SWDãä»ããŠstm32f407ãããã°ããå€éšããŒããããã°ã«åãæ¿ããããšãã§ããŸãã ãã®ãã€ã¯ãã³ã³ãããŒã©ãŒã¯ãã§ã«168 MHzã®åšæ³¢æ°ã§åäœããŸãïŒãã ãããªããžã§ã³ãAãã®å°ç³ã¯æ¹¿ã£ãŠããŸããããã®ãªããžã§ã³ã§ã¯ããã©ãŒãã³ã¹ã®äœäžã¯ã¡ã¢ãªã¢ã¯ã»ã©ã¬ãŒã¿ã«ãããã®ã§ãïŒã ãã©ãã·ã¥1MBãRAM 128KBã å èµã®åšèŸºæ©åšãããUSBããã€ã¹/ãã¹ã/ OTGã10/100ã€ãŒãµããããã«ã¡ã©ã€ã³ã¿ãŒãã§ã€ã¹ïŒæ倧1MpixãŸã§æ¥ç¶å¯èœïŒãããŒããŠã§ã¢CRCã«ãŠã³ããããã³DSPããã»ããµã«æ³šç®ããå¿ èŠããããŸãã å€éšåšèŸºãããããŒãã«ã¯LIS302DL MEMSå é床èšãMP45DT02ããžã¿ã«MEMSãã€ã¯ãããã³I2S CS43L22ã€ã³ã¿ãŒãã§ã€ã¹ãåããADCãå«ãŸããŠããŸãã ããŒãã«ã¯å€ãã®äŸããããŸããããã®äžã§ãç¹ã«ããã©ã°ã€ã³USBãã©ãã·ã¥ãã©ã€ãïŒUSB OTGãMEMSãã€ã¯ããªãŒãã£ãªi2s dacã®ãã¢ïŒã§åäœãããã£ã¯ã¿ãã©ã³ãã¬ãŒã€ãŒãæ°ã«å ¥ã£ãŠããŸãã
GPSåä¿¡æ©ã®éžæã«é¢ããŠã¯ç¬åµçã§ã¯ãããŸããã§ããã 圌ã¯éåžžã«äžè¬çãªEB-500ãåããŸããã ããŒããé ç·ãããšãã«èŠçã«ãªããªãããã«ãããã«ãããã«ã¢ã¯ãã£ãã¢ã³ãããåããEB-500 EVBããããããã°ããŒããçšæããŸããã
åä¿¡æ©èªäœã¯ãUARTãä»ããŠããŒã¿ãåºåããŸãã ããããCP2102ã«åºã¥ãUART-USBã³ã³ããŒã¿ãŒã®ãããã§ãããŒãã¯ããã«USBçµç±ã§æ¥ç¶ã§ããŸãã ãã®ãã³ãã«ã«ã¯ããããã®æ©èœãå®èšŒããEB ViewãœãããŠã§ã¢ãä»å±ããŠããŸãã NMEAããŒã¿ã®åºåã確èªãããããããã衚瀺ããå¿ èŠããããã£ãŒã«ãã®ãªã¹ããèšå®ããããåºåã®é »åºŠãèšå®ããããAGPSãè©Šãããããããšãã§ããŸãã ã·ãªã¢ã«ããŒãã¢ãã¿ãŒã䜿çšããŠãEB-500ãšã®EB Viewéä¿¡ã®ãã€ã¢ãã°ãç£èŠããããã€ã¹ã®èµ·åæã«å¯Ÿå¿ããeb-500ã»ããã¢ãããå®è£ ã§ããŸãã ãŸãããŸãã¯ããŒã¿ã·ãŒãã調ã¹ãŠãã ããïŒãŸããããŒãã«ã¯ãããã€ã¹ã®é»æºãåã£ããšãã«ã¢ã«ãããã¯ãä¿åããããã®3ãã«ãã®ããããªãŒããã§ã«ãããŸãã åŸç¶ã®ã¯ã€ãã¯ã¹ã¿ãŒãçšã
ãŸãããããã®ããŒããåãæ¿ããããã«ããã€ãã®ã±ãŒãã«ãè³Œå ¥ããŸãã-www.dealextreme.com/p/30cm-breadboard-wires-for-electronic-diy-40-cable-pack-80207#open%20full%20view-ãšãŠã䟿å©ã§äŸ¿å©ã§ãã
ãœãããŠã§ã¢å®è£
Keilç°å¢ãéžæããŸããã è±å¯ãªãµã³ãã«ãåãã䟿å©ã§åºç¯å²ã«æž¡ã£ãŠ...äžèšã§èšãã°ãç§ã®ãã :) FirebullããŒãã«ä»å±ã®ã©ã€ãã©ãªã䜿çšããŠGLCDãæäœããŸããã
圌ã¯ããªã¢ã«ã¿ã€ã ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ïŒRTOSïŒãšããŠFreeRTOSãéžæããŸãã-ãã®äžã«æåŠã®æµ·ãããã掻çºã«éçºãããŠããããããããã³ä»ã®èŠå ã«ãããä»ã®ãã®ãšæ¯èŒããŠãã奜ãŸããã§ã-uC / OSãscmOSãªã© ããã«ãããªãšã³ããã£ãã¢ãŒããšã³ãŒãã¬ãŒãã¢ãŒãã®äž¡æ¹ãããã³è€ååäœã¢ãŒãããµããŒãããŠããŸãã ãããŠç§ã«ãšã£ãŠãåå¿è ãšããŠãããã¯ãã©ã¹ã§ãã :) RTOSã«ãŸã£ãã粟éããŠããªãããFreeRTOSã®äœ¿çšäŸã«æ £ããŠãããžã§ã¯ãã§äœ¿çšãããå Žåã¯ã microsin.net / programming / ARM / freertos - part1.html-ãã¹ãŠããã«èšèŒãããŠãããéå§ããå¿ èŠããããŸãã ãã®åŸãFreeRTOSãã£ã¹ããªãã¥ãŒã·ã§ã³ããããããŠã³ããŒããããã€ã¯ãã³ã³ãããŒã©ã®æ¢è£œã®äŸãããããåãåºããŠãå®æãããäœæ¥ã楜ããã§ãã ããã äžèŠããã¹ãŠãå®éã«ã¯ããã»ã©è€éã§ã¯ãªãããšãå€æããŸããã :)
ããã§ã¯ãEB-500 GPSåä¿¡æ©ããããŒã¿ãåä¿¡ãã3.2ã€ã³ãã®LCDç»é¢ã«è¡šç€ºããè¡æé床èšã®ãœãŒã¹ã³ãŒããèŠãŠã¿ãŸãããã
int main(void)
{
prvSetupHardware();
vSemaphoreCreateBinary( xBinarySemaphore );
if (xBinarySemaphore != NULL){
xTaskCreate( vLEDTask, ( signed char * ) NULL , LED_TASK_STACK_SIZE , NULL , LED_TASK_PRIORITY , NULL );
xTaskCreate( vGPSTask, ( signed char * ) NULL , GPS_TASK_STACK_SIZE,NULL , GPS_TASK_PRIORITY , NULL );
//
vTaskStartScheduler();
}
return 0;
}
-ã»ããã©ãäœæããŸãïŒè©³çŽ°ã¯ä»¥äžãåç §ïŒã åªå 床ã®ç°ãªã3ã€ã®ã¿ã¹ã¯ãéå§ããŸãã vLEDTaskïŒïŒåªå 床ãæãäœããªããŸã-LEDãç¹æ» ããïŒãåçµããŠããªãã®ã§çããŠããŸãïŒãïŒãçŸåšã®ã·ã¹ãã æå»ãç»é¢ã«è¡šç€ºããŸãã
vGPSTaskïŒïŒã¯åªå 床ãé«ããèµ·ååŸã¯ã³ããŒ...ã¹ãªãŒãç¶æ ã«ãªããã»ããã©ã®åä¿¡ãåŸ æ©ããŸãã
prvSetupHardwareïŒïŒã¯æ¬¡ã®ããšãè¡ããŸãã
static void prvSetupHardware( void ){
SysTick_CLKSourceConfig( SysTick_CLKSource_HCLK );// HCLK
NVIC_Configuration();//
GPIO_Configuration();// /,
USART2_9600(); //UART2 GPS EB-500, 9600/
RTC_Init();//
LCD_Initializtion();//
LCD_Clear(Blue);// -
}
ãŸããã«ãŒãã«ã®ã¯ããã¯çšã«HCLKãèšå®ããNVICå²ã蟌ã¿ã³ã³ãããŒã©ãŒïŒUSART2ã§ããŒã¿ãåä¿¡ãããšãã«å²ã蟌ã¿ãæå¹ã«ããå¿ èŠããããŸãïŒãGPIOãUSART2ãã³ïŒGPSåä¿¡æ©ãæ¥ç¶ãããŠããïŒã9600ããŒã1ã¹ãããããããããªãã£ãªãã8ãããã«èšå®ããæåŸã®è¡-RTC_InitïŒïŒ-çµã¿èŸŒã¿ã®RTCåšèŸºæ©åšããªã³ã«ããŸã-çŸåšã®æå»ãšæ¥ä»ã衚瀺ããŸãã ãããŠãããŒãã«ããããªãŒã貌ãä»ãããšãé»æºããªãã«ãªã£ããšãã«æéãç¡é§ã«ããªãæ¬åœã®æ©äŒããããŸãã :)
å²ã蟌ã¿ãã³ãã©ãŒã¯ãstm32f10x_it.cãã¡ã€ã«ã§ãã¢ã»ã³ããªã¹ã¿ãŒãã¢ãã_ *ãSãã¡ã€ã«ã§ç€ºãããŠããååã§èšå®ãããŸãã ãã³ãã©ãŒã1ã€ã ãå¿ èŠã§ãã-GPSåä¿¡æ©ããUSART2ãããã€ããåä¿¡ããããã®å²ã蟌ã¿ïŒ
void USART2_IRQHandler(void)
{
static portBASE_TYPE xHigherPriorityTaskWoken;
if (USART_GetITStatus(USART2, USART_IT_RXNE) != RESET){// â
IrqBuf[IrqBuf_idx++]=USART_ReceiveData(USART2);// EB-500
if (IrqBuf_idx==BUFSIZE){//
IrqBuf_idx=0;
}
else if (IrqBuf[IrqBuf_idx-1]==0x0A){//
IrqBuf[IrqBuf_idx]=0x00;
IrqBuf_idx=0;
xHigherPriorityTaskWoken = pdFALSE;
xSemaphoreGiveFromISR( xBinarySemaphore, &xHigherPriorityTaskWoken );
}
USART_ClearITPendingBit(USART2, USART_IT_RXNE);//
}
}
-å²ã蟌ã¿ãã³ãã©ãŒã§ãè¡ã®çµããã確èªããŸãã æ¹è¡æå0x0AãèŠã€ãã£ãå ŽåãEB-500ããã®NMEAããŒã¿ãå«ãæååã解æã§ããŸãã å²ã蟌ã¿ãã³ãã©ãŒã§çŽæ¥ããã¹ãŠã®åŠçãå®è¡ããããšã¯ã€ããªãã®ãŒçã«ééã£ãŠãããæã«ã¯ããã¯åã«å±éºã§ã-次ã®å²ã蟌ã¿ãçºçãããŸã§éã«åããªãå ŽåããããŸãã åŠçã¯ãæãåªå 床ã®é«ãå¥ã®ã¿ã¹ã¯-vGPSTaskïŒïŒã§è¡ãããŸããããã¿ã¹ã¯ã¯ãã¹ãªãŒããããã»ããã©ã®åä¿¡ãåŸ æ©ããŠããŸãã ãããŠãå²ã蟌ã¿ãã³ãã©ãŒã®xSemaphoreGiveFromISRïŒïŒããã®åºåãæ åœããŸãã ã»ããã©ãèšå®ããå²ã蟌ã¿ãã©ã°ããªã»ãããããã³ãã©ãçµäºããŸããå²ã蟌ã¿ãçºçããåã«å¥ã®ã¿ã¹ã¯ãåŠçãããå Žåã§ããããã«å¶åŸ¡ãvGPSTaskïŒïŒã«è»¢éãããŸãã ããã¯ã»ããã©ã®ãããã§å®è¡ããæš©å©ãååŸããŸãã
NMEAããŒã¿ã®åŠçãéå§ãããŸããã€ãŸããEB-500ã®æ¬¡ã®è¡ã«é¢å¿ããããŸãã
$GPRMC,161229.487,A,3723.2475,N,12158.3416,W,0.13,309.62,120598,,*10
$GPVTG,309.62,T,,M,0.13,N,0.2,K*6E
$GPGGA,161229.487,3723.2475,N,12158.3416,W,1,07,1.0,9.0,M,,,,0000*18
-ãã®ãããªåããã±ãŒãžã¯ããã§ãã¯ãµã ïŒ* 10ã* 6Eã* 18ïŒããã³æ¹è¡æåïŒ0x0Dã0x0AïŒã§çµäºããŸãã ãã¹ãŠã®ããŒã¿ã¯ã$ GPRMCã«ãAããããå Žåã«ã®ã¿é¢é£ããããšèŠãªãããŸãïŒäžèšã®äŸã®ããã«ïŒã ãã以å€ã®å ŽåããVããååŸããŸãã ãã®äŸã®ãVãã§ã¯ããä¿¡å·ãªããã衚瀺ãããŸãã 次ã«ãããŒã¿ã解æããŠè¡šç€ºããŸãã
*ããã±ãŒãž$ GPRMCãããçŸåšã®æå»ãhhmmss.sss圢åŒã§åŒãåºããŸãïŒäžã®äŸã§ã¯161229.487ã§ãïŒ
*ããã±ãŒãž$ GPVTGãããçŸåšã®é床ãæéããã¡ãŒãã«ïŒ0.2ãK-æé0.2ããã¡ãŒãã«ïŒã§ååŸããŸãã
*ããã±ãŒãž$ GPGGAãããå°ççãªçµåºŠãšå¹ ãddmm.mmmm / dddmm.mmmmã®åœ¢åŒã§ååŸããŸãïŒäŸã§ã¯ã緯床ã¯3723.2475ãçµåºŠã¯12158.3416ïŒ
ãããžã§ã¯ãã®å®å šãªãœãŒã¹ã³ãŒãã¯ãèšäºã®æåŸã®ã¢ãŒã«ã€ãã«ãããŸãã ãã®äŸã«ã¯æ¬ ç¹ããªãããã§ã¯ãªããäž»ãªç¹ã¯äž¡æ¹ã®ã¿ã¹ã¯ãåãããŒããŠã§ã¢ãªãœãŒã¹ãåç §ããŠããããšã§ãã ãã¥ãŒããã¯ã¹ãŸãã¯ã²ãŒãããŒããŒãäœæããããšã§è§£æ±ºã§ããŸãã ç§ã¯å®¿é¡ã®è³ªã«èå³ãæã£ãŠãã決å®ãæ®ããŸãã ãããããããªãã§äŸã䜿çšããããšãã§ããŸã-ãã¹ãŠãåäœããŸã...
ç§ã®è»ã§ã·ã¹ãã ãæäœãããšãè¯ãçµæãåŸãããŸããã å¯ãå Žæã§è»ãå§åããŠããããŒãïŒMC34063ããŒã¹ã®DC-DCããŠã³ã³ã³ããŒã¿ãŒãžã®é»æºäŸçµŠïŒã«åé¡ã¯ãããŸããã eb-500ã®ã³ãŒã«ãã¹ã¿ãŒãã¯20ããããã¹ã¿ãŒãã¯0.5åã§ããã äºæ³ã©ãããé§è»ãããšåº§æšã®ããªãããçºçããŸããããã«å¿ããŠãé床ã¯æ倧0.5ãå Žåã«ãã£ãŠã¯æ倧7 km / hã«ãªããŸãã ã¢ãã€ã«ããã€ã¹ã®å Žåãããã¯ç¡èŠã§ããŸãããç§ãåãçµãã§ããsim900 gsmã¢ãžã¥ãŒã«ã«åºã¥ããèªå®¶è£œã®è¡æä¿¡å·ã§ã¯ãããã¯å ·äœçãªåé¡ã§ãã ããžãã£ããªç¬é-ãã®ã¹ããŒãã¡ãŒã¿ãŒã®ãããã§ãç§ã®è»ã®æšæºçãªã¹ããŒãã¡ãŒã¿ãŒãæé5kmã§æ¥ãã§ããããšãããããŸããã
ä»ããèªå®¶è£œã®è¡æé床èšã®åçæ®åœ±ã®æã§ãã
-ç»é¢äžã®16:45:03ã¯UTCæéã§ãã ã¢ã¹ã¯ã¯ã«ç§»åããã«ã¯ã4æéãè¿œå ããå¿ èŠããããŸãïŒå¬æéãžã®åãæ¿ãããã£ã³ã»ã«ãããããïŒã ã€ãŸã æšæ¥19:45ã«ãã®åçãæ¬åœã«æ®ããŸããã å°ç座æš-æéåäœã®åº§æšïŒhh.mm.ss.msïŒã ã€ãŸãã座æšã®æåã®è¡ã§ã¯ã55æéã48åã22ç§ã830ããªç§ã§ãã ããšãã°ãYandexãããã䜿çšããŠãã®å ŽæãèŠã€ããã«ã¯ã座æšãå¿ èŠãªåœ¢åŒã«å€æããŸãïŒ55.48.22.830 = 55 + 48/60 + 22/3600 + 830/3600000 =ã55.806342ïŒå°æ°ç¹ç¬¬6äœãŸã§åãäžãïŒã å°ççãªå¹ ã«ã€ããŠãåãã§ãïŒ37.24.22.51 = 37 + 24/60 + 22/3600 + 510/3600000 =ã37,406253ã çµæã®å€-37.406253,55.806342-ãYandex.Martæ€çŽ¢ããŒã«å ¥åããçµæãååŸããŸãïŒ maps.yandex.ru/?text=37.406253%2C55.806342&sll=&sspn=&z=&source=form
uC / GUIã°ã©ãã£ãã¯ã¹ã©ã€ãã©ãªã䜿çšããŠããã®äŸãããã«éçºã§ããŸãã ã°ã©ãã£ãã¯ã¹ããŒãã¡ãŒã¿ãŒã衚瀺ããŸãïŒåæã«ãstm32 ADCãžã®æµæåå²åšãšã¿ã³ã¡ãŒã¿ãŒãä»ããŠã€ã°ããã·ã§ã³ã³ã€ã«ã«æ¥ç¶ããŸã-ããžã¿ã«ã«ãŒããã·ã¥ããŒãã®ãããªãã®ãåŸãããŸãïŒã
ãããŠãããªãã¯ããªãèªèº«ã®ããã²ãŒã¿ãŒãäœãããšãã§ããŸãïŒãããç°¡åã§ã¯ãããŸããããäžå¯èœã¯äœããããŸããïŒïŒ
ã¢ãŒã«ã€ãå ã®GLCDã©ã€ãã©ãªã«ã¯ãUSER / GLCD / GLCD_UCGUI.cãã¡ã€ã«ãæ¢ã«ãããŸããããã¯ãuC / GUIããã®ã°ã©ãã£ãã¯ã¹ã¯ãªãŒã³ãä»ã®ã°ã©ãã£ãã¯ã¹ã¯ãªãŒã³ã«æ¥ç¶ããããã®ã€ã³ã¿ãŒãã§ã€ã¹ã§ãã ã€ã³ã¿ãŒãããèªäœã«ããŠã³ããŒãuC / GUIé£ããããšã§ã¯ãªããšæããŸãã ãããã£ãŠããã®äŸãããæçšãªãã®ã«çºå±ãããããã«å¿ èŠãªããŒã«ã¯ãã¹ãŠæã£ãŠããŸãã
次ã®èšäºã§ã¯ããã¹ããŒãããŒã ãããã¹ããŒãã«ãŒãã®æŠå¿µãçµã¿åãããã·ã¹ãã ã§ãããeCall / ERA-Glonassã¬ã¹ãã¥ãŒã·ã¹ãã ãå«ããèªåè»ãšäœå® ã®èªååã®ããã®ãã®äœæ¥ã®ãããªãéçºã«ã€ããŠèª¬æããŸãã
ãã®èšäºã§çŽ¹ä»ããKeilã®ãããžã§ã¯ãã¯ã ããããããŠã³ããŒãã§ããŸã ã