1。买的万用表二极管档输出能力过大,导致所有Mega芯片IO脚对END正向短路,VCC对IO脚正向短路。
2。Mega芯片出厂配置一般为内部时钟1MHz,采用USBasp下载时,要调整USBasp的下载速度(短接跳线),改变熔丝位之后再调回高速。
3。Mega熔丝配置为外部晶体震荡,但是因为没有起震而不能下载时,可从其他芯片X2脚引线到不能下载芯片X1脚。
4。FT232BM安装官网驱动即可识别并有相应的COM口。
5。max232 外面的电容,如果是max232xxA型号全部接0.1u,如果是max232xx型号全部接1uf。在我板子上实验max232cse外接0.1u也是正常的,呵呵。BTW,无极性有机性的均可。 最重要的一点:TTL和RS232电平接口要分清,两套接口的名字画封装的时候很类似,结果两套就接反了,刻断飞线之后还能用,万幸!
6。max232的2脚本来接电容到VCC上,但是从原来的一个图利copy过来,2脚经过电容接地貌似也没不正常,哈哈。
7。今天调试,遇到一个坑爹的问题。Mega16在JTAG使能的时候PORTC相关的几个脚(PORTC2,3,4,5)不能当IO用。 对他们的置位将不能达到正常电平。
使用软件可以禁用JTAG:MCUCSR = 0x80; 但是实验发现此时PORTC3 (TDO)脚仍然不正常,不能当IO脚用。只有当在熔丝位配置里面禁用JTAG之后,JTAGEN=1才正常。
Tips:Mega系列熔丝位1表示未编程,0表示编程。
8.配置开发环境:
主机:Ubuntu10.10 i386 Desktop edition network availble
软件: 编译软件avr-gcc; 下载软件:avrdude
硬件:此开发板,USB转串口线,USB公口转公口线,USBasp下载线,5V电源适配器。
主芯片:mega8(12Mhz)和Mega16(16Mhz)。
如图通过一个双刀双掷开关选择编程Mega8或者Mega16。
10.测试程序: hello,world && Led
#define F_CPU 16000000
#include <stdio.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/wdt.h>
#include <util/delay.h>
#define BIT _BV
void board_test()
{
DDRC = 0xf0;
wdt_disable();
while(1)
{
_delay_ms(500);
PORTC |= 0xf0;
_delay_ms(500);
PORTC &= 0x0f;
}
}
void init_port()
{
DDRC = 0xf0;
PORTC = 0x00;
DDRD = 0x02;
PORTD = 0x00;
DDRA = 0x00;
DDRB = 0x00;
}
void put_char(char c)
{
while ( !(UCSRA & (1<<UDRE)) ) ;
UDR = c;
}
void init_uart()
{
UCSRB = 0x00;
UCSRA = 0x00;
UCSRC = BIT(URSEL) | 0x06;
UBRRL = 0x67; //set baud rate lo
UBRRH