shawn_bu 发表于 2013-6-22 13:46:27

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,不知道哪个天线应该接那种?
最后贴两张正反面图(点击查看大图):



编辑原因,修正错误图片。

shawn_bu 发表于 2013-6-22 14:11:08

上传几个相关芯片的文档,


shawn_bu 发表于 2013-6-22 14:24:34

修正,JP2左下角第一个也是VCC 5V+,不是NC。刚对了一下其他网友量的脚,发现这个问题。

XUEPENGBIN 发表于 2013-6-22 14:24:41

开始我也怀疑过。。不过 我用笔记本就可以下载。。用我的台式机 win7 64 位 偶尔成功过。。。回去试试 全拆了看看

shawn_bu 发表于 2013-6-22 14:27:11

XUEPENGBIN 发表于 2013-6-22 14:24 static/image/common/back.gif
开始我也怀疑过。。不过 我用笔记本就可以下载。。用我的台式机 win7 64 位 偶尔成功过。。。回去试试 全拆 ...

我一直下载不成功,读熔丝有时也报错。所以怀疑是这里问题。这部分电路你知道是做什么用途的么?

shawn_bu 发表于 2013-6-22 14:28:26

XUEPENGBIN 发表于 2013-6-22 14:24 static/image/common/back.gif
开始我也怀疑过。。不过 我用笔记本就可以下载。。用我的台式机 win7 64 位 偶尔成功过。。。回去试试 全拆 ...

我用的正是win7 64位,笔记本。难道跟操作系统还有关系。奇怪。。。。

XUEPENGBIN 发表于 2013-6-22 14:32:56

本帖最后由 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 不稳定。。。郁闷了

shawn_bu 发表于 2013-6-22 14:40:43

XUEPENGBIN 发表于 2013-6-22 14:32 static/image/common/back.gif
我换到我的WINXP 笔记本上 就可以。。不过后来 isp软件就打不开了 说是中病毒了 杀毒 再重装软件 ,,, ...

不知道是不是win7的问题,我现在把RESET那部分电路拆了下载几次都OK。对了,你知道CC2420那边该接什么样的天线不?我还没捣鼓过这个。呵呵。

XUEPENGBIN 发表于 2013-6-22 14:47:42

shawn_bu 发表于 2013-6-22 14:40 static/image/common/back.gif
不知道是不是win7的问题,我现在把RESET那部分电路拆了下载几次都OK。对了,你知道CC2420那边该接什么样 ...

找个 cc1110 的类似的天线 或者用铜丝仿着做一个应该可以用的。。。就是效果没有专业的好罢了。。。

skynet 发表于 2013-6-22 14:52:09

天线不用接,如果只是测试,你把2片板并排放在一起就可以了

shawn_bu 发表于 2013-6-22 15:15:24

skynet 发表于 2013-6-22 14:52 static/image/common/back.gif
天线不用接,如果只是测试,你把2片板并排放在一起就可以了

多谢懒洋洋回复!{:smile:} ,,另外请教一下您知道下图红框中的电路是做什么的么?原理图如下。NR96这个元件看起来像是一个三极管,我也没用过,google也找不到是啥东东。这部分电路影响ISP下载。奇怪的很。

07071624 发表于 2013-6-22 16:23:29

不错不错嘛

xinhoujue 发表于 2013-6-22 16:28:06

shawn_bu 发表于 2013-6-22 15:15 static/image/common/back.gif
多谢懒洋洋回复! ,,另外请教一下您知道下图红框中的电路是做什么的么?原理图如下。NR96这个 ...

如果我没说错,这个电路应该是个[复位]电路!

饭桶 发表于 2013-6-22 16:37:49

这个IC应该是电压监测IC

pcwinner 发表于 2013-6-22 17:31:37

复位IC,我买了十片今天下午才到货呢。。。。。。。。。
不过现在还没空玩这个東西

flashria 发表于 2013-6-22 21:21:16

我找到一个cc2420的库不知道能不能用
https://github.com/contiki/contiki-arduino-2.2/blob/master/core/dev/cc2420.c

shawn_bu 发表于 2013-6-22 21:27:44

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

SNOOKER 发表于 2013-6-22 21:57:45

shawn_bu 发表于 2013-6-22 15:15 static/image/common/back.gif
多谢懒洋洋回复! ,,另外请教一下您知道下图红框中的电路是做什么的么?原理图如下。NR96这个 ...

应该是MAX809之类的复位电路。
这板子哪来的?

shawn_bu 发表于 2013-6-22 22:11:44

SNOOKER 发表于 2013-6-22 21:57 static/image/common/back.gif
应该是MAX809之类的复位电路。
这板子哪来的?

多谢回复!小板是上次网友出的,http://www.amobbs.com/forum.php?mod=viewthread&tid=5539030 。

鼎昇科技 发表于 2013-6-23 09:53:14

拆下芯片用ASP读出熔丝位

shawn_bu 发表于 2013-6-23 10:14:49

鼎昇科技 发表于 2013-6-23 09:53 static/image/common/back.gif
拆下芯片用ASP读出熔丝位

可以直接读取和写入熔丝的,为什么要拆下芯片呢?

鼎昇科技 发表于 2013-6-23 11:35:15

shawn_bu 发表于 2013-6-23 10:14 static/image/common/back.gif
可以直接读取和写入熔丝的,为什么要拆下芯片呢?

USBASP + 烧录座
之前为了测试下ISP功能有没有被禁止。

XUEPENGBIN 发表于 2013-6-23 12:51:48

有没有人测试出来 拨特率。。。

flashria 发表于 2013-6-25 09:52:29

哥们 cc2420搞定了吗?

shawn_bu 发表于 2013-6-25 10:09:07

flashria 发表于 2013-6-25 09:52 static/image/common/back.gif
哥们 cc2420搞定了吗?

还没,这几天比较忙。没时间捣鼓。

flashria 发表于 2013-6-26 15:46:57

shawn_bu 发表于 2013-6-25 10:09 static/image/common/back.gif
还没,这几天比较忙。没时间捣鼓。


我的熔丝位读取   不过flash和eeprom全写满了不知道为什么还不一样

flashria 发表于 2013-6-27 21:56:35

Atmega8l+SPX3232+CC2420小板烧录arduino成功   我没有碰到你说的复位电路影响烧录的问题

http://www.amobbs.com/thread-5540173-1-1.html

shawn_bu 发表于 2013-6-28 11:37:46

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系统看看。

shawn_bu 发表于 2013-6-28 11:39:07

flashria 发表于 2013-6-27 21:56 static/image/common/back.gif
Atmega8l+SPX3232+CC2420小板烧录arduino成功   我没有碰到你说的复位电路影响烧录的问题

http://www.amob ...

Atmega8用arduino的IDE有点蛋疼啊,貌似写不了多少程序。哈哈。。。

flashria 发表于 2013-6-28 21:46:31

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]
查看完整版本: Atmega8l+SPX3232+CC2420小板亮灯成功(附部分原理图)