PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : funk verschlüsselung



Asche
28.12.2005, 11:12
ich möchte gerne 2 avrs über funk verbinden.
das ganze soll aber mit mehreren auch gehen, ohne dass sie sich gegenseitig stören.
wenn ich 10 mal das mit den 2 avrs mache und nur die 2 avrs miteinander in verbindung stehen sollten werden ja die anderen stören.

wie kann man das richtig machen, ohne gleich den kanal wechseln zu müssen?

Vogon
28.12.2005, 20:54
Da wirst du ein Protokoll brauchen.
http://de.wikipedia.org/wiki/Netzwerkprotokoll

Marco78
28.12.2005, 22:36
Was hat das denn mit verschlüsselung zu tun?
Aber egal.

Entweder ein Protokoll und ein AVR ist der "Master", oder wenn das nicht geht (und so wird es bei dir wohl sein), auf Zufall setzen.

Jeder bekommt eine Adresse.
1 sendet zu 2.
3 und 4 und 5 und 6 und 7 und 8 hören das. Die fangen für eine bestimmte Zeit schonmal nicht an zu senden. Die Länge der Datenpakete ist ja sicherlich vorhersehbar.
2 sendet zu 1, das er ihn verstanden hat. Es kann ja auch sein, das 5 zufällig auch grade was senden wollte und nur Müll ankam.
5 hat aber nicht gesendet und 2 hat alles empfangen und bestätigt das an 1.
1 sendet das was er senden wollte.
2 bestätigt den Empfang.
1 gibt den Funk für andere wieder frei.

Jetzt haben aber 1 und 5 gleichzeitig gesendet. Weder 2 noch 6 konnten es verstehen.
1 und 5 bekommen innerhalb einer vorgegebenen Zeit keine Antwort.
Jetzt kommt der Zufall ins Spiel.
1 und 5 warten eine Zufallszeit bis sie wieder senden. Diese Zeit sollte sich aber nicht im mS-Bereich abspeilen.
5 hatte Glück und seine Zeit war kürzer. Er sendet wieder alle (auch 1) hören das und warten wieder auf ein "Freizeichen".

Das ganze entspricht schon einem kleinen Protokoll ;)

Je nach Funkmudol könnte man evtl auch einen ext. INT nehmen um auszuwerten, das grade was gesendet wird. So muss man nicht den ganzen Text auswerten, sondern nur drauf achten, ob man selbst gemeint ist. Ist vielleicht auch nicht verkehrt, um das Programm zur richtigen Zeit zu unterbrechen. Erstmal zwei Zeichen "Müll" senden und dann die Adresse.

kalledom
28.12.2005, 23:37
Du könntest mit einem "Master" die "Slaves" zyklisch abfragen und somit gleichzeitig deren Funktion feststellen. Antwortet einer nicht, wird nach einer TimeOut-Zeit die Abfrageschleife mit dem nächsten fortgesetzt.
Wenn der "Ersatz-Master" merkt, daß er einige Zeit nicht mehr abgefragt wurde, kann er die "Master-Funktion" übernehmen.
Ein "Neuer" wird z.B. durch Abfrage auf Nummer 0 erkannt (er wird sich vor TimeOut melden) und bekommt dann vom Master eine Nummer zugewiesen.
Die eigentliche Übertragung würde ich wie bei einer RS232 byte-weise mit einem festgelegten Datensatz wie z.B. Start-/Kennungs-Byte, Nummer, Kommando, Daten, ... vornehmen (fast wie CAN, aber nur fast).

ThunderD
29.12.2005, 01:01
Warum nicht ein Tokenringnetz nachahmen? das dürfte doch das einfachste sein oder?

Asche
29.12.2005, 21:42
ich möchte ja char felder senden.
geht dass, wenn ich am anfang jedes char feldes ein bestimmtes Zeichen setze und es dann nachempfang immer so filtere, dass es nur die Daten mit dem richtigen Zeichen weiterverarbeitet?

Marco78
29.12.2005, 21:54
ich möchte ja char felder senden.
Was sind Charfelder? Zeichenfelder?


geht dass, wenn ich am anfang jedes char feldes ein bestimmtes Zeichen setze und es dann nachempfang immer so filtere, dass es nur die Daten mit dem richtigen Zeichen weiterverarbeitet?
Das bestimmte Zeichen ist die Kenung des Empfängers?

Aber pauschal kann man deine Frage mit JA beantworten.
Ein AVR kann alles was man ihm beigebracht hat/programmiert hat.
Den "Text", den du sendest, oder besser gesagt, der empfangen wird, kann ja in die einzelnen Buchstaben zerlegt werden. Den Aufbau des Protokolls bestimmst du ja.
Du kannst ja *001# senden, um den Empfänger 1 anzusprechen.
Und alle Zeichen zwischen * und # kann die Adresse des Empfängers sein. Egal wieviele Zeichen es sind. Also *1# und *AC45FA# können beides Empfängeradressen sein.

Jeder Empfänger kann erstmal alles zwischen * und # auswerten und sehen ob er gemeint ist. Wenn ja, dann die Zeichen danach auswerten. Wenn nicht, dann weiter warten.

Alles was passieren soll, gibst du ja im Programm vor!

