搜索
bottom↓
回复: 34

关于28PIN LGT IO,又遇到郁闷的事,有兴趣的请进详聊

[复制链接]

出0入0汤圆

发表于 2012-8-30 23:17:34 | 显示全部楼层 |阅读模式
PB2设置输入(DDB2=0),即使开内部上拉,PB2脚电压死活都是1.5V,如果外部加10K上拉到3.3V,PB2电压升高到2.5V。
正好我画的一块小板用PB2做按键输入,本来以为没有问题,现在用不了……
有闲心的朋友请帮忙测试一下,谢谢。

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2012-8-31 07:48:46 | 显示全部楼层
IO烧了吗?

出0入0汤圆

 楼主| 发表于 2012-8-31 08:09:29 | 显示全部楼层
IO没有烧。如果作为输出则没有问题,可以输出0或者3.3V。我试过的。

出0入42汤圆

发表于 2012-8-31 08:13:07 | 显示全部楼层
换一块板子测试,如果情况一样,检查线路板是否有短路情况。一般都是自己的问题。

出0入0汤圆

发表于 2012-8-31 08:24:31 | 显示全部楼层
检查电路板没问题,就换一个芯片再试试。

出0入0汤圆

 楼主| 发表于 2012-8-31 08:36:28 | 显示全部楼层
芯片刚换全新的,把PB2单独出来不接任何东西,结果一样的

出0入42汤圆

发表于 2012-8-31 10:42:58 | 显示全部楼层
一般是自己的程序问题。

出0入618汤圆

发表于 2012-8-31 10:58:56 | 显示全部楼层
难道内部Bandgap参考漏出来了?

出0入0汤圆

 楼主| 发表于 2012-8-31 11:16:13 | 显示全部楼层
gzhuli 发表于 2012-8-31 10:58
难道内部Bandgap参考漏出来了?


回大湿,不敢猜测。
因为上面有人说是我程序的问题。晚上我再做进一步的实验。

出0入8汤圆

发表于 2012-8-31 11:45:04 | 显示全部楼层
你是不是 有外设工作  这个脚实际上有输出波形啊  用示波器测下。

出0入0汤圆

 楼主| 发表于 2012-8-31 12:38:03 | 显示全部楼层

图在这里,如果我如果把KEY0换到PB0完全没有任何问题。
晚上回去再检查程序看看。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入618汤圆

发表于 2012-8-31 12:56:27 | 显示全部楼层
kebaojun305 发表于 2012-8-31 11:45
你是不是 有外设工作  这个脚实际上有输出波形啊  用示波器测下。

PB2的外设功能是AN0模拟比较器+输入,要说外设影响GPIO,那除非就是ACBG控制有问题,BGR跑到外面去了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2012-8-31 12:58:40 | 显示全部楼层
仁兄把IC拆下来,再用万用表测一下PB2的那个焊点对地的电阻是多大,如果是无穷大说明PCB没有问题,估计是IC的问题,请更换别的IC。我们根据你的问题在评估板上试过了,不会有你的问题出现。

至于gzhuli兄说的,实际即使启动了比较器也不影响PB2的电平。

出0入618汤圆

发表于 2012-8-31 13:04:50 | 显示全部楼层
logicgreen 发表于 2012-8-31 12:58
仁兄把IC拆下来,再用万用表测一下PB2的那个焊点对地的电阻是多大,如果是无穷大说明PCB没有问题,估计是IC ...

我也觉得PCB问题可能性比较大,首先ACBG控制的两个开关是互斥的,然后还有个GPIO MUX,这都能漏出来不太可能现在才被发现的了。

出0入42汤圆

发表于 2012-8-31 14:52:46 | 显示全部楼层
漏出来,也是1.25不可能成了1.5吧!

出0入0汤圆

 楼主| 发表于 2012-8-31 16:03:22 | 显示全部楼层
gzhuli 发表于 2012-8-31 13:04
我也觉得PCB问题可能性比较大,首先ACBG控制的两个开关是互斥的,然后还有个GPIO MUX,这都能漏出来不太 ...

PCB是在老大这里打样的,质量绝对值得信赖!
昨晚搞到太晚,思路不太清晰,就先发贴出来看看有没有人遇到过。看来没有。
那今晚回去整理一下思路,相信可以找到问题点。谢谢各位关注。

出0入0汤圆

 楼主| 发表于 2012-8-31 20:59:57 | 显示全部楼层
测试结果来了,确实是我代码有问题。不小心开启了模拟比较器,选择AN0为比较器输入(ACSR=0),同时又开了PB2上拉,结果就不对了。
说说问什么会写错吧,我用到ADC,用AVR时习惯初始ADC时把模拟比较器关掉,所以有ACSR=_BV(ACD)这一句。昨晚精神不佳写成ACSR=0,于是……有劳各位跟着蛋疼了,谢谢。结贴。

测试代码顺便奉上,好事者可以试试。
PB2连接到万用表,单步调试以下代码,观察电压变化。
/*
* main.c
*/

#include <avr/io.h>
#include "iolgt8f0xa.h"

