Purlvin's private Weblog ‹℘›

through the EyE, through the Life

Monthly Archives: August 2005

终于搞定EEPROM了

唉,在我郁闷了多天之后终于,将EEPROM搞定了。这下可以实现掉电也能保存数据。
看来还是之前片的问题,昨天在要到一块百分之二百没有问题的EEPROM后,终于把数据手册上的时序都写出来了。下午,自己又写了几个函数终于实现了随意读写的要求了。心中充满了喜悦啊。
不过,我们的寝室的人都回来了。感觉似乎和他们的沟通还存在一定的问题。总之,现在感觉不太舒服。并且,今天是开学的第一天,所有的老师都换了。英语老师竟然也换了,换了一个更年轻,更漂亮的,不过她的上课却不是很令人欣赏。两节课就是在将单词,一个单元的单词挨个讲过来,又是什么和几个词做比较什么的,感觉似乎又回到了初中时代,真的有点怀念小胖妞了。唉,希望自己能尽快适应新老师的风格吧。

令人郁闷的DS1307

CodeVisionAVR mega8515 MCS-51 compatible head file

好不容易买来一片AVR mega8515的片,立刻就去改学AVR,真是好东西啊。经过一番查找资料和学长的建议,终于认识到CodeVisionAVR C Compiler是编写AVR的好IDE,可惜找来找去都没有找到商业版,只下到了一个1.24的Evaluation。唉,库也不全,不过可以通过安装需要licence的商业版,然后把库拷出来得以解决。但是Evaluation却有2k的代码限制,这才是最郁闷的地方。虽然现在还没有写到那么大的程序,但是一点多个功能一叠加就必定会超过了。一想到这里,心中就很不爽。
唉,算了。多想也无益。自己好不容易又把mega8515的头文件改了一下,可以比较好的符合MCU-51的习惯了,具体如下(在“/**…**/”和“/**…**/”之间的是我自己加的):
// CodeVisionAVR C Compiler
// (C) 1998-2002 Pavel Haiduc, HP InfoTech S.R.L.
// I/O registers definitions for the ATmega8515(L)
#ifndef _MEGA8515_INCLUDED_
#define _MEGA8515_INCLUDED_
#pragma used+
sfrb OSCCAL=4;
sfrb PINE=5;
sfrb DDRE=6;
sfrb PORTE=7;
sfrb ACSR=8;
sfrb UBRRL=9;
sfrb UCSRB=0xa;
sfrb UCSRA=0xb;
sfrb UDR=0xc;
sfrb SPCR=0xd;
sfrb SPSR=0xe;
sfrb SPDR=0xf;
sfrb PIND=0x10;
sfrb DDRD=0x11;
sfrb PORTD=0x12;
sfrb PINC=0x13;
sfrb DDRC=0x14;
sfrb PORTC=0x15;
sfrb PINB=0x16;
sfrb DDRB=0x17;
sfrb PORTB=0x18;
sfrb PINA=0x19;
sfrb DDRA=0x1a;
sfrb PORTA=0x1b;
sfrb EECR=0x1c;
sfrb EEDR=0x1d;
sfrb EEARL=0x1e;
sfrb EEARH=0x1f;
sfrw EEAR=0x1e;   // 16 bit access
sfrb UBRRH=0x20;
sfrb UCSRC=0x20;
sfrb WDTCR=0x21;
sfrb ICR1L=0x24;
sfrb ICR1H=0x25;
sfrw ICR1=0x24;   // 16 bit access
sfrb OCR1BL=0x28;
sfrb OCR1BH=0x29;
sfrw OCR1B=0x28;  // 16 bit access
sfrb OCR1AL=0x2a;
sfrb OCR1AH=0x2b;
sfrw OCR1A=0x2a;  // 16 bit access
sfrb TCNT1L=0x2c;
sfrb TCNT1H=0x2d;
sfrw TCNT1=0x2c;  // 16 bit access
sfrb TCCR1B=0x2e;
sfrb TCCR1A=0x2f;
sfrb SFIOR=0x30;
sfrb OCR0=0x31;
sfrb TCNT0=0x32;
sfrb TCCR0=0x33;
sfrb MCUCSR=0x34;
sfrb MCUCR=0x35;
sfrb EMCUCR=0x36;
sfrb SPMCR=0x37;
sfrb TIFR=0x38;
sfrb TIMSK=0x39;
sfrb GIFR=0x3a;
sfrb GICR=0x3b;
sfrb SPL=0x3d;
sfrb SPH=0x3e;
sfrb SREG=0x3f;
#pragma used-
// Interrupt vectors definitions
#define EXT_INT0 2
#define EXT_INT1 3
#define TIM1_CAPT 4
#define TIM1_COMPA 5
#define TIM1_COMPB 6
#define TIM1_OVF 7
#define TIM0_OVF 8
#define SPI_STC 9
#define USART_RXC 10
#define USART_UDRE 11
#define USART_TXC 12
#define ANA_COMP 13
#define EXT_INT2 14
#define TIM0_COMP 15
#define EE_RDY 16
#define SPM_RDY 17
/***********************************************************************************/
// Data type definitions
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
// MCS-51 Modul definitions
sfrb DP0=0x1a;          //DDRA
sfrb P0=0x1b;           //PORTA
#define P0_0  P0.0
#define P0_1 P0.1
#define P0_2 P0.2
#define P0_3 P0.3
#define P0_4 P0.4
#define P0_5 P0.5
#define P0_6 P0.6
#define P0_7 P0.7
sfrb DP1=0x17;          //DDRB
sfrb P1=0x18;           //PORTB
#define P1_0  P1.0
#define P1_1 P1.1
#define P1_2 P1.2
#define P1_3 P1.3
#define P1_4 P1.4
#define P1_5 P1.5
#define P1_6 P1.6
#define P1_7 P1.7
sfrb DP2=0x14;          //DDRC
sfrb P2=0x15;           //PORTA
#define P2_0  P2.0
#define P2_1 P2.1
#define P2_2 P2.2
#define P2_3 P2.3
#define P2_4 P2.4
#define P2_5 P2.5
#define P2_6 P2.6
#define P2_7 P2.7
sfrb DP3=0x11;          //DDRD
sfrb P3=0x12;           //PORTD
#define P3_0  P3.0
#define P3_1 P3.1
#define P3_2 P3.2
#define P3_3 P3.3
#define P3_4 P3.4
#define P3_5 P3.5
#define P3_6 P3.6
#define P3_7 P3.7
#define RXD  P3.0
#define TXD P3.1
#define INT0 P3.2
#define INT1 P3.3
#define T0 P3.4
#define T1 P3.5
#define WR P3.6
#define RD P3.7
sfrb DP4=6;             //DDRE
sfrb P4=7;              //PORTE
#define P4_0  P4.0
#define P4_1 P4.1
#define P4_2 P4.2
#define EA  P4.0
#define ALE P4.1
#define PSEN P4.2
/***********************************************************************************/
#endif

