\ Desulfator.fs Stand 2010-03-20 \ Desulfator-Steuerung mit R8C/13 rs ram : Doit ; \ for MARKER %00000010 constant PD0 \ PRC2-bit $0A constant PREG \ Protect Register %00000001 constant TxD1 \ bit 0 is Output, bits 1..7 are ADC-Inputs $E2 constant PDIR \ Direction Register port0 $E5 constant port3 \ P30..P33 Input (not yet used) variable Akku rom : AdcInit ( -- ) \ override lcdinit PD0 PREG bset \ enable PD0 in Protect Register TxD1 PDIR c! \ bit 0 is TxD1 Output, &20 ms \ bit 1..7 is Input Channel 6..0, settle ; : Tag? ( -- f ) \ ist Tag? 1 port1 btst \ test bit 1 ; : Tag! ( -- ) \ ist Tag! 1 port1 bset \ set bit 1 ; : Nacht! ( -- ) \ ist Nacht! 1 port1 bclr \ clear bit 1 ; : Wdog! ( -- ) \ init Watchdog to off 0 port1 bclr \ clear bit 0 ; : Wdog ( -- ) \ Watchdog port1 c@ $0F and 1 xor led! &10 ms \ toggle bit 0 and wait 10 ms Wdog! \ clear bit 0 again ; : 10s ( -- ) \ 10 Sekunden warten und blinken Wdog! &10 0 do Wdog Wdog &980 ms loop ; : Hell ( -- ) \ Messe Helligkeit, Channel 5 5 adc@ &50 > if Tag! else Nacht! then \ >50 (Daemmerung) ist Tag ; : Des-an ( -- ) \ Desulfator an 2 port1 bset \ set bit 2 ; : Des-aus ( -- ) \ Desulfator aus 2 port1 bclr \ clear bit 2 ; : Lad-an ( -- ) \ Lader an 3 port1 bset \ set bit 3 ; : Lad-aus ( -- ) \ Lader aus 3 port1 bclr \ clear bit 3 ; : Ubatt ( -- v ) \ Messe Akku, Channel 6 6 adc@ \ 400 entspricht 10,7 V ; : Messen ( -- v ) \ Mittelwert der Akkuspannung Des-aus Lad-aus &10 ms 0 Akku ! \ alles auf Null &10 0 do \ Mittelwert bilden Ubatt &10 / Akku +! 1 ms \ loop \ Akku @ \ und holen ; : Steuern ( v -- ) \ Lader/Desulfator an/aus &404 > \ Akku > 10,8 V ? if Des-an \ ja, nur Desulfator an else Tag? \ nein, ist Tag? if Lad-an Des-an \ ja, dann beide an else Lad-an then \ Resthelligkeit nutzen then \ ... bis demnaechst ; : Not-aus \ Tiefentladung vermeiden Ubatt &400 < \ Akku < 10,7 V ? if Lad-aus then \ ja, alles aus ; : Dauerlauf ( -- ) \ Doit AdcInit \ initialise Adc begin Hell Messen Steuern Not-aus \ Schalter setzen 10s key? \ warten und Watchdog blinken until ; ' Dauerlauf is bootmessage \ laufe los nach Reset bis Taste ram savesystem \ "empty" vorher nicht vergessen?