搜索
bottom↓
回复: 37

AVR学习笔记

[复制链接]

出0入0汤圆

发表于 2005-7-30 15:11:02 | 显示全部楼层 |阅读模式
这个暑假都会泡在学校里面做单片机,从一上手开始,就是学AVR入门的。说是入门,其实也就是看了一两本书,写过几个小程序而已。

    所以希望把学习AVR过程中的体会记录下来,和所有新手们共勉,向高手们请教。

    很可能变成水文,也大概不会有多高的技术含量,还是适合发在水区好了。^_^

   

    这几天在做的AVR的程序都是一些很基本的,像19264-1的点阵液晶,用ZLG7290驱动4*4的键盘,SPI的双机通讯,24c16的读写等等基本的输入输出模块。选的是Mega16L,之前也用过Mega8L,但是烧了几块之后,感觉上好像不是很稳定,决定暂时放弃。

   

    先上传一个自已从12864改成的19264的点阵

    iccavr编译,可以写汉字,ascii码,画圆,画线,打点。

    自已学习过程中的程序,可能有小错误,但个人感觉用来作新手的参考还是很有价值的.

    注:编译选项要勾上strings in flash only

点击此处下载armok0159766.rar

出0入0汤圆

发表于 2005-7-30 15:49:19 | 显示全部楼层
不错,进度好快。

出0入0汤圆

 楼主| 发表于 2005-7-30 16:53:03 | 显示全部楼层
用上面的液晶写出来的东东

中间下面那块黑块本来想做成滚动条的,结果-_-!!!哈哈

出0入0汤圆

 楼主| 发表于 2005-7-31 14:26:53 | 显示全部楼层
在论坛上逛啊逛

一下子想不到要做些什么又简单又好玩的东西。。。。

出0入0汤圆

发表于 2005-7-31 21:46:30 | 显示全部楼层
中大的校徽?

出0入0汤圆

 楼主| 发表于 2005-8-1 17:07:39 | 显示全部楼层
今天正式开始做iic协议

  准备先读一下EEPROM24c02跟ZLG7290的键盘控制芯片(也是IIC)的,结果发现从别人那里拿来的板跟自已的测试板电源配不上,要改硬件很麻烦,算了,等拿去新赛格做的板拿回来再测吧.

   一直以来都是自已用覆铜板做板来玩,手艺虽然不是很好,但做的板大部分还是能用的,过两天就要从新赛格拿到工厂做的板了,嘿嘿,很期待



  上面那个图是随便找个小图就画上去的,看着像什么就算是什么吧^_^
















-----此内容被bluebirdyy于2005-08-01,17:26:45编辑过

出0入0汤圆

 楼主| 发表于 2005-8-4 22:52:22 | 显示全部楼层
 两天没来写啊,啊哈,实在是忙啊

 前段时间从南京某公司申请的USB芯片CH375a到了,于是这两天就在看资料和做版。

 对于一个新手来讲上手USB还不是一件很简单的事,本来打算自已看看能不能把FAT16的驱动写出来,看了看文件系统的书,觉得难度不小,而且对于现在要赶进度的我还是不太适合,于是去申请了375的读写的库。加了这个库,就能直接读写FAT16的文件分区了,接下来就可以开始试下做U盘的读写模板。

  于是开始用覆铜板做了一块转接板,加上很简单的外部电路就可以了。不过这个东西还是花了我很长的时间。。。手艺太差了,做坏了一堆板。。唉。

  看了看USB的库文件说明,终于在十分钟之前,把库里的示例文件整个地转移过去,其实就只是改了一下引脚而已,嘿嘿,编译通过了。

  通过完一想,不对,源程序是用m128的,我只有m16,换成m16再编,那个汗啊~~~ram暴不够,还没编完,iccavr死机了,自动退出。

  算了,明天再弄,看看有没有办法。不过应该很难,datasheet里面说库文件用的ram 已经非常精简了。

  唉,不能扩外部ram的m16啊。。。。。
头像被屏蔽

出0入0汤圆

发表于 2005-8-5 07:41:51 | 显示全部楼层
移到技术坛吧。。。
头像被屏蔽

出0入0汤圆

发表于 2005-8-5 07:42:03 | 显示全部楼层
<font color=blue>以下蓝色文字由坛主:armok 于:2005-08-05,07:42:03 加入。
请发贴人注意:本贴放在这分区不合适,即将移走
原来分区:[1020]悠闲区
即将移去的分区:[1000]“我们的AVR”技术论坛
移动执行时间:自本贴发表12小时后

