hallo ,
@LotadaC
Das verstehe ich jetzt nicht...
Du zapfst einen SPI-ähnlichen bestehenden Kommunikationskanal an (Wofür ist der eigentlich wirklich gedacht? Für den Datentransfer von der eigentlichen Mess-Hardware zum Display im MS?) - legst da also quasi lange Antennen dran, läßt diese von einem AVR mitloggen, und machst Dir im lezten Beitrag Sorgen wegen der Störanfälligkeit des SPI?
JA, genau , du gibst dir ja hier selbst die Antwort ....
eben weil dieses "Datentelegramm" der MS sehr "intabil" ist muß die Messhardware so nah wie möglich an die MS ran kommen und auf die Kabel sollte auch besonders geachtet werden und evtl auch noch mit einen extra EMV geflechtschlauch überzogen werden ( natürlich nur wenn starke Störquellen vorhanden sind
)
Und die Schnittstelle am MS ist natürlich dazu da um die Daten extern weiter zu verarbeiten .
(übrigens sind Antennen ungeschirmt ... die Kabel vom MS zu Messhardware sollten , wie schon erwähnt , gut geschirmt sein
)
keiner Spaß am Rand - mir ist schon klar wie du das meinst ... und wenn ein paar kräftige FU in der nähe sind ist das Wort (stör)Antenne genau richtig ....
Die Datenübertragung von der Messhardware zur Anzeige könnte dann eben per rs232 oder 485 erfolgen , SPI würde sicher auch gehen aber TWI (I²C) kannst du da knicken ...
(wenn des um längere wege geht von Messhardware zur Anzeige ( >0,5m))
Der elektrische Anschluß ist ja derselbe - ob ich den seriellen Datenstrom jetzt zu Fuß auswerte (pollen), Bascom das machen lasse (shiftin), oder die Aufgabe an die Prozessorhardware übergebe (HW-SPI) ist insofern egal. Aber beim erzeugten Code und der "Prozessorauslastung" kommts zu erheblichen Unterschieden.
ja , da hast Du recht , der Anschluß der MS ist immer der selbe , nur das du die 2x24 bit nicht mit Hardware SPI auslesen kannst , Hardware SPI ist meines wissens ( lass mich aber gerne berichtigen ) nur für bis zu 16 bit möglich !?
pollen ist eigentlich quatsch , da du deinen µC nur unnötig beschäftigst . allerdings gibt es bei der Methode auch Vorteile , du fragst shiftin-x ab - rechnest und überträgst , danach shiftin-y und shiftin-z , dann gibt es auch keine überschneidungen zwischen shiftin und datenoutput .
1.: Abgesehen von Interrupts blockiert shiftin solange den Prozessor, bis die 24bit komplett eingeschoben sind.
das soll ja auch so sein , du erwartest ja auch 24 bit , das bleibt ja immer gleich ....
Im "Notfall" kannst du ja noch einen Timer starten der ca 120us läuft und dann einen "shiftinreset" ausführt
2.: Wenn ich Matthias richtig in Erinnerung habe, hat er sich auf den "normalen" Mode mit 3Hz festgelegt.
3.: shiftin schiebt einfach nur die entsprechende Anzahl an Bits in eine Variable (mittels der beiden Leitungen) - es erfolgt keine weitere irgendwie geartete Synchronisation ("Startbedingung") und auch kein timeout (oder greift hier die delay Option?)
zu 2 :
das habe ich auch so rausgelesen , der Modus mit 3 Übertragungen /sec.
zu 3 :
das ist die aufgabe von Shiftin , was möchtest du denn noch ?
Das Messprotokoll ist nunmal so , da gibt es nunmal kein "Startbyte" oder "Stopbyte"
Du mußt hier immer auf die Flanke des ersten Clock reagieren , anders geht's nunmal nicht bei diesem Datentelegramm .
4.: Im worst case ist davon auszugehen, daß die 3 MS quasi gleichzeitig senden können -> mit 1. und 2. folgt also eine erreichbare Aktualisierungsfrequenz von einem Hertz
5.: Andererseits ist auch davon auszugehen, daß die 3 MS nicht synchron senden (müssen) - es könnte also durchaus vorkommen, daß der betreffende MS bereits gerade dann schon mitten im senden ist, wenn das Programm den µC mit shiftin dort horchen läßt. Wegen 3. liefert shiftin aber irgendwann trotzdem irgendein Ergebnis (solange der MS noch sendet) - nur eben halt irgendwelchen Müll.
Folglich muß also irgendwie synchronisiert werden - oder fehlt mir hier irgend'ne wichtige Info?
zu 4 :
Ja ,und ?
selbst wenn sie exakt zeitgleich senden würden könntest du niemals alle werte exakt zeitgleich auswerten und auf einem Display anzeigen ...
einer ist der erste und einer der letzte , auch wenn du 3 µC's bemühst zum einlesen , spätestens am "Anzeigecontroller (Master ???) müßen sie sich
in reihe anstellen um ihre daten loszuwerden .. oder sehe ich das falsch ?
zu 5:
hier muß ich dir auch recht geben , das datensenden und einlesen darf sich nicht überschneiden , das führt unweigerlich zu Problemen !!!
Aber bei einer Frequenz von 3 Hz je MS ( 9Hz für 3MS) wird sich wohl etwas zeit finden um daten zu übertragen .
zB.: nach den Systemstart die Pausen messen und danach den sendemodus einstellen.
oder shiftin immer auf 24 bit/zeit auswerten ,
oder die "Shiftin - pausenzeit" messen da gibt es schon lösungen ... denke ich .
Und bei einer Baudrate von zb 115200
sind die 4 Byte (eines MS - 1Adresse + 3Datenbytes) doch recht schnell zur Anzeige übertragen.
@ Dino
genau darum hab ich damals gesagt das man es eigentlich nicht mit dem SPI oder ShiftIn machen kann weil man nur auf die Flanken des Taktes triggert. Wenn man also mitten im ersten Datagramm anfängt dann nimmt der Atmel die Pause zwischen den Datagrammen auch als ein Datenbit und ist dann mitten im zweiten Datagramm fertig. Er wird also nicht wirklich synchron sein. Aber wer weiß evtl irre ich mich ja auch. Ich finde die Lösung allerdings nicht wirklich stabil. Es gibt zu viele Unwägbarkeiten die nicht wirklich in der Software abgefangen werden.
das stimmt schon , aber das Datenprotokoll lässt uns ja keine Andere Wahl als auf das Clock Signal zu reagieren , einen Anderen Anhaltspunkt habe wir ja nicht.
Um ein durcheinanderkommen zu vermeiden könnte man zb den timer nutzen und die übertragungslänge bestimmen um so ein überspringen zum nächten paket zu vermeiden.
an dieser stelle klemmt es bei mir bis jetzt auch noch etwas .
In meinem Sytem habe ich aber so gut wie keine Fehlerhafte anzeige , deshalbt habe ich hier noch nicht weiter gearbeitet .
schön mit euch darüber zu Diskutieren , da bekommt man direkt mal noch ein paar neue Ideen !
ich wünsche euch noch einen schönen Abend ...
grüße
Sven