www.mikrocontroller.net

Forum: Projekte & Code PIC18: Getesteter CCS C-Code für RFM12 Modul


Autor: Christian J. (elektroniker1968)
Datum:
Angehängte Dateien:

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

Autor: Christian J. (elektroniker1968)
Datum:

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

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

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

Autor: Christian J. (elektroniker1968)
Datum:

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

Autor: Christian J. (elektroniker1968)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier mal mein Testboard, Fehlerrate wirklich gut!

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

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

Autor: Christian J. (elektroniker1968)
Datum:

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

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

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

Autor: Christian J. (elektroniker1968)
Datum:

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

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

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

Autor: Christian J. (elektroniker1968)
Datum:

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

Autor: Christian J. (elektroniker1968)
Datum:

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

Autor: Dirk T. (dirk_t)
Datum:

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

Autor: Marius S. (lupin) Benutzerseite
Datum:

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

Autor: Christian J. (elektroniker68)
Datum:
Angehängte Dateien:

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

Autor: Dirk T. (dirk_t)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
@Christian
könntest du vieleicht mal deinen Schaltplan posten? ich hab das RFM12
Modul zur Zeit wie in der Abbildung angeschlossen.

Autor: Christian J. (elektroniker1968)
Datum:

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

Autor: Dirk T. (dirk_t)
Datum:

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

Autor: Christian J. (elektroniker1968)
Datum:

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

Autor: Dirk T. (dirk_t)
Datum:

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

Autor: Dirk T. (dirk_t)
Datum:

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

Autor: Christian J. (elektroniker1968)
Datum:
Angehängte Dateien:

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

Autor: Mischaka (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Ich versuche ihr Treiber in betrieb zu nehmen.
Es fehlt aber das Unterprogramm

ChipSelect()

Autor: Taz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Christian K. schrieb:
- zB dass sie nur in den Receive bzw Transmit Mode gehen, wenn man nach
der Init Routine einmal den Status abfragt.

Ich habs noch nicht vollständig durchgetestet, aber es liegt am SDI Pin 
von der SPI Schnittstelle. SDI muss 0 sein um SDO abfragen zukönnen. Bei 
meinem MC ADUC841 bleibt SDI nach der Übertragung auf dem letzen Zustand 
stehen, was bedeutet ich muss eine 0 (oder jede gerade Zahl) verschicken 
(man kann auch den Status lesen) damit SDI vor der Abfrage vom SDO 
sicher auf Null ist (leider kann ich den SDI Pin nicht direkt 
ansteuern). Ob der IRQ Pin das gleiche Problem hat werde ich testen. Im 
Moment scheint das Senden von Daten zu funktionieren aber der Empfang 
geht gar nicht. Kein Pin reagiert. Bin aber erst zwei Tage dran.

Was noch merkwürdig ist im Code vom Christian, das er immerwieder die 
Schnittstelle initialisiert RF_Init_SPI(). Einmal sollte doch genügen.
Ansonsten sieht es meinem Programm erschreckent ähnlich.

Gruss Taz

Autor: Taz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
- Nachtrag zu meinem letzten Beitrag
Das mit dem SDI Pin hat sich zerschlagen hatte andere Gründe.
Kann ich aber nicht mehr nachvollziehen, zu viele Änderungen auf einmal.

Habe jetzt eine lauffähige Version für den ADUC841 Mikrokontroller, in 
der man per Define zwischen Sender und Empfäger wählen muss. Meine 
Anwendung ist, ein Modul als Sender, ein anderes als Empfänger.
Zudem habe ich noch ein Timingdiagramm vom Empfänger gemacht, falls es 
einen Interessiert.
Ein Problem das hier auch schon erwähnt wurde war, das der Empfänger 
weiter Daten empfängt, wenn keine mehr gesendet werden. Dadurch wird ein 
RX-FIFO Overflow erzeugt und das Chip streikt. Erst ein ReadStatus 
löscht das Overflowbit und das Chip empfängt wieder. Bei mir im 
speziellen, wird nach 10 Zeichen der Interrupt gesperrt und die Zeichen 
ausgewertet. Aber das 11.Zeichen im RFM Chip löste auch noch einen 
Interrupt aus, der aber nicht abgearbeitet wurde da gesperrt. Lösung - 
nach 10 Zeichen ReadStatus für clear Overflowbit und ein clear 
InterruptFlag.
Was noch eingebaut werden muss, ist eine Checksumme.Habe ich in dieser 
Testsoftware noch nicht drin, kommt als nächstes wenn es in die 
Anwendung geht (Gartenlicht an-aus). Da fällt mir ein dafür brauch ich 
keine Checksumme.

Autor: Karl K. (bluestar84)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Einen schönen guten Tag auch, bin neu hier und hab mich mal n bischen 
mit dem pic und dem RFM auseinandergesetzt, bei der Programmierung hab 
ich mich sehr an eure Vorschläge gehalten, aber irgenwie ist da noch der 
wurm drine, ich selber benutz das RFM12 von Pollin. Ich wollte damit ein 
kleines spiel programmieren, um die Funkübertragung erstmal 
auszuprobieren. Wäre cool wenn mir jemand nen tipp geben kann wo ich 
scheisse gebaut hab.
Außerdem nimmt er den PORTA als eingang nicht an, und ich weiß nicht 
wieso, aber ihr bestimmt:-)
Mfg Karl

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.