出0入0汤圆

 楼主| 发表于 2005-8-5 15:49:02 | 显示全部楼层
希望阿莫不要把这个贴子移到技术区



作为一个新手,只是想每天能交流刚学AVR的一些体会,是体会而不是技术,至少我的本意是这样



贴里面的一些东西很粗糙,而且吹水意味多一点,想到哪里写到哪里,没有多少针对性和实用价值



如果转到技术区,压力太大,以后可能就写不动,不会再写了。。。。。



麻烦armok了 ^_^



-----此内容被bluebirdyy于2005-08-05,15:51:14编辑过


-----此内容被bluebirdyy于2005-08-05,15:53:02编辑过

出0入0汤圆

发表于 2005-8-6 09:47:15 | 显示全部楼层
顶一下牛人的贴~~~~

出0入0汤圆

发表于 2005-8-6 10:24:31 | 显示全部楼层
顶你一下,支持。

成绩有时也是逼出来的,呵呵
头像被屏蔽

出0入0汤圆

发表于 2005-8-6 10:40:53 | 显示全部楼层
好,应bluebirdyy要求,恢复到水坛中。。
头像被屏蔽

出0入0汤圆

发表于 2005-8-6 10:41:11 | 显示全部楼层
<font color=blue>以下蓝色文字由坛主:armok 于:2005-08-06,10:41:11 加入。
请发贴人注意:本贴放在这分区不合适,即将移走
原来分区:[1000]“我们的AVR”技术论坛
即将移去的分区:[1020]悠闲区
移动执行时间:自本贴发表0小时后

出0入0汤圆

 楼主| 发表于 2005-8-9 22:45:14 | 显示全部楼层
呵呵,谢谢armok了

  

    这几天没有什么心思在作东西。为了编译器得问题,很伤脑筋。



    AVR相比于51系列,一个很大得弱点就是编译器得问题。我试用过得编译器有ICCAVR,AVRstudio,CVAVR,ATMan...一开始是用Codevision,感觉还不错,比较适合初学者,但是后来出问题了,使用的codevision1.24,由于破解问题,用到自带的子程序库的时候,经常会出现编译error的问题。在技术版也不断有人提出这样的问题。我下载了好几个注册机,还是不行。现在只能转iccavr.总的来说iccavr还是不错的,但还是有不少问题,比如不支持调试,没有队1602lcd的支持等等,以前的一些程序还要修改才能用,我的spi从cvavr转到icc就混乱了。

    这方面51系列真的很好,一个稳定强大的Keil,实在令人羡慕啊。。。。
-----此内容被bluebirdyy于2005-08-09,22:45:58编辑过
头像被屏蔽

出0入0汤圆

发表于 2005-8-10 06:45:58 | 显示全部楼层
bluebirdyy 反映的问题我们也很头疼。AVR的编译器太多,看来是好事,其实是坏事。没有统一的标准与规范。



我们网站正在作一个尝试:引导大家统一到GCC上去。



虽然GCC也有缺点,但总的来说,是开发AVR的趋势,并且是免费的,源码公开,不存在破解问题。www.avrfreaks.net 这个最大的国外AVR网站,也是推荐使用GCC的。

出0入0汤圆

发表于 2005-8-11 15:33:16 | 显示全部楼层
不错!

出0入0汤圆

 楼主| 发表于 2005-8-11 22:56:25 | 显示全部楼层














新赛格做的板终于拿回来啦哈哈,上面的照片是里面的avr部分

不过。。调了一天。。。。好多问题啊。。。。。。T_T

复位键是高电平有效的,接错了,好几个贴片电容的封装也错了,还有两个GND没有连上

于是调啊调啊调啊,把问题基本解决了,不容易啊。。。。



以后正式用这块板开工,恩

出0入0汤圆

发表于 2005-8-20 22:50:41 | 显示全部楼层
为何没下文了,我正看得入神,

就没得看了,希望楼主写多点,给我们新手学习

