STM32F4 อยากทำ ADC ซัก 8 ช่อง ต้องทำยังไงครับ

Started by koonsai, April 20, 2013, 01:15:08 AM

Previous topic - Next topic

koonsai

ผมกำลังลองหาวิธีเขียนให้มันอ่านได้ 8 ช่องอยู่ กำลังหาตัวอย่างดูแต่ยังไม่เจอ ท่านใดแนะนำได้บ้างครับ  ขอบคุณครับ


deejun

ไม่ทราบว่าแบบนี้พอได้หรือเปล่าทำแบบที่ละตัว
void ADC()
           {
                //ADC configuration
                ADC1->CR1      =  ADC_CR1_SCAN;
                ADC1->CR2      =    ADC_CR2_ADON;      
                ADC1->CR2      |=  ADC_CR2_EXTSEL|ADC_CR2_EXTTRIG|ADC_CR2_CAL|ADC_CR2_SWSTART;//
               
           while((ADC1->CR2 & ADC_CR2_CAL) != 0x00);/* Check the end of ADC1 calibration */
                ADC1->SMPR1    =  0;        // 1.5 cycles conversion time
               
                }   
void Scan()
           {
                  
                      ADC1->CR2 |= ADC_CR2_SWSTART;/* Start ADC1 Software Conversion */   
                     while((ADC1->SR & ADC_SR_EOC )==0)
                     ADC1->SR   =   0;   
                     i = ADC1->DR;
                     // User Program {........}
                }                

main()
     {
         
       sys_clock();
         GPIO();
         ADC1->SR = 0;
         ADC();
       
         while(1)
             {
                     ADC1->SQR3     =  7;     //channel number 7 
                     Scan();
                     ADC1->SQR3     =  8;     //channel number 8
                     Scan();
                     ADC1->SQR3     =  9;     //channel number 9
                     Scan();   
                     ADC1->SQR3     =  10;     //channel number 10 
                     Scan();
                     ADC1->SQR3     =  11;     //channel number 11
                     Scan();
                     ADC1->SQR3     =  12;     //channel number 12
                     Scan();   
                     ADC1->SQR3     =  13;     //channel number 13 
                     Scan();
                     ADC1->SQR3     =  14;     //channel number 14 
                     Scan();
                     ADC1->SQR3     =  15;     //channel number 15
                     Scan(); 
                     ADC1->SQR3     =  16;     //channel number 16 
                     Scan();   
                   }   
                     
       }

koonsai

เดี๋ยวผมจะลองดูนะครับ  ขอบคุณครับ


koonsai

มันติดเจ้า  2ตัวนี้ครับ ADC_CR2_EXTTRIG  กับ ADC_CR2_CAL   
แต่พยายามแกะอยู่ครับ

deejun

ปรับปรุงใหม่ ส่วนช่องใช้อะไรดูการเปลี่ยนขา ระหว่างอนาลอต และดิจิตอลด้วยครับ codeไม่เต็ม100 ต้องใส่พวก setup pin โหมด ด้วยครับ
clock setup ต้องตั้งเอง และใช้GPIOไหนก็ ใส่เอาเอง
#include"stm32f4xx.h"
int i;
void Sample()
           {
                //ADC configuration
                RCC->APB2ENR  =    RCC_APB2ENR_ADC1EN;  //Enable clock ADC

                ADC1->CR1      =  ADC_CR1_SCAN;
                ADC1->CR2      =    ADC_CR2_ADON;     
                ADC1->CR2      |=  ADC_CR2_EXTSEL|ADC_CR2_EXTEN|ADC_CR2_SWSTART;//
                ADC1->SMPR1    =  0;        // 1.5 cycles conversion time
               
                }   
void Scan()
               {
                   
                     ADC1->CR2 |= ADC_CR2_ADON|ADC_CR2_SWSTART;/* Start ADC1 Software Conversion */   
                     while((ADC1->SR & ADC_SR_EOC )==0)
                     ADC1->SR   =   0;   
                     i = ADC1->DR;
                     // User Program {........}
                }                 

int main()
     {
         
         ADC1->SR = 0;
         Sample();
       
         while(1)
             {
                     ADC1->SQR3     =  7;     //channel number 7 
                     Scan();
                     ADC1->SQR3     =  8;     //channel number 8
                     Scan();
                     ADC1->SQR3     =  9;     //channel number 9
                     Scan();   
                     ADC1->SQR3     =  10;     //channel number 10 
                     Scan();
                     ADC1->SQR3     =  11;     //channel number 11
                     Scan();
                     ADC1->SQR3     =  12;     //channel number 12
                     Scan();   
                     ADC1->SQR3     =  13;     //channel number 13 
                     Scan();
                     ADC1->SQR3     =  14;     //channel number 14 
                     Scan();
                     ADC1->SQR3     =  15;     //channel number 15
                     Scan(); 
                     ADC1->SQR3     =  16;     //channel number 16 
                     Scan();   
                   }   
                     
       }

หรือจากลิงค์นี่
http://www.elektroda.pl/rtvforum/topic2209462.html
code ตัวอย่างสองช่อง ตัวอย่างที่สาม เป็นของF4 ลองดูครับ

koonsai

ขอบคุณครับ เดี๋ยวผมจะลองดูนะครับ  ;D