tag:blogger.com,1999:blog-1231032798237497505.post7662504874200767063..comments2022-04-03T01:36:19.806-07:00Comments on Vehikelfranz Bastelecke: Auswertung der empfangenen Daten aus dem Messmodulvehikelfranzhttp://www.blogger.com/profile/10449865940679907208noreply@blogger.comBlogger7125tag:blogger.com,1999:blog-1231032798237497505.post-17514984937386852852011-12-21T13:46:08.070-08:002011-12-21T13:46:08.070-08:00Ich gehe mal davon aus, dass dann da immer
25ms z...Ich gehe mal davon aus, dass dann da immer <br />25ms zwischen den Zeichen waren,als es bei <br />zwei Modulen schon 1,5 Sekunden dauerte.<br />Weil meine Messung gestern beim String<br />ohne Pausen zwischen den Zeichen knapp 300ms<br /> pro Modul für 70! Zeichen bei 2400Bd ergab.<br />Aber da brauchen wir jetzt nicht kleinlich <br />werden, auf alle Fälle ist es viel besser,<br />alle Zeichen sofort durchzureichen.<br />Der String wird ja nur wenn überhaupt am <br />Ende beim Auswerten benötigt, und da wäre<br />ein Array mindestens genau so gut geeignet<br />Das war von Anfang an klar!<br />Ich habe mich halt foppen lassen, <br />weil es nicht ging, einen String von gut 30 Zeichen ohne Pause zwischen den Zeichen<br />direkt weiterzuleiten.Aber dieser Fall kommt ja dann in der Praxis gar nicht vor!<br />Und bei einem Zeichen (Lesebefehl)<br />klappt das sofortige Weiterleiten <br />bei mir auch wunderbar.<br />(und mit Printbin sollte man die Zahlen auch<br />direkt rauschicken können, ohne irgendwas umzurechnen, und ohne das letzte Semikolon<br />wird das Stopzeichen beim Senden automatisch <br />erzeugt)<br />Das wird schon noch!vehikelfranzhttps://www.blogger.com/profile/10449865940679907208noreply@blogger.comtag:blogger.com,1999:blog-1231032798237497505.post-32119529945730092252011-12-21T08:54:18.105-08:002011-12-21T08:54:18.105-08:00Ich hab jetzt mal mit zwei Modulen rum gespielt.
D...Ich hab jetzt mal mit zwei Modulen rum gespielt.<br />Dabei habe ich einen kompletten Datensatz von 38 byte + 3 Steuerbytes in den ersten Ballancer eingespeist. Der hat dann nach dem Empfang von "13h" seinen AD-Wert + "13h" hinzugefügt. Den dann wieder der zweite Ballancer empfangen hat und der natürlich auch seinen Wert dazu gepackt hat.<br /><br />Also folgender Code wurde in den ersten Ballancer übertragen:<br />01066162636465666768696A6B6C6D6E6F707172737431323334353637383913<br /><br />Aus dem letzten kam raus:<br />01066162636465666768696A6B6C6D6E6F7071727374313233343536373839BFC213<br /><br />Dafür wurden ca. 1,5 Sekunden bei 1200Baud benötigt. <br /><br />Wenn jetzt das ganze mit 40 Ballancer gemacht wird, werden ca. 22,5 Sekunden benötigt bis alle Werte am Ende der Schleife ausgegeben werden.<br /><br />Wird das Zeichen sofort durgereicht und 13h durch den Messwert ersetzt und dann wieder 13h gesendet werden bei zwei Modulen ca. 10ms verbraten bei 40 Ballancern sind das dann 200ms.<br /><br />Ein weiterer Vorteil ist, dass die Anzahl der Ballancer in der Schleife nicht von der Größe des Strings abhängig ist.<br /><br />Ich hab hier noch sechs Tiny25 rumliegen, die werde ich mal nach Weihnachten verbasteln. Dann kann ich noch genauere Messwerte liefern.Brunohttps://www.blogger.com/profile/14815289818789774647noreply@blogger.comtag:blogger.com,1999:blog-1231032798237497505.post-78969496465035210132011-12-21T06:32:09.121-08:002011-12-21T06:32:09.121-08:00Ich hab mir das jetzt nochmal in Ruhe
angeschaut, ...Ich hab mir das jetzt nochmal in Ruhe<br />angeschaut, und finde Dein Programm sehr<br />interessant! <br />Die Version mit "sofort senden" hatte ich <br />auch schon versucht, aber mit 2400Bd und <br />4MHz Takt ging das bei längeren Strings nicht.<br />(wenn ich die zusammenhängend schickte)<br />Das passiert aber hier nicht, weil <br />ja die Pause eingefügt wird, wenn wieder <br />ein Zeichen dazukommt, insofern tritt<br />also der Zustand gar nicht auf, dass die<br />Zeichen zu schnell hintereinander kommen.<br />und weil in der Zeit nach der Übertragung<br />auch nicht sofort wieder ein Zeichen kommen sollte, geht das an DER Stelle auch mit<br />dem Wait-Befehl in Ordnung.<br /><br />Die Übertragungsgeschwindigkeit ist mir<br />vorerst mal nicht allzu wichtig.Ob nun alle<br />zwei oder vier Sekunden alle Werte <br />aktualisiert werden, was solls......<br /><br />Ich hab mir das ein bisschen aufgehoben, und wollte mal versuchen, was da sonst noch an <br />Möglichkeiten besteht, z.B wie man die <br />Auflösung verfeinern kann.<br />Da denke ich dran, nicht durch vier zu teilen,<br />sondern erst 256 zu subtrahieren und dann durch<br />drei zu teilen.<br />Die Kopplung der Module könnte auch mit einem<br />kleinen Op oder Komparator erfolgen.Der Mehraufwand wäre gering, aber das Signal <br />wäre dann besser definiert, als das<br />per Transistor und pull-up möglich ist.<br />Die halbe Betriebsspannung des unteren <br />Moduls als Referenz und zwei Zellen als <br />Spannungsversorgung. Der "oberste"<br />hängt dann an der letzten Zelle plus<br />den 5V aus dem ADUM5241.<br />Na ja, da gäbs viele Möglichkeiten....<br />Entscheidend ist halt die geringe<br />Versorgungsspannung, bei der die Module<br />noch arbeiten müssen.<br />Ich will zuverlässige Funktion bis 2V!<br />deshalb scheiden Optokoppler zur<br />Ankopplung aus! Das geht zum Einspeisen<br />des seriellen Signals, zum Auslesen brauche <br />ich aber schon die zusätzliche Spannung <br />aus dem ADUM! (Wobei mich der ADUM ein<br />bisschen enttäuscht....der nimmt einige<br />mA auf um wenige mA treiben zu können,<br />und wird ganz schön warm dabei!)<br />z.B.jedes Messmodul per ADUM mit <br />Spannung zu versorgen, um dann auch<br />Chips mit 2,56V int. Referenz und<br />Hardware-UART nehmen zu können würde<br />ein mittleres Heizkraftwerk ergeben.vehikelfranzhttps://www.blogger.com/profile/10449865940679907208noreply@blogger.comtag:blogger.com,1999:blog-1231032798237497505.post-57850893220722217232011-12-20T12:48:46.492-08:002011-12-20T12:48:46.492-08:00Hast Du das auch schon getestet, wenn mehrere
Baus...Hast Du das auch schon getestet, wenn mehrere<br />Bausteine hintereinander hängen?<br /><br />Das Problem ist, wie ich weiter oben schon beschrieben habe, dass bei Soft-Uart <br />senden und empfangen zugleich Probleme macht.<br />Da helfen auch Waitms nicht, ganz im Gegenteil!<br />Wenn der Chip per "Wait" angehalten wird, dann macht er GAR NICHTS!!, und das ist in diesem Fall überhaupt nicht zu brauchen.<br />Beim Umweg über den String komme ich völlig<br />ohne Warteschleifen und Pausen aus, und <br />dann geht das doch recht flott.Ich bin grad <br />am Basteln, und lasse gerade Strings mit<br />70 Byte durchrauschen, und weil ichs jetzt<br />wissen will hänge ich jetzt einen Oszi dran.<br />......kurze Pause......<br />so....<br />1. der Lesebefehl (0000 0001) braucht bei mir<br />exakt 7,5 ms vom Anfang des Einlesens bis<br />zum Ende des Sendens.da ist er aber im nächsten Modul auch schon angekommen und wird bereits wieder gesendet, das macht also 3,5ms je Modul.<br />(ich schick den sofort weiter und lese dann<br />erst die Spannung)das wären dann 160ms bei<br />45 Zellen für den Durchlauf des Leseimpulses.<br /><br />2.Das Datenpaket aus derzeit 70 Werten braucht etwas weniger als 300ms und wird dann auch ohne Verzögerung rausgeschickt. das macht dann auch<br />so etwa 4ms je Byte.<br />Das müsste ich jetzt hochrechnen... das sind ja<br />erst zwei, dann drei, dann vier.......<br />das sollte dann bei 45 Zellen etwa 4 Sekunden dauern.....damit hatte ich in etwa gerechnet.<br />...und das reicht auch locker aus.....<br />man kann ja dazwischen den Status abfragen<br />ohne zu messen, das geht in 200ms.<br /><br />....das reicht mal für heute!vehikelfranzhttps://www.blogger.com/profile/10449865940679907208noreply@blogger.comtag:blogger.com,1999:blog-1231032798237497505.post-31582665505088806492011-12-20T11:04:10.973-08:002011-12-20T11:04:10.973-08:00Hallo,
mir lässt die Datenübertragung einfach kei...Hallo,<br /><br />mir lässt die Datenübertragung einfach keine Ruhe. Bei 30 Modulen vergeht ganz schön viel Zeit wenn erst gelesen wird und dann der ganze String gesendet wrid.<br />Ich hab mir jetzt mal mehrere Platinen gebaut um einfach mal die Verschiedenen Verfahren zur Übermittlung zu testen.<br />Zur Verfügung stehen Tiny25 und Optokoppler EL817 für Übermittlung zur nächsten Stufe.<br />Die Datenübertragung läuft mit 1200Baud, weil ich den internen 8MHz-Takt des Tinys nehme.<br /><br />Hier mal mein Listing (auch in BASCOM):<br /><br />--------- BASIC ON ---------<br /><br /><br />$crystal = 8000000<br /><br />Config Adc = Single , Prescaler = Auto , Reference = Internal_1.1<br />Start Adc<br /><br />Config Portb.0 = Output<br />Config Portb.4 = Input<br /><br />Portb.4 = 1<br /><br />Dim Datensatz As String * 30<br />Dim Zeichen As String * 1<br />Dim Z_wert As Byte<br />Dim Vadc As Word<br />Dim V_wert As Byte<br /><br />Open "comb.4:1200,8,n,1" For Input As #1<br />Open "comb.3:1200,8,n,1,inverted" For Output As #2<br /><br /><br />Do<br /><br /> Z_wert = Inkey(#1)<br /> If Z_wert > 0 Then Gosub Verarbeitung<br /><br />Loop<br /><br /><br />Verarbeitung:<br /><br /> If Z_wert = 1 Then<br /> Print #2 , Chr(1);<br /> Vadc = Getadc(1)<br /> Vadc = Vadc / 4<br /> V_wert = Vadc<br /> If V_wert < 15 Then V_wert = 15<br /> End If<br /><br /> If Z_wert = 2 Then:<br /> Print #2 , Chr(2);<br /> Portb.0 = 1<br /> End If<br /><br /> If Z_wert = 3 Then<br /> Print #2 , Chr(3);<br /> Portb.0 = 0<br /> End If<br /><br /> If Z_wert = 5 Then<br /> Print #2 , Chr(5) ;<br /> Do<br /> Z_wert = Inkey(#1)<br /> If Z_wert > 0 Then<br /> If Z_wert = 13 Then Exit Do<br /> Print #2 , Chr(z_wert);<br /> End If<br /> Loop<br /> Waitms 25<br /> Print #2 , Chr(v_wert) ;<br /> Waitms 25<br /> Print #2 , Chr(13);<br /> V_wert = 0<br /> End If<br /><br /> If Z_wert = 6 Then<br /> Input #1 , Datensatz<br /> Print #2 , Chr(6) ; Datensatz ; Chr(v_wert) ; Chr(13);<br /> V_wert = 0<br /> End If<br /><br />Return<br /><br />------ BASIC OFF -------<br /><br />Bei Steuercode 5 wird Zeichenweise eingelesen und sofort gesendet! Wichtig ist, dass ca 25ms Pause zwischen den Zeichen ist, da nur ein Soft-UART verwendet wird. Die Übertragung geht sehr schnell ca. 800ms dann sind 32Bytes durch.<br /><br />Bei Steuercode 6 wird der ganze String eingelesen und erst nach Steuercode 13 weiter geschickt. Laut Hochrechnung werden dann ca. 1700ms benötigt um die ganzen Messwerte durch die Kette zu bekommen.<br /><br />Ich schicke Dir mal meinen Schaltplan von der Platine. Ich hoffe ich hab Deine richtige Adresse!<br /><br />GrüßeBrunohttps://www.blogger.com/profile/14815289818789774647noreply@blogger.comtag:blogger.com,1999:blog-1231032798237497505.post-50031465960698571442011-12-16T19:17:24.004-08:002011-12-16T19:17:24.004-08:00Hallo Bruno,
So ähnlich schreibe ich im "Fra...Hallo Bruno,<br /><br />So ähnlich schreibe ich im "Franzbox"-Programm <br />schon die Standardwerte ins EEprom.<br />..aber an eine vollautomatische Kalibrierung <br />gleich beim Programmieren...daran hab ich <br />noch nicht gedacht! Vielen Dank für diese<br />Anregung!( vielleicht noch ein paar ms<br />warten vor dem Abgleich, und das Ganze<br />möglichst nah am Balancer-Schaltpunkt....)<br /><br />Die ATtiny 24 hab ich bisher in einem kleinen <br />Adapter programmiert, aber das erfolgt<br />später natürlich in der Schaltung, vor allem, weil ich da die SMD-Version verwenden will.<br />Im STK steckt derzeit der Auswerte-Atmega.<br /><br />Wie schon erwähnt werde ich vorerst mal<br />einen Auswerte-Atmega zwischen die Module und die Box hängen, damit ich das Box-Programm<br />erst mal so lassen kann,wie es ist,<br />und ich will dem Auswerte-Atmega noch so Dinge<br />wie Charger-Steuerung und Temperaturmessungen<br />mit draufpacken und versuchen das dann auch<br />eigenständig lauffähig hinzubekommen.<br /><br />Messmodule alleine = balancer<br /><br />Module + Auswerte-Atmega = Charger-Steuerung<br /><br />Module + Auswerte-Atmega + Franzbox<br />= Komplettes System mit Einzelspannungs-<br />überwachung und MIN-MAX-Anzeige<br /><br />Wenn alles passt werde ich versuchen,<br />die Auswertung in die Box mit rein zu <br />bekommen.Das ist mir aber gar nicht so <br />wichtig, weil ich sowieso irgend ein<br />Umsetz-Teil dazwischen brauche für<br />galv.Trennung und Schaltaufgaben etc.vehikelfranzhttps://www.blogger.com/profile/10449865940679907208noreply@blogger.comtag:blogger.com,1999:blog-1231032798237497505.post-39257769114648248142011-12-16T12:38:44.264-08:002011-12-16T12:38:44.264-08:00Hallo Franz,
zu 3. (Kalibrierung):
Ich machs bei...Hallo Franz,<br /><br />zu 3. (Kalibrierung):<br /><br />Ich machs bei mir so, dass ich das EEPROM prüfe of schon ein Wert drin steht oder leer ist.<br />Wenns leer ist steht ja ein "FF" im Speicher.<br /><br />Hier mal BASCOM-Code:<br /><br />DIM U_call as ERAM_Word<br /><br />IF U_call = "FFFF" then<br /> U_wert = Getadc(0)<br /> U_call = U_wert<br />END IF<br /><br />//BASCOM-OFF<br /><br />Wenn Du beim Programmieren den Atmel mit 3V versorgst wird nach dem Reset der Hexwert für 3V im EEPROM abgelegt. Der ganz grosse Vorteil ist, dass dir interne Referenz und der externe Spannungsteiler zusammen kalibriert werden.<br /><br />Leider weis ich nicht wo Du programmierst. Im STK oder per ISP in der Schaltung. ich bevorzuge immer die Schaltung.<br /><br />GrüßeBrunohttps://www.blogger.com/profile/14815289818789774647noreply@blogger.com