Hallo.
Ich habe dieses Thema erneut ins Leben gerufen, in aller Hoffung, dass
es nicht wieder zugemüllt wird. Werde mich in Zukunft weder auf
Diskussionen noch auf Steits einlassen.
Zum Problem:
Ich möchte einen Lipo-Akku mittels Bargraph-LED's überwachen. Da schon
einmal die Empfehlung zu einem käuflich zu erwerbenden Gerät kam: Nein,
dies steht nicht zur Debatte und sollte auch ohne weitere Begründung
hingenommen werden. Danke euch dafür.
Die Bargraph-LED-Anzeigen haben jeweils 10 Segmente. Dabei soll ein 3S
Lipo überwacht werden. Alle Graphen sollen leuchten, wenn der Akku voll
geladen ist, also einen Spannungsbereich von 12,3V bis 12,6V aufweist.
Höhere Spannungen sind dabei nicht möglich.
Die Graphen sollen mit sinkender Spannung nach und nach erlöschen. Erst
bei erreichen einer Spannung von 10,2V soll der letzte Graph noch
leuchten, ab 9,9V (3,3V/Zelle)soll er dann auch als Warnung blinken.
Die Einarbeitung in das Thema fällt mir sehr schwer. Ich habe zwar das
AVR Tuto bereits gut durchgearbeitet, gerade was die für mich
interessanten GETADC-Befehle angeht (Danke an Thomas), aber hier komme
ich nicht weiter. Und hier habe ich dann auch schon die ersten Fragen:
Ich muss eine Referenzspannung wählen, am Besten 5V, aber wie stelle ich
diese ein?
Mit GETADC kann ich Messergebnisse ermitteln und in einer FUNCTION
irgendwo auswerten (lassen). Und genau hier komme ich dann auch nicht
mehr weiter.
Im Beispielprgramm vom BASCOM-Tutorial wird nirgends beschrieben, wie
ich das Eingangssignal in einem bestimmten Wertebereich so festlegen
kann, dass es einen Ausgang ansteuert.
Die Eckdaten:
Ich verwende ATMEGA 8-16 oder ATMEGA 8515-16PU. Der ATMEGA8 hat einen
ADC an Board - mehr brauche ich auch nicht, allerdings muss ich 2 Akkus
parallel überwachen, und wenn der andere Controller ADC's mit an Board
hat, dann wäre das fantastisch.
Als Programmierboard verwende ich das STK500.
Programm: BASCOM-AVR
Ich verlange ja nicht, dass mir einer das Programm schreibt, allerdings
komme ich hier nicht weiter und brauche da wirklich Hilfe. Ich bin nicht
umsonst in der handwerklichen Branche, denn das nötige Verständnis für
diese Aufgaben habe ich leider nicht. Wie in der Schule: Die einen sind
besser in Mathe, die anderen nicht. Ich gehöre zu denen, die es nicht
waren, und das hat nichts mit Lernbereitschaft zu tun, ich kann es
einfach nicht.
Ich freue mich auf eure Antworten und hoffe, dass ein paar Leute dabei
sind, die meine Situation verstehen und mir helfen können oder möchten.
Danke sehr.
Hi
>Der ATMEGA8 hat einen>ADC an Board - mehr brauche ich auch nicht, allerdings muss ich 2 Akkus>parallel überwachen,
Der ATMega8 hat einen ADC. Aber der hat sechs Eingänge. Also kannst
du auch 6 verschiedene Spannungen messen.
Der ATMega8515 besitzt keinen ADC. Nützt dir also nichts.
MfG Spess
Maik Schulze schrieb:> Mit GETADC kann ich Messergebnisse ermitteln und in einer FUNCTION> irgendwo auswerten (lassen). Und genau hier komme ich dann auch nicht> mehr weiter.> Im Beispielprgramm vom BASCOM-Tutorial wird nirgends beschrieben, wie> ich das Eingangssignal in einem bestimmten Wertebereich so festlegen> kann, dass es einen Ausgang ansteuert.
Die Eingangsspannung muss im Bereich 0 bis 5V liegen.
Punkt.
D.h. du musst deine ca. 12V zb mittels eines Spannungsteilers(*) in
diesen Bereich 0 bis 5V kriegen.
GETADC ist schon ok.
1
...
2
3
... ADC konfigurerieren
4
5
do
6
Wert = GETADC( 0 )
7
8
if Wert < 300 then
9
led1 einschalten
10
else
11
led1 ausschalten
12
end if
13
14
if Wert < 600 then
15
led2 einschalten
16
else
17
led2 ausschalten
18
end if
19
20
loop
das sollte mal für den Anfang etwas leben in die Bude bringen.
Wenn man weiss, das ein Wert vom ADC von 1024 einer Spannung von 5V
entspricht (genauer gesagt: der Referenzspannung), dann kann man sich
für jede andere Spannung ausrechnen, welchem ADC-Wert das entspricht.
Und damit kann man dann (in deinem Fall) ein paar Vergleiche anzetteln
um zb davon abhängig LEDs ein oder aus zu schalten.
Und das wars eigentlich schon. Anstelle von 2 LED nimmst du deren 8
(oder wieviele du für deine Spannungsabstufung brauchst), rechnest dir
die Grenzen aus, so dass du die geforderten Spannungsabstufungen kriegst
und im Grunde ist das schon fast 80% deiner Aufgabe.
(*) Ein Spannungsteiler ist eine 'Schaltung' bestehend aus 2
Widerständen, welche (wie der Name schon sagt) eine Spannung
runterteilt. Danach googlen.
> Im Beispielprgramm vom BASCOM-Tutorial wird nirgends beschrieben,> wie ich das Eingangssignal in einem bestimmten Wertebereich so> festlegen kann, dass es einen Ausgang ansteuert.
Das Ergebnis vom ADC ist ein Zahlenwert. Du kannst damit machen was
immer du willst. Du kannst den Wert in eine Formel stecken und daraus zb
errechnen wieviele Prozent die Jalousie oben ist. Oder du kannst den
Wert in eine andere Formel stecken und daraus errechnen wie warm es
gerade dem Temperatursensor ist, der eine variable Spannung abhängig von
der Temperatur liefert. Oder du kannst ausrechnen wie hell es gerade ist
(weil da ein Lichtsensor drann hängt, der eine variable Spannung je nach
Bewölkung liegert). Oder . oder oder. Du kannst mit Zahlen machen was
immer du willst. Du musst dir nur überlegen, wie du die gewünschte
Funktionalität in Abhängigkeit zu dieser Zahl setzt. Und bei dir ist es
eben die Aufgabenstellung "Wenn die Spannung größer als x ist", die sich
in "Wenn der WErt vom ADC größer als y ist" übersetzt - da ja die Zahl
vom ADC direkt mit der Spannung zusammenhängt und du diesen Zusammenhang
kennst.
> ... ich kann es einfach nicht.
Doch. Du kannst es. Du musst es nur tun!
Das du nicht in der Lage bist die Mathematik für ein Solid Modelling
auszuarbeiten, glaub ich dir unbesehen. Aber hier hast du es in 99% der
Fälle mit Mathematik auf dem Niveau von "3 Äpfel kosten 4 Euro. Wieviel
kosten 5 Äpfel?" zu tun. Sag nicht, dass du das nicht kannst.
Hallo und vielen Dank für die schnellen ersten Antworten. Das hilft mir
sicher ungemein weiter.
Zunächst @ Spess:
Danke sehr. Damit bin ich ein gutes Stück weiter. Leider nützen mir die
vielen Eingänge nichts. Soweit ich weiß, hat der ATMEGA 8 nur einen ADC
und ich muss die Ausgänge ja auch noch ansteuern - das verbraucht allein
schon 10 Pins, denke ich.
@ Karl-Heinz: Auch dir danke ich von Herzen. Du hast mir mehr Antwort
gegeben als ich erhofft hatte - Thumbs up.
Damit kann ich denke ich mal arbeiten, wenn ich dahingehend noch Fragen
habe (und die werden kommen) - würde ich mich gern via PN oder Mail bei
dir melden, wenn du nichts dagegen hast.
Hier auch gleich die nächste Frage:
Die Spannungsquellen sind getrennt. Das Eingangssignal braucht also auch
eine Bezugsmasse, habe ich da recht? Wenn ja - wo lege ich beim
Controller den Pluspol an und wo den Minuspol des Eingangssignals?
Was mich ebenfalls noch brennend interessiert:
Spannungsteilung: Ich hätte hier vermutlich die Eingangsspannung mittels
Widerständen auf Referenzspannungsniveau gebracht. Reicht dies aus oder
ist das nicht ratsam?
LG - Maik
Karl-Heinz - dein vergleich "3 Äpfel kosten 4 Mark" ist sehr bildlich.
ICh will das Ganze ja verstehen und bemühe mich wirklich sehr. Aber es
gibt im Tutorial auch massenweise Verweise auf englischsprachige Seiten
- und spätestens hier bin ich dann komplett raus. Da bin ich dann nur
noch am Googeln der Wörter und Wortgruppen und komme erst recht nicht
voran. Mein Englisch ist echt mies.
LG - Maik
Maik Schulze schrieb:> Danke sehr. Damit bin ich ein gutes Stück weiter. Leider nützen mir die> vielen Eingänge nichts.
Richtig.
Du brauchst ja nur 2 davon.
> Soweit ich weiß, hat der ATMEGA 8 nur einen ADC
ja macht ja nichts.
> und ich muss die Ausgänge ja auch noch ansteuern
Und? das erledigt GETADC für dich.
GETADC( 0 ) ... Abfragen der Spannung vom ADC-Pin 0
GETADC( 1 ) ... Abfragen der Spannung vom ADC-Pin 1
fertig.
Ist doch kein Problem.
> - das verbraucht allein> schon 10 Pins, denke ich.
?
Wieso 10?
Nur weil der ADC über 8 mögliche Eingänge verfügt, heisst das ja nicht,
dass du alle 8 benutzen musst!
Wenn du nur 2 brauchst, dann benutzt du halt nur 2
Maik Schulze schrieb:> Hier auch gleich die nächste Frage:> Die Spannungsquellen sind getrennt. Das Eingangssignal braucht also auch> eine Bezugsmasse, habe ich da recht?
richtig.
> Wenn ja - wo lege ich beim> Controller den Pluspol an und wo den Minuspol des Eingangssignals?
Du verbindest einfach alle Massen miteinander. Fertig.
Der Ausgang vom Spannungsteiler (wo also die runtergebrochenen 5V, alias
12V rauskommen), der kommt natürlich an den ADC-Eingang. Jeder der
beiden Spannungsteiler hat seinen eigenen Eingang.
Aber das sollte eigentlich klar sein.
> Spannungsteilung: Ich hätte hier vermutlich die Eingangsspannung mittels> Widerständen auf Referenzspannungsniveau gebracht. Reicht dies aus oder> ist das nicht ratsam?
Doch, das ist genau der WEg, den du gehen sollst.
Wenn die beiden Widerstände, die den Spannungsteiler bilden in Summe so
ca. 10k haben, dann passt das. Wenns 15k sind oder nur 8k ist es auch in
Ordnung. Aber so um die 10k sollte die Summe der beiden Widerstände
sein.
Jetzt brauchst du nur noch die beiden Einzelwerte der Widerstände, so
dass
* die 12V auf 5V runter grbrochen werden
* die beiden Widerstände in Summe ca 10k haben
Maik Schulze schrieb:> Karl-Heinz - dein vergleich "3 Äpfel kosten 4 Mark" ist sehr bildlich.
Und treffend.
Es ist das, was in der Schule der berühmt berüchtigte 3-satz ist.
Wobei in diesem speziellen Fall, das ganze im Grunde nicht viel mehr als
der Sonderfall davon 'Prozentrechnen' ist.
Erstaunlicherweise reicht diese 'Mathe' für die überwiegende Mehrzahl
aller Problemkreise, die hier im Forum auftauchen bei weitem aus. Es ist
ganz selten, dass man mal schwerwiegendere mathematische Konzepte
braucht. Wenn du also errechnen kannst um wieviel Prozent dein
Gasverbrauch heuer im Vergleich zum letzten Jahr gestiegen ist, dann
kennst du genug Mathe, um auch dieses 'Problem' lösen zu können.
Also:
wenn ich mich recht erinnere, dann hast du ein Pollin Board, welches
auch funktioniert.
Poti rausgeholt, so verschaltet ...
1
+5V +-------------+
2
|
3
+-+
4
| |
5
<----
6
| | \
7
| | +------------> zum ADC Eingang
8
+-+
9
|
10
GND +-------------+-----------------
(also als einstellbarer Spannungsteiler)
... und mal die LED am Board durch drehen am Poti (und damit verändern
der Spannung am Poti-Abgriff) tanzen lassen!
Karl Heinz schrieb:>> und ich muss die Ausgänge ja auch noch ansteuern>> Und? das erledigt GETADC für dich.>> GETADC( 0 ) ... Abfragen der Spannung vom ADC-Pin 0> GETADC( 1 ) ... Abfragen der Spannung vom ADC-Pin 1>> fertig.> Ist doch kein Problem.
Kann es sein, dass du mit 'Ausgänge' die LED gemeint hast?
Bitte. Schmeiss nicht immer alles in ein und demselben Satz
durcheinander. Grundlage jeder Programmierung ist es, dass man erst mal
seine Gedanken ordnet. Und erst dann loslegt.
Na komm.
10 Ausgänge, an denen 10 LED hängen. Wo ist denn da jetzt das Problem.
Ich denke du hast das schon mal gemacht?
>> - das verbraucht allein>> schon 10 Pins, denke ich.
Und?`
Der Mega8 hat doch genug Ein/Ausgänge!
Du kriegst für nicht benutzte Ausgänge kein Geld zurück!
ACh, ich denke ich weiß woher der Wind weht!
Du hast dieses Pollin Experimentierboard und an dem hängt jede Menge
Schnickschnack schon an den Portpins.
Nun, im Endeffekt wirst du ja nicht dieses Board in dein Schiff
einbauen, sondern eine eigens dafür angefertigte Schaltung. Auf der
sitzt der mehr oder weniger nackte Mega8. Und dann hast du alle Portpins
frei und kannst da nach Herzenslust LED anhängen, soviele wie Pins frei
sind. Und das sind immerhin 22 freie Pins. Ohne die beiden ADC Eingänge,
die du brauchst bleiben dann also 20 Pins für Led frei. Du siehst also:
10 Led sind überhaupt kein Problem.
Karl Heinz schrieb:> GETADC( 0 ) ... Abfragen der Spannung vom ADC-Pin 0> GETADC( 1 ) ... Abfragen der Spannung vom ADC-Pin 1>> fertig.> Ist doch kein Problem.
Ach soooo... Dass es so einfach ist, hätt ich echt nicht gedacht. Damit
kann ich nun wirklich arbeiten.
Ich frage mich an dieser Stelle aber auch, warum das in den Tutorials
nur so oberflächlich beschrieben wird? Da ist von ADC(0) bis ADC(15) die
Rede, was man damit aber anstellen kann und wie man das Ganze
einsetzt/umsetzt fehlt.
Du bist echt ein Schatz!!! Das probiere ich gleich mal aus.
Im Grunde brauche ich ja nur einen einzelnen Programmablauf, also eine
Do-Lopp-Schleife ohne Subprogramme, richtig? Mal versuchen ;)
Karl Heinz schrieb:> Na komm.> 10 Ausgänge, an denen 10 LED hängen. Wo ist denn da jetzt das Problem.> Ich denke du hast das schon mal gemacht?
Das ist auch nicht das Problem. Nur kann so ein Controller einen Akku
überwachen und nicht 2.
Karl Heinz schrieb:> (also als einstellbarer Spannungsteiler)> ... und mal die LED am Board durch drehen am Poti (und damit verändern> der Spannung am Poti-Abgriff) tanzen lassen!
OK, wird gemacht. Damit kann ich arbeiten.
Pollin-Board? Meinst du das STK500? Das gabs nicht bei Pollin... Ist
AVR-eigen, so wie ich das sehe (mag mich aber auch irren - kann nur das
Aufgedruckte beurteilen)
Karl Heinz schrieb:> Nun, im Endeffekt wirst du ja nicht dieses Board in dein Schiff> einbauen, sondern eine eigens dafür angefertigte Schaltung. Auf der> sitzt der mehr oder weniger nackte Mega8. Und dann hast du alle Portpins> frei und kannst da nach Herzenslust LED anhängen, soviele wie Pins frei> sind. Und das sind immerhin 22 freie Pins. Ohne die beiden ADC Eingänge,> die du brauchst bleiben dann also 20 Pins für Led frei. Du siehst also:> 10 Led sind überhaupt kein Problem.
Korrekt. Wäre ja auch arg unklug, das Brett in mein Boot einzubauen ;).
22 freie Eingänge? Vielleicht bekomme ich ja doch die Überwachung 2er
Akkus hin, inklusive LED-Anzeige mit je 10 Balken...
LG - Maik
Hi
> Da ist von ADC(0) bis ADC(15) die>Rede, was man damit aber anstellen kann und wie man das Ganze>einsetzt/umsetzt fehlt.
Weil das nicht bei allen AVRs so ist. Und wie es genau ist steht im
Datenblatt des jeweiligen AVRs.
>Das ist auch nicht das Problem. Nur kann so ein Controller einen Akku>überwachen und nicht 2.
Der kann mehr wie 2. Mit ein paar Transistoren und Widerständen brauchst
du für die Anzeige bei 2 Akkus 10 Pins, bei 3 Akkus 11 Pins, ... .
MfG Spess
spess53 schrieb:> Der kann mehr wie 2. Mit ein paar Transistoren und Widerständen brauchst> du für die Anzeige bei 2 Akkus 10 Pins, bei 3 Akkus 11 Pins, ... .
Lass es uns fürs erste einfach halten.
Da gibt es noch viele Möglichkeiten. Inklusive 2 Taster mit denen man
auswählt, die Werte welches Akkus auf den einmalig vorhandenen 10 Leds
angezeigt werden sollen.
Aber eines nach dem anderen.
Hi.
Jeder Akku soll einzeln angezeigt werden, deswegen benötige ich dann für
2 Akkus auch 20 statt nur 10 Pin für die Graphen.
Jetzt aber ein schönes Problem:
Hier erst einmal der einfache Programmablauf
1
ConfigPortb=Output
2
ConfigPortc=Input
3
4
Led1AliasPortb.0
5
Led2AliasPortb.1
6
Led3AliasPortb.2
7
Led4AliasPortb.3
8
Led5AliasPortb.4
9
Led6AliasPortb.5
10
Led7AliasPortb.6
11
12
EingangAliasPinc.0
13
14
15
ConfigAdc=Single,Prescaler=Auto,Reference=Avcc
16
StartAdc
17
DimWertAsWord
18
19
Do
20
Wert=Getadc(0)
21
22
IfWert<200Then
23
Led1=1
24
Else
25
Led1=0
26
EndIf
27
28
IfWert<300Then
29
Led2=1
30
Else
31
Led2=0
32
EndIf
33
34
IfWert<400Then
35
Led3=1
36
Else
37
Led3=0
38
EndIf
39
40
IfWert<500Then
41
Led4=1
42
Else
43
Led4=0
44
EndIf
45
46
IfWert<600Then
47
Led5=1
48
Else
49
Led5=0
50
EndIf
51
52
IfWert<700Then
53
Led6=1
54
Else
55
Led6=0
56
EndIf
57
58
59
Loop
60
61
End
Soweit so gut - der Controller erkennt den PINC.0 als Solchen, reagiert
aber falsch. Er reagiert sowas von sensibel, dass ich eine Messleitung
nur zustecken brauche, um einen Vollen VU-Ausschlag (visualisiert durch
die LED) zu erhalten. Als würde diese als Antenne eine Spannung aus der
Umgebung induzieren.
Nehme ich die Leitung wieder ab, fallen die LED auch wieder gemächlich
auf Low.
Wo liegt da das Problem bzw. was für eine Lösung braucht dies?
Probiere das Ganze erst einmal aus einer Kombination aus dem STK500 und
nem Steckboard für das poti, jedoch reagiert der Controller schon auf
die leiseste Berührung, selbst mit dem Finger.
LG - Maik
LG - Maik
Maik Schulze schrieb:> Wo liegt da das Problem bzw. was für eine Lösung braucht dies?
Häng das Poti an.
Ja, eine Leitung an deren einem Ende nichts hängt, ist eine Antenne.
Sie fängt sich jedes dahergelaufene elektrische Feld in der Umgebung
ein. Da sind diverse Trafos, Handies, Staubsauger, die 230V Leitungen in
der Mauer nicht zu vergessen, Motoren, Radio, Fernseher ...
> Probiere das Ganze erst einmal aus einer Kombination aus dem STK500 und> nem Steckboard für das poti, jedoch reagiert der Controller schon auf> die leiseste Berührung, selbst mit dem Finger.
Man lässt eine Input Leitung nicht einfach offen in der Gegend
rumkullern. Häng das Poti an, und gut ists.
> ... Controller schon auf die leiseste Berührung, selbst mit dem Finger.
Ach ja. Du selbst bist auch eine (nicht gerade erstklassige, aber doch)
Antenne.
Hab ich doch alles gemacht, aber funktioniert so nicht.
Hab auch mein Labornetzgerät mit GND und dem Eingangspin verbunden,
danach die Spannung variiert - aber nichts. Ab 5V leuchtet dann die
erste LED, das wars aber auch schon, mehr passiert nicht.
Hab ich vielleicht irgendetwas vergessen oder nicht ins Programm
geschrieben?
LG - Maik
Maik Schulze schrieb:> Hab ich doch alles gemacht, aber funktioniert so nicht.
Doch, das funktioniert.
Wenn nicht, dann hast du irgendwo in der Verschaltung einen Fehler
gemacht.
OK, hab jetzt alles so, wie es sein sollte:
VCC hole ich mir vom Board, verbinde das mit dem rechten Pin vom Poti
GND hole ich mir ebenfalls vom Board und das gegen den linken Pin.
Den Schleifer hab ich mit dem PC0 verbunden, und er reagiert auch, nur
betrifft das anscheinend nur die erste LED, egal wie ich die Werte rauf
oder runter setze - die anderen LED bleiben aus.
LG - Maik
Maik Schulze schrieb:> OK, hab jetzt alles so, wie es sein sollte:>> VCC hole ich mir vom Board, verbinde das mit dem rechten Pin vom Poti> GND hole ich mir ebenfalls vom Board und das gegen den linken Pin.> Den Schleifer hab ich mit dem PC0 verbunden, und er reagiert auch, nur> betrifft das anscheinend nur die erste LED, egal wie ich die Werte rauf> oder runter setze - die anderen LED bleiben aus.>
* wie groß ist dein Poti?
10k wären in Ordnung.
Häng doch mal ein Voltmeter dran. Wenn geht direkt an den ADC0 Pin vom
Prozessor. Dort müsstest du die Spannung messen können und auch wie sie
sich verändert, wenn du am Poti drehst.
Karl Heinz schrieb:> * wie groß ist dein Poti?> 10k wären in Ordnung.>> Häng doch mal ein Voltmeter dran. Wenn geht direkt an den ADC0 Pin vom> Prozessor. Dort müsstest du die Spannung messen können und auch wie sie> sich verändert, wenn du am Poti drehst.
Wenn du schon am Messen bist: Wie groß ist die Spannung am ARef Pin vom
µC?
ES FUNKTIONIIIIIIERT!!!
Glücklich bin...
In einer Zeile stand ein Code, der das Programm durcheinander brachte -
einfach nur 2 Buchstaben, muss ich wohl auf die Tastatur gekommen sein.
Jetzt gehts und damit kann ich auch arbeiten.
Zu guter Letzt noch einmal Spannungsteilung:
Im Grunde teile ich die Spannung ja schon, indem ich vom
Balancer-Anschluss mittels Widerständen die Spannung auf ein Niveau
unter 5V bringe.
Reicht dies aus oder reicht dies nicht aus?
So, nun heißt es rechnen, rechnen, rechnen. Dann kanns endlich mit dem
Bau losgehend.
LG - Maik
Hi
>PortB.6 und 7 befinden sich beim STK500 nicht auf dem ...
Ergänzung:
PortB.6 und 7 des ATMega8 (und auch ATMega48...328) befinden sich beim
STK500 nicht auf dem ...
MfG Spess
Maik Schulze schrieb:> Reicht dies aus oder reicht dies nicht aus?
Du brauchst maximal 5V in Bezug auf Masse.
Wie diese 5V entstehen ist recht nebensächlich.
Der ADC Eingang ist hochohmig genug, dass er die Messpannung nicht
nennenswert belastet.
Herzlichen Glückwunsch =)
Ja, das langt so, denn damit teilst die Spannung nicht nur im Grunde,
sondern damit teilst du Spannung. Da gibs auch ein einfachen Trick zum
Abschätzen der Spannung die Abfallen wird.
Dein Spannungsteiler besteht ja aus 2 Widerständen. Nennen wir den, der
auf der Plusniveau liegt mal oberen, und den an Masse nennen wir mal
unteren Widerstand. Die Summe aus beiden, also oberer + unterer sollte
etwa bei 10k liegen. Das ist nicht für jeden Spannungsteiler nötig,
sondern hängt mit der internen Schaltung des µC zusammen. Wenn nun
oberer=9k unterer=1k sind, dann ist die Summe 10k, und der untere! hat
1k/10k genau 10% des Gesamtwertes. Und nun fallen an ihm auch exakt 10%
der an Spannungsteiler anliegenden Spannung ab. Mathematisch ausgedrückt
R1/R2 = V1/V2 =)
MfG Chaos
Hallo Chaos.
Habe ich so verstanden. Nur wie errechne ich die nötigen Widerstände?
Die Spannung des Akkus befindet sich quasi im Leerlauf, es gibt also
keinen Stromfluss. Wonach soll ich rechnen?
Ich kann den Widerstand ja nur anhand eines messbaren Stromflusses
errechnen, aber den habe ich hier nicht. Oder soll ich den Stromfluss
zwischen ADC-Messeingangs und GND messen?
Ich weiß, ich bin schwierig, aber mal wieder komme ich nicht weiter.
Hätte ich eine messbare Größe, nach der ich mich richten kann, sagen wir
eine Leuchtdiode, die ich ja schon mit Widerständen bestücken müsste,
wäre das vielleicht eine Möglichkeit, aber mit fallender Spannung am
Akku wird auch der Stromfluss schwinden - dann funktioniert die
Aufrechnung wieder nicht mehr.
LG - Maik
Maik Schulze schrieb:> Habe ich so verstanden. Nur wie errechne ich die nötigen Widerstände?> Die Spannung des Akkus befindet sich quasi im Leerlauf, es gibt also> keinen Stromfluss. Wonach soll ich rechnen?
Nö, die sind nicht im Leerlauf. Wenn Du Deinen Spannungsteiler an den
Akku hängst, sind die beiden Widerstände Deine Last.
Grüsse,
René
Hm, stimmt auch wieder. OK, ich messe das Ganze mal aus.
Ansonsten hätte ich noch alternativ eh eine Status-LED eingebaut, die
zieht mit entsprechender Vorsteuerung (LF33CV)gerade mal 23mA - einem
dauerhaft veränderlichen Wert.
Schau ich mir an - LG Maik
Maik Schulze schrieb:> (LF33CV)gerade mal 23m
Naja, bei 10V und wenn Deine beiden Widerstände 10k haben, sind das
gerade mal 1mA. Sind Faktoe 23 weniger :-)
Grüsse,
René
Ganz genau. Dein Spannungsteiler ist ja schon eine Last für deine Akkus.
Und du brauchst auch keinen Stromfluss zum rechnen, dafür ist der Trick
mit den Prozent gedacht.
Dein Akku hat 12 Volt. Du willst aber nur 5 haben. Nun rechnest du aus,
wieviel Prozent 5V von 12V sind. Also 5/12 = 0,4166666666 also übern
Daumen 41,6%. Nun muss dein unterer Widerstand also 41,6% des
Gesamtwiderstandes deines Spannungsteilers haben. also 41,6% von 10k,
das sind 4,16k. Der obere Widerstand ist also 10K - 4,16k =5,84K. Dann
suchste dir also aus der Normreihe die passenden Widerstände raus. Den
unteren lieber den nächst kleineren Wert, beim oberen lieber den nächst
größeren Wert, damit die Spannung sicher unter 5 Volt bleibt.
Ich denke, mit diesem Beispiel solltest du dir die Spannungsteiler für
jegliche Akkuspannungen ausrechnen können. =)
P.S.
Wenn deine Akkuspannung dann sinkt, sinkt die Spannung am Teiler exakt
im selben Verhältnis, das ist ja der Trick an der Sache, wenn deine
Spannung am Akku auf sagen wir 10V eingebrochen ist, dann misst am
Teiler halt die 41,6% von 10V statt von 12V, also nur noch 4,16V statt
5V
Hi.
Genauso hatte ich mir das auch angedacht, nur eben die Sache mit dem
Teiler: In meiner Mechatroniker-Ausbildung hatten wir das vor Jahren
mal, aber auch nur einmal und nie wiederholt. Langsam kommt alles
wieder, dank dir/euch ;)
Ok, hab jetzt an oberen Widerständen 3,92k zusammen gesucht, der untere
hat 5,9K. So bekomme ich exakt 5V Ausgangsspannung am Teiler. Perfekt.
Werd mir jetzt noch den Schwellwert für die unterste Schaltschwelle bei
9,9V raus suchen, dann habe ich obersten und untersten Wert. Das Board
leuchtet schon fröhlich vor sich hin ;)
LG - Maik
Maik Schulze schrieb:> 9,9V raus suchen
das ist nicht weiter schwer.
Denn im Grunde brauchst du deinen Spannungsteiler in der Rechnung jetzt
nicht weiter berücksichtigen.
Du weißt, dass du bei 12.6V einen Messwert von 1023 bekommst.
(mehr als 1023 geht nicht)
die Frage ist daher: welchen Messwert kriegst du bei 9.9V
1
12.6 ...... 1023
2
9.9 ...... x
3
-----------------------
4
5
1023 * 9.9
6
x = ------------ = 803
7
12.6
d.h. wenn die gemessene Spannung am Eingang der kompletten Schaltung die
9.9V erreicht hast, dann meldet dir der ADC 803
Das du zwischendurch mittels Spannungsteiler auf die 5V-Schiene gegangen
bist und diese 5V-Schiene mit dem ADC vermessen hast, ist ein 'internes
Detail'. Da das aber alles lineare Abhängigkeiten sind (also
proportional: je mehr, desto mehr), brauchst du da nicht lange
rumrechnen, sondern du nimmst das was gaaanz vorne reingeht (die
Akkuspannung) und setzt es in Beziehung zu dem was gaaaanz hinten
rauskommt (der ADC-Wert). Das dazwischen sind einfach nur 'Skalierungen'
des Wertes in einen anderen Zahlenbereich und die darfst du zu einer
einzigen Zusammenfassen. Nämlich der mit der du rechnest: eine
Akkuspannung von 0V wird als ADC Wert 0 abgebildet, eine Akkuspannung
von 12.6V wird als ADC Wert 1023 abgebildet.
Und der Rest ist 3-Satz (oder wie es in meiner Schulzeit vor 40 Jahren
noch hiess: Schlussrechnen. Da gibt es eine Eselsbrücke:
Wenn du es dir so aufschreibst, wie ich das oben gemacht habe, dann ist
das Ergebnis: Zahl über x, mal Stumpf durch Spitz.
1
12.6 ...... 1023
2
9.9 ...... x
3
-----------------------
4
5
1023 * 9.9
6
x = ------------ = 803
7
12.6
8
9
10
11
Spitz ......... Zahl über x
12
Stumpf ......... x
13
----------------------------------
14
15
Einschub: Die Begriffe merkt man sich leicht:
16
Stumpf ist der Stumpf eines Baumes, und der ist ja bekanntlich immer unten, während die Spitze oben ist :-)
17
18
19
x errechnet sich dann zu:
20
21
'Zahl über x' mal 'Stumpf'
22
x = ----------------------------
23
'Spitz'
24
25
wie gut, dass sich 'Zahl über x' auf 'Spitz' reimt.
HI.
Ich denke, ein letzten Problem bleibt mir noch:
Die Bereiche zwischen den Schaltabständen sind so gering, dass die
Leuchtdioden wie ein von oben nach unten dunkler werdender Balken
ausklingen. Zwischen alles Bereichen liegen gerade mal ca. 200 Bits, was
summa 20 Bits pro Flanke ausmacht.
Die Led gehen beim Abfallen der Spannung unter den angegebenen Wert
nicht sofort aus, sondern nur gemächlich, wenn ich die Spannung weiter
herunter schraube. Liegt das am Board oder muss da softwareseitig noch
etwas gemacht werden? Würde ja fast auf die Software tippen. Die LED
flackern beim ausgehen stark nach, was durch Störungen durch Außerhalb
kommen kann, allerdings sorgen besagte Störungen nicht für das langsame
Ausgehen der LED.
Hier brauche ich noch einen Rat von euch.
LG - Maik
Maik Schulze schrieb:> Die Led gehen beim Abfallen der Spannung unter den angegebenen Wert> nicht sofort aus, sondern nur gemächlich, wenn ich die Spannung weiter> herunter schraube. Liegt das am Board oder muss da softwareseitig noch> etwas gemacht werden?
Da wird der ADC Wert zu sehr "klappern" (d.h. der ADC liefert nicht zb
978, so wie es rechnerisch zu erwarten wäre, sondern zb einmal 977, dann
wieder 979, dann wieder 977, etc. etc. Normalerweise ist das wurscht.
Aber wenn diese Sprünge rund um eine Schaltschwelle sitzen, dann
bedeutet das, das bei einer Messung die LED eingeschaltet, bei der
nächsten ausgeschaltet wird.
Wie ist deine Hardware-Beschaltung?
Kondensator an AVcc, Kondensator an ARef?
Wenn da alles in Ordnung ist, dann würde ich einen Mittelwert
vorschlagen. 8 oder 16 Messungen machen und den Mittelwert davon.
Karl Heinz schrieb:> Da wird der ADC Wert zu sehr "klappern"
Das ist übrigens ein Schuss ins Blaue, also das was die Amerikaner einen
'educted guess' nennen.
Die Moral daraus, die man mitnehmen sollte lautet: Es ist immer eine
ziemlich gute Idee, wenn man im System irgendeine Möglichkeit hat, sich
Zahlenausgaben zu machen. Selbst dann, wenn das endgültige System nichts
dergleichen enthalten wird. Alleine die Zeit, die man durch educted
guesses im Dunkeln tappt, und die man dadurch einsparen kann, ist es
schon wert, sich während der Entwicklung eine Ausgabemöglichkeit (USART,
LCD) zu schaffen.
Oder man trennt Messen und Auswertung.
z.b so: man führt in einer Variabel den aktuellen Stand mit, der wird
beim messen nur angepasst, wenn der gemessene Wert kleiner ist.
Die Auswertung wird dann immer anhand der Variabel vom aktuellen Stand
gemacht.
Dann ist das klappern des ADC egal und LEDs flackern an den Grenzwerten
nicht.
Grüsse,
René
Also anstatt nur "<x" zu schreiben, sollte man die Schaltschwellen
explizit definieren, damit eine LED entweder nur ganz an oder nur ganz
aus ist...?
Ich versuch mal mein Glück
LG - Maik
Maik Schulze schrieb:> Also anstatt nur "<x" zu schreiben, sollte man die Schaltschwellen> explizit definieren, damit eine LED entweder nur ganz an oder nur ganz> aus ist...?
Ähm.
EIn < hat nur 2 Möglichkeiten, entweder es trifft zu oder es trifft
nicht zu.
Aber
1
if wert < 768 then
2
Led1 = 1
3
else
4
Led1 = 0
5
end if
767 ist kleiner als 768, also wird die LED eingeschaltet. EIn paar
millisekunden später misst der ADC einen Wert von 769 und das ist NICHT
kleiner als 768, also wird die LED wieder ausgeschaltet. Wieder ein paar
Millisekunden später kommt vom ADC 766 und das ist wieder kleiner als
die 768, womit die LED wieder eingeschaltet wird.
Die LED blinkt im Millisekundentakt. So schnell kannst du aber nicht
schauen. Für dich als Mensch sieht das so aus, als ob die LED mit halber
Kraft leichten würde.
Hysteresen einführen wäre auch noch eine Möglichkeit.
Ich kann kein BASCOM, deshalb Prosa:
Var aktuell = 0;
Messen:
n = Messung;
// erste messung
if ( aktuell = 0) aktuell=n;
if ( n < aktuell ) aktuell =n;
Auswertung dann mit aktuell und nicht x.
(Sorry, ich tippe mühsam auf einem Handy).
Grüsse,
René
OK, da reicht mein Latein mal wieder nicht ;).
Dann belasse ich es so, wie es ist.
Auch hat es nicht funktioniert, 2 Spannungen getrennt von einem
Controller überwachen zu lassen.
Danke sehr an euch alle. Habt mir wirklich sehr geholfen.
LG - Maik
Was hat genau nicht funktioniert? Nicht so schnell verzweifeln, hier
engagieren sich sehr viele, dass das klappt und etwas lernen kannst :-)
Grüsse,
René
Indem man die Schwellen voneinander trennt
Angenommen die Schwelle wäre rechnerisch bei 847.
1
if Wert < 846 then
2
Led1 = 1
3
elseif Wert > 848 then
4
Led1 = 0
5
end if
Sinn der Sache ist es, bei Messwerten 846, 847, 848 (in diesem Beispiel)
ganz einfach nichts zu tun. Die Led soll das weiter machen, was sie auch
vorher machte. Wenn sie brannte, dann soll sie weiter brennen. Wenn sie
aus war, dann soll sie auch weiterhin aus sein.
Man kann natürlich die Hysterese auch größer machen
OK, danke sehr.
Hat zwar n bissl gedauert, bis ich mir das verinnerlichen konnte, aber
jetzt hab ichs. Werde das morgen versuchen. Wenns nicht klappt, belasse
ich alles beim Alten.
Nun noch die finale Frage:
Wie kann ich den Controller dazu bewegen, nebenbei noch andere,
einfachere Aufgaben, z.B. das Togglen von LED's, zu erledigen, ohne dass
der Messablauf dadurch gestört wird?
Welche Transistoren eignen sich überhaupt, um einen Ausgang des
Controllers mit einer Last zu beschalten? Hab zwar ein paar da, aber die
eignen sich anscheinend nicht dafür. Und Relais - das ist zu schwer und
raubt Platz ohne Ende.
LG - Maik
Maik Schulze schrieb:> Wie kann ich den Controller dazu bewegen, nebenbei noch andere,> einfachere Aufgaben, z.B. das Togglen von LED's, zu erledigen, ohne dass> der Messablauf dadurch gestört wird?
indem du das dann eben danach machst.
Immer bedenken: die kleinen Käfer sind schnell. Sauschnell. Der µC macht
locker 15 tausend Messungen in der Sekunde. Und dabei kommt der noch
nicht einmal ins Schwitzen.
Wie wichtig ist es, dass du tatsächlich 10000 mal in der Sekunde die
Akkuspannung feststellst? Ändert sich die wirklich so schnell, dass es
eine Rolle spielt, ob das bei einem Durchgang nur 9000 Messungen pro
Sekunde sind?
>> Welche Transistoren eignen sich überhaupt, um einen Ausgang des> Controllers mit einer Last zu beschalten?
Kommt auf die Last an.
Welcher Strom schwebt dir denn so vor?
Dein Messablauf wird kaum gestört, egal was Du nebenbei machst. Deine
Akkus werden ja wohl kaum von jetzt auf sofort leer sein.
Wegen den Transistoren: da sind FETs angesagt. Das kommt aber auf die
grösse der Last an.
Grüsse,
René
Cool.
Ich habe ein wenig Bedenken, dass wenn ich ein Subprogramm schreibe und
durch eine Aktion in dieses dann hinein springe, der normale Ablauf des
ADC gestört oder gar unterbrochen wird - und das soll ja nicht
passieren.
Wie seht ihr das?
Mir schwebt da z.B. ein Demo-Modus der Beleuchtung des Modells rundum
vor, welche in einer Demo-Abfolge blinken, bis der Hauptakku angesteckt
wird. Dem Controller zu sagen, dass er in ein Subprogramm (GOSUB?)
Springen soll, bis am ADC-Eingang eine messbare Spannung anliegt, wäre
ja nicht das Problem, nur muss ich dann auch in das Unterprogramm auch
hinein schreiben, dass sobald der Akku angesteckt ist, wieder in das
Hauptprogramm gesprungen werden kann?
Danke euch sehr.
LG -Maik
Na das war ja eine Lehrstunde.
Nur ein Nachtrag: Verwende nicht die 5V als oberen Grenzwert für den ADC
denn die schwankt, ist mal 4.9 und mal 5.05 und das bringt
unzuverlässige Messwerte, sondern die eingebaute 2.5V
Referenzspannungsquelle (extern 100nF an ARef nach Masse). Die hat zwar
auch nicht genau 2.5V sondern vielleicht 2.3V oder 26V, aber die sind es
dann auch, die bleiben stabil, die sind 1000 x stabiler als deine 5V.
Daher gibt es die Referenz und man sollte sie verwenden. Der
Spannungsteiler zum Akku wird dann halt etwas grösser. Nimm einen
LP2950-5 als Spannungsregler und 15MOhm + 330kOhm als Spannungsteiler,
wobei noch ein 10nF Kondensator vom ADC Eingang nach AGND geschaltet
wird.
Dann MISST du was der volle (12.6V) Akku liefert ( z.B. ADC Wert 895)
und berechnest deine Grenzen ausgehend von diesem Wert.
Übrigens: Ganz ohne uC und Spannungsregler und ADC geht dein Problem mit
dem LM3914 zu lösen.
Hallo und danke dir.
Ich habe mir überlegt, dass der Controller vielleicht noch mehr Aufgaben
erledigen kann - und dann passt es wieder mit dem Controller als
Indikator ;). Er soll ja nur bei stillstehendem Modell die Restspannung
des Akkus anzeigen, also wenn das Modell zurück zum Kai gefahren wird.
Dann stehen die Motoren still und man kann die Werte ablesen. Im
laufenden Betrieb funktioniert das nicht, da die Spannungswerte zu stark
einbrechen.
Danke sehr - mal schauen, was im anderen Thread so vor sich geht.
LG - Maik
Maik Schulze schrieb:> laufenden Betrieb funktioniert das nicht, da die Spannungswerte zu stark> einbrechen.
Und genau die sind es, die dich eigentlich interessieren.
Die Leerlaufspannung eines Akkus (also ohne Last) interessiert keine
Sau.
Naja, so würd ich das nicht sagen. Der Akku wird nur minimal belastet,
wenn ich die Motoren im Stillstand habe, aber dennoch möchte ich, dass
ich genau dann die Restspannung ablesen kann.
Dazu muss ich auch sagen, dass ich mir vor einiger Zeit einen
Smart-Guard gekauft habe, der im Grunde nichts Anderes macht, außer dass
er eben die gemessenen Werte auch gleich in einer expliziten Spannung
und auch in Prozentualwerten anzeigt.
Nachteil: Ich muss den Akku dazu immer erst aus dem Akkufach nehmen, um
an den Balanceranschluss dran zu kommen - und das kostet Zeit und
Nerven. Gerade bei dem, was ich nun plane, wird dies nicht mehr möglich
sein, da sich die Akkus unter einem elektrisch verschlossenen Deckel
befinden.
Danke trotzdem :D
LG - Maik
Maik Schulze schrieb:> Naja, so würd ich das nicht sagen.
Doch.
Das würde ich genau so sagen.
Denn dem Akku ist es letzten Endes egal, wodurch die Unterspannung
erreicht wird, die daran Schuld ist, dass er diesen Missbrauch durch
Kapazitätsverlust quittiert.
Daher interessiert dich die Akkuspannung unter Last. Denn die ist es
(bzw. die Unterschreitung eines von dir vorgegebenen Grenzwertes), die
deinem Lipo zu schaffen macht.
Dich interessiert ja auch nicht, wie gut es einem Maultier geht, wenn es
im Stall steht. Interessant ist der Fall: was passiert wenn ich dem
500kg auf den Rücken schnalle? Wie stark geht es dann in die Knie? Muss
ich ihm eine Pause gönnen oder geht es noch?
Ähm - dir ist schon klar, dass ein Lipo-Akku kein Ni/XX-Akku ist, ja?
Die brechen unter Belastung weitaus weniger zusammen als Andere. Bei
minimaler Belastung, wie sie zum Zeitpunkt der Messungen auftritt,
unterscheidet sich der reale Wert gegenüber dem Leerlaufwert gerade mal
im Hunderstel Volt-Bereich. Und mit meiner 11-Teiler-Abstufung von den
zu messenden 3,4V zwischen Umax und Umin wird das wohl weniger als gar
nicht ins Gewicht fallen. Es geht also um eine Diskussion, in der ich
von Ameisen rede und du von Elefanten!
Ich denke, dass es nicht sinnvoll ist, hier zu widersprechen - immerhin
geht es um meinen Anwenderbereich und nicht um deinen, umpnd eine
genauere Unerteilung wird man mit 10 Segmenten nicht hinbekommen!!!
Danek dir trotzdem.