SSブログ

ADC の main.c

TIM3の換わりに EOCでLEDを点滅させたいのです。

オプションバイト remapping(AFR) の選択で bit5 ADC0,1,2,3 と bit6 ADC5,6  が変化します。

これでADCを選択しなかったら ADC7,8,9 の3ch しか動作しないのでしょうか?

WS001189.JPG

UARTを使うとその分遅くなるのでそれもキャンセルのつもりです。

//*****************

#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "stm8s.h"
#include "usrlib-uart.h"

#define fMASTER    4000000   // 4MHz
/*
#define TIM3_FREQ  10        // 10Hz
#define TIM3_PRSC  TIM3_PRESCALER_128
#define TIM3_ARR   ((u16)(fMASTER/128/TIM3_FREQ)-1)   // 4MHz/128/10-1=3124
*/
char UARTstrTX[100];

void main(void)
{
    CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO, CLK_SOURCE_HSI, DISABLE, CLK_CURRENTCLOCKSTATE_DISABLE);
    CLK_HSIPrescalerConfig( CLK_PRESCALER_HSIDIV4 ); // ADC=16/4=4MHz
    CLK_SYSCLKConfig( CLK_PRESCALER_CPUDIV1 ); // CPU=4MHz
/*   
    TIM3_DeInit();
    TIM3_TimeBaseInit(TIM3_PRSC,TIM3_ARR); // 0.1sec timer
    TIM3_ITConfig(TIM3_IT_UPDATE, ENABLE);
    TIM3_Cmd(ENABLE);
*/
  ADC1_DeInit();
  ADC1_Init(ADC1_CONVERSIONMODE_CONTINUOUS, ADC1_CHANNEL_2, ADC1_PRESSEL_FCPU_D2, ADC1_EXTTRIG_TIM, DISABLE, ADC1_ALIGN_RIGHT, ADC1_SCHMITTTRIG_ALL, DISABLE);
    ADC1_ScanModeCmd(ENABLE);
    ADC1_DataBufferCmd(ENABLE);
/*
    UART2_DeInit();
  UART2_Init((u32)115200, UART2_WORDLENGTH_9D, UART2_STOPBITS_1, UART2_PARITY_ODD, UART2_SYNCMODE_CLOCK_DISABLE, UART2_MODE_TXRX_ENABLE);
  UART2_ITConfig(UART2_IT_RXNE_OR, ENABLE);
    UART2_Cmd(ENABLE);
*/
    GPIO_Init(GPIOD, GPIO_PIN_0, GPIO_MODE_OUT_PP_HIGH_FAST); // LED

  enableInterrupts();

    while(1){ } /*Main loop*/
}

u16 adc[10]; // ADC0-9 values
float mV[10]; // calculated voltage

void Tim3Update(void) interrupt 15 // 0.1Sec interrupt
{
    int i;
    GPIO_WriteReverse(GPIOD,GPIO_PIN_0); // LED flash
    // ADC sampling
    ADC1_StartConversion();
    // get ADC values
    for(i=0;i<=9;i++)    adc[i]=ADC1_GetBufferValue(i);
    // convert to voltage
    for(i=0;i<=9;i++)    mV[i]=(float)adc[i]/1024.0*3300.0;
    // display ADC value
/*
    sprintf(UARTstrTX,"ADC(0-9)=");
    SerialPutString(UARTstrTX);
    for(i=0;i<=9;i++)
    {
        sprintf(UARTstrTX,"%4d ",adc[i]);
        SerialPutString(UARTstrTX);
    }
    SerialPutString("\r\n");
    // display voltage value
    sprintf(UARTstrTX,"mV(0-9) =");
    SerialPutString(UARTstrTX);
    for(i=0;i<=9;i++)
    {
        sprintf(UARTstrTX,"%4d ",(int)mV[i]);
        SerialPutString(UARTstrTX);
    }
    SerialPutString("\r\n");
    TIM3_ClearFlag(TIM3_FLAG_UPDATE);
*/
    return;
}

#ifdef USE_FULL_ASSERT
void assert_failed(uint8_t* file, uint32_t line)
{
  while (1)  {  }
}
#endif
 


コメント(0) 

コメント 0

コメントを書く

お名前:[必須]
URL:[必須]
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

STM8S discovery ST-L..チョット一休み ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。