好不容易买来一片AVR mega8515的片,立刻就去改学AVR,真是好东西啊。经过一番查找资料和学长的建议,终于认识到CodeVisionAVR C Compiler是编写AVR的好IDE,可惜找来找去都没有找到商业版,只下到了一个1.24的Evaluation。唉,库也不全,不过可以通过安装需要licence的商业版,然后把库拷出来得以解决。但是Evaluation却有2k的代码限制,这才是最郁闷的地方。虽然现在还没有写到那么大的程序,但是一点多个功能一叠加就必定会超过了。一想到这里,心中就很不爽。唉,算了。多想也无益。自己好不容易又把mega8515的头文件改了一下,可以比较好的符合MCU-51的习惯了,具体如下(在“/**…**/”和“/**…**/”之间的是我自己加的):// CodeVisionAVR C Compiler// (C) 1998-2002 Pavel Haiduc, HP InfoTech S.R.L.// I/O registers definitions for the ATmega8515(L)#ifndef _MEGA8515_INCLUDED_#define _MEGA8515_INCLUDED_ #pragma used+sfrb OSCCAL=4;sfrb PINE=5;sfrb DDRE=6;sfrb PORTE=7;sfrb ACSR=8;sfrb UBRRL=9;sfrb UCSRB=0xa;sfrb UCSRA=0xb;sfrb UDR=0xc;sfrb SPCR=0xd;sfrb SPSR=0xe;sfrb SPDR=0xf;sfrb PIND=0x10;sfrb DDRD=0x11;sfrb PORTD=0x12;sfrb PINC=0x13;sfrb DDRC=0x14;sfrb PORTC=0x15;sfrb PINB=0x16;sfrb DDRB=0x17;sfrb PORTB=0x18;sfrb PINA=0x19;sfrb DDRA=0x1a;sfrb PORTA=0x1b;sfrb EECR=0x1c;sfrb EEDR=0x1d;sfrb EEARL=0x1e;sfrb EEARH=0x1f;sfrw EEAR=0x1e;   // 16 bit accesssfrb UBRRH=0x20;sfrb UCSRC=0x20;sfrb WDTCR=0x21;sfrb ICR1L=0x24;sfrb ICR1H=0x25;sfrw ICR1=0x24;   // 16 bit accesssfrb OCR1BL=0x28;sfrb OCR1BH=0x29;sfrw OCR1B=0x28;  // 16 bit accesssfrb OCR1AL=0x2a;sfrb OCR1AH=0x2b;sfrw OCR1A=0x2a;  // 16 bit accesssfrb TCNT1L=0x2c;sfrb TCNT1H=0x2d;sfrw TCNT1=0x2c;  // 16 bit accesssfrb TCCR1B=0x2e;sfrb TCCR1A=0x2f;sfrb SFIOR=0x30;sfrb OCR0=0x31;sfrb TCNT0=0x32;sfrb TCCR0=0x33;sfrb MCUCSR=0x34;sfrb MCUCR=0x35;sfrb EMCUCR=0x36;sfrb SPMCR=0x37;sfrb TIFR=0x38;sfrb TIMSK=0x39;sfrb GIFR=0x3a;sfrb GICR=0x3b;sfrb SPL=0x3d;sfrb SPH=0x3e;sfrb SREG=0x3f;#pragma used-// Interrupt vectors definitions#define EXT_INT0 2#define EXT_INT1 3#define TIM1_CAPT 4#define TIM1_COMPA 5#define TIM1_COMPB 6#define TIM1_OVF 7#define TIM0_OVF 8#define SPI_STC 9#define USART_RXC 10#define USART_UDRE 11#define USART_TXC 12#define ANA_COMP 13#define EXT_INT2 14#define TIM0_COMP 15#define EE_RDY 16#define SPM_RDY 17/***********************************************************************************/// Data type definitions#define uchar unsigned char#define uint unsigned int #define ulong unsigned long// MCS-51 Modul definitionssfrb DP0=0x1a;          //DDRAsfrb P0=0x1b;           //PORTA#define P0_0  P0.0#define P0_1 P0.1#define P0_2 P0.2#define P0_3 P0.3#define P0_4 P0.4#define P0_5 P0.5#define P0_6 P0.6#define P0_7 P0.7sfrb DP1=0x17;          //DDRBsfrb P1=0x18;           //PORTB#define P1_0  P1.0#define P1_1 P1.1#define P1_2 P1.2#define P1_3 P1.3#define P1_4 P1.4#define P1_5 P1.5#define P1_6 P1.6#define P1_7 P1.7sfrb DP2=0x14;          //DDRCsfrb P2=0x15;           //PORTA#define P2_0  P2.0#define P2_1 P2.1#define P2_2 P2.2#define P2_3 P2.3#define P2_4 P2.4#define P2_5 P2.5#define P2_6 P2.6#define P2_7 P2.7sfrb DP3=0x11;          //DDRDsfrb P3=0x12;           //PORTD#define P3_0  P3.0#define P3_1 P3.1#define P3_2 P3.2#define P3_3 P3.3#define P3_4 P3.4#define P3_5 P3.5#define P3_6 P3.6#define P3_7 P3.7#define RXD  P3.0#define TXD P3.1#define INT0 P3.2#define INT1 P3.3#define T0 P3.4#define T1 P3.5#define WR P3.6#define RD P3.7sfrb DP4=6;             //DDREsfrb P4=7;              //PORTE#define P4_0  P4.0#define P4_1 P4.1#define P4_2 P4.2#define EA  P4.0#define ALE P4.1#define PSEN P4.2                                                                /***********************************************************************************/#endif

