Da wirst du ein Protokoll brauchen.
http://de.wikipedia.org/wiki/Netzwerkprotokoll
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?
Da wirst du ein Protokoll brauchen.
http://de.wikipedia.org/wiki/Netzwerkprotokoll
Prostetnic Vogon Jeltz
2B | ~2B, That is the Question?
The Answer is FF!
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.
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).
MfG Karl-Heinz
HobbyElektronik hier klicken ....
Warum nicht ein Tokenringnetz nachahmen? das dürfte doch das einfachste sein oder?
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?
Was sind Charfelder? Zeichenfelder?ich möchte ja char felder senden.
Das bestimmte Zeichen ist die Kenung des Empfängers?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?
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.
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:
Code: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.
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/pa...&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.
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.
Lesezeichen