EDN首页   博客首页 用户登陆  |  注册
aaa
发表于 2009/8/31 10:24:20

1

关于投票

【转帖】关于开发产品的一些个人看法,我现在使用51和AVR单片机

转自:ourdev                  作者:JAMESKING

本人原来使用过的芯片有:AT89C51、2051、PIC16C711、16F84、LPC76X、ADuC812/834 
但是看到AVR以后觉得AVR有不少优点: 
1.带10位A/D,一般满足工业控制的基本要求; 
2.带FLASH和EEPROM,特别是EEPROM,可以放逻辑炸弹,防止某些人用上了不付钱; 
3.引脚少,没有外扩总线,抗干扰性能还可以; 
4.开发容易,开发硬件成本低(我现在采用的是汇编语言,我不用C语言,C语言对于高速实时控制太慢了),采用汇编语言来说,写一个比较复杂的控制程序(比如大功率焊接设备SCR调压器控制器),连键显、PID、触发和保护一起,4K*16位足够了,就算开发很复杂的工控系统,16K*8位的ATmega16都绰绰有余,关键在于你的编程水平够不够; 
5.加密性能比较好; 
6.价格便宜,对于大功率工业控制的设备而言(至少1万元以上的),那点成本根本不算什么; 
7.原来想采用uPD7810或者68HC11A8,开发系统的价格实在太高了,受不了,而且没有几天工夫你根本不可能使用它的。 

所以,现在我还在用51,主要是软件仿真和专用仿真器一起上,AVR我用软件仿真,因为JTAG口实在太占用资源,而且修改程序不如ISP来得快捷方便。 

AVR就是我现在想要的片子,基本功能全都有了,没有外部总线,被别人破解的可能性也远远比51小,PIC我实在看不惯它的分页,实在太讨厌了,AVR的工作温度范围也能很好满足我的工业控制要求,所以,现在在继续搞51的同时,学习AVR。


DSP对于真正的工业控制来说,除了空间矢量变换和复杂的信号解算,其余根本就是无用的东西,还浪费钱钱和国家资源:)而且加工不容易,量不大根本划不来,所以我不用320LF3407/2812、ARM等等。 

看一种芯片是否有用,我认为主要看以下几点: 
1.能不能满足市场对你的产品的要求; 
2.成本比较低; 
3.开发费用低;包括硬件成本和软件成本; 
4.印刷板设计容易; 
5.加密性能优良; 
6.有一定的升级余地; 
7.可以放逻辑炸弹(没办法,适合中国这种“欠钱的是老子,讨债的是孙子”国情); 
8.引脚驱动能力大,可以尽量少的外扩器件; 
9.开发语言可以很容易加入软件抗干扰,而且占用的代码资源少; 
10.工作温度范围宽,电源适应能力强。 

我不是开发火星车或者“神舟”号宇宙飞船,我最多只接触到军用电子设备中的一些简单的设备(可不是相控阵雷达火控系统或者声纳处理设备),所以根本用不着VXworks或者uC-OSII什么“花里胡哨”的东西,程序的移植其实对于一个好的汇编语言系统而言,只要你把程序模块化,仔细分配资源,并不难实现,但是,我现在倒还没看到哪位大虾能把C51直接移植到AVR上的,移植很多时候的意思是指对本系列芯片的兼容性而言,可不是对于不同MCU而言的,可能以后会统一,但是现在至少还没统一,所以忍忍吧,呵呵。而且对于一个自己的公司来说,比如说你原来是做手机的充电器,而现在突然要你去做250KW的大功率焊接设备,好像没有3年5载的你是根本入不了门的,更别说赚钱了,开公司的或者给公司打工的,如果什么都做,那肯定什么都不能做到最好,就像中国的海尔电器。

所以,我现在依然使用汇编语言,依然不用C语言,依然搞大功率电子设备控制,虽然开发速度慢一些(比C语言),但是至少不会让用户把我发的货退掉了,这就是市场生存法则,不是学术骗子们的生存法则。

系统分类: 单片机  |  用户分类: AVR  |  标签: 无标签  |  来源: 转贴  | 

点击查看原文

发表评论 阅读全文(768) | 回复(2)

发表于 2009/4/18 15:04:42

2

关于投票

【原创】HT1380 AVR C语言驱动程序

#include "ht1380.h"

/*************短时间延时***********************************/
void dly_HT1380(void)
{
 asm("nop");
 asm("nop");
 asm("nop");
 asm("nop");
}

