Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - dec

Pages: 1 ... 8 9 [10]
73
ARM Processors / Re: STM32F072 Nucleo multi ADC
« on: March 05, 2016, 08:54:02 pm »
ผมไม่มี F072 ด้วยสิ เลยช่วยลองไม่ได้

อันนี้ผมแนบไฟล์ main.c กับ stm32l0xx_hal_msp.c ที่ผมแก้ใน L053 ให้ครับ

74
ARM Processors / Re: STM32F072 Nucleo multi ADC
« on: March 05, 2016, 04:28:48 pm »
น่าจะเป็นแบบนั้นครับ ผมก็ไม่เคยใช้เกิน 2 Channel ซักที ปกติผมไม่ค่อยชอบเล่น analog  ;D

ส่วน Scan เรียงลำดับ เราสามารถตั้งได้ครับว่าจะเรียงน้อยไปมาก หรือมากไปน้อย แต่ผมก็ยังไม่เคยลองว่าใช้แบบโดดข้ามได้รึเปล่าลองแล้วได้ผลยังไงก็มาโพสบอกด้วยนะครับ ;D

75
ARM Processors / Re: STM32F072 Nucleo multi ADC
« on: March 05, 2016, 12:56:16 pm »
ผมสาย Standard Peripheral Lib (SPL) เลยไม่แน่ใจว่าจะช่วยอะไรได้มั้ย

ADC_RegularChannelConfig อันนี้เป็นคำสั่งที่ใช้บน SPL ครับ Cube จะไม่มีให้ใช้

พอดีตอนนี้ผมมีแค่บอร์ด Nucleo L053 อยู่กับตัว ผมเลยลองทำบน L053 ดู ผมลองโหลด Cube F0 มาดูแล้ว ผมแนะนำให้ดูตัวอย่าง STM32F072B-Discovery\Examples\ADC\ADC_DMA_Transfer ครับ ตัวอย่างนี้จะใช้ DMA อ่าน ADC มาเก็บไว้ในตัวแปร DMA จะอ่านมาตลอด แล้วเราก็ไปอ่านค่ามาจากตัวแปรอีกที ผมจะอ้างอิงจาก โปรเจ็คนี้ละกันครับ ผมจะบอกว่าผมแก้อะไรบ้าง

Init pin ADC อื่นๆ ใน stm32f0xx_hal_msp.c เพิ่มครับ ผม Init PA1 เพิ่ม
Code: [Select]
  GPIO_InitStruct.Pin = GPIO_PIN_1;
  GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

จากนั้นในไฟล์ main.c ผมก็เปลี่ยนตัวแปรที่ DMA ที่รับค่า ADC เป็น Array ตามจำนวน Channel ที่จะใช้ ในที่นี้ผมใช้ 2 Channel
Code: [Select]
uint32_t                      aResultDMA[2];
ลงมาตรง Initialize ADC peripheral ต้องแน่ใจว่าเปิดใช้งาน ScanMode ไว้ โดยหลักการแล้ว ADC มันก็ไม่ได้อ่านพร้อมกันทีเดียวครับ มันก็ต้องไล่ Scan อ่านทีละ Channel ให้เราเหมือนกัน แล้วก็ DMAContinuousRequests เป้น ENABLE
Code: [Select]
AdcHandle.Init.ScanConvMode          = ADC_SCAN_ENABLE;
...
AdcHandle.Init.DMAContinuousRequests = ENABLE;

ลงมาตรง 3 - Channel configuration ตรงนี้เราจะใช้ Channel ไหนเพิ่มเราก็ไป Init เพิ่มครับ ผมเพิ่ม PA1 ก็คือ Init ADC Channel 1 เพิ่ม
ในส่วนของ L053 นั้น sConfig.Rank มัน Fix ครับ คือปรับไปมันก็ไม่สนใจค่านี้ แต่ผมไม่รู้ว่า F072 เราต้องกำหนดมั้ย มันคือให้เราเลือกว่าเราจะให้มันเริ่มแปลง Channel ไหนก่อนให้ระบุ Rank 0,1,2,3,... ไป
Code: [Select]
  sConfig.Channel      = ADC_CHANNEL_1;
  sConfig.Rank         = ADC_RANK_CHANNEL_NUMBER + 1;
  sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5;
  if (HAL_ADC_ConfigChannel(&AdcHandle, &sConfig) != HAL_OK)
  {
    Error_Handler();
  }

