Hallo liebe Gemeinschaft, ich bin relativ neu hier in diesem Forum und hoffe niemanden auf den Schlips getreten zu sein! Also ich Arbeite seit kurzen (3 Wochen) auf diesem Gebiet und wage mich nun eine Stufe weiter. Also ich habe bereits einige Erfahrungen so wohl positiv als auch negative mit dem RF12 und dem Pollin Board machen müssen. Aber habe es geschafft auf 868Mhz zu senden wie auch zu empfangen das funktioniert unter bestimmten Voraussetzungen fehlerfrei, d.h geringer Abstand der Module (20cm). Ab dann wird mir mein String den ich übertrage nicht mehr vollständig sonder fehlerbehaftet ausgegeben. Habe ein bisschen recherchiert und andere wiederum sagten sie haetten 100m im freien ueberbruecken koennen was ist richtig? Wo liegt mein Fehler? Hier mal ein paar Daten: - MCU ATmega32 - 2* RF12 Funkmodule auf 868.3MHz - Pollin Board der Version 1.1 Des weiteren habe ich noch eine Frage, woher weiß ich welche Zeiten ich bei meiner Übertragung einhalten muss, vor senden oder empfangen, wie viele dammy byte's soll ich uebertragen, oder nach dem senden vor empfangen warten? Vielleicht liegt es ja auch daran, oder ich fuege wie mein Beitrag schon verlauten laesst eine Fehlerkorrektur durch, aber dazu habe ich noch zu wenig Erfahrung aber vielleicht koenntet Ihr mir ja helfen. BITTTE :-) Danke im voraus, bei weiteren Fragen stehe ich euch gerne zu Verfügung
Nabend, Niko S. schrieb: > und hoffe niemanden auf den Schlips getreten zu sein! noch nicht. zum Thema RFM12 gibt es hier im Forum etliche Beiträge. Lese dir diese durch und probiere die Vorschläge aus! Ohne Angaben über deine verwendete Entwicklungsumgebung, Quellen und was du eigentlich vorhast ist eine Hilfe unmöglich. MfG
Vielen Dank fuer deine rasche Antwort, also ich arbeite mit AVR Studio4 und verwende den Quelltext von benedikt der ja jeden bekannt ist. Nur habe ich diesen etwas abgewandelt auf 868Mhz und uebertage eine Zeichenkette array[32]. Also habe ich versucht Fehler zu beheben und gegebenenfalls zu verbessern. Initialisierung:
1 | rf12_trans(0x80E8); // Config Command Enable FIFO for tx, rx; 868MHz Band 12.5pF |
2 | rf12_trans(0xC2AB); // Data Filter: internal digital, dqd=3 |
3 | rf12_trans(0xCA81); // FIFO / Reset Mode Command: Set FIFO mode;sp=0 -->2Byte Preamble |
4 | rf12_trans(0xE000); // disable wakeuptimer |
5 | rf12_trans(0xC800); // disable low duty cycle |
6 | rf12_trans(0xC4F7); // AFC settings: autotuning: -20kHz...+15kHz |
7 | rf12_trans(0xC0E0); // Loe Battery Detector AVR CLK: 10MHz; Vib=2.2V |
ready-Funktion abgeaendert
1 | void rf12_ready(void) |
2 | { cbi(RF_PORT, SDI); |
3 | cbi(RF_PORT, CS); |
4 | asm("nop"); |
5 | while (!(RF_PIN&(1<<SDO))); // wait until FIFO ready |
6 | sbi(RF_PORT, CS); |
Sende Funktion habe ich die dummy byts hinzugefügt. Empfangsfunktion
1 | void rf12_rxdata(unsigned char *data, unsigned char number) |
2 | { rf12_trans(0x82D8); // RX on (0x82C8); |
3 | rf12_trans(0xCA81); // set FIFO mode |
4 | rf12_trans(0xCA83); // enable FIFO |
5 | //PORTD = (!(1<<PIND6));
|
6 | |
7 | cbi(RF_PORT, SDI); //neu vom 29.07 |
8 | unsigned char i; |
9 | for (i=0; i<number; i++) |
10 | {
|
11 | //USART_Transmit_String( " i = ", 5 );
|
12 | //char c = (char)(i+'0');
|
13 | //USART_Transmit_String( &c, 1 );
|
14 | //USART_Transmit_String( "\n", 1 );
|
15 | |
16 | rf12_ready(); |
17 | *data=rf12_trans(0xB000); |
18 | data++; |
19 | }
|
20 | rf12_trans(0xCA81); // disable FIFO |
21 | rf12_trans(0x8208); // RX off |
22 | //PORTD = ((1<<PIND6));
|
23 | }
|
Worauf ich hinaus will ist folgendes, und zwar moechte ich das was ich uebertrage, sicher machen. Da wie oben beschrieben nur eine Rechweite von 20cm erziehle und mir das zu wenig ist. Vielleicht liegt das auch an noch anderen Stellen aber soweit bin ich noch nicht, war erst einmal froh etwas uebertragen zu koennen. Es soll spaeter darauf hinauslaufen, dass man die beiden Boards + Module an 2 Rechner anschliesst und daruerb einfache daten versendet und ueber eine etwas groessere Reichweite empfangen kann. Im Moment funktioniert meine Uebertragung leider auch nur one way. Ich bitte um Hilfe vielen Dank. mfg
ups hier noch die Entwicklungsumgebung Pollin-Board in der Version 1.1 aber schon mit ausgeloetetem Optokoppler. mfg
Nabend, Wieso nimmst du nicht Benedikts Beispiel, bringst dieses nach Änderung der Initialisierung (auf 868MHz) zum Laufen (ja es läuft, hier im Forum oft besprochen) und erweiterst es danach für deine Anwendung. Niko S. schrieb: > Da wie oben beschrieben nur eine Rechweite von 20cm erziehle und mir das > zu wenig ist. ein Stück Draht (als Antenne) am richtigen Penippel wirkt Wunder MfG
Guten Morgen, ja das habe ich ja probiert aber es wollte nicht so richtig funktionieren, somit habe ich etwas im Forum gestoebert und hier und da ein paar nuetzliche Dinge gefunden die mir dann den gewuenschten Erfolg brachten. Anfangs hat es mit seinem Code garnicht funktioniert! Erst nach den kleinen Abaenderungen und eine Antenne ein kleines Stueckchen Draht habe ich auch. lambda/4 8,5cm lang. Vielleicht hat jemand auch noch ein paar tipps zur Realisierung meiner Fehlersicherung oder Antworten auf die oben stehenden Fragen? Ich waere euch sehr dankbar. mfg
Hallo, leider hat sich auf meinen Beitrag keiner gemeldet, ich hoffe das kommt noch G. Habe hier mal ein Beispiel wie was gesendet bzw empfangen wird nur weiss ich noch nicht so ganz warum diese Zeitversetzt ankommen. Empfange wird nur von der UART uebertragen nicht vom RF12, habe ich eingebaut um zu unterscheiden was vom wem kommt. 12:01:10.832: E 12:01:10.834: m 12:01:10.860: p 12:01:10.860: fange 12:01:17.314: H 12:01:17.316: i 12:01:17.420: e 12:01:17.420: r wird auf 868.3MHz empfangen Danke fuer Eure Hilfe. mfg
Niko S. schrieb: > Vielleicht hat jemand auch noch ein paar tipps zur Realisierung meiner > Fehlersicherung <util/crc16.h> kennst du, ja?
nein kenn ich nicht werde mich gleich aber sofort mal auf die Suche machen danke Dir.
Weiß vielleicht auch jemand warum ich das gesendete nicht sofort empfange sondern in Stückchen wie oben. im Terminal kommt es komplett an da fällt es nicht auf nur im output-file. Vielen Dank im voraus. mfg
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.