Funkverbindung Attiny in Bascom

wolverine

Neues Mitglied
23. Mai 2012
24
0
0
Sprachen
  1. BascomAVR
Hallo zusammen

ich hab mir vor kurzem ein günstiges Funkmodul gekauft.
Jetzt wollte ich mal damit über einen Attiny13 (je einen beim Sende und Empfangsmodul) eine LED beim Empfänger einschalten.
Wie realisiert man sowas ganz einfaches um nur wenige Bytes zu übertragen und diese dann zu überprüfen?
Denn wenn man ja nur kurz ein High Signal an den Sender gibt, wird das ganze ja sehr störanfällig.
 
Hallo wolverine,

das ist ohne nähere Angaben zum Funkmodul schwer zu sagen.

Gib uns zu diesem Modul bitte mal ein paar mehr Infos.

Gruß
Pirx
 
Hallo,

http://www.seeedstudio.com/wiki/433Mhz_RF_link_kit

Hier den Link zum Funkmodul

Aber wie schon gesagt ich suche eine sehr einfache Möglichkeit, die mit einem Attiny13 realisierbar ist. Allerdings sollte es auch nicht zu störanfällig sein.
tja ... das ist ein ganz rudimentärer Sender und Empfänger wenn ich das so richtig herausgelesen habe. Das heißt, du must auch die gesamte Signalerzeugung von dem was über den Äther gehen soll komplett selber machen. Also nicht vergleichbar mit den RFM12 oder ähnlichen. Der DATA-Eingang bzw -Ausgang liefern dir lediglich das empfangene Signal oder beim Sender schickst du das Signal da hin. Genauso gut könntest du mit einer IR-LED und nem IR-Empfänger eine Infrarot-Fernbedienung bauen. So etwa arbeitet das Ding - aber dann mit Funk. Tja ... sieh dir schonmal sowas wie Manchesterkodierung oder FSK oder sowas an. Du mußt deine Daten auf ein Taktsignal aufkodieren, das mit dem Modulator (Sender) in den Äther schicken, auf der anderen Seite dieses Signal wieder vom Empfänger abholen, die Daten aus dem Empfangssignal zurückgewinnen, Fehlerkorektur machen, usw .... Ob das alles in einen Tiny13 paßt ... Mit Bascom definitiv nicht.

Um es zum funktionieren zu bringen mußt du den Datenstrom mit einer Präambel/Syncbereich anfangen. Zum Beispiel mit dem Bitmuster 0101010100110011 oder sowas. Darauf kannst du dann aufsynchronisieren. Da du aber damit die Daten nicht vom Sync/Präambel auseinanderhalten kannst mußt du deine Datenbits auf deinen DatenTakt aufprägen. Zum Beispiel mit Manchestercode. Also sendest du zB immer weiter 001100110011001100110011 und wenn dann eine 1 in deinen Daten kommt drehst du einen Flankenwechsel zB so ... 00110011010100110011 . Das wäre dann zB der Bitstrom 00100 . Aber kannst du dir ja selber mal bei Wikipedia durchlesen.

Gruß
Dino
 
Hallo,

wenn die Datenrate nicht zu groß ist, könnte schon RC5 ausreichen. Dann würde Bascom schon ne Menge an arbeit abnehmen.


Gruß
Gerhard
 
Für Arduino und/oder C scheints bereits geeignete eigene Protokolle/Libs zu geben - allerdings hab ich so auf die Schnelle nix zu den "Systemanforderungen" gesehen gehabt.
Wie ist das eigentlich mit der Trägerfrequenz? Die wird bereits in den Modulen erzeugt/gefiltert?
Dann könnte (!!), wenn man das Fehlerrisiko und so in Kauf nimmt doch auch UART reichen (mit Parität und Software-Redundanz-Check und so) - kommt natürlich vor allem auch noch drauf an, wie "frei" der Äther da ist...
 
Hallo LotadaC,