ลงมาตรง Start conversion in DMA mode ก็เปลี่ยนขนาด buffer ให้เท่ากับจำนวนค่า ADC ที่เราจะอ่าน
Code: [Select]
  /* ### - 4 - Start conversion in DMA mode ################################# */
  if (HAL_ADC_Start_DMA(&AdcHandle, (uint32_t *)aResultDMA, 2) != HAL_OK)
  {
    Error_Handler();
  }


กรณีจะอ่านหลายๆ ค่า และ หลายๆ channel ในเวลาเดียวกันก็ให้ประกาศ Array ที่ใช้รับค่า ADC จาก DMA เป็น 2D Array ได้ครับ แบบนี้
Code: [Select]
uint32_t                      aResultDMA[100][2];
Code: [Select]
  /* ### - 4 - Start conversion in DMA mode ################################# */
  if (HAL_ADC_Start_DMA(&AdcHandle, (uint32_t *)aResultDMA, 100*2) != HAL_OK)
  {
    Error_Handler();
  }

เท่านี้ครับ ลองทดสอบดูนะครับ

76
ไปโหลด firmware at-command มา flash ลงไปใหม่ครับ

77
คิดว่าไม่น่าจะได้แล้วครับ มันเป็นเลข version hardware

https://www.segger.com/admin/uploads/productDocs/UM08001_JLink.pdf

ลองดูหัวข้อ 1.3.2.3 Hardware version มันจะบอกว่า version อะไร support Architecture อะไรบ้าง

79
ถามหน่อยครับขาSCL SDAสามารถเพิ่มได้รึเปล่า

>> ไม่ได้ครับ i2c ที่มันเขียนติดกับ pin (alternate function ของ pin นั้น) เป็น hardware

หรือใช้analogตัวอื่นแทนกันได้มั้ย

>> i2c สุดท้ายแล้วมันก็เป็นการ Toggle สัญญาณ High-Low เพื่อส่งข้อมูล เราสามารถใช้ pin digital มาทำสัญญาณเลียนแบบได้ หรือที่เรียกกันว่า bit bang i2c แต่มันไม่ค่อยคุ้มที่จะทำ

จริงๆ i2c มันเป็น bus มันสามารถต่ออุปกรณ์หลายๆ ตัวโดยใช้ i2c port เดียวได้ แค่ตั้ง address ให้ไม่ตรงกัน

80
ตอนนี้มีแค่ ST กับ Atmel ครับ

ST มีบอร์ด

STM32756G-EVAL2 (ไม่ส่งมาไทย)
STM32746G-EVAL2 (เหมือน 756 ทุกอย่าง แต่ไม่มี cryptographic (hardware ช่วยในการทำ encrypt))
STM32F746G-DISCO (ใช้ชิปเบอร์เดียวกับ STM32746G-EVAL2)
STM3274G-SK/IAR
STM32F746ZG-Nucleo อันนี้ดูจาก firmware ล่าสุดที่ st แจก มีของบอร์ดนี้ติดมาด้วย แต่จะออกจริงรึเปล่ายังไม่มีข่าว

ทุกบอร์ดซื้อได้ตาม mouser, element14 แต่ STM32F746G-DISCO รู้สึก ett จะมีขาย

Atmel ปกติผมไม่ค่อยได้เล่น เท่าที่ผมดูมีบอร์ด

ATSAMV71-XULT
ATSAME70-XPLD

ซื้อได้ตาม mouser, element14 ในไทยเท่าที่หาดูยังไม่เจอครับ

Pages: 1 ... 8 9 [10]