'############################################################################################ '#### NiMh-Lader 1A mit Delta-Peak erkennung (ca 5mV) 'Die Akkuspannung wird überwacht. Sobald sie um >=5mV 'fällt, ist der Delta-Peak erreicht - Ladeende. Sofern sie sich länger 'als 30 Minuten nicht ändert, wird zur Sicherheit abgeschaltet. '#### Bedienung: 'Spannungsquelle und Akku anschließen. Akku darf nicht voll 'geladen sein! Start-Taster drücken. Die orange LED blitzt. Wenn sie 'dauernd leuchtet, ist ein Delta-Peak dedektiert = Akku voll, 'die Schaltung geht auf Ladeerhaltungsmodus. '#### Portbelegung des Attiny45 'PINB.0 = NPN auf P-Mosfet Schalttransistor (Signal negiert) 'PINB.1 = LED orange, Ladeende; blitzt während Ladung (Messpause) 'PINB.2 = LED rot, laden 'PINB.3 = ADC Eingang 'PINB.4 = LED gelb, 30 Min. keine Spannungsänderung >5mV, Ladeende '############################################################################################ 'Prozessor $regfile = "attiny45.dat" 'Takt intern 1 MHz $crystal = 1000000 'Speicherreservierung $hwstack = 10 $swstack = 15 $framesize = 10 'Konfiguration Variable Dim A As Bit Dim Notb0 As Bit Dim B As Bit Dim T As Byte Dim Batterie1 As Word Dim Batsav1 As Word Dim Zaehler1 As Byte Dim Zaehler2 As Word 'Port B auf Eingabe=0, Ausgabe=1 Ddrb = &B0001_0111 'Port B auf 0 oder 1 Portb = &B0000_0000 'Pullup auf 0 oder 1 Pinb = &B0000_0000 'Konfiguration ADC (Ref=VCC) Config Adc = Single , Prescaler = Auto , Reference = Avcc 'voreingestellte Schalterwerte B = 1 T = 5 Batterie1 = Getadc(3) 'Ladeprogramm Do 'Strom ein, LED rot, bei Ladeende LED orange dauerleuchten 'B0 war urspünglich direkt auf den P-Mosfet geschaltet... 'aktuell einen NPN-Transistor gegen Gate, das macht.. 'eine Invertierung des Ports nötig. 'Befehl ursprünglich "Portb.0=A" Notb0 = Not A Portb.0 = Notb0 Portb.1 = A Portb.2 = B If A = 1 Then T = 150 If A = 1 Then Zaehler1 = 0 If A = 1 Then Zaehler2 = 0 'Ladeperiode Wait 3 'Portumschaltung für Messpause 'B0 war urspünglich direkt auf den P-Mosfet geschaltet... 'aktuell einen NPN-Transistor gegen Gate, das macht.. 'eine Invertierung des Ports nötig. 'Befehl ursprünglich "Portb.0=B" Notb0 = Not B Portb.0 = Notb0 Portb.1 = B Portb.2 = A 'Messpause Waitms T 'Abfrage neuer Spannungswert Batterie1 = Getadc(3) 'Delta-Peak: Spannung sinkt, Ladeende nach 1 Minute If Batterie1 < Batsav1 Then Zaehler1 = Zaehler1 + 1 If Batterie1 => Batsav1 Then Zaehler1 = 0 If Zaehler1 = 20 Then A = 1 'Entscheidung: wenn keine Spannungsänderung dann Timeout (Ladeende ca.30 Minuten) LED gelb an If Batterie1 = Batsav1 Then Zaehler2 = Zaehler2 + 1 If Batterie1 <> Batsav1 Then Zaehler2 = 0 If Zaehler2 = 600 Then A = 1 If Zaehler2 = 600 Then Portb.4 = 1 If A = 1 Then B = 0 'Neuen Spannungswert speichern If Batterie1 > Batsav1 Then Batsav1 = Batterie1 Loop