Translate

09 Dezember 2009

Serielle Datenausgabe klappt besser als erwartet!

Nachdem ich die serielle Ausgabe der Messwerte
mit Assembler anfangs nicht so recht auf die Reihe brachte,
(Das Auslesen des ADC-Wertes funktionierte schon gut,
aber Umrechnen auf "Klartext"lief noch nicht )
ich steh halt noch am Anfang,
und da Multiplikationen in Assembler
alles Andere als einfach sind, von der Umwandlung
in lesbaren Text ganz zu schweigen,
hab ich es nun mit BASCOM versucht.
Da ist so was wesentlich einfacher zu lösen.
Zwar macht das Programm manchmal
seltsame Sachen, aber für einfache Projekte
scheint es sehr brauchbar zu sein.
Vor allem für Anfänger leichter verständlich.
Man findet auch viele Programmbeispiele.
Allerdings ist der erhaltene Programmcode etwas
länger und das könnte noch problematisch
werden.

Im Netz habe ich ein fertiges Programm gefunden,
das eigentlich für ein per PC regelbares
Netzteil gedacht ist, in dem aber eine komplette
Spannungsmessung mit dabei ist.
Hier wird die Ausgabe komplett umgerechnet und
gewissermaßen im Klartext ausgegeben.
Die PWM-Augabe brauche ich nicht,
Die kann man ganz einfach weglassen.

http://www.elo-web.de/elo/mikrocontroller-und-programmierung/bascom-avr/einstellbares-netzgeraet

Ich kann damit sowohl die Zellennummer als
auch die Spannung direkt lesbar ausgeben.
Das ist mehr,als ich je zu hoffen wagte!!!!!!!!!!

...und der zweite ADC ist auch noch frei!!!!

So bräuchte ich ja nicht einmal einen
"Auswerte-Rechner"!

Wenn jeder Attiny erst sendet, wenn er eine
Sendeanforderung kriegt, dann ein bisschen wartet
und dann die Ausgabe des nächsten startet,
dann braucht man nur noch ein kleines Display,
das serielle Daten direkt darstellen kann und
einen Startknopf zum Starten des Auslesens.

Da bin ich jetzt selbst mal wieder überrascht,
wie einfach das geht!

Aktueller Stand vom 9.12.09:
ATtiny13 betrieben mit 5V
(Versorgung 5,01V, auch Referenz)
liest direkt ein, (kein Spannungsteiler)
rechnet um und schickt
die Daten seriell mit 9600Baud raus, sobald
am seriellen Eingang irgend ein Signal
ankommt.

Die Genauigkeit ist überraschend gut,
aber direkt von der Qualität der Referenz
abhängig. Ich habe derzeit 5,01V anliegen.
Daher die exakte Messung!
Die interne 1,1V-Referenz
ist mit +- 10% angegeben, aber im Normalfall
wesentlich!!!! genauer.
Es könnte aber durchaus nötig sein,
da noch etwas abgleichen zu müssen,
also den Umrechnungsfaktor an den jeweiligen
ATtiny anzupassen.
Das wird sich noch zeigen!

Eine Codierung, so dass nur auf einen bestimmten
Befehl geantwortet wird gibt es noch immer nicht.
Das ist wohl zunächst auch gar nicht mehr nötig,
da die Werte gar nicht mehr umgerechnet
werden müssen.Es würde so schon reichen,
wenn die Ausgabe automatisch schön der
Reihe nach erfolgen würde.
Eventuell nach Drücken eines Knopfes,
ansonsten könnte der erste ATtiny, der ja
an Masse hängt immer die Gesamtspannung
messen und anzeigen.
Der zweite AD-Wandler wird ja bisher
noch nicht genutzt!

Das wär doch schon was!
Anzeige zeigt Gesamtspannung, und wenn ein
Knopf gedrückt wird werden im
Sekundentakt die einzelnen Zellen angezeigt.

Etwaige Störmeldungen kommen völlig
unabhängig davon, wenns angebracht ist.

....Und das alles ohne Steuerrechner!!!!!!!

"TO DO":
Testen, ob die Qualität der internen Referenz
ausreicht. (erledigt! reicht völlig aus! ca 1% Fehler)

Multiplikator an 1,1V Referenz und Teiler 4:1 anpassen.
(schon erledigt, siehe Anmerkung ganz unten)

Das Ganze per ADUM5241 galvanisch
getrennt versorgen und auslesen
(Das geht sicher!)

Die Seriellen Ausgänge zusammenfassen.
(I²C ?? Single-Wire ?? ev nur Dioden und Pull-Down
Widerstände ?? Hmmmmmm...............)