/*************向HT1380中写一个字节*************************/
void HT1380_write(uint8_t data)
{
 uint8_t i="0";
 set_HT1380_io_ddr();
 clr_HT1380_io();
 for(i=8;i>0;i--)
 {
  dly_HT1380();
  if(data&0x01)
  {
   set_HT1380_io();
  }
  dly_HT1380();
  set_HT1380_sclk();
  dly_HT1380(); 
  clr_HT1380_sclk();
  dly_HT1380(); 
  clr_HT1380_io();
  data>>=1;
 }
}

/*************从HT1380中读一个字节*************************/
int HT1380_read(void)
{
 uint8_t data="0";
 uint8_t i="0";
 clr_HT1380_io_ddr();//让io变成输入
 for(i=8;i>0;i--)
 {
  set_HT1380_sclk();
  dly_HT1380();
  data >>= 1;   
  if(in_HT1380_io())
  {
   data |= 0x80;
  }
  else
  {
   data &= 0x07f;
  }
  clr_HT1380_sclk();
  dly_HT1380();
 } 
 return(data);
}

/**********从HT1380中读日期和时间******************************/
void HT1380_read_time(void)
{
 clr_HT1380_sclk();
 set_HT1380_io_ddr();
 clr_HT1380_rst();
 dly_HT1380();
 set_HT1380_rst(); //
 HT1380_write(0xbf); 
 dly_HT1380();
 clr_HT1380_io_ddr();
 dly_HT1380();
 second=HT1380_read(); //秒
 minute=HT1380_read(); //分
 hour=HT1380_read(); //时
 day=HT1380_read(); //日
 month=HT1380_read();//月
 week=HT1380_read(); //周
 year=HT1380_read(); //年
 dly_HT1380();
 clr_HT1380_rst();
}
/**********向HT1380写日期和时间******************************/
void HT1380_write_time(void)
{
 clr_HT1380_sclk();
 set_HT1380_io_ddr();
 clr_HT1380_rst();
 dly_HT1380();
 set_HT1380_rst(); //
 HT1380_write(0x8e);
 HT1380_write(0x00);  
 dly_HT1380();
 clr_HT1380_rst();
 dly_HT1380();
 set_HT1380_rst(); //
 HT1380_write(0x80);
 HT1380_write(0x00);
 dly_HT1380();
 clr_HT1380_rst();
 dly_HT1380();
 set_HT1380_rst(); //
 HT1380_write(0xbe);
 HT1380_write(second); // 秒
 HT1380_write(minute); //分
 HT1380_write(hour); //时
 HT1380_write(day); //日
 HT1380_write(month); //月
 HT1380_write(week); //周
 HT1380_write(year); //年
 HT1380_write(0x00);  
 dly_HT1380();
 clr_HT1380_rst();
}

http://space.ednchina.com/upload/2009/4/18/69a848c6-bbd0-4825-b347-eb1a5bbf325b.rar

系统分类: 单片机  |  用户分类: AVR  |  标签: HT1380 AVR C 驱动程序  |  来源: 原创  | 

点击查看原文

发表评论 阅读全文(1014) | 回复(1)

发表于 2009/3/12 19:20:09

3

关于投票

USART接485发送+PROTESU仿真

仿真截图

点击开大图

//ICC-AVR application builder : 2007-11-30 20:29:49
//串口+485发送程序
// Target : M16
// Crystal: 8.0000Mhz
//编制:孙可

#include <iom16v.h>
#include <macros.h>
void x_print(unsigned char c) //发送采用查询方式
{
while( !(UCSRA & (1<<UDRE)) );
UDR=c;
}




void port_init(void)
{
PORTA = 0x00;
DDRA = 0x00;
PORTB = 0x00;
DDRB = 0x00;
PORTC = 0x00; //m103 output only
DDRC = 0x00;
PORTD = 0x40;
DDRD = 0x40;
}

//UART0 initialize
// desired baud rate: 9600
// actual: baud rate:9615 (0.2%)
void uart0_init(void)
{
UCSRB = 0x00; //disable while setting baud rate
UCSRA = 0x00;
UCSRC = BIT(URSEL) | 0x0E;
UBRRL = 0x33; //set baud rate lo
UBRRH = 0x00; //set baud rate hi
UCSRB = 0x98;
}

#pragma interrupt_handler uart0_rx_isr:iv_USART0_RXC
void uart0_rx_isr(void)
{
//uart has received a character in UDR
}

