Forum: Mikrocontroller und Digitale Elektronik C-Sourcecode für Funkübertragung


von Christoph Frey (Gast)


Lesenswert?

Hallo zusammen,
ich möchte eine Bidirektionalle Funkstrecke zwischen zwei Chipcon
CC1000 (Transceiver) realisieren, die Transceiver sind jeweils mit
einem 18er PIC von Microchip verbunden (ok ok ich weiß das hier im
Forum AVR favorisiert wird aber ich habe nur eine "Ausrüstung" für
Microchip).
Aber nun meine Frage weiß jemand ob es schon fertige C-Sourcecodes
gibt, die die Sendemimik bzw. das Protokol beinhalten (z.B. Präambel,
Fehlerkorrektur, wiederholendes Senden, Acknoledge)?
Ich denke mir dass so eine Programmierung von null an recht komplex ist
und dass man das Rad hierfür nicht neu erfinden muss. Ich hab aber im
Internet bisher so gut wie gar nix gefunden;-(  (obwohl es immer
pauschal heisst, dass es tausende von Protokolle gibt)
Ich bin also für jede Hilfe offen!
Vielleicht hatte ja von Euch jemand schon ein ähnliches Prob. und kann
mir weiterhelfen!

thx im voraus
Christoph;-)

von zoltan (Gast)


Lesenswert?

Hi,

ich habe sehr gute Erfahrungen mit diesem Transciever modul gemacht:
http://www.active-robots.com/products/accessories/radio-modules.shtml
Von der Anwendung her ist es so einfach, das man eigentlich nur einen
Seriellen Kaber ausseinander schneiden muss. Dann zwei Transciever
dazwischen klemmen und schon funktioniert die Funkübertragung.

Oh, jetzt sehe ich, dass du nach den SourceCode gefragt hast...

Gruß
Zoltan

von OldBug (Gast)


Lesenswert?

Gibts von ChipCon auf der Homepage zum Download...

von Christoph Frey (Gast)


Lesenswert?

Danke für eure Hilfe!
@zoltan
mein Hauptproblem ist nicht die Funktstrecke sondern die sichere
Datenübertragung mit allem was dazu gehört.

@OldBug
Das ist richtig, allerding ist der Code von der Chipcon HP sehr einfach
gehalten bzw. es ist eine einfach (also keine BI-direktionalle)
Funkstrecke und da mir eine sichere Übertragung wichtig ist, muss der
Empfänger dem Sender mitteilen dass das Signal richtig angekommen ist.
Ansonsten hat Chipcon nichts fertiges, hab schon mit en paar Leuten von
denen geredet, aber die meinten immer nur, dass es kein Problem ist und
dass es da viele freie Protokolle geben muesste die man heranziehen
kann (aber irgendwie bin ich zu doof etwas im inet zu finden)

vielleicht weiß ja jemand noch etwas

Gruß
Christoph

von thkais (Gast)


Lesenswert?

Ich hoffe, Du verwechselst Bidirektional nicht mit Vollduplex...
Wenn Du ein Software-Grundgerüst von der Hersteller-Firma hast, schau
doch mal, ob Du etwas drumherumbasteln kannst.
"Sicher" manchen kann man die Übertragung mit Prüfsummen. Um die
Rückmeldung zu übertragen, mußt Du einfach die Richtung umkehren:
Sender wird Empfänger, Empfänger wird Sender. Gleichzeitig geht nicht,
dann müßtest Du auf verschiedenen Frequenzen arbeiten.
Also: Du sendest Dein Datentelegramm, anschließend wird der Sender auf
Empfang umgeschaltet (sofern das nötig ist, ich kenne Deine Module
leider nicht). Entweder empfängt man vom angesprochenen Modul ein
Acknowledge, oder geht nach einer angemessenen Time-Out Zeit in die
Fehlerbehandlung.

von justus (Gast)


Lesenswert?

