Synergia AVR 0.1

transmiter/firmware/main.cpp

Go to the documentation of this file.
00001 /* Project info here */
00002 
00003 #include <avr/io.h>
00004 #include <avr/interrupt.h>
00005 #include <util/delay.h>
00006 
00007 #include "usart.h"
00008 
00009 #define SCK  1 // PB1
00010 #define SDO  2 // PB2
00011 #define SDI  3 // PB3
00012 #define CS   0 // PB0 (NSEL, PB4)
00013 
00014 #define NIRQ 0 // PD0
00015 
00016 #define HI(x) PORTB |= (1<<(x))
00017 #define LO(x) PORTB &= ~(1<<(x))
00018 #define WAIT_NIRQ_LOW() while(PIND & (1<<NIRQ))
00019 
00020 USART0(usb);
00021 
00022 void portInit(){
00023         HI(CS);
00024         HI(SDI);
00025         LO(SCK);
00026         DDRB = (1<<CS)|(1<<SDI)|(1<<SCK);
00027         DDRD = 0;
00028 }
00029 
00030 unsigned int writeCmd(unsigned int cmd){
00031         unsigned char i;
00032         unsigned int recv;
00033         recv = 0;
00034         LO(SCK);
00035         LO(CS);
00036         for(i=0; i<16; i++){
00037                 if(cmd & 0x8000) HI(SDI);
00038                 else LO(SDI);
00039             HI(SCK);
00040                 recv <<= 1;
00041                 if(PINB & (1<<SDO)){
00042                         recv |= 0x0001;
00043                 }
00044                 
00045                 LO(SCK);
00046                 cmd <<= 1;
00047         }
00048         HI(CS);
00049         return recv;
00050 }
00051 
00052 void rfInit(){
00053         writeCmd(0x80E7); // EL,EF,868band,12.0pF 
00054         writeCmd(0x8239); // !er,!ebb,ET,ES,EX,!eb,!ew,DC 
00055         writeCmd(0xA640); // frequency select 
00056         writeCmd(0xC647); // 4.8kbps 
00057         writeCmd(0x94A0); // VDI,FAST,134kHz,0dBm,-103dBm 
00058         writeCmd(0xC2AC); // AL,!ml,DIG,DQD4 
00059         writeCmd(0xCA81); // FIFO8,SYNC,!ff,DR 
00060         writeCmd(0xCED4); // SYNC=2DD4AG 
00061         writeCmd(0xC483); // @PWR,NO RSTRIC,!st,!fi,OE,EN 
00062         writeCmd(0x9850); // !mp,90kHz,MAX OUT 
00063         writeCmd(0xCC17); // OB1ACOB0, LPX,Iddy,CDDIT,CBW0 
00064         writeCmd(0xE000); // NOT USED 
00065         writeCmd(0xC800); // NOT USED 
00066         writeCmd(0xC040); // 1.66MHz,2.2V
00067 }
00068 
00069 void rfSend(unsigned char data){
00070         WAIT_NIRQ_LOW();
00071         writeCmd(0xB800 + data);
00072 }
00073 
00074 void rfSendPackage(){
00075         usb << "SENDING PACKAGE\n\r";
00076         writeCmd(0x0000);
00077         rfSend(0xAA); // PREAMBLE
00078         rfSend(0xAA); // PREAMBLE
00079         rfSend(0xAA); // PREAMBLE
00080         rfSend(0x2D); // SYNC
00081         rfSend(0xD4);
00082         
00083         // send 16 bytes package
00084         for(int i=0; i<16; i++){
00085                 rfSend(0x30 + i);
00086         }
00087         
00088         rfSend(0xAA); // DUMMY
00089         rfSend(0xAA); // DUMMY
00090         rfSend(0xAA); // DUMMY
00091 }
00092 
00093 int main(){
00094         sei();
00095         asm("cli");
00096         _delay_ms(1000);
00097         
00098         usb << "ALL SYSTEMS GO\n\r";
00099         
00100         portInit();
00101         rfInit(); 
00102         
00103         while(1){
00104                 usb << "USART TEST\n\r";
00105                 rfSendPackage();
00106                 _delay_ms(1000);
00107         }
00108         
00109 }
00110 
00111 
00112 
00113 
00114 
00115 
00116 
00117 
00118 
00119 
00120 
00121 
00122 
 All Classes Files Functions Variables Defines