int main(void)
{
        PORTA = 0xff;
        DDRA = 0;
        PORTB = 0xff;
        DDRB = 0;
        /* PB2 = 3.3V */
        PORTC = 0xff;
        DDRC = 0;
        PORTD = 0xff;
        DDRD = 0;

        ACSR = 0; /* 启用模拟比较器 */
        /* PB2 = 1.5V */
        ACSR |= _BV(ACBG); /* 选择内部1.25V参考 */
        /* PB2 = 3.3V */
        ACSR &= ~_BV(ACBG); /* 选择外部AN0输入 */
        /* PB2 = 1.5V */
        PORTB &= ~_BV(PB2);
        /* PB2 = 0V */
        PORTB |= _BV(PB2);
        /* PB2 = 1.5V */
        ACSR = _BV(ACD); /* 关闭模拟比较器 */
        /* PB2 = 3.3V */
        for (;;) {}
        return 0;
}

/* End of main.c */

出0入0汤圆

发表于 2012-8-31 22:43:37 | 显示全部楼层
MARK下。

出0入0汤圆

发表于 2012-8-31 23:30:12 | 显示全部楼层
学习了

出0入42汤圆

发表于 2012-9-1 08:19:49 | 显示全部楼层
找到问题就好。

出0入0汤圆

 楼主| 发表于 2012-9-3 08:53:57 | 显示全部楼层
顺便报告一下,ADC的误差比较大。参考选用AVCC(3.3V),转换0.58V左右的直流电压,ADC值比理论计算值小11LSB。
误差是不指望了。希望线性不错,DIY就懒得去测试……

出0入42汤圆

发表于 2012-9-3 09:43:05 | 显示全部楼层
11LSB,这也太大了点吧。

出0入0汤圆

发表于 2012-9-3 10:05:47 | 显示全部楼层
mowin 发表于 2012-9-3 08:53
顺便报告一下,ADC的误差比较大。参考选用AVCC(3.3V),转换0.58V左右的直流电压,ADC值比理论计算值小11L ...

ADC输入阻抗为20K左右,请将这个内部阻抗和外部分压电路综合起来,是不是因为内部阻抗拉低了输入电压?

出0入0汤圆

 楼主| 发表于 2012-9-3 10:38:19 | 显示全部楼层
再有人跟我说阻抗问题我就无语了。图在上面,有MCP6002缓冲。

我现在是直接在ADC值加上11修正。先凑合用。

出0入0汤圆

发表于 2012-9-3 14:25:54 | 显示全部楼层
mowin 发表于 2012-9-3 10:38
再有人跟我说阻抗问题我就无语了。图在上面,有MCP6002缓冲。

我现在是直接在ADC值加上11修正。先凑合用。 ...

你可以同时测试一下地电平,然后做差值,应该会比较准一点。

出0入0汤圆

 楼主| 发表于 2012-9-3 14:49:08 | 显示全部楼层
我用胜利VC97量:VCC=3.328V。PA0=0.582V。理论上ADC转换出来应该是179。LGT转换出来只有168。

出0入42汤圆

发表于 2012-9-3 16:24:02 | 显示全部楼层
168很稳定吗?还是跳来跳去?

出0入0汤圆

 楼主| 发表于 2012-9-3 16:25:42 | 显示全部楼层
非常稳定。即使不做软件滤波,也只有+-1LSB跳到。滤波之后非常稳定。

出0入42汤圆

发表于 2012-9-4 08:24:28 | 显示全部楼层
楼上也降低速度试试。我的板子还没到手,没法测试。

出0入0汤圆

 楼主| 发表于 2012-9-4 08:40:35 | 显示全部楼层
本帖最后由 mowin 于 2012-9-4 08:46 编辑

我用默认的8MHz系统时钟。ADC预分频设置为128(最大值),Fadc=8000K/128=62.5KHz。已经最低。还要更低只有降主时钟了。这样单次转换时间都16uS啦,够慢的了。

编辑:单次转换时间错了,不是16uS。回头我看看规格书。

出0入0汤圆

 楼主| 发表于 2012-9-4 08:49:10 | 显示全部楼层
n0831 发表于 2012-9-4 08:24
楼上也降低速度试试。我的板子还没到手,没法测试。

期待你的测试报告。但愿是我自己的误差而不是IC的误差,现在已经不敢请教厂方专家了。

出0入42汤圆

发表于 2012-9-8 14:54:16 | 显示全部楼层
板子焊接出来,测试了下。 ADC2 输入 0.554V,AVCC = 3.294V  理论值为172,实际在169和170跳动,基本还算可以。

出0入0汤圆

 楼主| 发表于 2012-9-8 14:56:39 | 显示全部楼层
n0831 发表于 2012-9-8 14:54
板子焊接出来,测试了下。 ADC2 输入 0.554V,AVCC = 3.294V  理论值为172,实际在169和170跳动,基本还算 ...

麻烦你把程序贴上,我试试。谢谢

出0入42汤圆

发表于 2012-9-8 15:33:41 | 显示全部楼层
unsigned int DrvADC_Convers(unsigned char vref,unsigned char channel)
{
        unsigned int retval;
//        ADCSRA = 0;                        //disable ADC
//        DIDR0 = 0xFF;                //disable digital port
        ADMUX = ((vref << 6) | channel);       

        ADCSRA |= (1 << ADEN);                //enable ADC
        NOP();
        NOP();
        NOP();
        NOP();
        NOP();
        ADCSRA |= (1 << ADSC);                //enable conversion
       
        while(!(ADCSRA & (1 << ADIF)));
        ADCSRA |= (1 << ADIF);                //clear ADC interrupt flag

        retval = ADCL;
        retval |= (ADCH << 8);
        return retval;
}

出0入42汤圆

发表于 2012-9-8 15:34:24 | 显示全部楼层
就是最简单的程序。我基本1S采集一次
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-25 19:56

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表