Atmega8l+SPX3232+CC2420小板亮灯成功(附部分原理图)
本帖最后由 shawn_bu 于 2013-6-22 14:37 编辑前几天收的Atmega8l+SPX3232+CC2420小板,今天捣鼓了一下。点亮了上面那个指示灯。{:lol:}
测量到的接口如下。JP1其实就是ISP下载口,非常方便{:lol:} 。左上方两个是RS232电平的串口,左下角第二个是VCC,经过ASM1117-3.3稳压后给系统供电。JP1里面那个VCC估计不能直接接下载线的VCC,不然如果是4.5v会烧坏CC2420(猜测,我没这么接过)。
刚开始下载一直不成功,提示flash地址00处校验错误。我把接在Atmega8 RESET引脚上的电路部分元件都拆掉就好了(如下图红框里)。哪位高手知道红框中的电路是干嘛的?貌似会影响ISP下载程序。
图中三个脚的元件上面印的是NR96,是啥东东?
拆掉后能正常下载
附上我手动画的部分电路图(高手勿笑)
PB0接的是指示灯,下面是简单的亮灯测试程序
//包含所需头文件
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
/*------宏定义------*/
#define uchar unsigned char
#define uint unsigned int
#define BIT(x) (1<<(x))
#define NOP() asm("nop")
#define WDR() asm("wdr")
//端口初始化
void port_init(void)
{
PORTB = 0x01;
DDRB= 0x01;
PORTC = 0x00;
DDRC= 0x00;
PORTD = 0x00;
DDRD= 0x00;
}
void init_devices(void)
{
cli(); //禁止所有中断
MCUCR= 0x00;
MCUCSR = 0x80;//禁止JTAG
GICR = 0x00;
port_init();
sei();//开全局中断
}
//主函数
int main(void)
{
init_devices();
//在这继续添加你的代码
while(1)
{
NOP();
}
return 0;
}
下面试试能否驱动CC2420,不知道哪个天线应该接那种?
最后贴两张正反面图(点击查看大图):
编辑原因,修正错误图片。 上传几个相关芯片的文档,
修正,JP2左下角第一个也是VCC 5V+,不是NC。刚对了一下其他网友量的脚,发现这个问题。 开始我也怀疑过。。不过 我用笔记本就可以下载。。用我的台式机 win7 64 位 偶尔成功过。。。回去试试 全拆了看看 XUEPENGBIN 发表于 2013-6-22 14:24 static/image/common/back.gif
开始我也怀疑过。。不过 我用笔记本就可以下载。。用我的台式机 win7 64 位 偶尔成功过。。。回去试试 全拆 ...
我一直下载不成功,读熔丝有时也报错。所以怀疑是这里问题。这部分电路你知道是做什么用途的么? XUEPENGBIN 发表于 2013-6-22 14:24 static/image/common/back.gif
开始我也怀疑过。。不过 我用笔记本就可以下载。。用我的台式机 win7 64 位 偶尔成功过。。。回去试试 全拆 ...
我用的正是win7 64位,笔记本。难道跟操作系统还有关系。奇怪。。。。 本帖最后由 XUEPENGBIN 于 2013-6-22 14:34 编辑
shawn_bu 发表于 2013-6-22 14:28 static/image/common/back.gif
我用的正是win7 64位,笔记本。难道跟操作系统还有关系。奇怪。。。。
我换到我的WINXP 笔记本上 就可以。。不过后来 isp软件就打不开了 说是中病毒了 杀毒 再重装软件 ,,,郁闷死了。。串口也调试通了。。CC242O 了
WIN64下经常下到一半就出错。。用 ISP 1.4 的提示 USB 连接错误。。。不知道是不是 WIN 7 64 下边USB 不稳定。。。郁闷了 XUEPENGBIN 发表于 2013-6-22 14:32 static/image/common/back.gif
我换到我的WINXP 笔记本上 就可以。。不过后来 isp软件就打不开了 说是中病毒了 杀毒 再重装软件 ,,, ...
不知道是不是win7的问题,我现在把RESET那部分电路拆了下载几次都OK。对了,你知道CC2420那边该接什么样的天线不?我还没捣鼓过这个。呵呵。 shawn_bu 发表于 2013-6-22 14:40 static/image/common/back.gif
不知道是不是win7的问题,我现在把RESET那部分电路拆了下载几次都OK。对了,你知道CC2420那边该接什么样 ...
找个 cc1110 的类似的天线 或者用铜丝仿着做一个应该可以用的。。。就是效果没有专业的好罢了。。。 天线不用接,如果只是测试,你把2片板并排放在一起就可以了 skynet 发表于 2013-6-22 14:52 static/image/common/back.gif
天线不用接,如果只是测试,你把2片板并排放在一起就可以了
多谢懒洋洋回复!{:smile:} ,,另外请教一下您知道下图红框中的电路是做什么的么?原理图如下。NR96这个元件看起来像是一个三极管,我也没用过,google也找不到是啥东东。这部分电路影响ISP下载。奇怪的很。
不错不错嘛 shawn_bu 发表于 2013-6-22 15:15 static/image/common/back.gif
多谢懒洋洋回复! ,,另外请教一下您知道下图红框中的电路是做什么的么?原理图如下。NR96这个 ...
如果我没说错,这个电路应该是个[复位]电路! 这个IC应该是电压监测IC 复位IC,我买了十片今天下午才到货呢。。。。。。。。。
不过现在还没空玩这个東西 我找到一个cc2420的库不知道能不能用
https://github.com/contiki/contiki-arduino-2.2/blob/master/core/dev/cc2420.c flashria 发表于 2013-6-22 21:21 static/image/common/back.gif
我找到一个cc2420的库不知道能不能用
https://github.com/contiki/contiki-arduino-2.2/blob/master/core ...
回头试试,这边也有一个CC2420的帖子可以参考,http://www.amobbs.com/thread-1859284-1-1.html shawn_bu 发表于 2013-6-22 15:15 static/image/common/back.gif
多谢懒洋洋回复! ,,另外请教一下您知道下图红框中的电路是做什么的么?原理图如下。NR96这个 ...
应该是MAX809之类的复位电路。
这板子哪来的? SNOOKER 发表于 2013-6-22 21:57 static/image/common/back.gif
应该是MAX809之类的复位电路。
这板子哪来的?
多谢回复!小板是上次网友出的,http://www.amobbs.com/forum.php?mod=viewthread&tid=5539030 。 拆下芯片用ASP读出熔丝位
鼎昇科技 发表于 2013-6-23 09:53 static/image/common/back.gif
拆下芯片用ASP读出熔丝位
可以直接读取和写入熔丝的,为什么要拆下芯片呢? shawn_bu 发表于 2013-6-23 10:14 static/image/common/back.gif
可以直接读取和写入熔丝的,为什么要拆下芯片呢?
USBASP + 烧录座
之前为了测试下ISP功能有没有被禁止。
有没有人测试出来 拨特率。。。 哥们 cc2420搞定了吗? flashria 发表于 2013-6-25 09:52 static/image/common/back.gif
哥们 cc2420搞定了吗?
还没,这几天比较忙。没时间捣鼓。 shawn_bu 发表于 2013-6-25 10:09 static/image/common/back.gif
还没,这几天比较忙。没时间捣鼓。
我的熔丝位读取 不过flash和eeprom全写满了不知道为什么还不一样 Atmega8l+SPX3232+CC2420小板烧录arduino成功 我没有碰到你说的复位电路影响烧录的问题
http://www.amobbs.com/thread-5540173-1-1.html flashria 发表于 2013-6-27 21:56 static/image/common/back.gif
Atmega8l+SPX3232+CC2420小板烧录arduino成功 我没有碰到你说的复位电路影响烧录的问题
http://www.amob ...
复位影响的问题可能跟操作系统有关,我用的是64位的win7。XP下面估计没这个问题,上面一位网友也有win7 64位下面烧录的问题。奇怪ing,我下次换XP系统看看。 flashria 发表于 2013-6-27 21:56 static/image/common/back.gif
Atmega8l+SPX3232+CC2420小板烧录arduino成功 我没有碰到你说的复位电路影响烧录的问题
http://www.amob ...
Atmega8用arduino的IDE有点蛋疼啊,貌似写不了多少程序。哈哈。。。 shawn_bu 发表于 2013-6-28 11:39 static/image/common/back.gif
Atmega8用arduino的IDE有点蛋疼啊,貌似写不了多少程序。哈哈。。。
SPI读操作代码
uint8 SPI_Read(void)
{
uint8 i,rxdata;
rxdata = 0x00;
for (i = 0;i < 8;i++)
{
rxdata = rxdata<<1;
SCLK_ON();
if (MISO_IN)
{
rxdata |= 0x01;
}
else
{
rxdata &= ~0x01;
}
SCLK_OFF();
}
return rxdata;
}
SPI写操作代码
void SPI_Write(uint8 txdata)
{
uint8 i;
for (i = 0;i < 8;i++)
{
if (txdata&0x80)
{
MOSI_ON();
}
else
{
MOSI_OFF();
}
SCLK_ON();
txdata = txdata<<1;
SCLK_OFF();
}
}
CC2420配置寄存器读操作
uint16 CC2420_ReadReg(uint8 addr)
{
uint16 value;
CSN_OFF();
SPI_Write(addr|REG_READ);
value = SPI_Word_Read();
CSN_ON();
return value;
}
CC2420配置寄存器写操作
void CC2420_WriteReg(uint8 addr, uint16 value)
{
CSN_OFF();
SPI_Write(addr|REG_WRITE);
SPI_Word_Write(value);
CSN_ON();
}
CC2420 RAM读操作
uint8 CC2420_RAM_Read(uint8 addr,uint8 block)
{
uint8 value;
CSN_OFF();
SPI_Write(addr|RAM);
SPI_Write((block<<6)|RAM_READ);
value = SPI_Read();
CSN_ON();
return value;
}
CC2420 RAM写操作
void CC2420_RAM_Write(uint8 addr,uint8 block, uint8 value)
{
CSN_OFF();
SPI_Write(addr|RAM);
SPI_Write((block<<6)|RAM_WRITE);
SPI_Write(value);
CSN_ON();
}
CC2420初始化
void CC2420_Init(void)
{
RESET_OFF();
delay_ms(10);
RESET_ON();
delay_ms(10);
CC2420_Command(CMD_SXOSCON);
delay_ms(10);
CC2420_PSDU[ 1 ] =
(PAN_ID_COMPRESSION<<6)|(ACKNOWLEDGMENT_REQUEST<<5)|
(FRAME_PENDING<<4)|(SECURITY_ENABLE<<3)|(FRAME_TYPE_DATA<<0);
CC2420_PSDU[ 2 ] =
(SOURCE_ADDRESSING_MODE<<6)|(FRAME_VERSION<<4)|
(DEST_ADDRESSING_MODE<<2);
CC2420_PSDU[ 3 ] = SEQUENCE_NUMBER;
CC2420_PSDU[ 4 ] = CC2420_Destination_PANID;
CC2420_PSDU[ 5 ] = CC2420_Destination_PANID;
CC2420_PSDU[ 6 ] = CC2420_Destination_IEEEAddr;
CC2420_PSDU[ 7 ] = CC2420_Destination_IEEEAddr;
CC2420_PSDU[ 8 ] = CC2420_Destination_IEEEAddr;
CC2420_PSDU[ 9 ] = CC2420_Destination_IEEEAddr;
CC2420_PSDU = CC2420_Destination_IEEEAddr;
CC2420_PSDU = CC2420_Destination_IEEEAddr;
CC2420_PSDU = CC2420_Destination_IEEEAddr;
CC2420_PSDU = CC2420_Destination_IEEEAddr;
CC2420_PSDU = CC2420_Source_PANID;
CC2420_PSDU = CC2420_Source_PANID;
CC2420_RAM_Write(RAM_PANID, 2, CC2420_Source_PANID);
CC2420_RAM_Write(RAM_PANID+1, 2, CC2420_Source_PANID);
CC2420_PSDU = CC2420_Source_IEEEAddr;
CC2420_PSDU = CC2420_Source_IEEEAddr;
CC2420_PSDU = CC2420_Source_IEEEAddr;
CC2420_PSDU = CC2420_Source_IEEEAddr;
CC2420_PSDU = CC2420_Source_IEEEAddr;
CC2420_PSDU = CC2420_Source_IEEEAddr;
CC2420_PSDU = CC2420_Source_IEEEAddr;
CC2420_PSDU = CC2420_Source_IEEEAddr;
CC2420_RAM_Write(RAM_IEEEADR, 2, CC2420_Source_IEEEAddr);
CC2420_RAM_Write(RAM_IEEEADR+1, 2, CC2420_Source_IEEEAddr);
CC2420_RAM_Write(RAM_IEEEADR+2, 2, CC2420_Source_IEEEAddr);
CC2420_RAM_Write(RAM_IEEEADR+3, 2, CC2420_Source_IEEEAddr);
CC2420_RAM_Write(RAM_IEEEADR+4, 2, CC2420_Source_IEEEAddr);
CC2420_RAM_Write(RAM_IEEEADR+5, 2, CC2420_Source_IEEEAddr);
CC2420_RAM_Write(RAM_IEEEADR+6, 2, CC2420_Source_IEEEAddr);
CC2420_RAM_Write(RAM_IEEEADR+7, 2, CC2420_Source_IEEEAddr);
CC2420_WriteReg(REG_MDMCTRL0, CCA_HYST|CCA_MODE|PREAMBLE_LENGTH|AUTOCRC|ADR_DECODE);
CC2420_WriteReg(REG_SYNCWORD,SYNCWORD);
CC2420_WriteReg(REG_SECCTRL0,0);
CSN_OFF();
SPI_Write(REG_RXFIFO|REG_READ);
SPI_Read();
CSN_ON();
CC2420_Command(CMD_SFLUSHRX);
CC2420_Command(CMD_SFLUSHTX);
delay_ms(10);
}
CC2420 FIFO发送流程
FIFO写数据操作
void CC2420_WriteTXFIFO(void)
{
uint8 i;
CC2420_Command(CMD_SFLUSHTX);
CSN_OFF();
SPI_Write(REG_TXFIFO|REG_WRITE);
SPI_Write(CC2420_PSDU);
for(i=0;i
{
SPI_Write(CC2420_PSDU);
}
CSN_ON();
}
FIFO数据发送操作
void CC2420_TxPacket(void)
{
CC2420_Command(CMD_SRFOFF);
CC2420_Command(CMD_STXON);
while(!SFD_IN);
while(SFD_IN);
}
CC2420 FIFO接收流程
接收模式设置
void CC2420_SetRxMode(void)
{
CC2420_Command(CMD_SRFOFF);
CC2420_Command(CMD_SRXON);
}
FIFO接收数据
uint8 CC2420_RxPacket(void)
{
if((!SFD_IN)&&(FIFO_IN))
{
return TRUE;
}
return FALSE;
}
收到数据后读取FIFO数据
void CC2420_ReadRXFIFO(void)
{
uint8 i;
CSN_OFF();
SPI_Write(REG_RXFIFO|REG_READ);
CC2420_PSDU = SPI_Read();
for(i=0;i
{
CC2420_PSDU = SPI_Read();
}
CSN_ON();
CC2420_Command(CMD_SFLUSHRX);}cc2420的资料
页:
[1]