
DDRC=0X00;
PORTC=0X00;
ADCSRA=(1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADATE)|(1<<ADSC); //ADC使能
ADMUX=0x43;
atmega88只有6路输入没有ADC6或者ADC7,只能用PC0~PC5
Specifies the rank in the regular group sequencer This parameter can be a value of ADC rank into regular group
Note: In case of need to disable a channel or change order of conversion sequencer, rank containing a previous channel setting can be overwritten by the new channel setting (or parameter number of conversions can be adjusted)
1、霍尔传感器首先经过霍尔传感器将电压电流信号,转化成小的电流信号。
2、一般一介RC滤波,滤除由霍尔传感器等的杂波干扰。
3、经霍尔传感器采集的信号往往是小电流信号,需要经过放大后变成电压信号输入到单片机。
4、经过放大后的芯片需要经过AD芯片,如AD7656等,将模拟量转换成数字量,输入DSP。
5、经AD转换芯片转换的数字量输入单片机进行处理,完成ADC采样。
6、有时候ADC采样过来的信号,需要经过比较处理变化成0/1保护信号,此时就需要经过整流、比较等过程。
电路连接为STP30,OEP31,EOCP32,P34,P35,P36为A2A1A0,P0口为D0~D7,CLK连Q2,CKIN连ALE其余悬空,源程序如下:#include#include#defineucharunsignedchar#defineuintunsignedintsbitST=P3^0;sbitOE=P3^1;sbitEOC=P3^2;ucharcodechannel[]={0xb0,0xb8,0xb4,0xbc,0xb2,0xba,0xb6,0xbe};//通道选择列表ucharnum,getdata;voidmain(){num=0;TMOD=0x01;TH0=(65536-4000)/256;TL0=(65536-4000)%256;TR0=1;ET0=1;EA=1;while(1){ST=0;ST=1;ST=0;while(EOC==0);OE=1;getdata=P0;OE=0;TempData[0]=getdata/100;getdata=getdata%100;TempData[1]=getdata/10;TempData[2]=getdata%10;disp();}}voidt0()interrupt1using0{TH0=(65536-4000)/256;TL0=(65536-4000)%256;P3=channel[num];if(num==8)num=0;num++;}以下是头文件LCD1602h#include#includesbitRS=P2^4;//Pin4sbitRW=P2^5;//Pin5sbitE=P2^6;//Pin6#defineDataP0//数据端口unsignedcharTempData[8];unsignedcharFirstLine[]="";///函数声明///voidDelayUs(unsignedcharus)//delayus{unsignedcharuscnt;uscnt=us>>1;/Crystalfrequencyin12MHz/while(--uscnt);}//voidDelayMs(unsignedcharms)//delayMs{while(--ms){DelayUs(250);DelayUs(250);DelayUs(250);DelayUs(250);}}voidWriteCommand(unsignedcharc){DelayMs(5);//shortdelaybeforeoperationE=0;RS=0;RW=0;_nop_();E=1;Data=c;E=0;}//voidWriteData(unsignedcharc){DelayMs(5);//shortdelaybeforeoperationE=0;RS=1;RW=0;_nop_();E=1;Data=c;E=0;RS=0;}//voidShowChar(unsignedcharpos,unsignedcharc){unsignedcharp;if(pos>=0x10)p=pos+0xb0;elsep=pos+0x80;WriteCommand(p);WriteData(c);}//voidShowString(unsignedcharline,charptr){unsignedcharl,i;l=line<<4;for(i=0;i<16;i++)ShowChar(l++,(ptr+i));//循环显示16个字符}//voidInitLcd(){DelayMs(15);WriteCommand(0x38);WriteCommand(0x38);WriteCommand(0x38);WriteCommand(0x06);WriteCommand(0x0c);WriteCommand(0x01);//显示清屏}/////////////////////////////////////////////////////////////////voiddisp(void){FirstLine[2]='0'+TempData[0];FirstLine[3]='0'+TempData[1];FirstLine[4]='0'+TempData[2];ShowString(0,FirstLine);}希望能帮到你!
有些单片机有SPI外设。主程序里只需要发送和接收数据,不需要去处理具体的发送接收过程。这样可以为单片机节省一些指令周期。
话说,你那单片机还12个CLK一指令,如果要处理200KHz的数据,那确实太慢了。
建议提速单片机或降速AD。
以上就是关于求atmega88单片机的AD采样程序,另外如果用ADC6或者ADC7作采样通道在程序上应该怎么写全部的内容,包括:求atmega88单片机的AD采样程序,另外如果用ADC6或者ADC7作采样通道在程序上应该怎么写、STM32之ADC采样通道Rank详解、新手,请教单片机ADC采样电池电压等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)