Kann ich nicht sagen, hab ich noch nicht gemacht.
Die Initialisierungssequenzen kannst Du aber auch von unserer Modellflieger- Page runterladen.
http://www.toeging.lednet.de/flieger...telemetrie.htm
Der Code ist zwar in "C" , sollte aber mit der SPI von Bascom auch gehen.
Code Sender:
Zum senden muss dann noch das entsprechende Kommando kommen:Code:// Das Sendemodul RFM 02 initialisieren void init_rfm02(void) { volatile unsigned char uc_frequ[2]; /* Frequenz tuningword */ uc_frequ[1]=ui_frequ[uc_kanal]/256; uc_frequ[1]|=0b10100000; uc_frequ[0]=ui_frequ[uc_kanal]%256; /* Configuration Setting: 433MHz, CLK 5MHz, 11,5pf Kapaz., +/-60kHz */ #asm ("cbi portb,nsel"); sendbyte(0b10001110); sendbyte(0b01100000); #asm ("sbi portb,nsel"); #asm ("nop"); /* Frequency Setting: eingestellter Kanal*/ #asm ("cbi portb,nsel"); sendbyte(uc_frequ[1]); sendbyte(uc_frequ[0]); #asm ("sbi portb,nsel"); #asm ("nop"); /* Output Power Command: Max Power */ #asm ("cbi portb,nsel"); sendbyte(0b10110000); #asm ("sbi portb,nsel"); #asm ("nop"); /* Data Rate Command: 2400 bit/s */ #asm ("cbi portb,nsel"); sendbyte(0b11001000); sendbyte(0b10001111); #asm ("sbi portb,nsel"); #asm ("nop"); /* Low Batt + Sync Command: enable Sync Circuit */ #asm ("cbi portb,nsel"); sendbyte(0b11000010); sendbyte(0b00100000); #asm ("sbi portb,nsel"); #asm ("nop"); /* PLL Setting Command: 0xD240 up to 19,2kbit/s*/ #asm ("cbi portb,nsel"); sendbyte(0b11010010); sendbyte(0b01000000); #asm ("sbi portb,nsel"); #asm ("nop"); /* Power Managment Command= Enable Clock; disable Synthesizer; disable pow. Ampl. */ #asm ("cbi portb,nsel"); sendbyte(0b11000000); sendbyte(0b00100000); #asm ("sbi portb,nsel"); }
Code:/* Power Managment Command= Enable Clock; enable Synthesizer; enable pow. Ampl. */ #asm ("cbi portb,nsel"); sendbyte(0b11000000); sendbyte(0b00111000); #asm ("sbi portb,nsel"); #asm ("nop"); /*Sender Start Byte senden*/ #asm ("cbi portb,nsel"); sendbyte(0b11000110); GICR|=(1<<6);/*Interrupt 0 freigeben*/ /* Der Rest der Sendung läuft nun in der Interupt 0 Routine ab */Beim Empfänger schaut das so aus:Code:// External Interrupt 0 service routine sende Bits zum RFM 02 interrupt [EXT_INT0] void ext_int0_isr(void) { volatile unsigned char uc_buffer; uc_sendbit--; uc_buffer=(uc_sendbuffer[uc_sendbyte])&(1<<uc_sendbit); if (uc_buffer == 0) { #asm ("cbi portb,sdi");/*Eine 0 wird gesendet*/ } else { #asm ("sbi portb,sdi");/*Eine 1 wird gesendet*/ } /* Alle 8 Bits schon übertragen ? */ if (uc_sendbit==0) { uc_sendbyte++; uc_sendbit=8; } if (uc_sendbyte>(strlen (uc_sendbuffer))) { /* Ende der Übertragung */ uc_sendbyte=0; uc_sendbit=8; GICR&=0b10111111;/*Interrupt 0 sperren*/ /* Übertragung durch setzen des nSEL Ports beenden */ #asm ("sbi portb,nsel"); #asm ("nop"); /* Power Managment Command= Enable Clock; disable Synthesizer; disable pow. Ampl. */ #asm ("cbi portb,nsel"); sendbyte(0b11000000); sendbyte(0b00100000); #asm ("sbi portb,nsel"); sendung_aktiv=0; uc_overflow=0; /* Zeitüberwachung zurücksetzen */ } }
Code:// Empfange Daten vom RFM 01 interrupt [EXT_INT0] void ext_int0_isr(void) { unsigned char uc_i=0; unsigned char uc_buffer=0; unsigned char uc_check=0; uc_timeout=0; /* Timeout Zähler zurücksetzen */ /* Die ersten 16 Bit des Statuswortes übergehen */ #asm ("cbi portb,nsel"); sendbyte(0b00000000); sendbyte(0b00000000); for(uc_i=0;uc_i<8;uc_i++)/* 8 Bits auslesen */ { if ((PINB&(1<<3))!=0) /* SDO abfragen = PortB,3 */ { uc_buffer=(uc_buffer<<1)| 0x01; } else { uc_buffer=(uc_buffer<<1); } clockpulse(); } #asm ("sbi portb,nsel"); /* nSel Leitung abschalten */ #asm ("nop"); // Hingen noch Reste im Puffer ? oder Puffer Überlauf -> Dann löschen if((uc_buffer=='$')||(uc_receivebyte>125)) { uc_receivebyte=1; uc_receivebuffer[0]='$'; /* Das Erste Byte des Empfangspuffers mit $ beschreiben*/ uc_receivebuffer[1]=0; /* Ein Stringende anfügen*/ } else { uc_receivebuffer[uc_receivebyte]=uc_buffer; uc_receivebyte++; uc_receivebuffer[uc_receivebyte]=0; /* Stringende anfügen */ }; if (uc_buffer==10) /* Line Feed wurde empfangen*/ { reset_fifo(); uc_check=checksum(); if (uc_check==0) { newstring=1; }; uc_receivebyte=0; } }Die Frequenz Tuningwörter kommen aus einer Tabelle, die dann mit dem entsprechenden Kommando Verodert wird:Code://RFM01 initialisieren void init_rfm01(void) { volatile unsigned char uc_frequ[2]; /* Frequenz tuningword */ /* Frequenzwortermittlung aus der Kanalangabe */ uc_frequ[1]=ui_frequ[uc_kanal]/256; uc_frequ[1]|=0b10100000; uc_frequ[0]=ui_frequ[uc_kanal]%256; /* Configuration Setting: 433MHz, CLK on, 11,5pf Kapaz., 67kHz */ #asm ("cbi portb,nsel"); sendbyte(0b10001001); sendbyte(0b01101100); #asm ("sbi portb,nsel"); #asm ("nop"); /* Low Batt Clock Divider Command: clock 5MHz */ #asm ("cbi portb,nsel"); sendbyte(0b11000010); sendbyte(0b11000000); #asm ("sbi portb,nsel"); #asm ("nop"); /* Frequency Setting: 434MHz (je nach Kanal) */ #asm ("cbi portb,nsel"); sendbyte(uc_frequ[1]); sendbyte(uc_frequ[0]); #asm ("sbi portb,nsel"); #asm ("nop"); /* Receiver Setting Command: VDI= Digital RSSI Out, -103dB, receiver disabled */ #asm ("cbi portb,nsel"); sendbyte(0b11000000); sendbyte(0b10000000); #asm ("sbi portb,nsel"); #asm ("nop"); /* Receiver Setting Command: VDI= Digital RSSI Out, -103dB receiver enabled */ #asm ("cbi portb,nsel"); sendbyte(0b11000000); sendbyte(0b10000001); #asm ("sbi portb,nsel"); #asm ("nop"); /* FIFO Command: Enable FIFO, IT level=8, Sync. Patt + VDI, stop FIFO */ #asm ("cbi portb,nsel"); sendbyte(0b11001110); sendbyte(0b10001001); #asm ("sbi portb,nsel"); #asm ("nop"); /* FIFO Command: Enable FIFO, IT level=8, Sync. Patt + VDI, start FIFO */ #asm ("cbi portb,nsel"); sendbyte(0b11001110); sendbyte(0b10001011); #asm ("sbi portb,nsel"); #asm ("nop"); /* Data Filter Command: */ #asm ("cbi portb,nsel"); sendbyte(0b11000100); sendbyte(0b10101100); #asm ("sbi portb,nsel"); #asm ("nop"); /* Data Rate Command: 2400 bit/s */ #asm ("cbi portb,nsel"); sendbyte(0b11001000); sendbyte(0b10010001); #asm ("sbi portb,nsel"); #asm ("nop"); /* AFC Command: Enable AFC, +3/-4, offset at VDI high */ #asm ("cbi portb,nsel"); sendbyte(0b11000110); sendbyte(0b10111111); #asm ("sbi portb,nsel"); #asm ("nop"); }
Den kompletten Code findest Du auf der angegebenen Seite.Code:Zuordnung Kanäle - Dip Fix - Frequenz Dip Fix:Kanal:Frequenz Dip Kanal Frequenz xxx 01 433.075 MHz 00 02 433.100 MHz xxx 03 433.125 MHz xxx 04 433.150 MHz 01 05 433.175 MHz xxx 06 433.200 MHz xxx 07 433.225 MHz 02 08 433.250 MHz xxx 09 433.275 MHz xxx 10 433.300 MHz 03 11 433.325 MHz xxx 12 433.350 MHz xxx 13 433.375 MHz 04 14 433.400 MHz xxx 15 433.425 MHz xxx 16 433.450 MHz 05 17 433.475 MHz xxx 18 433.500 MHz xxx 19 433.525 MHz 06 20 433.550 MHz xxx 21 433.575 MHz xxx 22 433.600 MHz 07 23 433.625 MHz xxx 24 433.650 MHz xxx 25 433.675 MHz 08 26 433.700 MHz xxx 27 433.725 MHz xxx 28 433.750 MHz 09 29 433.775 MHz xxx 30 433.800 MHz xxx 31 433.825 MHz 10 32 433.850 MHz xxx 33 433.875 MHz xxx 34 433.900 MHz 11 35 433.925 MHz xxx 36 433.950 MHz xxx 37 433.975 MHz 12 38 434.000 MHz xxx 39 434.025 MHz xxx 40 434.050 MHz 13 41 434.075 MHz xxx 42 434.100 MHz xxx 43 434.125 MHz 14 34 434.150 MHz xxx 45 434.175 MHz xxx 46 434.200 MHz 15 47 434.225 MHz xxx 48 434.250 MHz xxx 49 434.275 MHz 16 50 434.300 MHz xxx 51 434.325 MHz xxx 52 434.350 MHz 17 53 434.375 MHz xxx 54 434.400 MHz xxx 55 434.425 MHz 18 56 434.450 MHz xxx 57 434.475 MHz xxx 58 434.500 MHz 19 59 434.525 MHz xxx 60 434.550 MHz xxx 61 434.575 MHz 20 62 434.600 MHz xxx 63 434.625 MHz xxx 64 434.650 MHz 21 65 434.675 MHz xxx 66 434.700 MHz xxx 67 434.725 MHz 22 68 434.750 MHz xxx 69 434.775 MHz Alle DIP FIX mit gültigen Werten versehen ! 23 68 434.750 MHz 24 68 434.750 MHz 25 68 434.750 MHz 26 68 434.750 MHz 27 68 434.750 MHz 28 68 434.750 MHz 29 68 434.750 MHz 30 68 434.750 MHz 31 68 434.750 MHz ****************************************************/ flash unsigned int ui_frequ[32]={1240,1270,1300,1330,1360,1390,1420,1450,1480,1510,1540,1570,1600,1630,1660,1690,1720,1750,1780,1810,1840,1870,1900,1900,1900,1900,1900,1900,1900,1900,1900,1900};
Da die Beschaltung hier anders als bei der ELEKTOR Variante ist, musst Du gucken, was zu ändern ist.







Zitieren

Lesezeichen