出0入0汤圆

 楼主| 发表于 2005-8-22 22:56:11 | 显示全部楼层
  其实并不是不想写,只是进度有些慢,都没有什么东西可以放上来,怕贻笑大方。

  总结一下这几天:开始做spi做的A/D,测通了一个温度传感器,其实就是一个spi的ad转换器,不过里面自带了一个测温二极管,用的是max1298.其实spi接口算是AVR里面最简单的一个接口了,用它来学习双机通讯或者控制外部芯片,我觉得是最好的,特别是如果能用中断程序来处理的话更是能考验编程入门水平。技术版块有一个i2c的中断处理程序很不错,写外部eeprom,我把它打印出来,整整四页,细细看完,受益匪浅。

    然后还有一些零星的东西,像是IIC协议。读写了at24c16,和周立功的7290芯片,拿来做键盘输入。恩,现在的输入输出模块都差不多了。本来还打算做触摸屏的,但是去赛格买的时候被js骗了,卖了一个电容屏给我,不知道怎么用,就算换回电阻屏,也还要去找控制芯片和编程,时间浪费太多,算罢了。。。

   

    前段时间到广州赛格的双龙档子那里拿了一本双龙的单片机产品介绍。看了有点心寒。功能如此强大的单片机,在双龙的手里,只是用来做做USB开发板,或者绕障,寻光机器人之类的产品而已。双龙推广的力度跟其它厂家相比还很是不够.希望以后会有越来越多的人用avr.

-----此内容被bluebirdyy于2005-08-22,22:59:06编辑过


-----此内容被bluebirdyy于2005-08-23,09:41:31编辑过
头像被屏蔽

出0入0汤圆

发表于 2005-11-7 07:38:03 | 显示全部楼层
<font color=blue>以下蓝色文字由坛主:armok 于:2005-11-07,07:38:03 加入。
请发贴人注意:本贴放在这分区不合适,即将移走
原来分区:[1020]悠闲休息区 (灌水坛)
即将移去的分区:[1000]“我们的AVR”技术论坛
移动执行时间:自本贴发表0小时后

出0入0汤圆

发表于 2005-11-7 12:23:48 | 显示全部楼层
妙啊,可能是被移过最多次的帖子吧。

出0入0汤圆

发表于 2005-11-7 12:40:58 | 显示全部楼层
哈哈,就是。支持!

出0入0汤圆

发表于 2005-11-8 08:20:54 | 显示全部楼层
楼主你非常不错啊!放在这里,也会有很多人支持的.

继续写下去

出0入0汤圆

发表于 2005-11-8 08:35:42 | 显示全部楼层
自叹不如!!!

出0入0汤圆

发表于 2006-8-14 09:52:56 | 显示全部楼层
羡慕啊,不知搂主ZLG7290

出0入0汤圆

发表于 2006-8-14 09:55:48 | 显示全部楼层
羡慕啊,不知搂主ZLG7290部分的如何实现的,我用ICC 模拟IO方式驱动,总是不成功,不知是什么原因,楼主能否在你的板子上帮忙测试一下啊

附程序,请高人指点啊

//i2c.h

#include <iom128v.h>

#include <macros.h>

  

#define  ZLG7290_I2C_ADDR 0x70

  

#define  NS  42

  



unsigned char I2cWrite(unsigned char *buf,unsigned char num,unsigned char RomAddress);  

unsigned char I2cRead(unsigned char *buf,unsigned char num,unsigned char RomAddress);

  

//i2c.c

#define IIC_SDA 0x08    //定义SDA管脚PE3

#define IIC_SCL 0x10    //定义SCL管脚PE4

  

#define IIC_PIN  PINE    //定义端口

#define IIC_PORT PORTE

#define IIC_DDR  DDRE

  

#define SET_SDA  IIC_PORT |= IIC_SDA  //SDA高 输出用   

#define CLR_SDA  IIC_PORT &= ~IIC_SDA //SDA低 输出用   

#define SET_SCL  IIC_PORT |= IIC_SCL  //SCL高 输出用   

#define CLR_SCL  IIC_PORT &= ~IIC_SCL //SCL低 输出用   

  

#define SCL_OUT  IIC_DDR |= IIC_SCL   //SCL作输出

#define SDA_OUT  IIC_DDR |= IIC_SDA   //SDA作输出

#define SDA_IN   IIC_DDR &= ~IIC_SDA  //SDA作输入

  



void NOPS(unsigned int i)

{

do

{

NOP();

}while(--i!=0);

}

void I2cStart(void)

{

SDA_OUT;

SCL_OUT;

  

SET_SDA;

   //NOPS(NS);

SET_SCL;   

   NOPS(NS);

CLR_SDA;   

   NOPS(NS);

CLR_SCL;  

   NOPS(NS);

}

  

void I2cStop(void)

