这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 企业专区 » Renesas » anananjjj的试用进程贴(调试10:uCOS-II移植实现距)

共57条 4/6 |‹ 1 2 3 4 5 6 跳转至
院士
2012-08-25 09:14:31     打赏
31楼
唉,IIC的通讯就是方便啊~~

看我的12864的显示屏,并口,连线就费了我好大的劲。现在拆了也不想用了。唉……

工程师
2012-08-25 09:24:12     打赏
32楼

这是串行总线的优势!呵呵!


菜鸟
2012-08-26 14:54:16     打赏
33楼
楼主 这是在酝酿什么实验呢~~

好久没有更新了……
期待ing……

助工
2012-08-26 15:11:16     打赏
34楼
楼主,你设计的麦克风信号放大电路,能贴出电路图不?与大家分享一下。。。期待中。。。

工程师
2012-08-26 15:13:11     打赏
35楼

哪啊?快开学了!上学期各种课程设计作业要交!忙着写呢!不过课程设计有一门是C++的,我做了个串口数据波形显示的上位机!在测试串口程序的时候估计会有用呢!呵呵!


工程师
2012-08-26 15:26:24     打赏
36楼
那是我差不多一年前做的,当时要交课程设计!回头我找找原理图!其实有很多不足之处呢!夹杂的噪音较大!希望你能给我指正一下!呵呵!

助工
2012-08-26 15:31:07     打赏
37楼
我以前都没做过,现在只能在网上找电路,也不知道最后能不能用,要是能在你的基础上改进也好啊!多谢啊。。。我自己也着手设计呢,弄好了贴出来与大家一起分享。。。

菜鸟
2012-08-26 16:04:21     打赏
38楼
不过,我也在研究多线程的上位机。

那个模拟信号我也在看,运放啊~~

工程师
2012-08-27 20:37:37     打赏
39楼

调试5:温度测定,AD数据采集
今天把AD采样程序给调试成功了。
1、图片


2、视频:

3、关键代码:
系统初始化:
void systeminit(void)
{
 PIOR = 0x00U;
 CG_ReadResetSource();
 PORT_Init();
 CLOCK_Init();
 NOKIA_5110_init();//这里用到了显示屏
 AD_Init();//AD采样的初始化
 IT_Init();
 CRC0CTL = 0x00U;
 IAWCTL = 0x00U;
}

主程序:

