Datum: 14.07.2007 22:43
Hallo, nach 4 Tagen ununterbrochener "Trail & Error" Arbeit an diesem Modul lege ich hier mal einen lauffähigen Code ab. Er ist zwar speziell auf mein Multi-Prozessorsystem zugeschnitten aber er soll auch mehr dazu dienen, die Feinheiten zu verstehen um eigene Projekte abzugleichen, denn diese Module haben es in sich, manches steht nirgendwo geschrieben - zB dass sie nur in den Receive bzw Transmit Mode gehen, wenn man nach der Init Routine einmal den Status abfragt. Im Wesentlichen handelt es sich um die Datei rfm12.c und die Aufrufe für den Empfang in main.c. Der Empfang findet im Interrupt statt, aufgelöst durch negative Flanke an nIRQ Pin des Moduls, ist Checksummengeschützt und hat eine Fehlerabfrage, die nahezu alle Funkfehler erkennt. Durch Erhöhen des RSSI Thresholds kann man die Fehlerrate senken auf Kosten der Reichweite. Sie liegt aber auch so bei nahezu 0%. Bisher noch ungeklärt: - Der Empfänger stürzt ab und zu ab, wenn das Signal an der Schwelle zur Erkennung liegt und viele Fehler auftreten. Er muss dann mit POR wieder aktiviert werden. Wozu der nRES Pin gt ist weiss ich noch nicht. - Das FFIT Bit wird nicht richtig gesetzt, wenn Fifo voll ist. Daher müssen alle Interrupts (Watchdog, Battery) abgeschaltet sein, sonst ist nicht sicher, dass es der Fifo war der ausgelöst hat. Viel Spass beim Studieren.
Datum: 14.07.2007 23:06
Nachtrag, da Editieren nicht funktioniert Tips für Erstnutzer: -Senden und Empfangen müssen "rennen", da dürfen keine aufwendigen Rechnnugen in den Routinen eingebaut werden der ausführende Prozessor sollte mindestens 1Mhz internen Clock haben um noch 4800 baud zu schaffen, ab 9600 wird es schon schwer auf den IRQ zu reagieren. Ein Buffer Underflow beim Senden lässt den Datensatz üngültig werden. - Das Modul ist getestet bis 4Mhz SPI Takt (250ns pro Bit), darüber verschluckt es sich. Das Datenblatt scheint da nicht zu stimmen, trotz terminierte SPI Bus und einwandfreien Flanken. - Nach dem datensatz müssen bei 9600 baud 3 Dummys eingefügt werden, 2 reichen nicht aus, da das Abschalten des Senderbits et die laufende Übertragung im Fifo unterbricht. Je langsamer die Datenrate umso mehr Dummys sollte man nachschicken. Schaltet man das ET Bit nicht ab wird Müll gesendet. Daher muss dem Empfänger auch mitgeteilt werden wieviele Datenbytes kommen, es gibt keine sichere Methode das Ende des datenstromes zu erkennen, ausser vielleicht dem DQD Flag, welches 0 wird, wenn der Träger abgeschaltet wird.
Datum: 15.07.2007 07:22
Christian Julius wrote: > - Der Empfänger stürzt ab und zu ab, wenn das Signal an der Schwelle zur > Erkennung liegt und viele Fehler auftreten. Das kann ich eigentlich nicht bestätigen, ich hatte solche Probleme noch nie, trotz tagelangen Funkübertragungen. > Wozu der nRES Pin gt ist weiss ich noch nicht. Das ist ein Reset Eingangspin (Open Collector mit Pullup), der beim POR Zusätzlich noch auf Low geht um andere ICs zu Resetten. > - Das FFIT Bit wird nicht richtig gesetzt, wenn Fifo voll ist. Im Status Register, oder der Pin ? > - Das Modul ist getestet bis 4Mhz SPI Takt (250ns pro Bit), darüber > verschluckt es sich. Das Datenblatt scheint da nicht zu stimmen, trotz > terminierte SPI Bus und einwandfreien Flanken. Das ist mir auch schon aufgefallen. Ich verwende SPI Modus 0: Daten bei stiegender Flanke einlesen, bei fallender Flanke ausgeben. Das Senden funktioniert auch bei höheren Datenraten, nur das Lesen vom Modul nicht.
Datum: 15.07.2007 09:50
Hallo, ich meine das Bit FFIT. Der Ausgang selbst hängt ja mit 10k an +. Ich wollte es eigentlich im IRQ benutzen, um sicherzustellen, dass der INT auch durch den Fifo ausgelöst wird und nicht durch eine andere IRQ Quelle. Aber es ist einfach nicht gesetzt. Das Modul stürzt wohl ab, es reagiert nicht mehr auf Daten wenn man den Sender mit Metallfolie immer weiter abschirmt bis so eben keine Daten mehr kommen. Woran das liegt weiss ich auch noch nicht genau. Ich überlege im IRQ einen Timeout zu installieren, der das Modul resettet, wenn die Daten nicht mehr kommen, obwohl der Datensatz nicht abgeschlossen ist. Wenn man nRES als externen Reset benutzen könnte. Was mich jetzt interessiert ist welche Einstellung der vielen Filter die optimale ist. Ich möchte die Applikation so haben, dass die beiden Module sich aufeinander abstimmen, also zb in der Sendeleitung reduzieren bzw. Eingangsempfindlichkeit, wenn sie nah zusammen sind. Nur welches Bit etc soll man dazu ausnutzen, eine Art Feldstärkeanzeige gibt es ja nicht, oder? Ansonsten das beste, was ich bisher hatte, die normalen Sender sind nervig mit ihrem verzerrten Code am Empfänger, der erste vermessen werden muss, bzw der Manchester Codierung. Hier liegt es nur an der Phantasie des Programierers was die Dinger alles können. Obwohl das BR-27 Modul was ich von der intal. Firma ITE habe bringt 15mW raus, damit gehts fast einen Kilometer weit mit einer abgestimmten Antenne aus dem Laden. Fehlt nur noch ein 1-Transistor Nachbrenner, der es auf ca 20mW bringt, dafür suche ich noch eine kleine Schaltung mit dimensioniertem Pi Filter. Was das Empfangen bei hohen Datenraten angeht, so liegt das mehr daran, dass der uC bei mir nicht schnell genug in den IRQ kommen kann, weil der noch das Display bedienen muss, wo ich alle IRQ abschalte. Bei einem Master mit 7 SPI Slaves gibt es sonst ein Durcheiander, ausserdem ist ein Byte nur rund 500us lang über 9600 baud. Da müsste ich den PIC auf 40 Mhz bringen aber dann kriegt er sporadisch einen internen Reset, wohl weil das Silizium der Rev 1 noch nicht ausgereift ist, der 4685 ist noch nagelneu und erheblich buggy laut Errata Sheet. In einer Anwendung würde ich dem RFM12 einen eigenen Controller spendieren, so wie mein IR Inteface es auch hat, dann geht die Recheneleistung nur auf diesen Slave über, der erstmal Daten sammeln kann bevor er sie dem Master weitergibt. Gruss, Christian
Datum: 15.07.2007 10:03
Hier mal mein Testboard, Fehlerrate wirklich gut!
Datum: 15.07.2007 10:17
Christian Julius wrote: > ich meine das Bit FFIT. Der Ausgang selbst hängt ja mit 10k an +. Ich > wollte es eigentlich im IRQ benutzen, um sicherzustellen, dass der INT > auch durch den Fifo ausgelöst wird und nicht durch eine andere IRQ > Quelle. Aber es ist einfach nicht gesetzt. Seltsam. Bei wir funktioniert das wunderbar. Hast du den nFFS Pin über einen Pullup an 5V angeschlossen ? > Das Modul stürzt wohl ab, es reagiert nicht mehr auf Daten wenn man den > Sender mit Metallfolie immer weiter abschirmt bis so eben keine Daten > mehr kommen. Kann es sein, dass du die AFC ohne Begrenzung eingeschaltet hast, und das Modul auf eine andere Frequenz abdriftet ? > Was mich jetzt interessiert ist welche Einstellung der vielen Filter die > optimale ist. Ich möchte die Applikation so haben, dass die beiden > Module sich aufeinander abstimmen, also zb in der Sendeleitung > reduzieren bzw. Eingangsempfindlichkeit, wenn sie nah zusammen sind. Nur > welches Bit etc soll man dazu ausnutzen, eine Art Feldstärkeanzeige gibt > es ja nicht, oder? Im Datenblatt vom RF01 gibt es eine Tabelle was die optimalen Einstellungen ist. Meinen Versuchen nach ist eine höhere Modulationstiefe aber besser für eine hohe Reichweite. Das hängt vermutlich mit der Definition von "optimal" zusammen. Die Einstellungen im Datenblatt sind vermutlich ein Kompromiss zwischen Bandbeite und Reichweite. Wenn die Bandbreite aber egal ist, lässt sich die Reichweite etwas vergrößern. Im Datenblatt ist ein RSSI Pin erwähnt. Dieser ist mit dem vorderen der beiden Kondensatoren rechts am Modul verbunden (wenn die Antenne links ist). Wenn du an das Modul einen Verstärker anschließt, kann das Modul aber nur noch senden und nichts mehr empfangen ?
Datum: 15.07.2007 10:50
Benedikt K. wrote: > Christian Julius wrote: >> ich meine das Bit FFIT. Der Ausgang selbst hängt ja mit 10k an +. Ich >> wollte es eigentlich im IRQ benutzen, um sicherzustellen, dass der INT >> auch durch den Fifo ausgelöst wird und nicht durch eine andere IRQ >> Quelle. Aber es ist einfach nicht gesetzt. > > Seltsam. Bei wir funktioniert das wunderbar. Hast du den nFFS Pin über > einen Pullup an 5V angeschlossen ? Also, der FSK/DATA/nFFs ist mit 10k nach Plus, der DCLK/DCFIL/FFIT ist offen. Ist das falsch? > Kann es sein, dass du die AFC ohne Begrenzung eingeschaltet hast, und > das Modul auf eine andere Frequenz abdriftet ? Ich habe sie begrenzt auf 7bit, wenn man es nicht begrenzt driftet es ab, das habe ich auch bemerkt. Mit dieser Autokorrektur bin ich mir eh noch nicht klar, was da die beste Einstellung ist. Was macht dieses Strobe Bit eigentlich nd müssen OE und EN gesetzt sein im AFC Command? > Im Datenblatt vom RF01 gibt es eine Tabelle was die optimalen > Einstellungen ist. Meinen Versuchen nach ist eine höhere > Modulationstiefe aber besser für eine hohe Reichweite. Das hängt Was ist Modulationstiefe? Kenne des Ausdruck nicht. > vermutlich mit der Definition von "optimal" zusammen. Die Einstellungen > im Datenblatt sind vermutlich ein Kompromiss zwischen Bandbeite und > Reichweite. Wenn die Bandbreite aber egal ist, lässt sich die Reichweite > etwas vergrößern. > Im Datenblatt ist ein RSSI Pin erwähnt. Dieser ist mit dem vorderen der > beiden Kondensatoren rechts am Modul verbunden (wenn die Antenne links > ist). Es gibt auch ein RSSI Bit aber das floatet völlig. Der Pin ist ja nicht heausgeführt worden. Bliebe noch VDI. > Wenn du an das Modul einen Verstärker anschließt, kann das Modul aber > nur noch senden und nichts mehr empfangen ? Stimmt auch wieder, da müsste da ein neues Koppelnetzwerk dran, damit die Empfängerstufe nicht beschädigt wird beim Senden. Habe die beiden grad mal auf 19200 baud umgestellt, arbeiten einwandfrei. Aber wenn ich mich recht an die Vorlesungen erinnere muss man mti steigender Baudrate auch die Filterbandweiten anpassen. Da ich schon gerade einen Experten erwischt habe, kannst Du folgende Fragen beantworten: - Was hat es mit dem VDI Signal (fast, medium, slow) auf sich im "Receiver Control command"? - Was kann man mit "TX Configuration Command" anfangen? FSK modulation parameters.
Datum: 15.07.2007 11:22
Christian Julius wrote: > Also, der FSK/DATA/nFFs ist mit 10k nach Plus, der DCLK/DCFIL/FFIT ist > offen. Ist das falsch? Das ist OK. Ohne den Pullup funktioniert es nämlich nicht richtig. > Was macht dieses > Strobe Bit eigentlich nd müssen OE und EN gesetzt sein im AFC Command? Mit dem Strobe Bit kann man die AFC Messung manuell starten. OE aktiviert das Offset Register und EN die AFC Schaltung. Ich habe bei mir AFC auf automatisch mit kleinstem Bereich eingestellt. > - Was hat es mit dem VDI Signal (fast, medium, slow) auf sich im > "Receiver Control command"? Das liefert Infos darüber, ob ein gültiges Signal empfangen wird. Je nach Einstellung werden dazu verschiedene Kriterien verwendet (Signalstärke, Fehlerrate, Clockrecovery Lock). Wie man dieses Signal sinnvoll nutzen kann, ist mir aber unklar. Meiner Meinung nach ist dieses Signal überflüssig: Man schaltet einfach die Sync Wort Erkennung ein, und wenn das Modul der Meinung ist ein gültiges Sync Wort empfangen zu haben, empfängt man einfach ein Paket. Eine CRC sollte die fehlerhaften Pakete dann schon rauswerfen. > - Was kann man mit "TX Configuration Command" anfangen? FSK modulation > parameters. Damit stellst du die Modulation (Frequenzhub) und die Sendeleistung ein. Je nach Baudrate muss man die Modulation nämlich anpassen.
Datum: 15.07.2007 11:42
Hallo, das Rätsels Lösung für die niedrige SPI Rate ist auch gefunden, die darf bei Fifo Operationen nicht höher sen als f/4 also 2,5 Mhz. Steht als Note im Empfängerhandbuch, sehr klein gedruckt. Habe mir ja auch RFM01 und RFM02 gekauft. Leider scheinen die sehr anders zu sein, besonders der Sender. Wie man da Daten reinkriegt ohne CLK muss ich mir noch anschauen. Frage mich auch, ob noch jemand RFM12 von der Sammelbestellung übrig hat, denn Pollin knallt mir zuviel Marge da drauf, die RFM12 kosten ab 1k nur 2,80 Euro zzgl Zoll und MwSt. Jetzt fehlt nur noch eine sinnvolle Anwendung aber die Batterie -Managemrnt Modes scheinen mir etwas kompliziert zu sein. Gruss aus dem Gartenstuhl (WLAN ist was feines :-) Christian
Datum: 15.07.2007 12:07
RF01 ist noch relativ ähnlich dem RF12, der RF02 ist dagegen ohne FIFO ziemlich unterschiedlich, und vor allem etwas kompliziert in der Ansteuerung da die Daten Bit für Bit übergeben werden müssen. > Frage mich auch, ob noch jemand RFM12 von der Sammelbestellung übrig > hat, denn Pollin knallt mir zuviel Marge da drauf, die RFM12 kosten ab > 1k nur 2,80 Euro zzgl Zoll und MwSt. Stimmt nicht ganz: Bei der Sammelbestellung kostet ein RFM12 2,5€ inkl allem + Versand innerhalb D.
Datum: 15.07.2007 13:19
Und? Gibts noch Module zum kaufen? Oder sind die alle schon weg? RFM01 und 02 brauche ich ja nicht, wenn das 12 alles drauf hat.
Datum: 15.07.2007 13:56
Hi (Editieren geht grad mal wieder nicht) Habe das mit den Status Bits grad nochmal getestet und sie fortlaufend ausgelesen während des Empfangs. Stelle ich LNA Gain und RSSI auf MAX ein, dann floaten die Bits einfach nur beliebig herum. Stelle ich LNA eine Stufe herunter und RSSI ebenfalls, dann benehmen sie sich normal. Sehr seltsam..... denn der Empfang läuft auch auf maximaler Empfindlichkeit, da ich die Flag Bits dazu nicht brauche, aber leider auch einen FIFO Overflow nicht erkennen kann.
Datum: 30.07.2007 16:38
Hallo ich bin neu hier und habe vor eine Funkfernbedienung mit den RFM12 Modulen zu realisieren. Zur Zeit versuche ich die Module mit dem Hardware SPI des 16F877 anzusteuern, der Pic läuft mit 20Mhz. Initialisiert ist der SPI mit: setup_spi(SPI_MASTER|SPI_H_TO_L|SPI_CLK_DIV_64); Wo ich das hier gerade so lese befürchte ich das der Pic vieleicht zu schwach ist :). Könnt ihr mir ein paar Tips zur Programmierung geben ? Ich möchte erstmal nur eine Funkverbindung von A-->B realisieren mit einer Geschwindigkeit von 19200 Baud und einem CRC um falsch empfangene Datenpackete zu erkennen. Bei dem Schaltplan ist noch zu sagen das ich die Platine in einem Joystik verbaut habe, daher auch die ganzen Taster und Achsen und am PortB hängt ein 4x20 Zeichen Display ;) Gruß Dirk edit der Dateianhang scheint leider nicht zu gehen.
Datum: 30.07.2007 20:14
Christian das ist ja mal ein schön ordentlicher Lochrasteraufbau, ich will aber nicht wissen wie das von unten aussieht ;-) Was soll dieses Kupferplättchen (oder was auch immer das ist) auf dem großen IC?
Datum: 31.07.2007 10:01
Hallo, der Code hat noch einige Fehler gehabt, inzwischen läuft es wirklich stabil, da mehr Fehlerabfänge drin sind. Das RFM12 stürzt nicht ab, soviel ist klar, was abstürzte war der Code. Wie die Platine unterdrunter aussieht sage ich lieber nicht :-) Aber alles schön geordnet. Der Kupferaufkleber auf dem uC ist mit einem feinen Drähtchen nach Masse verlegt, da sich in der EMV Kammer zeigte, dass ein 32 Mhz PIC jede menge Dreck rauswirft und sich das dadurch wesentlich verbessert. Die RTC nebenan zeigte ein etwas stolperndes Verhalten, je schneller ich den PIC taktete, desto falsche ging sie. Nun ist es gut.
Datum: 31.07.2007 15:18
@Christian könntest du vieleicht mal deinen Schaltplan posten? ich hab das RFM12 Modul zur Zeit wie in der Abbildung angeschlossen.
Datum: 31.07.2007 17:35
Hallo, Schaltplan gibt es nicht, alles im Kopf oder Skizzen niedergelegt. Das Modul ist nicht ganz richtig angeschlossen, an den FSK gehört ein Pull Up bei Verwendung des Fifo Stacks. Der int kann auch floaten bzw wird auf VDI Signal geschaltet. Gruss, Christian
Datum: 31.07.2007 20:06
@ Christian den FSK Pin habe ich auf einen µC Ausgang gelegt und schalte ihn bei der Initialisierung auf High Pegel. Ich hoffe das geht auch oder muss es ein Pull-up sein ? Gruß Dirk
Datum: 31.07.2007 20:35
Nein, geht ok, dem Pin ist es egal. Allerdings kann ich Dir sagen, dass wenn Du einen High Pin auf Masse legst das Modul ggf. kaputtgeht. Habe ich leider erfahren müssen, die sind nicht wohl nicht kurzschlussicher.
Datum: 31.07.2007 21:06
Danke für den Tipp hab der FSK Datenleitung vorsichtshalber mal ein 12K Widerstand in Reihe gegönnt, falls bei der Initialisierung des Modules mal was schief geht ;)
Datum: 01.08.2007 23:14
Hallo ich wollte nur mal Fragen ob vieleicht jemand den C-Code von Christian nur zum ansteuern des RFM12 umgeschrieben hat? Ich hab damit gerade mal angefangen und mir den Code mal etwas näher angeschaut und festgestellt das es doch schon recht kompliziert ist, da in dem code eine große Anzahl von SPI Geräten angesprochen werden. Nebenbei auch mal ein Lob an Christian, das was ich bis jetzt nachvollzogen habe ist sehr sauber programmiert! :)
Datum: 02.08.2007 09:05
Hi, hier die letzte, stabile Version mit optimalen Parametern, Timeout Check usw. Ich schreibe jedes Modul so, dass es nahezu ohne Änderungen in anderen Projekten wiederverwendet werden kann. Es wird nur ein SPI Gerät angesteuert, dazu dient "Chipselect", das kann man ersetzen. Die anderen 7 Slaves sind hier nicht von Bedeutung. Für AVR Nutzer natürlich sinnlos, deren Compiler ist ganz anders aufgebaut. Es geht auch mehr ums Prinzip, nicht darum jede Zeile zu übernehmen. Derzeit funken die beiden Rechner sich die Daten zu, man kann schnell zwischen Senden und Empfangen umschalten. Systemdaten: Takt: 16 und 32 Mhz fosc, PIC 18F4685 (96kb Flash). Das grundsätzliche Problem was ich derzeit noch habe ist, dass der Empfänger binnen weniger Mikrosekunden reagieren muss, wenn Daten kommen. Ich werde das wohl durch eine lange Präambel beheben, wo der Empfänger dann das DQD Bit abfragt was dann HIGH geht und sich darauf vorbereitet, dass bald Daten kommen werden, also andere Peripheriegeräte sperrt, die den Bus belegen könnten. Wollte erst für SPI einen Busarbiter spendieren aber dann wäre es zu kompliziert geworden.
Datum: 27.06.2008 09:49
Hallo, Ich versuche ihr Treiber in betrieb zu nehmen. Es fehlt aber das Unterprogramm ChipSelect()
Antwort schreiben
Die Angabe einer Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
- Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
- Aussagekräftigen Betreff wählen
- Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
- Groß- und Kleinschreibung verwenden
- Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
- JPEG-Dateien (.jpg) nur für Fotos und Scans verwenden
- Schaltpläne, Screenshots usw. als PNG oder GIF anhängen
Formatierung (mehr Informationen...)
- [c]C-Code[/c]
- [avrasm]AVR-Assembler-Code[/avrasm]
- [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
- [math]Formel in LaTeX-Syntax[/math]
- [[Titel]] - Link zu Artikel