@Christoph
Probiers mit folgendem Link:
http://www.chipcon.com/index.cfm?dok_id=98&kat_id=6
Die beiden Dateien Application Note 25 und der dazugehörende Sourcecode
sollten einen Einstieg ermöglichen. Jedenfalls ist das Protokoll in der
AN beschrieben.
Ich habe ein ähnliches Problem, allerdings verwende ich weder einen PIC
noch einen Chip von Chipcon, sondern als Controller kommt ein Atmel
mega169 zum Einsatz und als RF Teil werden Private Mobile Radios
eingesetzt, wobei ich die Daten über das Sprachband übertragen werde.

Gruss Justus

von OldBug (Gast)


Lesenswert?

@Christof:
thkais beschreibt das ja schon ganz gut! Was etwas Problematisch ist,
sind Präambel und Framestart, das war in der Beispiel-ISR vom ChipCon
nicht gut implementiert! Ich habe da auch ne Weile tricksen müssen.
Was das Protokoll betrifft: Ich sende mit fester Framelänge (dynamisch
wäre auch nicht so Wild, war bei mir aber nicht notwendig) und hänge an
das Datenfeld noch mal 16Bit-CRC hinten dran. Kommt das Packet beim
Empfänger an und ist gültig (kein CRC-Fehler), so wird ein ACK zurück
zum Absender geschickt. Der wartet etwas länger als beide Packete zum
Senden benötigen würden (Daten + ACK) und wiederholt dann mit einer
"Zufällig" gewählten (begrenzten) Verzögerung das Packet.

Wenn ich das Richtig im Kopf habe, dann hat ChipCon allerdings auch
schon ein winziges Protokoll mit ACK in ihren App-Notes.

von Christoph Frey (Gast)


Lesenswert?

vielen Dank mal für Eure Hilfe, ich werd jetzt mal schauen ob ich
weiterkomme und auf jedenfall wieder bescheid geben.
Die Apllikationen hab ich mir schon angeschaut aber wie @OldBug schon
sagte, die Präambel Funktion versteh ich nicht so richtig (und dadurch
dass der Code für die 16er Famielie geschrieben ist muessen erst die
ganzen Schnittstellen neu für den 18er angepasst werden).
Ich mach mir jetzt erst mal zwei Testplatinen dass ich ein bischen
rumspielen kann.
Wenn ich etwas herausgefunden habe werde ich es hier gleich posten,
vielleicht könnt ihr ja etwas damit anfangen!

gruß
Christoph

von OldBug (Gast)


Lesenswert?

Die Präambel ist hauptsächlich dafür da, den Demodulator auf die
richtige Empfindlichkeit einzustellen (eine Reihe von aufeinander
folgenden nullen und einsen, 0b1010101010101010 [0xAA], kann auch beim
Verlust des ersten Bits als 0x55 erkannt werden). Es gibt auch eine
Betriebsart, in der keine Präambel benötigt wird, hab ich aber nie
benutzt...

von thkais (Gast)


Lesenswert?