DDS(DDFS,Direct Digital Frequency Synthesize)直接数字频率合成技术

DDS(DDFS,Direct Digital Frequency Synthesize)直接数字频率合成技术
DDS技术应用于FPGA实现正弦波(周期信号)的产生:
一.系统参数
单周期的数据量:1024(2^10)
地址长度(Addr):2^24
时钟频率(Fosca):33.68MHz
系统频率(Fsys):时钟频率(Fosca)2分频,近似得到2^24Hz
精度(Fprec):33.68MHz/2/2^24≈1Hz
ROM地址:ADDR^23.. ADDR ^14,10根地址线
单周期最少数据量(DATAmin):32
最大频率(Fmax):2^24/32=524,288Hz
频率范围:1Hz~524,288Hz
二.系统框图
见图片
三.参数设定
1.设定步进频率(Fstep),实现波形的实际频率(Fwav)的改变。步进频率(Fstep)的长度由最大频率(Fmax)所决定。此时的最大频率(Fmax)为2^14,所以步进频率(Fstep)最小取14根地址线。
2.设定初相位(Phase),改变信号间的相位差。初相位(Phase)的长度取决于波形的实际频率(Fwav)的最大值。此时波形的实际频率(Fwav)的最大值等于最大频率(Fmax)为2^14,所以初相位(Phase)最小取14根地址线。
四.说明
1.  1。DDS所能达到的精度由系统频率(Fsys)和地址长度(Addr)所决定:Fstep=Fsys/Addr≈2^24/2^24=1
2.  2。DDS所能达到的最大频率由系统频率(Fsys)和单周期最少数据量(DATAmin)所决定:Fmax=Fsys/DATAmin
3. 3。 波形的实际频率(Fwav)为设定的步进频率(Fstep)与精度(Fprec)的积,即Fwav=Fstep*Fprec。此时精度为1Hz,所以最终的波形的实际频率就等于设定的步进频率。
4. 4。 初相位(Phase)的设定值为要求的波形相位差(deltaPHASE)除以360(如果相位差为角度制)乘以地址长度(ADDR)除以步进频率(Fstep),即Phase=deltaPHASE/360*(Addr/Fstep)。此时地址长度(Addr)为2^24,所以需要设定的初相位值为:Phase=deltaPHASE/360*(2^24/Fstep)。
5. 5。 DDS的精度和最大频率同存储的单周期数据量没有直接的关系,但似乎波形的显示效果似乎有一定差异。但无论如何也要保证单周期最少数据量(DATAmin)。