void  main(void)
{
 /* Start user code. Do not edit comment generated here */

        /* Peripheral start function calls */
        IT_Start();                   /* Start Interval Timer */
        ADC_Init_ResultBuffer();
        AD_ComparatorOn();            /* Enable ADC voltage comparator (ADCE = on) */
        UINT i;
        for (i=0; i < 100; i++)
         {
            NOP();
         }
           
        AD_Start();                   /* Start ADC (ADCS = 0n) */
//显示屏的初始化显示
        NOKIA_5110_write_chinese_string(0,0,12,7,0,0);//瑞萨开发板试用
        NOKIA_5110_write_chinese_string(0,2,12,3,7,0);//电压
        NOKIA_5110_write_chinese_string(0,4,12,3,10,0);//温度
        NOKIA_5110_write_chinese_string(73,4,12,1,13,0);//度
        lcdUpdateChar(2,7,'.');
        lcdUpdateChar(2,13,'V');
        lcdUpdateChar(4,8,'.');
        /* Endless control loop */
 while (1U)
 {
           
            /* ADC Conversions (External Voltage, Temperature and Reference Voltage)  */
            while (!ADIF) {}                                 // Wait for first AD conversion completion
            ADIF = 0;
            temp_read = (USHORT)(ADCR >> 6U);                // Ignore first ADC reading
          
            ADC_Calculation_Ref();                           // Calculate internal reference voltage value
            AD_SelectADChannel(ADCHANNEL2);                  // Switch to external voltage (Channel 2)
            for (i=0; i < 100; i++)
            {
                NOP();
            }
           
            ADC_Calculation_ExtVoltage();                    // Calculate external voltage value
            AD_SelectADChannel(ADTEMPERSENSOR0);             // Switch to temperature sensor channel
            for (i=0; i < 500; i++)
            {
                NOP();
            }
           
            ADC_Calculation_Temp();                          // Calculate temperature value
            AD_SelectADChannel(ADTEMPERSENSOR1);             // Switch to internal reference voltage channel
            for (i=0; i < 100; i++)
            {
                NOP();
            }
           
            LCD_Accel_Value2(2,6,(int)(g_voltage*1000));          //转换电压值
            LCD_Accel_Value(4,6,(int)(g_temperature*100));      //转换温度

 }

其中:
void AD_Init(void)
{
 ADCEN = 1U; /* supply AD clock */
 ADM0 = _00_AD_ADM0_INITIALVALUE; /* disable AD conversion and clear ADM0 register */
 ADMK = 1U; /* disable INTAD interrupt */
 ADIF = 0U; /* clear INTAD interrupt flag */
 /* Set INTAD low priority */
 ADPR1 = 1U;
 ADPR0 = 1U;
 ADPC = _04_AD_ADPC_3ANALOG;
 /* Set ANI0 - ANI2 pin as analog input */
 PM2 |= 0x07U;
 ADM0 = _20_AD_CONVERSION_CLOCK_6 | _00_AD_TIME_MODE_STANDARD_1 | _00_AD_OPERMODE_SELECT;
 ADM1 = _00_AD_TRIGGER_SOFTWARE | _00_AD_CONVMODE_CONSELECT;
 ADM2 = _00_AD_POSITIVE_VDD | _00_AD_NEGATIVE_VSS | _00_AD_AREA_MODE_1 | _00_AD_RESOLUTION_10BIT;
 ADUL = _FF_AD_ADUL_VALUE;
 ADLL = _00_AD_ADLL_VALUE;
 ADS = _81_AD_INPUT_TEMPERSENSOR_1;
}

void AD_Start(void)
{
 ADIF = 0U; /* clear INTAD interrupt flag */
 ADMK = 0U; /* enable INTAD interrupt */
 ADCS = 1U; /* enable AD conversion */
}


void ADC_Init_ResultBuffer(void)
{
        UCHAR i;
        for (i = 0 ; i < 10 ; i++)
        {
          ADC_result[i] = 0;                  // Clear ADC result buffer
        }
}

void ADC_Calculation_ExtVoltage(void)
{
  if (samples >= 3)
      {
        samples = 0;
      }
  AD_Read(&ADC_result[samples]);                                   // Store the conversion result in the buffer
  temp = (float) 1.44 / g_ref_hexvalue;
  g_voltage = (float) ((ADC_result[samples] & 0xFFFC) * temp);     // Calculate the external voltage value
  samples++;
 
}

void ADC_Calculation_Temp(void)
{
  if (samples >= 3)
      {
        samples = 0;
      }
  AD_Read(&ADC_result[samples]);                                                           // Store the conversion result in the buffer
  temp = (float) 1.44 / g_ref_hexvalue;
  g_temperature = (float) (25 - ((((ADC_result[samples] * temp) - 1) * 1000) / 3.6));      // Calculate the temperature value in 癈
  samples++;
 
}


void ADC_Calculation_Ref(void)
{
  if (samples >= 3)
      {
        samples = 0;
      }
  AD_Read(&ADC_result[samples]);                            // Store the conversion result in the buffer
  g_ref_hexvalue = ADC_result[samples];
  samples++;
 
}


读取数据
void AD_Read(USHORT *buffer)
{
 *buffer = (USHORT)(ADCR >> 6U);
}

//选择通道
MD_STATUS AD_SelectADChannel(enum ADChannel channel)
{
 MD_STATUS status = MD_OK;

 if (((channel > ADCHANNEL7) && (channel < ADCHANNEL16)) || ((channel > ADCHANNEL19) && (channel < ADTEMPERSENSOR0)) || (channel > ADTEMPERSENSOR1))
 {
  status = MD_ARGERROR;
 }
 else
 {
  ADS = (UCHAR)channel;
 }

 return (status);
}


菜鸟
2012-08-27 20:58:49     打赏
40楼
强人啊!支持。

共57条 4/6 |‹ 1 2 3 4 5 6 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]