Forum: HF, Funk und Felder RF12 mit Fehlersicherung, crc, viterbie?


von Niko S. (huibui2010)


Lesenswert?

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

von Sauger (Gast)


Lesenswert?

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

von Niko S. (huibui2010)


Lesenswert?

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

von Niko S. (huibui2010)


Lesenswert?

ups hier noch die Entwicklungsumgebung Pollin-Board in der Version 1.1 
aber schon mit ausgeloetetem Optokoppler.

mfg

von Sauger (Gast)


Lesenswert?

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

von Niko S. (huibui2010)


Lesenswert?

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

von Niko S. (huibui2010)


Lesenswert?

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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Niko S. schrieb:
> Vielleicht hat jemand auch noch ein paar tipps zur Realisierung meiner
> Fehlersicherung

<util/crc16.h> kennst du, ja?

von Niko S. (huibui2010)


Lesenswert?

nein kenn ich nicht werde mich gleich aber sofort mal auf die Suche 
machen danke Dir.

von Niko S. (huibui2010)


Lesenswert?

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
Noch kein Account? Hier anmelden.