Deshalb solltest du nicht fragen, ob das geht, sondern eher fragen, welcher AVR diesen Tätigkeiten "gewachsen" ist.

Solltest du jetzt tatsächlich diese Frage stellen, musst du aber noch dazu sagen, was der AVR sonst noch können soll. Nur Daten empfangen und senden kann ja nicht alles sein.

Asche
29.12.2005, 22:15
solle vorerst so ein art kleines wörterbuch sein.
über eine tastertur werden wörter eingegeben und mit vorhanden verglichen und entsprechendes über funk an ein avr gesendent, der es dann auf ein lcd display ausgiebt.

das ganze ist für ein programm in c++ für nen pc ungefähr so:


string eingabe;
string s1[10];
string s2[10];

cout<<"Wort: ";
cin>>eingabe;
for(int i;i<10;i++)
{
if(eingabe==s1[i])
{
cout<<s2[i]
}
}



ich hab mir auch schon überlegt, welcher avr ich verwenden soll.
das wollte ich eigentlich in einen anderen thread fragen.
wie viel solcher wörter kann ich max mit welchen avr speichern.

Marco78
29.12.2005, 22:33
Tastatur und LCD, da würde ich schonmal einen Mega8 empfehlen. Das Programm selbst benötigt ja auch etwas Speicher und dann kommt noch RS232 dazu.
Allerdings nur, wen du ein "normales" Text-LCD haben willst. Ein grafisches braucht die 8 Datenbits. Und zwar zusammenhängend an einem Port. Das würde schon einen Mega16 bedeuten, weil der Mega8 zu wenig (zusammenhängende) Pins hätte wenn du Hardware-RS232 nimmst.

Speichern kannst du die Wörter im SRAM oder EEPROM. Der SRAM ist nach jedem Reset gelöscht. Ist sicherlich nicht so virteilhaft. Im EEPROM bleiben sie dauerhaft (für einige viele Jahre zumindest) gespeichert.
http://www.atmel.com/dyn/products/param_table.asp?family_id=607&OrderBy=part_no&Direction=ASC <--- dort findest du eine Übersicht, welcher AVR wieviel Speicher hat.
Ein Zeichen belegt ein Byte und damit kannst du ausrechen, wieviele Zeichen/Wörter(je nach Länge) du speichern kannst.

Sollte keiner der EEPROMs groß genug sein, oder der AVR bei der EEPROM-Größe zu teuern sein, kannst du auch externen EEPROM verwenden. Dort gilt die gleiche Rechnung und die maximale Größe ist fast nur noch durch deinen Geldbeutel eingeschränkt.

Ich hoffe, ich konnte erstmal halbwegs helfen. Wenn icht, dann weiter fragen. Irgendjemand kennt sicherlich die Antwort.

Asche
29.12.2005, 23:07
ich würde gerne einen externen eeprom mit mindestens 200kb verwenden.
hab jetzt mal bei reichelt geschaut, aber die haben viele verschiedene und ich weiß nicht, welchen ich brauche/besser ist.

Asche
29.12.2005, 23:36
weiß jemand, welchen ich da verwenden soll???

ThunderD
30.12.2005, 02:45
hast du alten Edo Ram zuhause? Einer im Forum verwendete mal einen Edo ram als speicher.


Zu deinem C programm oben. Du hast ein Charfeld zuviel meiner meinung nach. Du überprüft ob das zeichen = s1[i] und gibst s2[i] aus. Wenn die Felder identischen Inhalt haben, kannst du s2 kicken. und gleich s1 ausgeben.

Asche
30.12.2005, 18:31
das programm stimmt.
ich habe ja gesagt, es wird ein art wörterbuch.
und desswegen haben die string felder nicht den gleichen inhalt.
sondern wenn man es mit dem wörterbuch vergleicht, ist s2 die übersetzung von s1.

habe keinen edo ram, aber dürfte ja kein problem sein den bei ebay billig zu bekommen.

wie verbindet man so einen mit einen avr und wie sieht da die software aus?
gibts da ein tut oder sowas?

Marco78
30.12.2005, 20:39
Ich glaube ThunderD meinte, das du S2 nur einmal brauchst und kein Array anlegen musst.
S2 kann ja immer nur den "Wert" haben, der grade eingegeben wird. Und mann kann nur ein Wort zur Zeit eingeben. Deshalb könnte man einen String für die Eingabe benutzen und mit den Feldern vergleichen. Wenn es in einer der Felder gefunden wurde, kann man den Inhalt der Felden funken.
Ich glaube so meinte er das.

EDO-Ram speichert aber auch nicht dauerhaft! Du brauchst schon einen EEPROM.

200kB ist für handelsüblichen EEPROM schon relativ viel. Du bräuchtest dann mehrere EEPROMs.
Was hälst du denn von CF- oder SD-Karten?
Die bieten ab 16Mb für wenige €. Einige haben bestimmt noch aus Handys oder Digicams ein paar kleine Karten, die sie sogar verschenken würden.

Wenn du nach Software für den VR fragst, solltest du sagen, welche Programmiersprachen du kannst oder welche du anwenden willst.
Mit der Suche des Forums, kannst du auch nach EEPROM oder SD oder CF nur in den Unterforen in den du programmierst suchen lassen.