DDS(DDFS,Direct Digital Frequency Synthesize)直接数字频率合成技术
DDS技术应用于FPGA实现正弦波(周期信号)的产生:

一.系统参数
单周期的数据量:1024(2^10)
地址长度(Addr):2^24
时钟频率(Fosca):33.68MHz
系统频率(Fsys):时钟频率(Fosca)2分频,近似得到2^24Hz
精度(Fprec):33.68MHz/2/2^24≈1Hz
ROM地址:ADDR^23.. ADDR ^14,10根地址线
单周期最少数据量(DATAmin):32
最大频率(Fmax):2^24/32=524,288Hz
频率范围:1Hz~524,288Hz

二.系统框图

见图片

三.参数设定
1.设定步进频率(Fstep),实现波形的实际频率(Fwav)的改变。步进频率(Fstep)的长度由最大频率(Fmax)所决定。此时的最大频率(Fmax)为2^14,所以步进频率(Fstep)最小取14根地址线。

2.设定初相位(Phase),改变信号间的相位差。初相位(Phase)的长度取决于波形的实际频率(Fwav)的最大值。此时波形的实际频率(Fwav)的最大值等于最大频率(Fmax)为2^14,所以初相位(Phase)最小取14根地址线。

四.说明
1.  1。DDS所能达到的精度由系统频率(Fsys)和地址长度(Addr)所决定:Fstep=Fsys/Addr≈2^24/2^24=1

2.  2。DDS所能达到的最大频率由系统频率(Fsys)和单周期最少数据量(DATAmin)所决定:Fmax=Fsys/DATAmin
3. 3。 波形的实际频率(Fwav)为设定的步进频率(Fstep)与精度(Fprec)的积,即Fwav=Fstep*Fprec。此时精度为1Hz,所以最终的波形的实际频率就等于设定的步进频率。

4. 4。 初相位(Phase)的设定值为要求的波形相位差(deltaPHASE)除以360(如果相位差为角度制)乘以地址长度(ADDR)除以步进频率(Fstep),即Phase=deltaPHASE/360*(Addr/Fstep)。此时地址长度(Addr)为2^24,所以需要设定的初相位值为:Phase=deltaPHASE/360*(2^24/Fstep)。

5. 5。 DDS的精度和最大频率同存储的单周期数据量没有直接的关系,但似乎波形的显示效果似乎有一定差异。但无论如何也要保证单周期最少数据量(DATAmin)。

郁闷啊

上午,刚决定好好做人,不再玩了。谁知一个不留神又把系统引导文件ntlbr给误删了。
晕啊,又是一个下午浪费了。
先是用优盘启动,结果失败。后来,等到吃晚饭回去那了一张软盘启动,但由于系统盘让我格成了ntfs格式,dos还不认,晕啊。
最后,我放弃了。准备格式化了,但在看到选项时,刹那间选择了修复,结果用系统安装盘竟然能访问nfts格式的硬盘了,真又绝处逢生的感觉,但是到了dos下发现竟然连cd。。的命令都报错,又是一惊啊。最后,不关那么多了,拷来ntlbr文件打出copy a:ntlbr c:.竟然没有出错,太好了!
立刻重启,并且充满自信地将coms里的启动改成了hdd0,果然能进去了。但是,原本想进longhorn的发现竟然进不去了。无所谓了,又xp就好了。对了,我明白为什么进不去longhorn了,ntlbr应该是nt内核的引导文件,我是从一台只有xp的机器上拷来的,所以没有相应的longhorn的引导。
罢了,没有longhorn也无所谓,等到出正式版再说吧。