einfache Kopplung für den Auslese-Befehl an den
nächsten ATtiny austüfteln.
(das geht auch ohne galv.Trennung weils immer nur
der nächste ist, ev. reicht schon ein Kondensator)
ansonsten halt per Optokoppler

Anzeige mit seriellem Eingang besorgen.
Die gibt es für ca 50-100€ je nach Größe
Zahl der Zeichen und Zahl der Zeilen.
(Da tuts vorerst noch ein PC mit Terminal-Programm)

Auch wenn ich mich wiederhole,
Mir ist es sehr wichtig, dass die eigentliche
Balancerschaltung aus dem jeweiligen Akku
versorgt wird, und völlig eigenständig läuft.
Auch die Störmeldungen brauchen keinerlei
zusätzlichen Rechner. Die werden von
der Balancereinheit ausgegeben.
Alles was mit Spannungsanzeige zu tun hat
ist eine zusätzliche unabhängige Schaltung.
Ich sehe die Spannungsanzeige als Option,
welche allerdings sehr sinnvoll ist.
Da aber Über- und Unterspannung schon
überwacht werden, ist es eigentlich nur bei
einer Fehlersuche nötig, die Akkuspannungen
abzufragen.Oder wenn man nur neugierig ist.
Das liesse sich auch komfortabler gestalten,
aber meine Anlage soll unbedingt
übersichtlich und verständlich bleiben.
Deshalb werde ich auch auf einen
Steuerrechner verzichten, wenn das
tatsächlich geht.( kann ja später noch
kommen, jetzt aber noch nicht)



Hier ein Video vom 9.12.09:















bis demnächst!

Franz

P.S.:

Nachtrag 10.12.09 und 11.12.09:

Das mit dem Umrechnen hat ganz schöne
Stolperfallen............
Da die Variablen als Integer definiert
sind darf +- 32768 nicht überschritten
werden.Das gilt auch für irgendwelche
Zwischenergebnisse!
Gerechnet werden kann nur mit
ganzen Zahlen, Nachkommastellen
werden einfach ignoriert.
Führende Nullen ebenso!
Das machts ganz schön kompliziert!
Eine kleine Genugtuung ist die Tatsache,
dass auch der Autor des Basisprogramms
darüber gestolpert ist.
(Statt 0,01 wurde o,1 angezeigt,
der Fehler ist mittlerweile behoben)
Da ich jetzt mit 10Bit messe ist der ADC Wert
im Bereich 0-1023 (1023 = 1,1V am ADC bei
interner Referenz von 1,1V soweit passts)
Da man nur mit ganzen Zahlen rechnen kann,
muss z.B eine Multiplikation mit 1.1
durchgeführt werden indem man erst *11
und dann /10 rechnet. Bei krummen werten
kommt man da schnell in Bedrängnis!
(32768 = 1024 * 32)

Immerhin kriege ich jetzt schon mal
die mV am ADC mit interner Referenz
von 1,1V richtig in mV angezeigt.

Aber!!!!......
dieser Wert müsste noch mit 4,03
multipliziert werden
*4,03 ist gar nicht so einfach!

(Anm.Spannungsteiler
1K + 330R entspr. 4,03:1)

1100 mV * 403 = 443300, geht also nicht!

110 *403 = 44330 immer noch zu viel!

55 *403 = 22165 Ja!

22165 / 5 = 4433

also: Vollausschlag mit Spannungsteiler
1 : 4,03 liefert am ADC 1023

entspricht 4433mV tatsächlicher Spg.

wenn man das durch 1000 teilt
kommt 4 raus (Integer = ganze Zahl!)

um die Nachkommastellen zu kriegen:

4 * 1000 = 4000

4433 - 4000 = 433

Für die Werte vor dem Komma muss
eine eigene Variable definiert werden.

dann muss das vom gesamten
Subtrahiert werden .

Ausgabe erfolgt dann so:

erst Text z.B. Zelle 001
dann ganzzahliger Wert
dann das Komma (ist Text)
dann der Rest der Subtraktion.
Aber Vorsicht!

Die führenden Nullen werden ja ebenso
verworfen!Deshalb kann man nur eine
Stelle korrekt ausrechnen!

0,09 ist sonst plötzlich 0,9 !!!!

Für die zweite Nachkommastelle
bräuchte man dann nochmals
eine Variable, und das ist dann
dem kleinen ATtiny allmählich
zuviel..............

Da ist man versucht, das Ergebnis
doch nur in mV anzuzeigen! ;-)

