区块链技术博客
www.b2bchain.cn

【ARM】Tiny4412裸板编程之ADC

这篇文章主要介绍了【ARM】Tiny4412裸板编程之ADC的讲解,通过具体代码实例进行22734 讲解,并且分析了【ARM】Tiny4412裸板编程之ADC的详细步骤与相关技巧,需要的朋友可以参考下https://www.b2bchain.cn/?p=22734

本文实例讲述了2、树莓派设置连接WiFi,开启VNC等等的讲解。分享给大家供大家参考文章查询地址https://www.b2bchain.cn/7039.html。具体如下:

00. 目录

文章目录

    • 00. 目录
    • 01. 开发环境
    • 02. ADC概述
    • 03. ADC特性
    • 04. ADC模块图
    • 05. ADC寄存器
    • 06. ADC电路连接
    • 07. 程序示例
    • 08. 附录

01. 开发环境

  • 开发板:Tiny4412SDK标准版 「Tiny4412 SDK 1506」
  • 工具:「arm-linux-gcc-4.5.1」 「minicom」 「dnw」
  • 平台:Ubuntu 20.04

02. ADC概述

10位或12位CMOS再循环式模拟数字转换器,它具有10通道输入,并可将模拟量转换至10位或12位二进制数。5Mhz A/D 转换时钟时,最大1Msps的转换速度。A/D转换具备片上采样保持功能,同时也支持待机工作模式。

03. ADC特性

ADC接口包括如下特性。

1)10bit/12bit输出位可选。

2)微分误差 1.0LSB。

3)积分误差 2.0LSB。

4)最大转换速率5Msps.

  1. 功耗少,电压输入1.8V。

6)电压输入范围 0~1.8V。

7)支持偏上样本保持功能。

8)通用转换模式。

04. ADC模块图

4412A/D转换器的控制器接口框图如下:
【ARM】Tiny4412裸板编程之ADC

05. ADC寄存器

5.0 A/D寄存器
【ARM】Tiny4412裸板编程之ADC

5.1 A/D控制寄存器ADCCON
【ARM】Tiny4412裸板编程之ADC

5.2 A/D转换数据寄存器ADCDAT0
【ARM】Tiny4412裸板编程之ADC

5.3 A/D转换的转换时间计算

例如: PCLK为66MHz,PRESCALER = 65 ;所有12位转换时间为

66MHz/(65+1) = 1MHz

转化时间为1/(1MHz/5 cycles) = 5us。

完成一次A/D转换需要5个时钟周期。A/D转换器的最大工作时钟为5MHz,所以最大采样率可以达到1Mit/s.

06. ADC电路连接

利用一个电位计输出电压到4412的AIN0管脚。输入的电压范围为0~1.8V。
【ARM】Tiny4412裸板编程之ADC

07. 程序示例

adc.h文件

#ifndef __ADC_H__ #define __ADC_H__  #include "gpio.h"  //ADC #define ADC_CFG *(U32*)0x10010118 #define ADCCON *(U32*)0x126C0000 #define ADCDAT *(U32*)0x126C000C #define ADCMUX *(U32*)0x126C001C  //ADC初始化 void adc_init(void);  //启动ADC转化 void adc_start(void);  int adc_end(void);  //获取ADC转化的值 U32 adc_get(void);  #endif/*__ADC_H__*/ 

adc.c文件

#include "adc.h"  //ADC初始化 void adc_init(void) {     ADC_CFG &= ~(0x1 << 16);      //ADC输入通道选择  AIN0     //ADCMUX &= ~0xf;      // 100M/(19 + 1)     ADCCON &= ~(0xff << 6);     ADCCON = ADCCON | (19 << 6) | (1 << 14) | (1 << 16);      //正常模式     ADCCON &= ~(1 << 2);  }  //启动ADC转化 void adc_start(void) {     ADCCON |= 0x1;  }  //获取结束标志 int adc_end(void) {      return (ADCCON >> 15) & 0x1; }  //获取ADC转化的值 U32 adc_get(void) {     return ADCDAT & 0xfff; } 

test.c文件

#include <string.h> #include <adc.h>        void (*udelay)(unsigned int) = (void*)0x43e26480; int (*print)(const char *format, ...) = (void*)0x43e11a2c;  int main(void) {     //ADC初始化     adc_init();      print("main startn");      adc_start();       while(1)     {          if (adc_end())         {             print("val = %dn", adc_get());                      adc_start();             }                  delay(200000);              }      print("main endn");      return 0; }  

测试结果

val = 389 val = 384 val = 385 val = 380 val = 386 val = 395 val = 386 val = 365 val = 395 val = 383 val = 374 val = 390 val = 385 val = 381 val = 387 val = 372 val = 384 val = 384 val = 392 val = 384 val = 383 val = 383 val = 390 val = 379 val = 389 val = 374 val = 391 val = 367 

08. 附录

Exynos 4412 SCP_Users Manual_Ver.0.10.00_Preliminary0.pdf

本文转自互联网,侵权联系删除【ARM】Tiny4412裸板编程之ADC

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » 【ARM】Tiny4412裸板编程之ADC
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们