刚学MSP430F149,秀一下焊工,哈哈(其ADC12性能没的说,洞洞板也不怎么跳)
#include <msp430x14x.h>//********************************************
//表区
unsigned char display_par={0xbe,0x84,0x37,0x97,0x8d,0x9b,0xbb,0x8e,0xbf,0x9f};
unsigned char timp,i=0;
//变量区
unsigned char display_buffer[]={0,0,0,0};
unsigned long ADC0 ;
void ADC12setup(void)//ADC12初始化
{
//ADC12设置**************************
P6SEL |= 0x01; //使用A/D通道 A0
ADC12CTL0 = ADC12ON ; //开ADC12内核,设SHT0=2 (N=4)
ADC12CTL1 = SHP ; //SAMPCON信号选为采样定时器输出
ADC12MCTL0 |= SREF_0; //R+=AVCC R-=VSS //转换允许
ADC12CTL0 |= ENC ; //转换允许(上升沿)
ADC0=0x00;
}
void data_converter(unsigned int value) //数据变换
{
display_buffer=value/1000;
display_buffer=value%1000/100;
display_buffer=value%1000%100/10;
display_buffer=value%1000%100%10;
}
void int_io(void)
{
WDTCTL = WDTPW + WDTHOLD; // 停止WDT
P1DIR=0x01;P1OUT=0x0f; //LED设置
P4DIR=0xff;P4OUT=0xff; //LED设置
P5DIR=0xff;P5OUT=0x00; //LED设置
ADC12setup();
//_EINT(); // 全局中断使能
}
void display_led(void)
{
unsigned char a;
a=0;
P4OUT=0xff;
P5OUT=0x00;
if(i==0){P4OUT=0xbf;a=0x40;}
if(i==1)P4OUT=0xdf;
if(i==2)P4OUT=0xef;
if(i==3)P4OUT=0x7f;
P5OUT=display_par]|a;
i++;if(i>3)i=0;
}
void main(void)
{
unsigned char n=0;
unsigned long bb,aa={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int_io();
while(1)
{
ADC12CTL0 |= ADC12SC; //sampling open,AD转换完成后(ADC12BUSY=0),ADC12SC自动复位;
while((ADC12IFG & BIT0) == 0); //等转换结束
bb = ADC12MEM0; //读转换数据值,同时清ADC12IFG0标志
if(bb<3)bb=0;
aa=bb;
if(n==0)ADC0=(((aa+aa+aa+aa+aa+aa+aa+aa+aa+aa
+aa+aa+aa+aa+aa+aa)>>4)*808)/1000;
data_converter(ADC0) ;
display_led();
n++;if(n>15)n=0;
}
} 点击此处打开 ourdev_291152.JPG(文件大小:416K,只有300K以内的图片才能直接显示) (原文件名:STP61278.JPG) http://cache.amobbs.com/bbs_upload782111/files_10/ourdev_291153.JPG
(原文件名:STP61296.JPG) http://cache.amobbs.com/bbs_upload782111/files_10/ourdev_291154.JPG
(原文件名:STP61289.JPG) http://cache.amobbs.com/bbs_upload782111/files_10/ourdev_291155.JPG
(原文件名:STP61303.JPG) 神乎其技 楼主回答下。
那些像贴纸一类的是什么。
还有CPU下面还有个什么东西。绿色的。。 还有CPU下面还有个什么东西。绿色的。。
剪下来的 牛人~~!! 楼主可以找利尔达买个DIP的,这样可以省很多精力,不过要稍微注意的就是管脚间距
12位AD最多只做得到10位精度,不晓得是不是人品问题 MSP430的12位AD最多只做得到10位精度?
不是吧!
开始我的LED数码管和MSP430共用一个AMC1117-3.3出的电源,跳的不是一般的厉害,想想这TI也不至于放这么名曰12BIT的“垃圾的ADC”于是用了两个AMC1117-3.3分别1000UF电解电容+0.1UF*2PCS NPO 电容滤波出的两个3.3V电源,一个给LED数码管供电而另一个给了MSP430,并多了
bb = ADC12MEM0; //读转换数据值,同时清ADC12IFG0标志
if(bb<3)bb=0;
aa=bb;
if(n==0)ADC0=(((aa+aa+aa+aa+aa+aa+aa+aa+aa+aa
+aa+aa+aa+aa+aa+aa)>>4)*808)/1000;
数码管基本不乱跳了 ""还有CPU下面还有个什么东西。绿色的。。""
公司有N多的废PCBA,正为焊MSP430头痛,灵机一动想到了他,顺手找了一个封装一样的拿掉上面的IC割去无关线路留下了PAD,用剪刀
裁下了图中的那一小片PCB... 改了点东西,用了其XT2,找不到8MHZ左右的晶振,找了个14.745MHZ的晶振放了上去,没想到MSP430F149也疯狂的的跑了起来
哈哈,意外的发现!!!
不早了,不玩了....
http://cache.amobbs.com/bbs_upload782111/files_10/ourdev_291452.JPG
(原文件名:STP61306.JPG)
#include <msp430x14x.h>
//********************************************
//表区
unsigned char display_par={0xbe,0x84,0x37,0x97,0x8d,0x9b,0xbb,0x8e,0xbf,0x9f};
//变量区
unsigned char timp,i=0;;
unsigned char display_buffer[]={0,0,0,0};
unsigned long ADC0 ;
void ADC12setup(void)//ADC12初始化
{
//ADC12设置**************************
P6SEL |= 0x01; //使用A/D通道 A0
ADC12CTL0 = ADC12ON ; //开ADC12内核,设SHT0=2 (N=4)
ADC12CTL1 = SHP ; //SAMPCON信号选为采样定时器输出
//ADC12内部参考电压设置
//ADC12CTL0 |= REF2_5V; //选用内部参考电压为2.5V
//ADC12CTL0 |= REFON; //内部参考电压打开
ADC12MCTL0 |= SREF_0; //R+=2.5V R-=VSS
//转换允许
ADC12CTL0 |= ENC ; //转换允许(上升沿)
ADC0=0x00;
}
//数据变换
void data_converter(unsigned int value)
{
display_buffer=value/1000;
display_buffer=value%1000/100;
display_buffer=value%1000%100/10;
display_buffer=value%1000%100%10;
}
void int_io(void)
{
unsigned char k;
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
// MCLK=XT2=8M SMCLK=XT2=8M
//=========================================================
BCSCTL1&=~XT2OFF;
do
{
IFG1&=~OFIFG;
for(k=0xff;i>0;k--);
}
while(IFG1&OFIFG);
//BCSCTL2=SELM1+SELS;
BCSCTL2= SELM_2;
///////////////////////////////////////////////
P1DIR=0x01;P1OUT=0x0f; //LED设置
P4DIR=0xff;P4OUT=0xff; //LED设置
P5DIR=0xff;P5OUT=0x00; //LED设置
ADC12setup();
//_EINT(); // 全局中断使能
}
void display_led(void)
{
unsigned char a;
a=0;
P4OUT=0xff;
P5OUT=0x00;
if(i==0){P4OUT=0xbf;a=0x40;}
if(i==1)P4OUT=0xdf;
if(i==2)P4OUT=0xef;
if(i==3)P4OUT=0x7f;
P5OUT=display_par]|a;
i++;if(i>3)i=0;
}
void main(void)
{
unsigned char n=0;
unsigned long bb,aa={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int_io();
while(1)
{
ADC12CTL0 |= ADC12SC; //sampling open,AD转换完成后(ADC12BUSY=0),ADC12SC自动复位;
while((ADC12IFG & BIT0) == 0); //等转换结束
bb = ADC12MEM0; //读转换数据值,同时清ADC12IFG0标志
if(bb<3)bb=0;
aa=bb;
if(n==0)ADC0=(((aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa)>>4)*807)/1000;
data_converter(ADC0) ;
display_led();
n++;if(n>15)n=0;
}
} MSP430内部的AD很不错,我常用147 有比较过 MSP430 和 STM32 的AD性能差异的吗?
我正在选型请指教,谢谢! http://cache.amobbs.com/bbs_upload782111/files_10/ourdev_292997.GIF
(原文件名:12-bit ADC.GIF)
if(n==0)
ADC0=(((aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa+aa)>>4)*807)/1000;
你使用了16次软件滤波,所以显示确实 基本不乱跳了
你的代码中,if(bb<3)bb=0;这一句请教是什么用?不是太明了。难道是 限幅均值滤波法?
其实,在软件中,我也经常采用均值滤波,只不过一般用不到16个,430的RAM太TMD金贵了。 楼主的这个子函数,从运算量来说,可以这样优化
void data_converter(unsigned int value)
{
display_buffer=value/1000; ----------> 不变
display_buffer=value%1000/100; ----------> 不变
display_buffer=value%1000%100/10; ----------> display_buffer=value%100/10;
display_buffer=value%1000%100%10; ----------> display_buffer=value%10;
}
MSP430在没有硬件乘法器的情况下,计算乘法太费时间了.
不论有没有硬件乘法器,计算除法都特别费时间. MSP430如果不是这么贵,肯定普及程度比AVR高多了 MSP430的价格就是有点~~(图里的是TI给的样片),不过就是看上他的ADC了,看了万利的STM32 报价,嘿嘿有想马上弄两颗STM32来玩玩 (不晓得其ADC怎样?),说实话我真希望avr里有个14BIT的ADC(>10Kbps) 你真牛!!楼主 强人一个啊!
我是没这心思如此DIY的,不过,我的玩意也多的,都是制板的。呵呵! 万用板给你用绝了。。。。 牛人! 焊工确实不错! 比绣花技术还要高啊 这个焊接功夫,不摆老! 哈哈,有空我也要秀秀... 请问楼主用的什么线,那么细..........
那线绝缘吗? 还有,有没有发生过两根线短在一起的情况??? 用漆包线的吧? 向高手致敬! 穷人的DIY,没有办法 强 强人就是这种人 Mark。。。。 mark 典型的64马分尸 哪天不小心被小强咬断一根线,嘿嘿,查起来可痛苦咯~~ 呵呵,这个板放了N久,找出来小试了下,貌似小强咬不断还是不咬我的漆包线,除了灰有一蹭,功能完好 到嘉立创花50元可以做10块小板。省事多了。 【41楼】 zishi
呵呵 ,2008-05-23,20:01:08 哦,50RMB?呵呵 现在430的价格也下来了,不过相比起来还是要比AVR要高的
不过话说回来,430是16位的芯片,而且破解难度也比AVR要高很多,优势还是有很多的 请问楼主,剪废pcb用什么样的剪刀好? 偏口不行吧,我也想把废板子上的主控部分剪下来。。就愁用啥工具呢。。 Deli的尖刀,6RMB把,呵呵 向高手致敬 这焊工好厉害 问下楼主具体怎么焊的,什么烙铁?大概什么温度?
我想焊几个MSP430还有9850,就是不敢焊啊。 烙铁 110RMB 冒牌 白光936型
烙铁头4.2RMB 刀头
温度 设定340度 其焊接功夫---------神乎其技 还行吧 焊工厉害! MSP430 AD12内部基准电压漂移很大的。 莫非楼主是绵阳西科大的,我认识好多西科大都很喜欢这么焊。 咋都喜欢这么焊呢……牛人啊 mark 最近喜欢上了430 最近喜欢上了stm32啦,,,, 厉害 就焊工来说,的确是神乎其技!做这个太需要耐心了。。。 真是太有耐心了。我焊了10几个管脚就放弃了。 回复【9楼】lihuyong 如风似雾
楼主可以找利尔达买个DIP的,这样可以省很多精力,不过要稍微注意的就是管脚间距
12位AD最多只做得到10位精度,不晓得是不是人品问题
-----------------------------------------------------------------------
12怎么只能做到10? 焊工来说,真的没话说,一个字-------高 牛ccc啊 回复【16楼】lihuyong 如风似雾
楼主的这个子函数,从运算量来说,可以这样优化
void data_converter(unsigned int value)
{
display_buffer=value/1000; ----------> 不变
display_buffer=value%1000/100; ----------> 不变
display_buffer=value%1000%100/10; ----------> display_buffer=value%100/10;
display_buffer=value%1000%100%10; ----------> display_buffer=value%10;
}
MSP430在没有硬件乘法器的情况下,......
-----------------------------------------------------------------------
不用除法,用减法更快。 还真很用心! 惊叹~~~敢问楼主焊了多长时间? 你也忒牛了! 惊叹~~~敢问楼主焊了多长时间? 看了功夫还是不错的, MARK 佩服啊! 牛人 楼主 发点msp430的资料上来吧 才接触这个 资料好难找哦! 149的片子我自己倒是焊过,不过像楼主这么耐心在面包上搞,FLU. 功夫还是很深的,望尘莫及 回复【62楼】lningbd
-----------------------------------------------------------------------
其实用刀头焊149到PCB上是比较容易的,焊一片快的话1分钟不要,主要是技巧,先把CPU按对脚方式固定在PCB上,然后用烙铁进行拖焊,焊完后,对个别连在一起的引脚清理一下就OK了。楼主焊接有点麻烦的是把PCB上的引脚用线焊出来 功夫还是很深的,望尘莫及 MARK mark 牛人, 焊工一流 不是一般的牛呀.我当年也是这样焊M16的.图找不到了.线是用的修手机用的那种漆包线. 给大家介绍一个430仿真器:
http://www.radio.com.cn/news/200902.htm lz牛人 ./emotion/em035.gif./emotion/em035.gif./emotion/em035.gif 不要对自己太残忍,该花的钱还是要花的,焊接水平练一练就可以了。 mark 其实我还是挺冲动的啊!!我也来焊个??? 真疯狂。那么高频率还能跑。 绝啊,楼主精神我欣赏 神气。。。{:victory:}{:victory:}{:victory:} 81楼是不是何炅小时候???? 手工版绑定,虽然线有点粗,赞一个~! {:biggrin:}楼主高人啊。。。 本帖最后由 marshallemon 于 2012-9-9 19:50 编辑
wangguanfu 发表于 2008-5-23 23:51 static/image/common/back.gif
MSP430的12位AD最多只做得到10位精度?
不是吧!
开始我的LED数码管和MSP430共用一个AMC1117-3.3出的电源, ...
精度是精度,跳码是无噪声分辨率
不知道在无滤波情况下输出的12bit的数据能跳动多大? mimipbr 发表于 2008-5-25 23:41 static/image/common/back.gif
MSP430内部的AD很不错,我常用147
F147的 单片价格能做到多少? 哈哈 不错 这个焊工确实牛,赞一个,呵呵 很强大,很牛逼。 LZ 你的精度能达到多少 我用内部基准2.5V 测出来跟 电压表测的差50mv 太多了吧???? 楼主太牛了!
页:
[1]
2