Wenn eine Präambel benötigt wird, dann gehe ich davon aus, daß es sich
um AM-Funkübertragung handelt. Bei AM werden die Daten mit
unterschiedlicher "Lautstärke" übertragen (eigentlich nur "Sender
an" und "Sender aus". Deshalb muß der Empfänger trainiert werden,
weil man ja nie weiß, wie weit der Sender entfernt ist und wie "laut"
er nun tatsächlich ist (Stichwort: Pendelempfänger). Man kann sich das
so vorstellen, wie eine automatische Pegelanpassung bei
Kassettenrekordern. Eine Präambel besteht eigentlich nur aus einem oder
mehreren "01010101" - Bytes.
Zusätzlich wirst Du auch die Daten Manchester-Kodieren müssen, weil die
Pendelempfänger ein Problem mit Gleichspannungsanteilen haben. Die
Manchester-Kodierung sorgt dafür, daß nie mehr als 2 "0" oder "1"
Bits hintereinander vorkommen. Zu diesem Thema gibts schon einige
Beiträge.

von justus (Gast)


Lesenswert?

@OldBug
steht Dein Code für ein Weiterverarbeiten zur Verfügung?

Justus

von OldBug (Gast)


Lesenswert?

thkais: Neinein, ist kein AM, sondern FSK und die Kodierung
(Manchester/NRZ) macht der Chip selbständig.
Die Präambel ist für den Bit-Synchronyzer notwendig:

"[..]All modes need a DC balanced preamble for the internal bit slicer
to acquire correct comparison level from an aveaging filter. The
suggested preamble is a '010101...' bit pattern.[..]This is necessary
for the bit synchronizer to synchronyze correctly.[..]"

@justus:
Den Code kann ich so ohne weiteres nicht rausgeben, aber ich kann mal
versuchen am Wochenende die essentiellen Dinge der Übertragung
herauszuziehen.

von Christoph Frey (Gast)


Lesenswert?

@OldBug
da hät ich auch Interesse;-) wenn du so etwas herausgeben kannst
(darfst)! Jetzt muss ich aber erst noch mit der SPI Konfiguration
rummachen das der CC1000 sauber konfiguriert werden kann, in dem
Bereich hat Chipcon schon einiges vorgelegt was die Sache erheblich
einfacher machen sollte.
Was für eine Übertragungsbaudrate empfiehlt ihr? Ich muss wenige Daten
übertragen und der Strombedarf sollte niedrig sein da dachte ich geh
ich auf 19,2KBaud (der Pic wird mit 4MHz betrieben dadurch habe ich eh
nicht alzuviel Möglichkeiten was den Asyncronen USART Modus betrifft).


Gruß
Christoph

von thkais (Gast)


Lesenswert?

@OldBug - habe ich mich da ein wenig getäuscht ? g Kann schonmal
passieren...

@Christoph: 19200 Baud sind eigentlich noch recht viel - ich arbeite
teilweise mit 1200 Baud und weniger.... Kommt auf die Datenmenge an.
Ich berechne die Anzahl der Bytes, die ich pro Sekunde erwarte, dann
nochmal 30% Aufschlag, der Sicherheit wegen, dann *10 (1 Start, 1 Stop
und 8 Datenbits) und schon hat man die theoret. min. Baudrate. Ich
nehme dann bestenfalls die nächsthöhere.

von OldBug (Gast)


Lesenswert?

19.200 geht mit den CC1000s ganz gut! Hab ich auch verwendet, für die
jenseits 70k braucht man nen bestimmten Quarz am CC1000...

Das Konfigurations- und das Kommunikationsinterface ist sehr einfach
gehalten, könnte ich auch noch mal reingucken, wenns da Probleme geben
sollte.

von Christoph Frey (Gast)


Lesenswert?

@OldBug
he vielen Dank für dein Angebot! Hab mich nochmal mit den Datenblätter
beschäftigt, denke dass es mit der Konfiguration hoffentlich nicht
alzuviel Probleme gibt. Die SPI "Schnittstelle" ist ja beim PIC recht
einfach zu handeln.
Also für die Konfiguration SPI und für die Übertragung der Daten denk
ich ist wohl die Synchrone Slave Schnittstelle bestens geeignet. Da der
CC1000 ja den Takt im Syncronen Manchester encoded Modus vorgibt dachte
ich ist es wohl eine saubere und recht unkomplizierte Lösung (oder lieg
ich da falsch?) mit der ich direkt die Daten wieder in ein Register
bekomme.
Wie ich dann aber die Schnittstelle nach der Präambel auf das erste
Datenbit syncronisiere (möglichst ohne jedes Byte kompliziert zu
"shiften"), da werd ich dann vielleicht wieder auf dich zurückkommen
(wenn das OK ist)!

Ps. ich hoffe dass ich mich nicht zu doof anstelle aber es ist meine
erste Funkstrecke und mit USART / SPI und Co. hatte ich bisher auch
recht wenig zu tun;-)
Gruß
Christoph

von Christian (Gast)


Lesenswert?

Hallo Christoph,

Bist du mit deinem Projekt inzwischen weitergekommen?
Könntest du mir deinen Code per Mail zusenden, da ich das gleiche
Problem mit dem 18er Pic und dem CC1000 Ic habe.

Gruss Christian

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.