Ich habe folgende Vorrausetzung:
Mehrere programmierbare Bauelemente, nur eine Leitung zum Daten
übertragen, die Übertragungsprotokolle sind allen Elementen bekannt,
aber... Sowohl das sendende als auch das empfangende Element kennt nicht
die Übertragungsgeschwindigkeit des anderen und... Es übertragen über 50
Elemente über die gleiche Leitung PTP. Die Im Micronetzwerk verbauten
Elemente können nicht nur leicht in ihrem Cpu-Takt abweichen, sie können
gar mit weit auseinanderklaffenden Frequenzen arbeiten (1 - 40 Mhz) und
eine einheitliche Schnittstelle gibt es nicht. Es gibt nur den einen Pin
den ich nach belieben programmieren kann. Quarze kommen nicht zum
Einsatz und einzellne Module können unter leichten Störungen leiden
(Spannungsabfall).
Ich will folgendes:
Ein auf Empfang gestelltes Modul soll die aktuelle
Übertragungsbeschwindigkeit auf der Hauptleitung erkennen (permanent und
ohne Datenverlust). Dies muss ich mit so wenig Befehlen wir möglich
umsetzen (Assembler - AVR). Momentan habe ich aber nicht mal einen
Ansatz, wie ich das umsetzen soll. Der resultierende Datendurchsatz ist
mir erstmal egal. Wenn sich zwei Elemente spontan auf eine möglichst
hohe Geschwindigkeit einigen kommt mir das aber entgegen.
Bei dem Projekt geht es nicht um High-End-Lösungen. Es muss nur einfach
irgendwie funktionieren. Es geht auch nur ums Übertragen eines aktuellen
Status oder den aktellen Wert des ADC, usw.
BTW: Kennt einer einen ADC der mit mehr als 24 Bit messen kann?
Grüße
>Was für ein Unsinn.
Denke ich auch.
>BTW: Kennt einer einen ADC der mit mehr als 24 Bit messen kann?
Ich glaube, dass jemand, der im Netz keinen ADC findet, auch keine
Design mit so einem Baustein hinbekommt.
Hier wäre jedenfalls einer:
http://www.ti.com/lit/ds/symlink/ads1282.pdf
Ich würd mich jedenfalls mal LIN anschauen.
Dort gibt es Autobaud, mit dem die um ca +-2% schwankende Baudrate
erkennen kann. Prinzipiell müsste das auch mit 4000%/-97.5% gehen. Dann
aber nicht mit der Autobaud-Funktionalität eines Mikrocontrollers,
sondern per Input Capture.
Wegschmeißen und alles komplett neu und vernünftig machen!
Alleine diese Aussage:
Micronetzwerk schrieb:> Dies muss ich mit so wenig Befehlen wir möglich> umsetzen
ist grenzwertig.
Was sind denn "so wenig befehle wie möglich"? Mal angenommen 5000
(asm-)befehle wären das absolute minimum, was du an befehlen brauchst...
ist das dann noch brauchbar?
Grundsätzlich müsste hier jede Übertragung mit einem festen
Signalmuster ohne Bedeutung beginnen, aus dem sich jeder
Teilnehmer am Bus die Übertragungsrate ermitteln kann.
Dann folgen die Adresse, dann der Befehl, die Daten etc...
Bei 1...40 MHz sollte man sich aber auch auf eine Baudrate o.ä.
einigen können. Logischerweise bestimmt der langsamste Teilnehmer
die obere Grenze dafür: Sollte es schnellere Übertragungen auf
diesem Bus geben, könnte ein langsamerer Teilnehmer etwas
missverstehen - und dann folgt Kuddelmuddel...
So wie das Lin-System möchte ich meins auch gestalten:
Ist ein Modul der Meinung die Leitung ist frei sendet es einfach drauf
los. Dabei verhindert eine analoge Schaltung, dass das Modul die
Datenleitung auf High schalten kann, wenn die Leitung von außen bereits
auf Low ist (und umgekehrt). Gesendet wird die Adresse des Ziels, dann
die eigene Adresse und der Befehl bzw. die Daten. Das empfangende Modul
antwortet mit der Senderadresse, der eigenen Adresse und den
angeforderten Daten bzw. dem empfangenen Befehl als Bestätigung.
Antwortet das Empfängermodul nicht korrekt, ist die Nachricht nicht
empfangen worden.
Alles woran ich scheitere ist die Synchronisierung. Ich könnte aber
folgenendes versuchen:
Ich gehe auf eine konstante Übertragungsgeschwindigkeit für alle Module.
Jedes Modul das nicht sendet misst den zeitlichen Abstand der kurzen
High-Low-Wechsel. Dies soll dann die korrekte Geschwindigkeit fürs
Empfangen und Senden sein. Dabei gehen aber bereits die ersten Bits
verlohren. Dies umgehen könnte ich, indem ich einfach eine Art
Wake-Up-Befehl sende, an dem sich alle empfangenden Module orienteiren
können.
Das was ich mir da ausgedacht habe hat für meinen Geschmack aber zwei
Nachteile. Ich kann nicht mit verschiedenen Geschwindigkeiten auf der
gleichen Leitung arbeiten und ich denke das wird zu viele
AVR-Assembler-Befehle verbrauchen. Als Erstkonzept ist es aber
Entwicklungsfähig.
Grüße
@Oldie
Zumindest theoretisch müsste es einen Weg geben langsamere Teilnehmer
bei schnelleren Übertragungen auszuschließen. Dafür fällt mir aber grade
nichts ein.
@ADC
Tu ich...
@Oldie
Wenn ich jede Nachricht um eine Checksumme ergänze, können Module, die
für die Nachricht zu langsam sind, die Nachricht verwerfen. So könnte
ich bestimmte Geschwindikeiten (sagen wir 1, 10, 100, 1000 khz)
vorgeben. Bekommt ein sendendes Modul auf seiner hohen Geschwindigkeit
nicht die erwünschte Antwort, versucht er es bei der nächsten
Gelegenheit mit einer niedrigeren Geschwindigkeit. Müsste eigendlich
auch mit jeder anderen Geschwindigkeit funktionieren.
Micronetzwerk schrieb:> @ADC>> Tu ich...
Benutz mal Dein Hirn!
24 Bit Auflösung sind 16777216 diskrete Werte. Bei einem Messbereich von
5V ergäbe das eine Schrittweite von 0,000'000'298V. Das sind 300
Nanovolt. Weißt Du, in was für Regionen Du Dich da bewegst? Kannst Du
überhaupt eine so gute Spannungsquelle herstellen? Mit Sicherheit nicht,
so wie Du Dich hier äußerst.
Geh wieder mit Deinen Legos spielen.
fchk
@Frank K.
Genau, weil du dich hier so erwachsen gibst... Das ich nicht lache. Und
ein Poti der rund 40 Euro kostet sollte so genau sein... Und ja ich
brauche eine so hohe Auflösung und sogar noch sehr viel mehr.
Micronetzwerk schrieb:> Das ich nicht lache. Und> ein Poti der rund 40 Euro kostet sollte so genau sein...
@Frank K.
Ja, das musst Du nähmlich wissen, solche teuren Potis sind so genau,
das ist nähmlich ein 46603 Gang-Spindelpoti ;)
Wie sehen denn die Signale aus, die Du mit 24 bit oder mehr messen
willst?
Wie sieht denn die Referenz aus, die diese Genauigkeit leistet?
Wie sieht denn Dein Schaltungsaufbau aus, dr 24 bit oder mehr
verarbeiten kann?
Wie ist denn das Rauschen Deiner gesammten Meßschaltung?
0,3 µVolt sind verdammt wenig... und Du willst ja noch genauer messen?
Micronetzwerk schrieb:> Und ein Poti der rund 40 Euro kostet sollte so genau sein...
O nein. Ist es nicht. Nicht ansatzweise. Sieh doch einfach mal ins
Datenblatt des Potis, was da als Toleranz, Linearität,
Temperaturkoeffizient etc. angegeben sind. Wenn da was besseres als 0.1%
steht, würde mich das sehr wundern.
Und überleg' mal, was 0.1% in Relation zu Deinen 24 Bit sind. 0.1% sind
gerade mal das LSB von 10 Bit.
> Und ja ich brauche eine so hohe Auflösung und sogar> noch sehr viel mehr.
Dann machst Du konzeptionell was falsch. Was willst Du damit anstellen?
Wenn Du eine Rotationsbewegung genau erfassen möchtest, nimm einen
Drehimpulsgeber (oder eine Chopperscheibe und Lichtschranken o.ä.). So
etwas macht man nicht analog, und schon gar nicht mit einem Poti.
Micronetzwerk schrieb:>> Genau, weil du dich hier so erwachsen gibst... Das ich nicht lache. Und> ein Poti der rund 40 Euro kostet sollte so genau sein... Und ja ich> brauche eine so hohe Auflösung und sogar noch sehr viel mehr.
Hier dein Fisch: ><((((*>.
*** Do not feed the trolls. ***
Man könnte eine Synchronisation machen, indem alle Teilnehmer
nacheinander ihre maximal machbare Baudrate preisgeben (natürlich in der
Geschwindigkeit, dass alle es Empfangen können). Diese muss dann jeder
speichern und kann dann entscheiden "Ok, ich sende an Teilnehmer 15, der
kann xxx Baud". Damit andere sich nicht angesprochen fühlen, sollte man
noch eine Prüfsumme übermitteln.
Ich finde jedoch, du solltest einfach einen anderen uC nehmen (und
ansich auch den gleichen, mit gleichem Takt), der mehr Pins hat. Das
vereinfacht nicht nur dein Protokol und Software, du sparst dir auch die
Baud-Erkennung. Z.B. ein uC mit CAN. Sind 2 statt einer Leitung und hat
ansich alles, was du willst gleich mit drinne. Wenn du Geld für nen 40€
Poti und PCBs hast, solltest du die paar Cent, was so ein Controller
mehr kostet, auch haben.
Zum ADC wurde denke ich schon alles gesagt. Selbst wenn der Pote 1000
Gänge hätte und perfekt Linear wäre, ist es immernoch ein Widerstand
(und bei 1000 Gängen bestimmt ein relativ großer). Und (gerade große)
Widerstände rauschen. Dazu haben 24bit ADCs zwar 24bit Auflösung, jedoch
INL und DNL, ggf. noch einen Gain-Error, und und und. Und du brauchst
eine ausreichend genaue Referenzspannung. Zusätzlich kommen noch
Störungen von außen (u.a. durch die "Antenne" / Datenleitung), weshalb
die Messleitung gut abgeschirmt sein sollte. Der Aufbau wird mit
Sicherheit nicht trivial und auch nicht günstig sein. Schau dir einfach
mal an, was 8 Digit genaue Voltmeter kosten. Die sind nicht ohne Grund
so teuer. Und dann noch 32bit ADC? Mit nem Poti? Das is
rausgeschmissenes Geld.
John Drake schrieb:> *** Do not feed the trolls. ***
Ich befürchte es auch, aber dennoch.
Zum Poti mal laut denkend:
Der Winkel den ich messen möchte muss auf 0,00057296° von 360° genau
(besser etwas mehr) bestimmt werden. Wenn Ihr mir sagt, dass kein Poti
der Welt so genau wiedergeben kann, glaube ich euch das. Ich dachte auch
mal, dass man die Tolleranzwerte ignrieren kann, indem man die äußeren
Pole auf + und - legt. So sollte sich die Messleitung selbst skalieren
(davon ausgehend, dass der Poti gleich warm ist). Ein zweiter Poti
sollte umgekehrt gepolt den Referenzwert geben. Rauschen sollte
entgegengewirkt werden, indem von 100 Messungen der Durchschnittswert
ermittelt wird.
Wie ich grade nachgerechnet habe reicht hier der 24 Bit ADC. Ich sollte
wohl mal meine Daten auf den aktuellsten Stand bringen. Meine Daten
basieren auf einen älteren ADC mit weniger Bits. Ich habe leider nicht
notiert wieviel Bits das wahren (an diesem Punkt wiedermal was gelernt).
@Michael Skropski
Theoretisch könnten die einzelnen Stellen nicht nur wissen welche
Gegenstellen die gleiche oder eine ähnliche Geschwindigkeit unerstützen,
sondern auch welche Signalstärke die jeweilige Gegenstelle hat. So
könnte eine Art Routingtabelle erstellt werden. Ist mir aber offengesagt
etwas to much. Ich denke auch eine einheitliche (niedrige) Baudrate ist
zum ansteuern vollkommen ausreichend.
Micronetzwerk schrieb:> Rauschen sollte entgegengewirkt werden, indem von 100 Messungen der> Durchschnittswert ermittelt wird.
So eine Anzahl von Messungen verwendet nur jemand, der noch nie einen µC
effizient programmiert hat.
Sei's drum. Eine wie starke Abnahme des Rauschens erwartest du dir von
der Mittelung über 100 Werte?
Micronetzwerk schrieb:> Zum Poti mal laut denkend:> Der Winkel den ich messen möchte muss auf 0,00057296° von 360° genau> (besser etwas mehr) bestimmt werden.
Wozu zur Hölle? Das sind ca 1mm Umfang auf 100 Meter Radius!
Idee wäre mit Zahnräder, wobei ich mir vorstellen kann, dass, wenn es so
genaue Zahnräder mit so wenig Spiel gibt, sie seehr teuer sind. Bei der
Anforderung bin ich raus. Und ich denke, ohne Entmutigen zu wollen, dass
du es so schnell nicht hinbekommen wirst.. Wenn du sowas mit nem Poti
machen willst.
Micronetzwerk schrieb:> Der Winkel den ich messen möchte muss auf 0,00057296° von 360° genau
Eine Teleskopsteuerung mit zwei Bogensekunden Genauigkeit? ;-)
@ Micronetzwerk
Mal ganz nett und ruhig und freundlich gesagt:
Deine Anforderungen an den ADC sind außergewöhnlich. Ist Dir das klar?
Du wirst vielleicht verstehen, dass die Leute hier, die in der Lage
wären Dir zu helfen auch abschätzen wollen ob sich das überhaupt lohnt.
Wir wissen leider nicht, was für einen Bildungs- und
Erfahrungshintergrund hast. Bitte schreibe doch einmal etwas dazu.
Weißt Du, wenn mein 13jähriger Neffe, der sich soetwas zweifellos
ausrechnen kann, einen ADC mit 24 Bit haben will, dann hinterfrage ich
seine Absichten. Wenn aber Prof. Dr. Dr. Bienlein, den ich zehn Minuten
zuvor noch mit 10l flüssigem Stickstoff hantieren sehen habe, mich in
der Kantine vom CERN fragt, dann suche ich in meinen Datenbüchern.
Verstehst Du, was ich sagen will? Vielleicht bist Du ja auch ein sehr
motivierter Amateur - es hat ja auch Schüler gegeben, die sich
Rasterelektronenmikroskope gebaut haben.
Dann schaue ich auch mal nach, aber warne Dich auch, dass das sehr
schwierig wird, sehr teuer und ungeheuren Lernaufwand und viele
Fehlversuche bedeutet. N_2 brauchst Du trotzdem.
Also, hab Verständnis für die Skepsis der kompetenten Leute und nimm die
unhöflichen Antworten als verunglückten Ausdruck dessen, was ich hier
sagen wollte.
Jedenfalls, viel Erfolg.
Davon ausgehend, dass in meinem hypotetischem Beispiel auf einer Skala
von 1 bis 100 dann 100 Messungen gemacht werden und jede Messung eine
Zufallszahl zwischen diesen 1 bis 100 ist, dann sollte ein daraus
ermittelter Durchschnittswert ja wohl eine glatte 50 sein. Auch wenn 99
Messungen den Wert 50 ergeben und die eine verbleibende eine radikale
Fehlmessung von 100 hat, kommt dabei trotzdem ein Wert sehr nahe bei 50
raus.
Ob ich jetzt 10, 100 oder noch viel mehr Messsungen miteinander
vergleiche ist ja hier erstmal nicht relevent. Mir ist aber auf jeden
Fall wichtig, dass eine extreme Fehlmessung weniger ins Gewicht fällt.
Zugegeben sind 100 Messungen arg viel. 10 sind mir aber auch zu wenig.
Ob jetzt die Wahrscheinlichkeit einer Fehlmessung von 1 : 100 oder
weniger angemessen ist, wird sich dann zeigen, wenn ich weiß wieviel
Rauschen tatsächlich auftritt.
Wenn du aber die ultimative Lösung für mich hast, bin ich ganz Ohr. Ich
für meinen Teil möchte grade nur die Wahrscheinlichkeit des Worst-Case
vermindern.
> Davon ausgehend, dass in meinem hypotetischem Beispiel auf einer Skala> von 1 bis 100 dann 100 Messungen gemacht werden und jede Messung eine> Zufallszahl zwischen diesen 1 bis 100 ist, dann sollte ein daraus> ermittelter Durchschnittswert ja wohl eine glatte 50 sein.
So? Eine glatte 50? Aha. Interessant. Schonmal von dem ollen Gauss
gehört?
Micronetzwerk schrieb:> Zum Poti mal laut denkend:> Der Winkel den ich messen möchte muss auf 0,00057296° von 360° genau> (besser etwas mehr) bestimmt werden.
Was um alles in der Welt ist die Anwendung?
Ja dann erklärt mir bitte mal was:
Wenn ich über ADC eine Messung durchführe, bekomme ich einen absoltuten
Wert. Ein absulotuer Wert hat keinen Von-Bis-Bereich (aus einer
absoluten Zahl kann man kein Rauschen ablesen). Er kann nur vom Rauschen
fehlerhaft sein (je nachdem welche Spitze ich grade erwicht habe). Die
Wahrscheinlichkeit eine fehlerhafte Messung erhalten zu haben kann ich
(auch) reduzieren, indem ich mehrere Messungen miteinander vergleiche.
Soll das falsch sein?
(Jetzt weiß ich auch was hier die ganze Zeit mit Trollen und Fischen
gemeint ist)
Also angenommen, du hast einen 10Bit Wandler und einen Sensor dran. 10
Bit gehen von 0..1023
Dann misst Du zum Beispiel folgende Werte, wenn Du 5 Messungen machst:
703
703
704
703
704
Ein 10 Bit Wandler kostet 1 Euro und ein Design hat einen Aufwand von
4h.
Jetzt machst Du die gleiche Messung mit einem 24 Bit Wandler und
skalierst das Signal. Dann wäre das Ergebnis vielleicht:
703.7241
703.1348
703.9821
704.0129
703.1100
Wandler: 5 Euro. Aufwand für das Design: auch 4h.
Und so würde das Signal aussehen, wenn Du jemand mit Erfahrung das
Design machen würde:
703.7241
703.7248
703.7237
703.7244
703.7242
Material vielleicht 100Euro. Aufwand für das Design: 1 Woche.
Micronetzwerk schrieb:> Ja dann erklärt mir bitte mal was:>> Wenn ich über ADC eine Messung durchführe, bekomme ich einen absoltuten> Wert. Ein absulotuer Wert hat keinen Von-Bis-Bereich (aus einer> absoluten Zahl kann man kein Rauschen ablesen). Er kann nur vom Rauschen> fehlerhaft sein (je nachdem welche Spitze ich grade erwicht habe).
Nicht nur.
Auch ein ADC ist kein ideales Bauteil. So wie übrigens alle
elektronischen Bauteile.
Was du dir in deinem Kopf vorstellst, wie absolut präzise ein ADC
arbeitet, ist eine Sache. Ob das in der Praxis auch so ist, ist eine
ganz andere Sache und hängt nicht nur davon ab, ob du das nötige
Kleingeld hast, den IC zu kaufen.
Aber egal: wer solche Anforderungen wie im Eröffnungsposting lösen kann,
der kann auch in einem Alien_Raumschiff einen Computervirus einspielen.
Und davor ziehe ich meinen Hut :-)
Und dann kommt noch die Referenz, auf die sich der Messwert bezieht. Da
gibt es welche, die haben eine Genauigkeit von 0.1%, eine Stabilitaet
von 2ppm und ein Rauschen von 5uVpp 1..10Hz, oder sonst was.
Und dann kommen Thermospannungen. Ein Thermoelement, Typ K, zugegeben,
speziell kombiniert, das macht 40uV pro Grad. Heisst irgendwelche
Temperaturunterschiede ergeben schnell mal duzende von uV.
Und dann kommt induziertes Rauschen. Ein normaler (SMD-)Kondensator ist
mikrophonisch, bedeutet er wandelt Vibrationen in Spannung, macht
nochmals ein paar uV.
@All,
lasst es ihn doch einfach ausprobieren,
manche Fehler muss man selber machen um das Problem zu verstehen
mann kann einem Kind 1000 mal sagen...
"die Kerze ist heiß, nicht anfassen"
und trotzdem wird es sich irgendwann mal verbrennen
also :
@Micronetzwerk
wenn du noch eine höhere Genauigkeit als 24Bit brauchst,
teile deine zu messende Spannung mit einem 1:1
Widerstands-Spannungsteiler
in zwei gleich große Teile und messe die Teilspannungen
je mit einem 24bit Wandler...dann hast du eine gesammt Auflösung von
48bit
(das ist auch beliebig erweiterwar)
Gruss Uwe