//call this routine to initialize all peripherals
void init_devices(void)
{
//stop errant interrupts until set up
CLI(); //disable all interrupts
port_init();
uart0_init();

MCUCR = 0x00;
GICR = 0x00;
TIMSK = 0x00; //timer interrupt sources
SEI(); //re-enable interrupts
//all peripherals are now initialized
}
void main(void)
{
init_devices();
while(1)
{
unsigned int i="0x55";
unsigned int j="0xaa";
x_print(i);
x_print(j);
}
}

http://space.ednchina.com/upload/2009/3/12/5cf6b8db-08a5-4995-9f2b-292ae6105ccb.rar仿真+程序包

系统分类: 单片机  |  用户分类: AVR  |  标签: 485,AVR,PROTESU,仿真  |  来源: 原创  | 

点击查看原文

发表评论 阅读全文(1164) | 回复(2)

发表于 2008/9/12 18:02:40

3

关于投票

GCCAVR使用心得

1.GCCAVR的中断程序名在每个芯片的头文件中。

2.GCCAVR在E2PROM中预定义变量名和对应的数据用:

     int user EEMEM = 1000;//这里user是变量名,1000是user内的数据,EEMEM是存储类型。

3.出了下面的编译提示:

../gkdm-21_2.c:268: error: expected declaration or statement at end of input

很可能是{}加的不对。

系统分类: 单片机  |  用户分类: AVR  |  标签: GCCAVR  |  来源: 原创  | 

点击查看原文

发表评论 阅读全文(860) | 回复(0)

发表于 2008/7/12 8:15:06

10

关于投票

ATMEGA64驱动LCD320240

我用ATMEGA64在GCCAVR下终于调通了LCD320240的驱动,我被那个-24V的负压害惨了,可恶的TRULY在网站上不提供LCD的技术文件,我找了一个老的上面说对比度调节电压0~20V,我就给接了个+5V,结果怎么也调不出字来,一直以为是程序的问题翻来覆去的改也不见效果.都要崩溃了!结果无意中在一个老图纸上看到-24V,才意识到问题的所在.惨那!半个月时间白浪费了!

完整的项目文件GCC编译点击下载

系统分类: 单片机  |  用户分类: AVR  |  标签: ATMEGA64 驱动 LCD320240 GCC  |  来源: 原创  | 

点击查看原文

发表评论 阅读全文(1399) | 回复(5)

发表于 2008/7/8 8:22:21

13

关于投票

[分享]经过我验证好用的lcd320240驱动程序

点击下载/*-------------------------------------------------------
        MD-500Ⅱ模拟定位机(ICCAVR)显示程序   2.0
          作者:cyk8       2004.12.3
      1、应包含头文件slavr.h
      2、在工程选项中的Additional Lib中填入slavr
        使编译器使用附加库文件libslavr.a
      3、数据线D0~D7接PORTC
        WR------>用PD4代替
        RD------>用PD3代替
        A0------>用PD6代替
        RESET接RESET
        CS接地
      4, 通讯协议:
          主机发送的控制指令采用6个字符组成的字符串格式“(X/Y/S/C/G/T)”+数据1,数据2,数据3,数据4+“#”,
          主机共发7B,7C,7D,7E,7F,
          a.第一个发的是X,Y,SAD,C,G,TH的ASCⅡ
            X--->58H(X)
            Y--->59H(Y)
            SAD->53H(S)
            C--->43H(C)
            G--->47H(G)
            TH-->54H(T)
          b.7B,7C,7D,7E四个数据
          c.最后一个7F=#23H(ASCⅡ="#"表示结束符号)

---------------------------------------------------------*/

说明一下,这个文件夹里的MNJ_1335.c是源程序,用的时候需要根据你的需要修改输出端口。

里面的MNJ_1335.hex是完整的固件文件,可以直接烧到m16中运行,但是需要你的电路和程序里规定的一致,我当初不知道这个程序是不是好用,就按照他的电路搭了一个,烧进去MNJ_1335.hex液晶就出字了。
这个程序是作者在m16上用iccavr编译的,我用gccavr在m64上改编了一个,如果有朋友需要留下email我发给你。

系统分类: 单片机  |  用户分类: AVR  |  标签: AVR LCD320240 SED1335  |  来源: 整理  | 

点击查看原文

发表评论 阅读全文(1386) | 回复(1)

发表于 2007/8/10 14:00:34

4

关于投票

我在论坛上当斑竹

论坛:http://bbs.avrvi.com/?u=2095

这是一个关于AVR单片机和虚拟仪器的论坛,现有会员8千多,很热闹!

系统分类: 单片机  |  用户分类: AVR  |  标签: 无标签  |  来源: 原创  | 

点击查看原文

发表评论 阅读全文(922) | 回复(2)

Total , Page /