Hallo
Schau mal im Microcontroller net nach, da gibt es einen langen Thread der von diesen Funkmodulen handelt.
mfg Luca
Hi,
Ich hab vor für mein RC Car n kleines Kontrollsystem zu basteln und die Daten direkt per Funk an einen Laptop zu senden. Ich hab die Pollin RFM02 und RFM01 Module. Nun hab ich das Problem, dass ich nich ganz weiß wie man die anschließt/anspricht. Ich versteh nicht ganz was der FSK Pin is und ob man den CLK Pin braucht, wenn man n externen Quarz am Atmega8 hat? Und was ist der nIRQ? Was genau macht der? Ich hab auch in der SuFu einen interessanten Thread gefunden, aber leider nix mit Assembler. Den Großteil des Programms hab ich schon fertig. Am INT0 hab ich einen Magnetfeldsensor, an ADC0 einen Akku und an ADC1 einen Tempsensor. Also hier mal meinen Code, die Senderoutine is nur mal provisorisch und mein Code könnte nich ganz soo perfekt sein.Das Konfigurieren des Sendemoduls fehlt hier noch, da ich darüber nich viel weiß. Die Empfangseinheit ist NOCH nicht in arbeit.Code:.include "m8def.inc" .def temp = r16 .def temp1 = r17 .def akkulo = r18 .def akkuhi = r19 .def templo = r20 .def temphi = r21 .def adclo = r22 .def adchi = r23 .def upms = r24 .def timereg = r25 .def adccount = r26 .def adcreg = r27 .equ CLOCK = 16000000 .equ BAUD = 9600 .equ UBRRVAL = CLOCK/(BAUD*16)-1# .org 0x000 rjmp main .org INT0addr rjmp upmplus .org OC1Aaddr rjmp transmit main: ldi temp, LOW(RAMEND) out SPL, temp ldi temp, HIGH(RAMEND) out SPH, temp ldi temp, LOW(UBRRVAL) out UBRRL, temp ldi temp, HIGH(UBRRVAL) out UBRRH, temp ldi temp, LOW(40000-1) out OCR1AL, temp ldi temp, HIGH(40000-1) out OCR1AH, temp ldi temp, 0x00 out DDRD, temp ldi temp, 0xFF out PORTD, temp ldi temp, ( 1 << WGM12 ) | ( 1 << CS00 ) out TCCR1B, temp ldi temp, 1 << OCIE1A ; OCIE1A: Interrupt bei Timer Compare out TIMSK, temp ldi temp, (1<<URSEL)|(3<<UCSZ0) out UCSRC, temp ldi temp, 0b00001010 out MCUCR, temp ldi temp, 0b10000000 out GICR, temp sbi UCSRB, TXEN sei ldi temp, (1<<PB4) | (1<<PB5) out DDRB, temp ldi temp, (1<<SPE) | (1<<MSTR) | (1<<SPR0) out SPCR, temp configadc0: ldi temp, (1<<REFS0) out ADMUX, temp ldi temp, (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0) out ADCSRA, temp startadc0: clr adcreg clr temp1 clr akkulo clr akkuhi ldi adccount, 0 sbi ADCSRA, ADSC warteadc0: sbic ADCSRA, ADSC rjmp warteadc0 in adclo, ADCL in adchi, ADCH add temp1, adclo adc akkulo, adchi adc akkuhi, adcreg dec adccount brne startadc0 ldi temp, (1<<REFS0 | 1<<MUX0) out ADMUX, temp ldi temp, (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0) out ADCSRA, temp startadc1: clr adcreg clr temp1 clr templo clr temphi ldi adccount, 0 sbi ADCSRA, ADSC warteadc1: sbic ADCSRA, ADSC rjmp warteadc1 in adclo, ADCL in adchi, ADCH add temp1, adclo adc templo, adchi adc temphi, adcreg dec adccount brne startadc1 ldi temp, (1<<REFS0) out ADMUX, temp ldi temp, (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0) out ADCSRA, temp loop: rjmp loop upmplus: inc upms reti transmit: out SPDR, upms sbis SPSR, SPIF rjmp transmit transbreak: ldi temp, '|' out SPDR, temp sbis SPSR, SPIF rjmp transbreak transakku: out SPDR, akkulo sbis SPSR, SPIF rjmp transmit transbreak1: ldi temp, '|' out SPDR, temp sbis SPSR, SPIF rjmp transbreak1 reti transakku1: out SPDR, akkuhi sbis SPSR, SPIF rjmp transmit transbreak2: ldi temp, '|' out SPDR, temp sbis SPSR, SPIF rjmp transbreak2 reti transtemp: out SPDR, templo sbis SPSR, SPIF rjmp transmit transbreak3: ldi temp, '|' out SPDR, temp sbis SPSR, SPIF rjmp transbreak1 reti transtemp1: out SPDR, temphi sbis SPSR, SPIF rjmp transmit transbreak4: ldi temp, '|' out SPDR, temp sbis SPSR, SPIF rjmp transbreak2 reti
Ich hoff mir kann jemand helfen.
gruß homedom
Hallo
Schau mal im Microcontroller net nach, da gibt es einen langen Thread der von diesen Funkmodulen handelt.
mfg Luca
Sollte ein Bild von mir nicht angezeigt werden, einfach eine PM schicken!
Jo.. hab schon überall gescuht, aber noch nirgends was über meine Fragen. Außerdem nix mit Assembler. Trotzdem Danke
Die Module können sehr unterschiedlich konfiguriert werden und somit werden auch verschiedene Anschlüsse nötig.Hi,
Ich versteh nicht ganz was der FSK Pin is und ob man den CLK Pin braucht, Und was ist der nIRQ?
Im RFM 02 können Daten per Kommando über die Datenleitung SDI (Kommando 0xC6) als auch über die Direkte Modulationsleitung FSK gesendet werden.
Die Geschwindigkeit mit der das geschieht, also die Bitrate kannst Du mit dem µC vorgeben, oder der RFM 02 aktiviert den Ausgang NIRQ nach jedem Bit!!.
Ich hab mich für die NIRQ Variante über SDI die auf einen Interrupt wirkt entschieden, weil die Von Takt des µC unabhängig ist.
Der CLK Pin wäre zur Versorgung des µC mit Takt gedacht, da Du ja dafür einen Quarz hast brauchst Du ihn nicht. Wenn doch gebraucht Pullup Widerstand einbauen. Ursprünglich wollte ich den Takt verwenden, allerdings schmiert mir mein ATMEGA8 bei der Umschaltung der Taktrate von 1MHz auf 5MHz ab.
Im Empfänger muss die DATA/NFFS Leitung in meinem Mode mit einem 10k Pull Up Widerstand auf +5V gebracht werden.
Der Rest sollte klar sein.
Beim Empfänger hab ich den FIFO Puffer aktiviert und auf 8 Bit eingestellt.
Wenn jetzt 8 Bit im FiFo Puffer sind wird ein nIRQ ausgelöst.
Ich spring auch hier wieder in einen Interrupt und les die 8Bit aus.
Der FiFo Puffer braucht als Startsequenz Hex 0xAA 0xAA 0xAA 0x2D 0xD4
Diese Sequenz muss gesendet werden, der Fifo Puffer "verschluckt" sie aber.
Wenn eine kompletter Datensatz übertragen Wurde muss der Fifo zurückgesetzt werden. Nur so wartet er in der Snedepause wieder auf eine Startsequenz und gibt keine wirren Zeichen aus.
Ich häng die mal meine Konfigurationseinstellungen mit ran.Code:/* 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"); uc_receivebyte=0;
Ist zwar in "C" die benötigten Bits kann man aber gut erkennen.
zuerst der Sender:
Nun der Empfänger:Code: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");
Die Daten müssen mit dem MSB Bit voran übertragen werden !Code: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");
Also Schieben der Daten nach links.
Hier gibts die Original Datenblätter
http://www.hoperf.com/doce/
, schau auf jeden Fall auch die RF01 und RF02 an.
Zieh Dir auf jeden Fall auch diese Datenblätter rein:
http://www.integration.com/resources.shtml
Speziell IA4220 und IA4320 die haben den gleichen Kommadosatz wie die Pollin Teile.
hey ein Spezialist, so einen Suche ichZitat von wkrug
ich wollte dem Atmel mit dem RFM01 433MHz beibringen, aber es kümmt nix raus,
Problem wird der Sender sein,
Handauslöser Cam,
http://www.linkdelight.com/photo/rem...ontrol/R7C.jpg
der pulst mit 2kHz, wie von 433 MHz Sendern gewohnt, vermutlich kommt nix aus dem FiFo (SDO) weil da bei analog nix kommt, muss ich vielleicht doch den analog Ausgang DCLK/CFIL/FFIT nehmen , Pin 4 ?
diese Hopf Module müssten doch auch klassisch laufen als 2 kHz Transmitter, so wie ich das verstanden habe, statt FSK Demodulator könnte auch der Atmel dienen...
wenn keiner einen Tipp hat muss ich halt weiter probieren....
Wenn da nur 2kHz Rechteckimpulse rauskommen, kannst Du den FiFo vergessen.der pulst mit 2kHz, wie von 433 MHz Sendern gewohnt, vermutlich kommt nix aus dem FiFo (SDO) weil da bei analog nix kommt, muss ich vielleicht doch den analog Ausgang DCLK/CFIL/FFIT nehmen , Pin 4 ?
Ich denk aber, das der FSK Pin beim Sender, sowie der Data Pin beim Empfänger, nach der richtigen Konfiguration, das machen was Du da vorhast.
Ich hab aber sowas noch nicht versucht, ich bin froh das mein Zeug soweit läuft.
Den VDI solltest Du mal vorerst auf immer gut konfigurieren, kannst das ja später wieder zurücknehmen auf Digital RSSI.
Ob das auch Auswirkung auf den DATA Pin bei schlechten Empfangsverhältnissen hat kann ich nicht sagen. Notfalls musst Du halt das Statusregister im Empfänger auslesen und da die Information holen.
Ich muss nach wie vor sagen, die Dokumentation der Chips ist besch....eiden.
Lesezeichen