mikrocontroller.net

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


Autor: Niko S. (huibui2010)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Sauger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Niko S. (huibui2010)
Datum:

Bewertung
0 lesenswert
nicht 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:
  rf12_trans(0x80E8);      // Config Command Enable FIFO for tx, rx; 868MHz Band 12.5pF
  rf12_trans(0xC2AB);      // Data Filter: internal digital, dqd=3 
  rf12_trans(0xCA81);      // FIFO / Reset Mode Command: Set FIFO mode;sp=0 -->2Byte Preamble
  rf12_trans(0xE000);      // disable wakeuptimer
  rf12_trans(0xC800);      // disable low duty cycle
  rf12_trans(0xC4F7);      // AFC settings: autotuning: -20kHz...+15kHz
  rf12_trans(0xC0E0);      // Loe Battery Detector AVR CLK: 10MHz; Vib=2.2V 
ready-Funktion abgeaendert
void rf12_ready(void)
{  cbi(RF_PORT, SDI);
   cbi(RF_PORT, CS);
   asm("nop");
   while (!(RF_PIN&(1<<SDO))); // wait until FIFO ready
  sbi(RF_PORT, CS);
Sende Funktion habe ich die dummy byts hinzugefügt.
Empfangsfunktion
void rf12_rxdata(unsigned char *data, unsigned char number)
{  rf12_trans(0x82D8);      // RX on (0x82C8);
  rf12_trans(0xCA81);      // set FIFO mode
  rf12_trans(0xCA83);      // enable FIFO
//PORTD  =  (!(1<<PIND6));
      
  cbi(RF_PORT, SDI);  //neu vom 29.07
  unsigned char i;
    for (i=0; i<number; i++)
  { 
      //USART_Transmit_String( " i = ", 5 );
    //char c = (char)(i+'0');   
      //USART_Transmit_String( &c, 1 );   
      //USART_Transmit_String( "\n", 1 );   
 
    rf12_ready();
    *data=rf12_trans(0xB000);
    data++;
  }
  rf12_trans(0xCA81);     // disable FIFO
  rf12_trans(0x8208);      // RX off
//PORTD  =  ((1<<PIND6));
}
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

Autor: Niko S. (huibui2010)
Datum:

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

mfg

Autor: Sauger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Niko S. (huibui2010)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Niko S. (huibui2010)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

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

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

Autor: Niko S. (huibui2010)
Datum:

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

Autor: Niko S. (huibui2010)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.