{

SDA_OUT;

CLR_SDA;

    NOPS(NS);

SET_SCL;

    NOPS(NS);

SET_SDA;

    NOPS(NS);

}

  

void I2cAck(unsigned char x)

{

SDA_OUT;

if(x)

SET_SDA;

else

CLR_SDA;

    NOPS(NS);

SET_SCL;   

    NOPS(NS);

CLR_SCL;   

}

  



//// 返回  1:错误 ////

//// 返回  0:正确 ////

unsigned char I2cTestAck(void)

{

unsigned char error = 0;

SET_SDA;

//NOPS(NS);

SDA_IN;

SET_SCL;

NOPS(NS);

if(IIC_PIN & IIC_SDA)

     error = 0x01;

CLR_SCL;

    NOPS(NS);

return error;

}

  

void I2cWrite8bit(unsigned char input)

{

    unsigned char i;

    SDA_OUT;

    for(i=8; i>0; i--)

    {

        if(input & 0x80)

            SET_SDA;

        else

            CLR_SDA;

  input <<= 1;

        SET_SCL;

        NOPS(NS);

        CLR_SCL;

        NOPS(NS);

    }

  

}

  

//// 返回  0:错误 ////

//// 返回  1:正确 ////

unsigned char I2cWrite(unsigned char *buf,unsigned char num,unsigned char RomAddress)  

{

CLI();

I2cStart();

I2cWrite8bit(ZLG7290_I2C_ADDR);

if(I2cTestAck()){I2cStop(); return 0;}    //I2cTeskAck()返回1错误

I2cWrite8bit(RomAddress);

if(I2cTestAck()){I2cStop(); return 0;}

for( ; num!=0; num--)

{

  I2cWrite8bit(*buf++);

if(I2cTestAck()){I2cStop(); return 0;}

}

I2cStop();

NOPS(100);

return 1;

}

  

unsigned char I2cRead8bit(void)

{

unsigned char i,rd=0;

  

SDA_IN;

for(i=8; i>0; i--)

{

    SET_SCL;

    NOPS(NS);

    rd <<= 1;

    if(IIC_PIN & IIC_SDA)

    rd |= 0x01;

    NOPS(NS);

    CLR_SCL;

    NOPS(NS);

}

return rd;

}

  

//// 返回  0:错误 ////

//// 返回  1:正确,读数错误也返回1 ////

unsigned char I2cRead(unsigned char *buf,unsigned char num,unsigned char RomAddress)  

{

CLI();

I2cStart();

I2cWrite8bit(ZLG7290_I2C_ADDR);

if(I2cTestAck()){I2cStop(); return 0;}

I2cWrite8bit(RomAddress);

if(I2cTestAck()){I2cStop(); return 0;}

I2cStart();

I2cWrite8bit(ZLG7290_I2C_ADDR+1);

if(I2cTestAck()){I2cStop(); return 0;}

for( ; num>0; num--)

{

  *buf++ = I2cRead8bit();

  I2cAck(0);

}

I2cAck(1);

I2cStop();

return 1;

}

//------------------------------------------------------------------------------------



//定义ZLG7290内部寄存器地址(子地址)

#define ZLG7290_SystemReg  0x00  //系统寄存器

#define ZLG7290_Key        0x01  //键值寄存器



unsigned char KeyValue;

main()

{

     init_devices();

     while(1)

     {

      KeyValue=0;

      I2cRead(&KeyValue,1,ZLG7290_Key);

      delay();

     }

}

出0入0汤圆

发表于 2006-8-14 13:49:04 | 显示全部楼层
热切期待楼主的测试

结果

出0入0汤圆

发表于 2006-8-14 21:41:18 | 显示全部楼层
不错

出0入0汤圆

发表于 2006-11-15 10:33:57 | 显示全部楼层
学习中。。。

出0入0汤圆

发表于 2008-3-14 20:37:20 | 显示全部楼层
学习、、、、、、

出0入0汤圆

发表于 2008-3-17 05:47:35 | 显示全部楼层
我是新人对单片机也感兴趣,但不知道从那里入手去做,希望先辈们指点一下,在下,在此感谢大家

出0入0汤圆

发表于 2008-3-17 09:33:23 | 显示全部楼层

出0入0汤圆

发表于 2010-8-23 16:31:30 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-8-25 18:27:38 | 显示全部楼层
路人路过~~

出0入0汤圆

发表于 2011-11-22 14:07:24 | 显示全部楼层
mark

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-5-7 17:04

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

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