ARM平台FS6818/s5p6818开发板实验5 —— ADC实验

ADC实验:

实验内容:

编写ADC程序,通过FS6818开发板上的电位器,改变ADC通道输入的电压值,经过ADC转换的值打印到终端。

实验目的:

熟悉开发环境;掌握s5p6818处理器ADC模块的使用和编程。

实验平台:

FS_6818开发平台,Ubuntu,secureCRT。

ADC:模数转换器:将模拟信号转换为数字信号的一个器件。

 

eg1: 模拟电压值0-1.8V ,转为8位的数字量

       0 -----》0000 0000    0

       1.8V---》1111 1111    255    

       将1.8平均分成256份,测量的数字量乘以一份的值,就是实际的模拟值。

 

eg2: 模拟电压值0-1.8V ,转为12位的数字量

       0 -----》0000 0000 0000    0

       1.8V---》1111 1111 1111    4095

       将1.8平均分成4096份,测量的数字量乘以一份的值,就是实际的模拟值。

ADC转换为数字量位数越大,转换的精度越高。

 

  1. 分析电路图

  1. 分析芯片手册

 

会看视频的7月10日下午第二节课:15:5

 

编程流程图如下:

 

  1. 编写代码

main.c


#include "led.h"
#include "pwm.h"
#include "delay.h"
#include "uart0.h"
#include "wdt.h"
#include "adc.h"
int main()
{
	hal_led_init();
//	hal_pwm_init();
	hal_uart_init();
	hal_wdt_init();
	hal_adc_init();
	Tri_String("ADC Test\n");
	while(1)
	{
		// 喂狗或不喂狗
		WTCNT = 4687 * 10;
		// ADC
		printf("adc value = %d\n", get_adc_value());
		delay_ms(100);


//		Tri_Byte(Recv_Byte()+1);
//		printf("pwm test!\n");
		// led_flash(500);	
//		hal_pwm_switch(299, 149, ON);
//		delay_ms(1000);
//		hal_pwm_switch(299, 149, OFF);
//		delay_ms(1000);
	}
	return 0;
}

adc.c

#include "adc.h"

void hal_adc_init(void)
{
	// 4.9.4.2  IP_RESET_REFISTER0/1/2
	unsigned int *ip_reset1 = (unsigned int *)0xC0012004;
	*ip_reset1 = *ip_reset1 & (~(0x1 << 28));
	*ip_reset1 = *ip_reset1 | (0x1 << 28);
	//1.设置读取转换结果的延时时间  ADCCON[13:10] = 0b0000
	ADCCON &= (~(0xF << 10));
	//2.开启电源源之后,延时几个周期可以开启ADC转换 
		//a)ADCCON[9:6] =ADCCON 0x6
	ADCCON &= (~(0xF << 6));
	ADCCON |= (0x6 << 6);
	//3.ADC输入的通道选择  ADCCON[5:3] = 0b00 
	ADCCON &= (~(0x7 << 3));	
	//4.开启ADC的电源  ADCCON[2] = 0b0
	ADCCON &= (~(1 << 2));
	//5.设置ADC的分频值  PRESCALERCON[9:0] = 199
	PRESCALERCON &= (~(0x3FF));
	PRESCALERCON |= (199);
	//6.设置ADC的分频使能位  PRESCALERCON[15] = 0b1
	PRESCALERCON |= (1 << 15);	
}
int get_adc_value(void)
{
	int value = 0;
	// 1.开启ADC转换 ADCCON[0] = 0b1
	ADCCON |= 1;
	// 2.判断ADC转换是否结束  读ADCCON[0]是否为0,
	 //a)如果没有转换结束,如果没有转换结束在此等待DC转换结束,
	while(ADCCON & 1);  // 重点理解
	// 3.读取ADC的转换结果 ADCDAT[11:0]
	// 4.将数字量的结果通过公式转换为模拟量 
	  // value = ADCDATAT * 1800 / 4095 * 2;   单位mv  
	value = ADCDAT & 0xFFF;
	value = value * 1800 / 4095 * 2;
	return value;
}

adc.h

#ifndef __ADC_H__
#define __ADC_H__

#include "s5p6818.h"

void hal_adc_init(void);
int get_adc_value(void);
#endif   //__ADC_H__

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值