- 12V Akku mit 280 Ah bauen         
Seite 10 von 10 ErsteErste ... 8910
Ergebnis 91 bis 98 von 98

Thema: 433MHz Funkmodule bei Pollin

  1. #91
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    2.187
    Anzeige

    Praxistest und DIY Projekte
    Hast Du wirklich das Datenblatt vom RF01 angeschaut, oder doch wieder das vom RFM01?
    Beim RF01 steht sinngemäß:
    Ein 10kOhm Widerstand für den Analog Modus ist eingebaut.
    Ein externen Kondensator ( Wert steht nicht dabei - ist wohl von der Datenübertragungsrate abhängig ) soll an den Pin CFIL angeschlossen werden.

    Der Chip, der hinter dem Modul steht gibts bei Integration http://www.integration.com es sind die Chips 4220 /4320 /4420

  2. #92
    Benutzer Stammmitglied
    Registriert seit
    03.04.2009
    Ort
    ulm
    Beiträge
    35
    hey
    hat jemand ein Bascom code der funzt für die RFM01 und RFM02??

  3. #93
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    2.187
    In der Elektor Januar 2009 gabs einen Artikel mit Bascom Software über die RFM Module, allerding s für die mit 868MHz.
    Da da nur ein paar Bytes bei der Initialisierung anders sind, sollte der Code auch für die 433MHz Module verwendbar sein.
    Link:
    http://www.elektor.de/jahrgang/2009/januar/bei-uns-hat-s-gefunkt!.769040.lynkx?tab=4

    Wenn Du da keinen Account hast, kann ich Dir die Soft runterladen und per E-Mail schicken.

    Du solltes aber auch die Zusammenschaltung zwischen Microcontroller und RFM Modul so machen , wie es in ELEKTOR vorgeschlagen ist.

  4. #94
    Benutzer Stammmitglied
    Registriert seit
    03.04.2009
    Ort
    ulm
    Beiträge
    35
    ich habs mal runtergeladen aber der Code is ja für RFM12
    is des schwer den auf rfm01/02 zu ändern??

  5. #95
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    2.187
    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:

    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");
        
    }
    Zum senden muss dann noch das entsprechende Kommando kommen:
    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 */
    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 */
    }
    }
    Beim Empfänger schaut das so aus:
    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;
        }
    }
    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");
           
    }
    Die Frequenz Tuningwörter kommen aus einer Tabelle, die dann mit dem entsprechenden Kommando Verodert wird:
    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};
    Den kompletten Code findest Du auf der angegebenen Seite.
    Da die Beschaltung hier anders als bei der ELEKTOR Variante ist, musst Du gucken, was zu ändern ist.

  6. #96
    Benutzer Stammmitglied
    Registriert seit
    03.04.2009
    Ort
    ulm
    Beiträge
    35
    hey
    danke aner ich kenne mich mit c überhaupt nicht aus leider werd es aber warscheinlich bald lernen
    bei dem Code von Elektor steht ja iwie nich dran ob des sender oder Empfänger ist!

  7. #97
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    2.187
    Ich hab Dir ja auch die wirklich wichtigen Sachen rausgeklaubt

    sendbyte(0b11000000) bedeutet
    An das RFM Modul wird das Byte ( binär ) 11000000 über die Funktion sendbyte ( das ist meine selbst geschriebene SPI Routine ) übergeben.
    Das dürfte auch mit Bascom kein Problem sein - oder ?
    Ist ja auch Kommentiert und viel in Assembler, der ja auch in Bascom so funktionieren sollte.


    "Den" funktionierenden Bascom Code wird es nicht geben.
    Es sind nun mal sehr verschiedene Arbeitsmodi und Einstellungen bei den RFM Modulen möglich.
    Das geht vom Einstellen der Sendeleistung, über den Frequenzhub zur Art der Übermittlung, mit Baudrate, FiFo Nutzung und so weiter.
    Man muß sich also erstmal überlegen was man will und welche Datenübertragungsrate und Reichweite nötig ist.
    Erst dann kann man entscheiden welche Parameter für die konkrete Anwendung sinnvoll sind.
    Zu jedem Quellcode gehört somit auch ein Schaltplan, sonst wird's schwierig.

    Du könntest aus dem Elektor Beispiel die SPI Routinen übernehmen, gucken wie die Beschaltung der Module ist und dann die Initialisierungsbytes aus unserem System übernehmen.

    Unsere Telemetriegeschichte ist auf Reichweite getrimmt, also maximale Sendeleistung bei nur 2400Bit/sek.
    Wenn das nicht passt die entsprechenden Bytes umbiegen - Fertig.

  8. #98
    Benutzer Stammmitglied
    Registriert seit
    03.04.2009
    Ort
    ulm
    Beiträge
    35
    ah ok
    ich werd mal schauen was ich zusammen bekomme
    werd mich bei fragen/probleme wieder melden

Seite 10 von 10 ErsteErste ... 8910

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen