Suunnittelu Olli Haikarainen NiMH Laturi Ostettuani digitaalikameran totesin sen kuluttavan niin paljon virtaa että on aika siirtyä käyttämään ladattavia akkuja. Ostin neljä kappaletta 1850 ma tunnin akkuja sekä laturin, luettuani laturin pohjasta varoituksen Do not overcharge your batteries beyond charging periods heräsi epäilys laturin laadusta. Päätin avata laturin, niinpä karu totuus paljastui laturi oli toteutettu puoliaalto tasasuuntauksella ja yhdellä virranrajoitus vastuksella eikä se sisältänyt minkäänlaista latuksen katkaisua. Totesin tämän ratkaisun käyvän akkujen tuhoksi ennenpitkää ja päätin rakentaa kunnollisen laturin samaan koteloon. Mitä ominaisuuksia uuteen laturiin tuli: -Jännite regulointi. -Kennojännitteen näyttö. -Mahdollistaa viallisten akkujen löytämisen. -Kulunut latausaika. -10h Latausaika jonka jälkeen ylläpito lataus. Millä ominaisuudet toteutettiin: -AT89S8252 prosessori -ADC0804 AD-muunnin -4052B analoginen multiplexseri -LM317 Jännite regulaattori -16*1 LCD näyttö -Paljon diodeja,vastuksia ja konkkia Toiminta lyhyesti: Kytkettäessä virta laturiin prosessori kirjoitaa LCD näytölle NiMH Charger 2.2, jossa 2.2 kertoo prosessorilla olevan ohjelman version. Samalla kytkeytyy neljälle lataus liittimelle ylläpitojännite. Nyt prosessori ei tee mitään ennen kuin käyttäjä painaa aloitus nappia. Kun nappia painetaan prosessori ohjaa LM137 antamaan täyden lataus jännitteen lataus liittimille, joilloin LCD näytölle ilmestyy vuoroin kennojännitteet ja ladattu aika. Kun 10h tulee täyteen prosessori ohjaa LM317 antaman jännitteen ylläpito tasoon, näin lataus on valmis ja akut voidaan ottaa pois laturista.
Piirilevy BOTTOM
Piirilevy TOP
Komponenttisijoittelu TOP
Komponenttisijoittelu BOTTOM
;NiMH Charger ;By Hitek Ver2 ;Uudenlevyn softa ;OPA ;FINAL 17.10.2003 ;LCD data on P0.0-P0.7 ;LCD control on P2.7-P2.5 ;mux inho bit lisätytty P3.3 ;stb enable on P2.1 ;Button 1 on P2.3 ;Button 2 on P2.4 ;Batt1 measure on P3.1/P3.2 ;Valinnat ;00 ;01 ;10 ;00 ;ADC enable P3.0 ;ADC data on P1.0-P1.7 ;lcd temp on R0 $mod52 $noprint ;muttujat sec DATA 030H Min1 DATA 031H Min10 DATA 032H tunti DATA 033H Amin1 DATA 034H Amin10 DATA 035H MOV sec,#0 MOV min1,#0 ;MOV min10,#0 MOV tunti,#48 LCall LCDINIT timeout: LCall INTRO ;kutsutaan lcd alustus SETBP2.3 ;napin alustus
SETB P3.3 ;inhabit Start: JB P2.3,start CLR P2.1 ;stb disable MAIN: LCALL LCDCLR ;Bat1 CLR P3.1 ;bat3 me ;mittauksen valinta SETBP3.2 ;bat3 me ;mittauksen valinta 01 CLR P3.3 ;inhabit CLR P3.0 ;Adc enable LCALL AD ;bat1 mittaus SETB P3.0 ;Adc disable LCALL V4 ;bat2 SETBP3.1 ;bat4 me ;mittauksen valinta SETBP3.2 ;bat4 me ;mittauksen valinta 11 CLR P3.3 ;inhabit CLR P3.0 ;Adc enable LCALL AD ;bat2 mittaus SETB P3.0 ;Adc disable LCALL VAIHTO ;bat3 CLR P3.1 ;bat2 me ;mittauksen valinta CLR P3.2 ;bat2 me ;mittauksen valinta 00 CLR P3.3 ;inhabit CLR P3.0 ;Adc enable LCALL AD ;bat3 mittaus SETB P3.0 ;Adc disable LCALL V4 ;bat4 SETBP3.1 ;bat2 me ;mittauksen valinta CLR P3.2 ;bat2 me ;mittauksen valinta 10 CLR P3.0 ;Adc enable LCALL AD ;bat4 mittaus SETB P3.0 ;Adc disable LCALL V4
MOVR2,#255 MOVR3,#255 v1: v2: DJNZ R2,v2 MOV R2,#255 DJNZ R3,v1 ;kello ohjelma INC sec MOVA,sec CJNE A,#33,ohi ;hyppy jos ei 60 sec MOVsec,#0 INC Min1 ohi: LCALL LCDCLR MOV B,#10 MOVA,Min1 DIV AB MOVAMin1,A MOVAMin10,B MOVA,AMin10 ADD A,#48 MOVAMin10,A MOVA,AMin1 ADD A,#48 MOVAMin1,A MOV R0,tunti ;lcd ascii "0" MOV R0,#'h' ;lcd ascii "h" MOV R0,#32 ;lcd ascii " " MOVR0,Amin1 ;printataan 1 minuutit MOVR0,Amin10 ;printataan 10 minuutit MOV R0,#32 ;lcd ascii " "
MOV R0,#77 ;lcd ascii "M" MOV R0,#105 ;lcd ascii "i" Lcall Vaihto MOV R0,#110 ;lcd ascii "n" MOVA,Amin1 CJNE A,#54,ohi2 ;hyppy jos amin1 6 data ei kohdalla MOV min1,#0 MOVAmin1,#0 MOVAmin10,#0 INC tunti ohi2: MOVA,tunti CJNE A,#58,ohi3 ;hyppy jos tunti 10 data ei kohdalla MOV min1,#0 MOVAmin1,#0 MOVAmin10,#0 MOV Tunti,#48 SETBP2.1 ;latuksen lopetus (Stb enable) LCALL LCDCLR Jmp timeout Ohi3: MOVR2,#255 MOVR3,#255 delay1: delay2: DJNZ R2,delay2 MOV R2,#255 DJNZ R3,delay1 Jmp main LCDINIT: MOV P0,#0 ;datan nollaus CLR P2.7 ;(RS) CLR P2.6 ;(R/W) WRITE MODE SELECTED CLR P2.5 ;(E) MOV R1,255 ;Viiveen arvo INVIIVE: DJNZ R1,INVIIVE ;Alustus viive MOVP0,#56 ;Funktion set 56 = data 8-bit,2 lines, 5x8 dots SETBP2.5 ;enable on 5V lcd lukee datan
CLR P2.5 ;enable on 0V data luettu MOV R1,255 ;Viiveen arvo INTVIIVE: DJNZ R1,INTVIIVE ;Alustus viive MOV P0,#0 ;datan nollaus MOVP0,#12 ;cursor off SETBP2.5 CLR P2.5 MOV R1,255 ;Viiveen arvo CURVIIVE: DJNZ R1,CURVIIVE ;Cursorin asetus viive MOV P0,#0 ;datan nollaus INTRO: MOVR0,#78 MOVR0,#105 MOVR0,#77 MOVR0,#72 MOVR0,#32 MOVR0,#67 MOVR0,#104 MOVR0,#97 MOVR0,#114 LCALL VAIHTO MOVR0,#103 MOVR0,#101 MOVR0,#114 ;alku tekstit ruudulle ;CHAR N ASCII MERKKI ;CHAR i ASCII MERKKI ;CHAR M ASCII MERKKI ;CHAR H ASCII MERKKI ;CHAR sp ASCII MERKKI ;CHAR C ASCII MERKKI ;CHAR H ASCII MERKKI ;CHAR A ASCII MERKKI ;CHAR R ASCII MERKKI ;seuraavat 8 merkkiä ;CHAR G ASCII MERKKI ;CHAR E ASCII MERKKI ;CHAR R ASCII MERKKI
MOVR0,#32 MOVR0,#50 MOVR0,#46 MOVR0,#50 ;CHAR SP ASCII MERKKI ;CHAR 2 ASCII MERKKI ;CHAR. ASCII MERKKI ;CHAR 2 ASCII MERKKI LCDOUT: SETBP2.7 MOVP0,R0 ;R0 temp registeri lcd merkeille SETB P2.5 CLR P2.5 CLR P2.7 MOV R1,255 ;Viiveen arvo VIIVE: DJNZ R1,VIIVE AD: MOV R1,255 ;Viiveen arvo ADVIIVE: DJNZ R1,ADVIIVE MOVA,P1 ;lcd data temppiin MOVB,#49 ;jakaja DIV AB ;jako ADD A,#48 ;ascii lisäys MOV R0,A ;ADC muunnos lcd temppiin kokonaisluvut MOVR0,#46 ;piste MOVA,B MOVB,#6 ;desimaali jakaja DIV AB ADD A,#48 ;ascii lisäys MOV R0,A ;ADC muunnos lcd temppiin desimaalit MOVR0,#32 ;CHAR SP ASCII MERKKI VAIHTO: MOVP0,#192 SETBP2.5 ;Rivin vaihto ;enable on 5V lcd lukee datan
CLR P2.5 ;enable on 0V data luettu MOVR1,#255 LINVIIVE: DJNZ R1,LINVIIVE ;rivin vaihdon asetus viive ;paluu V4: MOVR1,#255 MUXV: DJNZ R1,MUXV LCDCLR: MOVP0,#1 ;CLR DISPLAY SETBP2.5 ;E=1 CLR P2.5 ;E=0 MOVR2,#50 MOVR3,#50 viive1: viive2: DJNZ R2,viive2 MOV R2,#50 DJNZ R3,viive1 END
Kuva Laturista