首页 > 编程知识 正文

adc输入阻抗(ad9233)

时间:2023-05-05 07:16:20 阅读:80444 作者:1919

来源:百问网_嵌入式Linux wiki_jz2440新一期视频维基教程(视频文字版) ) )。

作者: mdz

正文字数: 2725,阅读时间: 3.5分钟

第018课ADC和触摸屏006触摸屏编程_ADC中断

本课程中,施加ADC中断,读取触点的xy坐标

浏览触摸屏

写这个自动测量的函数

语音输入-自动测量模式(语音)

{

//现在是自动测量,所以没有机会分别设置这些开关

设定为AUTO_PST=1

XY_PST=00

ADC TSC=自动_传输|无_开启_模式;

{1}现在是自动测量,所以没有机会分别安装这些开关

进入中断处理函数

voidadctsinthandle (国际货币基金组织) )。

{

if(subsrcpnd(1TC_int_bit ) )/*触摸屏中断时(/

Isr_Tc (;

if(subsrcpnd(1Adc_int_bit ) ) Adc中断是Adc中断处理函数) /

Isr_Adc (;

subsrcpnd=(1TC _ int _比特)|(1ADC _ int _比特);

{1}进入触摸屏中断处理函数

声音ISR _ TC (声音)是

{

//printf(ADCUPDN=0x%x,ADCDAT0=0x%x,ADCDAT1=0x%x,ADCTSC=0x%xnr ',adcupdn,ADAT 0,ADCDAT0,ADAT

if(ADCdat0) 115 ) )

{

//打印机(钢笔向上(n ) r );

enter _ wait _ pen _ down _模式(;

}

else

{

/*进入“自动测量”模式*

输入自动测量模式(;

/*启动ADC *

ENABLE_START=1就行了

直流连接|=() 10;

}

启动直流电源

Adc中断处理函数

void ISR _ ADC (音频)

{

进入adc中断后,等待触摸笔离开

int x=ADCDAT00x3ff;

int y=ADCDAT10x3ff;

打印机(x=d,y=dnr ',x,y );

//等待触摸笔离开的模式

enter_wait_pen_up_mode (;

}在烧书实验中发现印刷了很多乱码

应该是printf函数出了问题。 打开my_printf.c文件,发现printf函数是在处理第二个数据时,没有设置初始值

/*参考:英寸vprintf (常数字符*格式,va _列表格式); */

staticintmy _ vprintf (常数符号*符号,变量列表) )。

{

字符读=' ';

int maxwidth=0;

for (; * *中场球员!=' ';

fmt++) { if (*fmt != '%') { outc(*fmt); continue; } //碰到 % 就重新处理, 初始值应该重新设置初始值上去 lead=' '; maxwidth=0; //format : %08d, %8d,%d,%u,%x,%f,%c,%s fmt++; if(*fmt == '0'){ lead = '0'; fmt++; } while(*fmt >= '0' && *fmt <= '9'){ maxwidth *=10; maxwidth += (*fmt - '0'); fmt++; } switch (*fmt) { case 'd': out_num(va_arg(ap, int), 10,lead,maxwidth); break; case 'o': out_num(va_arg(ap, unsigned int), 8,lead,maxwidth); break; case 'u': out_num(va_arg(ap, unsigned int), 10,lead,maxwidth); break; case 'x': out_num(va_arg(ap, unsigned int), 16,lead,maxwidth); break; case 'c': outc(va_arg(ap, int )); break; case 's': outs(va_arg(ap, char *)); break; default: outc(*fmt); break; } } return 0; }

重新烧写执行,发现数据变化幅度很大,但至少Adc已经有输出

我们需要解决输出值不线性的问题

到底是触摸屏质量问题,还是Adc转化精度问题,觉得应该是触摸屏电压不稳定之前不知道DELAY寄存器是用来干嘛的

等待中断模式时,当触摸笔按下时我们会产生中断,但是可以通过 DELAY来延时产生中断

在前面有一张图

按下触摸笔,延迟A才可以产生中断,你才可以测量X Y坐标A = D(晶振的周期)D就是 DELAY就是那个寄存器的值晶振周期时12M我们需要设置一下

void adc_ts_reg_init(void) { /* [15] : ECFLG, 1 = End of A/D conversion * [14] : PRSCEN, 1 = A/D converter prescaler enable * [13:6]: PRSCVL, adc clk = PCLK / (PRSCVL + 1) * [5:3] : SEL_MUX, 000 = AIN 0 * [2] : STDBM * [0] : 1 = A/D conversion starts and this bit is cleared after the startup. */ ADCCON = (1<<14) | (49<<6) | (0<<3); /* 按下触摸屏, 延时一会再发出TC中断 * 10ms为120000 * 延时时间 = ADCDLY * 晶振周期 = ADCDLY * 1 / 12000000 = 5ms */ ADCDLY = 60000; }

再次烧写,发现数据并不规律我们需要再次改进程序

我们按下触摸屏会产生触摸屏中断,启动自动测量,启动Adc,Adc成功后会进入Adc中断,在函数中打印数据

也许测量过程很长我们就需要判断

void Isr_Adc(void) { int x = ADCDAT0; int y = ADCDAT1; //松开的话打印也是错误的值,所以如果仍然按下才打印 if (!(x & (1<<15))) /* 如果仍然按下才打印 */ { x &= 0x3ff; y &= 0x3ff; //打印10进制 printf("x = %08d, y = %08dnr", x, y); } enter_wait_pen_up_mode(); }

烧写执行发现X Y轴输出有问题

厂家把X Y轴搞反了

电路图中TSYP TSXP接反TSYM TSXM接反

我们后面使用触摸屏时会使用软件处理这点,不会导致任何问题 

有一个缺点我们按下触摸屏会输出一个数据,再按下触摸屏又输出一个数据我长按并没有输出数据,我滑动也没有输出数据我们需要使用定时器改进这个问题

各种方向的旋转都可以由软件转换

我们需要把触摸屏的坐标TS XY坐标转换成LCD的XY坐标需要用应用程序做我们常使用Tslib库来做,这些旋转倒置都没有问题

「新品首发」STM32MP157开发板火爆预售!首批仅300套

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。