Translate

13 November 2009

ATtiny-Balancer-Programm läuft jetzt!!!!!!!

Es ist gerade 2Uhr55-Gäääääähhhhhhhhhhn!
seit ein paar Minuten macht der ATtiny13
endlich das, was ich will dass er es tun soll.......

(Dachte ich zumindest, aber ganz so wars dann
doch nicht, da war noch ein Fehlerchen drin, der ist
jetzt aber behoben und auch hier schon korrigiert.
Jetzt arbeitet Port B0 so wie er soll, die serielle
Schnittstelle ist wieder frei, aber noch nicht
programmiert....Immer mit der Ruhe!)
War irgendwie nicht ganz so einfach, wie ich ganz
am Anfang dachte.
In der Grundprogrammierung des
Lernpakets sind zwei der fünf Ports schon für
die Serielle Schnittstelle reserviert (PB1 und PB2)
ein weiterer (PB0) hängt mit an der Versorgung
den wollte ich eigentlich als Balancer-Ausgang
nehmen, aber irgendwie hats nicht geklappt,
obwohl es eigentlich gehen sollte.
(dem muss ich noch bei Gelegenheit
mal nachgehen, um die serielle Schnittstelle
zu erhalten,die könnte noch mal sehr
wertvoll werden)
(Anmerkung 16.11. Problem ist behoben!!!!!!!)
Da ist eine Art Boot-Programm drauf,
so dass man den ATtiny jederzeit neu
programmieren kann ohne lang
löschen und resetten zu müssen.
Ein sogenannter Boot-Loader halt, sowie
eben die Serielle Schnittstelle über die
man z.B. die Akkuspannung auslesen könnte.

Das wäre natürlich die Krönung des Ganzen!
Und Grundvoraussetzung für ein ordentliches
Display mit Spannungsanzeige etc.

Weil ich Port PB0 nicht zum Arbeiten überreden
konnte, nahm ich halt Port PB1 da gings.
Dafür geht jetzt die serielleSchnittstelle nicht,
aber das müsste auch noch zu schaffen sein.
Jetzt muss man halt klassisch neu
programmieren- was solls.......
Port PB0 ist wohl auch irgendwie vom
Boot-loader benutzt. Seltsam ist nur, dass
ich den Port per Impuls-Pausen-Steuerung
ohne Probleme nutzen kann,
aber nicht als Schaltausgang.
Andere takten den Balancer-Ausgang
ohnehin, aber ich sehe bei größeren
Akkus keine Notwendigkeit hierfür.
(um die 100Ah)
Ich denke, das Problem wird zu
lösen sein.Ich habe den Baustein jetzt
eh schon ohne Boot-loader
programmiert, vielleicht
wärs das schon gewesen,
aber das teste ich ein andermal.
(Anmerkung 16.11. Problem ist behoben!!!!!!!
es scheint wirklich der Boot-Loader
gewesen zu sein! da ist noch einiges
an Programm dabei für ein Interface,
und das benutzt den Port als
Puls-Pausen-Ausgang, drum war der
als solcher initialisiert und für nichts
anderes zu gebrauchen)


Derzeitiger Zustand:
ATtiny13 (muss noch ersetzt werden durch
einen ATtiny13V weil der auch für 1,8V
spezifiziert ist,ansonsten aber identisch)
Der Baustein ist als eigenständig
laufender Balancer konzipiert.
Versorgt aus der zu überwachenden Zelle.
Serielle Spannungsauslesung ist vorgesehen,
aber noch nicht realisiert.
Eine Status-LED bzw. Optokoppler
kann aber schon angesteuert werden.

Derzeitige Schaltgrenzen:
Alarm unter 2,5V bzw. über 3,6V (pin2 high)
Balancer schaltet ein bei 3,5V (pin5 high)
Diese Werte lassen sich in
0,0173V-Schritten verändern

Der PIC nutzt seine interne Referenz
von 1,1V mit 255-stufiger AD-Wandlung
macht 0,0043V-Schritte am ADC-Eingang.
Mit Spannungsteiler 4:1
(10k+3k3 bzw. 1k+330R 0,1%) ergeben
sich 0,0173V an der "Klemme"
bei einem Messbereich bis 4,43V max.

Hier der Quellcode:
(Anmerkung: korrigierte Version vom 16.11.09)

;Regler1.asm, Balancer 2,5V 3,5V 3,6V 1,1Ref;
;Werte für Eingangsteiler 4:1 10k/3k3 bzw 1k/330R 0,1%
;ADC an PIN3(PB4): Ref.:1,1V/255=0,00431V gibt 0,0174V je Einheit
;2,5V:0,62V:144 3,5V:0,87:201 3,6V:0,89:207
;Stoermeldung an PIN2(PB3)
;Balancer an PIN5(PB0)