Wie ist das eigentlich mit der Trägerfrequenz? Die wird bereits in den Modulen erzeugt/gefiltert?
Dann könnte (!!), wenn man das Fehlerrisiko und so in Kauf nimmt doch auch UART reichen (mit Parität und Software-Redundanz-Check und so) - kommt natürlich vor allem auch noch drauf an, wie "frei" der Äther da ist...

Der Sender moduliert eine 434MHz Sendefrequenz mit dem eingehenden Bitstrom. Der Empfänger liefert dann wieder den Bitstrom den er von den 434MHz runtergezupft hat.

Theoretisch würde auch ein UART reichen. Das wär mir über Funk aber echt zu fehleranfällig.

Normalerweise nimmt man dafür eine synchrone Übertragung mit einem Datentakt. Dann kann sich die Empfangsroutine auf den Takt aufsynchronisieren und hat auch Zeit für diese Aufgabe. Für diese Synchronisationsphase nimmt man normalerweise einen Vorspann mit Bitwechseln. Dann gibt es als Startsignal einen Bitwechsel der in einer normalen Übertragung nie vorkommen kann. Danach kommen die Datenbits die auf dem Takt aufmoduliert sind. Also zB mit Manchestercode. Wie das genau abläuft war mal in einem Buch zum Z80-SIO (lang ists her) schön erklärt. Zum Schluß sollte man eine CRC übertragen damit man sicher ist das die Bits sauber angekommen sind.

Solche Übertragungen kann man in manchen IR-Protokollen oder auch in manchen Barcodes finden.

Man müßte es wohl einfach mal austesten.

Gruß
Dino
 
Danke für eure Hilfe!!

Werde mal RC5 probieren und wenn das nicht geht oder zu fehleranfällig ist, die Manchestercodierung versuchen.
 
RC-5 ist Manchester-codiert - allerdings noch mit einigen Extras in der Struktur. Unter anderem werden in einem Telegramm 2 Nutzdatenpakete untergebracht: eins mit 5 Bit, eins mit 6 Bit - theoretisch sollte es also auch möglich sein, da ein Byte in Nibbles zu teilen (und die restlichen Bits zusätzlich als Paritätsbits zu verwenden) - aber die ganze Bitschubserei bringt natürlich auch einen gewissen protokollarischen Aufwand mit sich. Abgesehen davon legst Du Dich damit auch auf die langsame Bitrate fest (Gabs in dem Frequenzband nicht auch irgendwelche Einschränkungen, was die maximal erlaubte Sendedauer (am Stück) betrifft? Oder war das woanders? Bei 8??MHz? Irgendwie ist mir so...)

@Dino: ok, hatte ich also richtig vermutet. Fehleranfälligkeit via UART usw ist klar (deswegen ja auch "...könnte (!!)...")...

ABER ich hab mal einen Blick ins DB des Tiny13 geworfen:
  • 1 kByte Flash (also 512 words)
  • 1 8-Bit-Timer
  • kein HW-UART
  • kein HW-SPI
  • nichtmal USI
  • 64 SRAM-Register
Ok, Du willst ja nur einfache Schaltvorgänge damit auslösen, sollte möglich sein.

Hmm... (fast)PWM... was geschieht eigentlich mit dem Output-Pin, wenn man irgendwo zwischendurch den CompareOutputMode umschaltet? (also insbesondere zwischen Inverting und nonInverting). Dazu wäre ja nur das COM0A/B0-Bit in TCCR0A zu manipulieren, in der OutputCompare-ISR oder so... (das OC-Register steht dann bei 1/2)...
Leider ist TCCR0A nicht "directly bit-accessible", aber in ASM sollte das trotzdem mit wenigen Instruktionen gehen:
-TCCR0A-Maske für 1 in ein Register
-zu sendendes Datenbyte in ein anderes
-letzteres links/rechtsschieben
-nächsten Befehl bei Carry überspringen (BRCS)
-erstes Register mit Maske für 0 überschreiben
-erstes Register nach TCCR0A schreiben
(zusätzlich braucht man natürlich noch einen Zähler für die Bits, den aber in jedem Fall - und ja, so ist der COM von OC-B auch nicht mehr umschaltbar, dafür müßte man dann ReadModifyWrite verwenden)

Oder wird die COM-Einstellung nur im TOV oder so übernommen? Müßte man eigentlich glatt mal ausprobieren...
(jaja, ich weiß... mal wieder reichlich unkonventionell...:p)
 
Hallo zusammen,

ich würde mir echt überlegen, ob es Sinn macht, hier soooo viel Energie hineizustecken, um das Funkmodul zum Laufen zu bringen.

Ich finde es natürlich schon interessant, die Beiträge über low level Übertragung, Modulation und Verfahren zur fehlertoleranten Übertragung zu lesen. :)

Aber: Zum Beispiel für die RFM12B Transceiver, gibt es mit BascomAVR schon einige Lösungen, hier muss man sich auch nicht mit low level Übertragung befassen.


Vielleicht gibt es aber auch für das "günstiges Funkmodul" bereits schon eine Lösung, ich würde hier vielleicht einmal im Bereich Arduino forschen.

Dirk :ciao:
 
Hallo zusammen,

Jetzt wollte ich mal damit über einen Attiny13 (je einen beim Sende und Empfangsmodul) eine LED beim Empfänger einschalten.

.... Ob das alles in einen Tiny13 paßt ... Mit Bascom definitiv nicht.

ABER ich hab mal einen Blick ins DB des Tiny13 geworfen:
  • 1 kByte Flash (also 512 words)
  • 1 8-Bit-Timer
  • kein HW-UART
  • kein HW-SPI
  • nichtmal USI
  • 64 SRAM-Register
Ok, Du willst ja nur einfache Schaltvorgänge damit auslösen, sollte möglich sein.

ich versteh nicht warum immer wieder Leute versuchen sich mit dem Tiny13 selbst zu quälen :p

Das ist so als wenn man sich mit 4 Leuten in eine Telefonzelle stellt und ne Modeschau machen will :sarcastic:
Dauernd hat man den Ellenbogen des anderen im Kreuz und weiß nicht wie man sich danach wieder entknotet bekommt.

Gruß
Dino
 
Wenn das jetzt 'ne Herausforderung sein soll...

ich hab noch ein paar Tiny10 hier (in SOT23). Allerdings werde ich mir deswege keine rudimentären Funkmodule kaufen...:p
Hat schonmal wer versucht, über Bascom eine leere loop in den Tiny13 zu proggen? Was bleibt da überhaupt?
 
Hallo,

Wenn das jetzt 'ne Herausforderung sein soll...
für dich wohl weniger :p Ich seh das aber leider oft genug bei Einsteigern und genau da ist dann der Kampf an mehreren Fronten vorprogrammiert. Ich würde da im Notfall auf Assembler ausweichen :cool:

ich hab noch ein paar Tiny10 hier (in SOT23). Allerdings werde ich mir deswege keine rudimentären Funkmodule kaufen...:p
Hat schonmal wer versucht, über Bascom eine leere loop in den Tiny13 zu proggen? Was bleibt da überhaupt?
Da Bascom nicht optimiert wird da dann wohl ne lehre Schleife im Speicher stehen (mit samt Initialisierung des Controllers).

Gruß
Dino
 
...wird da dann wohl ne lehre Schleife im Speicher stehen (mit samt Initialisierung des Controllers)...
Genau darum gehts mir ja. Mir ist bei unterschiedlichen Reassemblierungen desöfteren ein immer ähnilcher Codeblock aufgefallen (irgendwas mit Setzen und löschen von Bits in R6 oder so - über das T-Bit, wenn ich mich recht erinner (BitLoad/BitStore))
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)