Man sieht, so ist das alles noch nicht optimal
und man muss etwas anders ansetzen.
insbesondere sinds viel zu viele
Rechnungen.Hier kommt es zwar nicht
auf die Zeit an, aber da immer nur
ganze Zahlen verarbeitet werden
summieren sich die Rundungsfehler.

Die ganze Rechnerei muss also in eine Zeile
wenn das irgendwie geht.
MaximumADC = 1023 entspr. 4433mV

U(mV) = 1023 *4,33
Da maximal mit 32 multipliziert werden kann....
sollte man versuchen, diesen Rahmen so gut
es geht auszunutzen um möglichst genaue
Ergebnisse zu erhalten.
4,33 *6 = 25,98 etwa 26 das ist besser!

U(mV) = (1023 *26) /6 = 4433 mV
das ist ok! und nur eine Rechnung!

Es ist also abzuwägen, ob sich der
rechnerische Mehraufwand lohnt, nur
um einen Widerstand zu sparen.

Der Faktor 4,03 ergab sich aus der
Verwendung von 10k + 3k3
bzw 1k + 330R um Standardwerte
verwenden zu können.

Ca. 4:1 ist in diesem Fall wichtig,
da mit 0-4,4V der Messbereich
optimal wäre.(ATtiny 13)

mit (1k5 +1k5) + 1k käme 4:1 raus
und alles wäre viel einfacher,
Die ganzen Rechenfehlerchen gäbs
dann nicht mehr, aber die fallen
auch so kaum ins Gewicht.

Beim ATtiny 25 sieht die Sache
schon wieder etwas anders aus.

Der hätte auch noch eine ca.2,5V
Referenz drin, die aber
logischerweise nur mit 5V
Versorgung genutzt werden kann....

Ausserdem hat der 25er mehr Speicher.
Ich hoffe, er ist imstande, mit dem zweiten
AD-Wandler eventuell auch noch die
Gesamtspannung zu messen.

Die würde ich gerne anzeigen, wenn
grad nichts anderes zu tun ist.














Das sieht mittlerweile so aus!

Umrechnen klappt,Inklusive der Berechnung
des Eingangsspannungsteilers sowie
der Ausgabe der Spannung als Zahl mit zwei
Nachkommastellen.

Der zweite AD-Wandler arbeitet auch,
Die Gesamtspannung könnte also
problemlos als Standardanzeige
im Display stehen.

Aber jetzt ist die Grenze des ATtiny 13
erreicht, ich nutze 99% des Speichers!

Man könnte jetzt anfangen, zu Tricksen,
z.B. die Serielle Schnittstelle nur als
Ausgang nutzen etc oder doch nur
mV anzeigen etc. ........
oder einfach den ATtiny 25 nehmen.

Das hab ich eh vor!

Bei "größeren" Atmels könnte man die
Nachkommastellen einfacher ausrechnen,
wenn man die Variablen als SINGLE
definieren würde und die Multiplikatoren
als Konstante abgelegt wären.
Das wäre viel eleganter (Rundung etc.),aber
solche Fliesskommaberechnungen brauchen
sehr viel Speicher.
Beim kleinen ATtiny führt da kein Weg hin, weil
ganz einfach der Speicher zu klein ist.

Ich werds mal testen, wenn ich ein paar
ATtiny25 habe.

Ansonsten bin ich jetzt einfach mal mit
dem Erreichten mehr als zufrieden, und
der nächste Schritt wird sein, ein
Display mit seriellem Eingang zu bauen
bzw. zu besorgen.

Ich habe schon ein passendes Programm für
einen PIC 16F628 gefunden.
Das muss ich mir mal alles zusammenbasteln
und schauen, obs so geht.(wäre ja zu schön)
Diese Pics setzen wir in der Firma ein,
Programmiergeräte etc. sind vorhanden.

Leider fehlt mir ein passendes Display und
ein passender Quarz.
(Eigentlich sollte auch der interne
Oszillator funktionieren)

Ich bin aber noch etwas skeptisch,
ob das Programm auch mit meinen
Daten arbeitet.
Ich hab in der Beschreibung gelesen, dass
CR und LF ignoriert werden.... mal sehen!
Ansonsten gibt es auch fertige Module
zu kaufen.

z.B.:

http://www.coptonix.com/html/rs232_lcd_adapter.html
das wär genau das, was ich haben will!!!!


Nachtrag 21.02.2010:

Ich hatte noch keine Zeit, weiterzutesten.....
und bevor ich zu viel investiere möchte ich noch ein ganz
anderes mögliches Problem sicher ausschliessen:

Wie genau ist der interne Takt der ATtiny13 ??????

Da könnte es Probleme geben insbesondere
mit der Temperaturstabilität!
Na, wir werden sehen!



Franz