.include "tn13def.inc"
.def A = r16 ;Messwert ADC
.def B = r17 ;GWu
.def C = r18 ;GWbal
.def D = r19 ;GWo
.def Delay = r20
.def Count = r21
rjmp Anfang
Anfang:
sbi ddrb,0 ;Datenrichtung PB0
sbi ddrb,3 ;Datenrichtung PB3
rcall AdcInit
Schleife1:
ldi A,2 ;ADC2 an PB4
rcall RdADC
ldi B,144 ;GWu: 0,62V/1,1V*255=144
ldi C,207 ;Bal: 0,89V/1,1V*255=207
ldi D,219 ;GWo: 0,94V/1,1V*255=219
cp A,B ;Vergleich GWu
brlo PB3ein
cp C,A ;Vergleich Balancerspg
brlo PB0ein
cp A,C ;Vergleich Balancerspg
brlo PB0aus
Schleife2:
cp D,A ;Vergleich GWo
brlo PB3ein
allesok:
cbi portb,3 ;port3 Stoerung aus
rjmp Schleife1 ;naechste Messung
PB3ein:
sbi portb,3 ;Stoerung ein
rjmp Schleife1 ;naechste Messung
PB0ein:
sbi portb,0 ;Balancer ein
rjmp Schleife2 ;zum Vergleich GWo
PB0aus:
cbi portb,0 ;Balancer aus
rjmp Schleife2 ;zum Vergleich GWo
AdcInit:
ldi A,3 ;Clock / 4
out ADCSRA,A
sbi ADCSRA,ADEN ;AD einschalten
ret
RdADC:
out ADMUX,A
sbi ADMUX,ADLAR ;Left adjust
sbi ADMUX,REFS0 ;1,1VRef benutzen
sbi ADCSRA,ADSC ;Wandlung starten
ADrdy:
sbic ADCSRA,ADSC
rjmp ADrdy
sbi ADCSRA,ADSC
ADrdyb:
sbic ADCSRA,ADSC
rjmp ADrdyb
in A,ADCH
ret



Das wars schon!


Das ist mein allererstes ATtiny-Programm!
Nachdem nun auch die schlimmsten Fehler
behoben sind und die Pins für die serielle
Schnittstelle jetzt wieder frei sind,
bin ich fürs erste schon sehr zufrieden damit.
Und das mit der seriellen Datenausgabe zur
Spannungsüberwachung krieg ich sicher auch noch
zum Laufen, aber nicht heute......
.....und vermutlich auch nicht in den nächsten paar
Tagen.....ich muss einige andere Dinge in Ordnung
bringen.... Vaterpflichten....Ämter.... Haus renovieren
Steuererklärung, Werkstatt aufräumen,
Winterreifen montieren, Müll entsorgen,
und so manch andere unangenehme
Tätigkeit... da hat sich ganz schön was angesammelt!

Ich werde mir wohl einen Adapter basteln,
wo ich alle Aus und Eingänge beobachten kann,
also fünf LED mit Vorwiderstand
und Schalter sowie ein Poti
zur Spannungsvorgabe,
dann geht der Test einfacher,
wohl auch gleich mit den Programmier
und Leseleitungen

Eine Programmieranleitung gibts
ein andermal.
Da müsst Ihr halt jemanden bitten,
ders schon kann. Oder selber schlau machen.
Ein bisschen googeln........

Auf der Homepage des Verfassers
des Lernpakets gibts
die nötigen Programme als Update zum
Downloaden!

www.b-kainka.de/lpmikros.htm

da ist auch der Schaltplan des Adapters
zu finden, sind nur ein paar teile!


Hier noch die HEX-Daten: (Stand 16.11.09)

:020000020000FC
:1000000000C0B89ABB9A15D002E017D010E92FECC7
:100010003BED011740F0201740F0021740F0301779
:1000200010F0C398F1CFC39AEFCFC09AF8CFC09821
:10003000F6CF03E006B9379A089507B93D9A3E9A7C
:10004000369A3699FECF369A3699FECF05B1089585
:00000001FF

als BMS.HEX abspeichern (nur Tex)
und auf den ATTiny übertragen.

viel Spass!
Das geht leider noch nicht bei 2,5v
weil der dann abschaltet


Zum ändern der Schaltgrenzen muss
der Quelltext angepasst und neu
compiliert werden.

Das Auslesen der Werte stelle ich mir
momentan so vor, dass es in einer Art
Master-Slave-Modus passiert.
Dazu müsste zwar jedes Modul einen
eigens programmierten PIC drin haben,
mit speziellem Befehl für die Antwort,
aber die Adressierung wäre dann einfacher.
Funktionierende Programme hierfür sind
im Lernpaket auch schon dabei,
solange das Problem mit Port 0 nicht
gelöst ist, könnte man mit zwei PIC arbeiten,
aber wie schon gesagt,das muss gehen,
und wenn ich den Balancer takten muss!

Ein Rechner (notfalls Terminal-Programm)
sendet die Nummer gleichzeitig an alle.
Der angesprochene antwortet mit seinem
ADC-Wert -fertig!
Die Umrechnung auf lesbare Werte
( Wert x 0,0173V) sollte eigentlich auch
noch im PIC erfolgen können,
zumindest als mV müsste direkt gehen.
So könnten alle parallel geschaltet sein,
und der Elektronik-Aufwand wäre gering.

Die Spannungen sollten eigentlich nur
interessieren wenn was nicht passt.
Den Alarm bei Über- und Unter-
Spannug habe ich zusammengefasst,
weil nicht beides gleichzeitig auftreten
kann, bzw sich der Fehler aus der
Situation erklärt.
Laden: Überspannung,bzw
Versagen eines Balancers.
Fahrt: kann nur Unterspannung sein.

Fürs erste könnte ein PC angeschlossen
werden, aber für die Zukunft sollte es
schon ein ordentliches Display sein.
(eine neue Aufgabe.............)

bis demnächst!

mfG
Franz

Keine Kommentare:

Kommentar veröffentlichen