LED Ladestandsanzeige

Gast #4758595
Lesenswert?

Hallo,

ich hänge bei der Planung einer Schaltung fest.

Ich möchte für einen 6S LiPo Akku eine Ladestandsanzeige bauen. Im 
Grunde soll diese Schaltung die selbe Funktion wie der LM3914 haben, 
jedoch sollen die LEDs nicht in linearen Schritten angesteuert werden, 
sondern der Entladekurve einer LiPo angepasst.

Wie kann ich das realisieren?
Gast #4758617
Lesenswert?

Edgar schrieb:
> Wie kann ich das realisieren?

Mit einem passenden ausgelegten Spannungsteiler für die Vergleichswerte 
der Komparatorstufen, jedenfalls wenn du es analog aufbauen möchtest.

Falls du lieber einen µC verwenden möchtest - und das vermute ich mal 
auf Grund des Unterforums, in dem du deine Frage stellst - nimmst du 
einen µC mit ADC und kannst mit dem Messwert dann eine Tabelle mit den 
Schwellwerten abklappern, die du vorher hinterlegt hast.
Gast #4758671
Lesenswert?

Ich hab sowas mal für nen Tiny13 gemacht:

Der Spannungsteiler für den Analogeingang war so dimensioniert das bei 
Randvollem Akku 5V (AREF=5V) am Eingang erreicht werden. Aber das kann 
ja jeder für sich anders machen.
1
;
2
; Li-Ion Akku Ladestandanzeige für ATTiny13.
3
; 5 LED Anzeige inkl. Unterspannungswarnung.
4
; 07/2016 Björn Wieck
5
;
6

7
.include "tn13def.inc"
8

9
.def temp  = r16
10
.def temp1 = r17
11
.def temp2 = r18
12
.def AIn = r19
13

14

15
; FUSE CLK/8 setzen!!
16

17
;LED1=PB0, LED2=PB1, LED3=PB2, LED4=PB3, LED5=PB4; Analog-In=PB5
18

19
.org 0x0000
20

21
    rjmp    init      ;Reset
22

23

24
init:
25
    ldi  temp, LOW(RAMEND)  ;Stackpointer initialisieren
26
    out   SPL, temp
27
     ldi  temp, 0b00011111  ;PortB 0-4 auf Ausgang
28
    out  DDRB, temp
29
    ldi  temp, 0b00011111  ;Alle LEDs Ausschalten
30
    out  PORTB, temp
31

32
    ;ADC einrichten
33
    ldi  temp, (1<<ADLAR) | (0<<REFS0) | (0<<MUX1) | (0<<MUX0)  ;Auflösung 8-Bit, REF=Vcc, Kanal 0
34
    out  ADMUX, temp
35
    ldi   temp, (1<<ADEN) | (1<<ADSC) | (1<<ADATE) | (1<<ADPS2) | (1<<ADPS1)  ;AD-Wandler einschalten, Freilaufend
36
    out  ADCSRA, temp
37
    ldi  temp, 0
38
    out  ADCSRB, temp
39

40
Start:
41
    rcall  GetADC      ;Spannung messen
42
    cpi  AIn, 215    ;Wenn Unterspannung dann LED 1 Blinken lassen
43
    brlo  Blink
44
    cpi  AIn, 247    ;Akku 80-100%
45
    brsh  LED5
46
    cpi  AIN, 239    ;Akku 60-80%
47
    brsh  LED4
48
    cpi  AIn, 229    ;Akku 40-60%
49
    brsh  LED3
50
    cpi  AIn, 223    ;Akku 20-40%
51
    brsh  LED2
52
    cpi  AIn, 215    ;Akku 0-20%
53
    brsh  LED1
54
    rjmp  Start
55

56

57
LED5:  ldi  temp, 0b00000000    ;LED 1-5 einschalten
58
    out  PORTB, temp
59
    rjmp  Start
60

61
LED4:  ldi  temp, 0b00010000    ;LED 1-4 einschalten
62
    out  PORTB, temp
63
    rjmp  Start
64

65
LED3:  ldi  temp, 0b00011000    ;LED 1-3 einschalten
66
    out  PORTB, temp
67
    rjmp  Start
68

69
LED2:  ldi  temp, 0b00011100    ;LED 1-2 einschalten
70
    out  PORTB, temp
71
    rjmp  Start
72

73
LED1:  ldi  temp, 0b00011110    ;LED1 einschalten
74
    out  PORTB, temp
75
    rjmp  Start
76

77
Blink:  ldi  temp, 0b00011110    ;LED 1 blinkt
78
    out  PORTB, temp
79
    rcall  Wait
80
    ldi  temp, 0b00011111
81
    out  PORTB, temp
82
    rcall  Wait
83
    rjmp  Start
84

85
Wait:          ; Warteschleife für ca. 200 Millisekunden --> wenns flackert dann CLK/8 vergessen ;)
86
    ldi  temp1, 255
87
    ldi  temp2, 128
88
wl1:  dec  temp1
89
    brne  wl1
90
    dec  temp2
91
    brne  wl1
92
    ret
93

94
GetADC:    sbi  ADCSRA, ADIF      ;logisch "1" löscht ADIF flag !
95
adwait1:                     ;Erster Wert ignorieren, da meist Ungenau
96
    sbis  ADCSRA, ADIF
97
    rjmp  adwait1
98
    sbi  ADCSRA, ADIF    ;logisch "1" löscht ADIF flag !, nochmal
99
adwait2:              ;neuen ADC-Wert lesen
100
    sbis  ADCSRA, ADIF 
101
    rjmp  adwait2
102

103
; Noch genauere Werte würden sich ergeben wenn der ADC mehrfach eingelesen wird, dessen Werte summiert und durch die Schleifendurchläufe geteilt wird.
104
; In dieser Anwendung ist das aber Unrelevant.
105

106
; ADC-Wert übernehmen
107
    in   AIn, ADCH
108
    ret

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren