USB Pil Şarj Devresi Pic16f629 mikrokontrol entegresi ile bilgisayarın usb portundan 1 adet 100-1000ma AAA pil şarj devresi şarj süresi pil akımına göre 1-14 saat arası pil dolduğu zaman çift renkli led ve buzzer ile uyarı veriliyor. Devre USB portundan besleneeği için devre şemasında ki 7805 5 volt regülatör entegresi kullanılmayacak USB portu kullanmak istemezseniz yani 9v…12v adaptör ile kullanacaksanız 7805 takılı olmalı..
USB Pil şarj devresinin mikrodenetleyici yazılımı assembly ile hazırlanmış kaynak .asm ve .hex dosyaları var.
; Nabijeni akumulatoru NiCd nebo NiMh ; verze 1.1 - procesor PIC12F629, vnitrni RC 4,00MHz (17.12.2006) ; Upraveno preruseni a zlepsena presnost casu ; Pipnuti pri stisku tlacitka a po skonceni nabijeni 10 x zapipa ; verze 1.0 - procesor PIC12F629, vnitrni RC 4,00MHz (28.5.2006) ; Popis: ; Po zapnuti napajeni se rozsviti zelena LED dioda. Po stisknuti tlacitka ; zhasne zelena LED dioda a zacne blikat 1x cervena LED dioda a zacne se ; nabijet proudem 100mA. Dalsi stisk blika 2x (200mA) a dalsi 3x (300mA). ; 1 blik - 100mA po dobu 14 hodin ; 2 blik - 200mA po dobu 7 hodin ; 3 blik - 300mA po dobu 5 hodin ; Po dalsim stisku prestane blikat cervena LED dioda, prestane se dobijet ; a rozsviti se zelena LED dioda. Cely cyklus se opakuje stale do kola. ; Po nabiti baterie prestane blikat cervena LED dioda a rozsviti se zelena LED dioda. ; Poznamka: ; Pred programovanim procesoru si prectete a nekam zapiste hodnotu z posledniho ; byte (03FFh) programove pameti. Je tam ulozena kalibracni hodnota vnitrniho ; oscilatoru 4MHz. Zapsat hodnotu muzete treba na spodni stranu pouzdra obvodu. ; Zatizeni procesoru: cely port 125mA, jeden vyvod 25mA. ;************************************************************************** ;* PIC12F629/12F675 * ;* --------\/-------- * ;* +5V -|Vdd Vss|- 0V * ;* Dobijeni 200mA -|osc1/GP5 GP0|- Piezomenic (A/D) * ;* Dobijeni 100mA -|osc2/GP4 GP1|- LED Zelena * ;* Tlacitko -|MCLR/GP3 INT/GP2|- LED Cervena * ;* ------------------ * ;* http://www.cmail.cz/doveda DOVEDA BOYS (c) 1997-2006 * ;************************************************************************** ; Rozdeleni pameti v procesoru PIC16F629 a PIC16F675 ; Procesor , EPROM, RAM, EEPROM, A/D, RS232, I2C, INT.OSC ; PIC16F629, 1024, 64, 128, ----, ----, ----, 4MhZ ; PIC16F675, 1024, 64, 128, 4 , ----, ----, 4MhZ ; Banka 0 -> 20h - - 5Fh (64 bytes) ; Banka 1 -> A0h - jako BANKa 0 - DFh (64 bytes) ;************************************************************************** list p=12f629, R=DEC include "p12f629.inc" RAM equ 20h ; prvni adresa pameti RAM pro PIC16F629 - 64bajtu (20h-5Fh) TMP_W equ RAM+01 ; temp preruseni TMP_S equ RAM+02 ; temp preruseni TMP_PCL equ RAM+03 ; temp preruseni C_10ms equ RAM+04 C_100ms equ RAM+05 C_1s equ RAM+06 PRIZNAK equ RAM+07 ; priznaky PROVOZ equ RAM+08 POSUN equ RAM+10 T_SEC equ RAM+11 T_MIN equ RAM+12 T_HOD equ RAM+13 AL_MIN equ RAM+14 AL_HOD equ RAM+15 LOOP0 equ RAM+16 LOOP1 equ RAM+17 LOOP2 equ RAM+18 LOOP3 equ RAM+19 T_BEEP equ RAM+20 BEEP1 equ RAM+22 BEEP0 equ RAM+23 POCET equ RAM+24 #define B_END PRIZNAK,1 ; 1=povolen citac nastaveneho casu #define B_PIP PRIZNAK,2 ; 1=povoleno pipnuti (stisk tlacitka) #define B_PIP8 PRIZNAK,3 ; 1=povoleno pipnuti (konec dobijeni) #define B_PIPX PRIZNAK,4 ; 1=povolen casovac pipani #define B_TLAC PRIZNAK,5 ; 1=vyhodnoceno stisko v 1 cteni #define B_TISK PRIZNAK,6 ; 1=vyhodnocen stisk tlacitka OK #define Q_PIP GPIO,0 ; Piezomenic (0=klid, 1=sepne) #define Q_LEDZ GPIO,1 ; LED zelena (0=nesviti, 1=sviti) #define Q_LEDR GPIO,2 ; LED cervena (0=nesviti, 1=sviti) #define TLAC1 GPIO,3 ; Tlacitko (0=sepnuto, 1=klid) #define Q_100m GPIO,4 ; Dobijeni 100mA (0=klid, 1=dobiji) #define Q_200m GPIO,5 ; Dobijeni 200mA (0=klid, 1=dobiji) org 0x2007 ; adresa konfigurace pro PIC16F629 a 675 dw _BODEN_ON & _CP_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT & _MCLRE_OFF & _CPD_OFF org 0x0000 ; zacatek programu goto INIT ; skok na pocatecni inicalizaci org 0x0004 ; vektor preruseni goto PRERUS ;************************************************************************** ;* preruseni kazdych 250us (4000Hz) * ;************************************************************************** ; ulozeni hodnot registru W a STATUS PRERUS movwf TMP_W swapf STATUS,W ; prohodi nibble STATUS a ulozi do W bcf STATUS,RP0 ; nastaveni banky 0 movwf TMP_S ; ulozit STATUS ; ------------------------ bcf INTCON,T0IF ; vynulovat priznak preruseni (pretekl casovac TMR0) ;------------------------------- ; hodiny chodi rychle .10 ; hodiny chodi pomalu .8 movlw .9 ; nastavit timer 256 - 250 = 6 + 13 (preruseni = 250us) addwf TMR0,F ; nastaveni deliciho pomeru preddelicky ;------------------------------- movlw b'00000001' ; negace bitu Q_PIP (ostatni beze zmen) btfsc B_PIP ; povolit nebo zakazat menit vystup pro piezomenic xorwf GPIO,F ; =1, povoleno (frekvence piskani = 2000Hz) ;------------------------------- CAS_10m decfsz C_10ms,F goto INT_END ; jeste neni 0 ; ------------------------ !!! kazdych 10ms !!! movlw .40 ; pri docitani k 0 obnovit hodnotu movwf C_10ms ; 10ms 20ms 40ms 80ms 160ms 320ms 640ms 1,28s 2,56s ;------------------------------- ; Pipnuti btfss B_PIP goto $+5 ; =0, zakazano pipnout decfsz T_BEEP,F goto $+3 ; jeste neni 0 ; ------------------------ bcf B_PIP ; zakazano (konec) pipnuti bcf Q_PIP ; vypnout vystup ;------------------------------- ; Pipani btfss B_PIP8 goto INT_200 ; =0, zakazano pipani ; ------------------------ btfss B_PIPX goto PIP0 ; =0, skoc na mezeru ; ------------------------ bsf B_PIP ; povoleno pipnout decfsz BEEP1,F goto INT_200 ; jeste neni 0 bcf B_PIPX movlw .10 ; delka mezery 10 * 10ms -> 100ms movwf BEEP0 goto INT_200 ; ------------------------ PIP0 bcf B_PIP ; zakazano pipnout decfsz BEEP0,F goto INT_200 ; jeste neni 0 bsf B_PIPX movlw .10 ; delka pipnuti 10 * 10ms -> 100ms movwf BEEP1 ; ------------------------ decfsz POCET,F goto $+3 ; jeste neni 0 bcf B_PIP8 ; zakazano (konec) pipani bcf Q_PIP ; vypnout vystup ;------------------------------- ; Casovac 200ms INT_200 decfsz C_100ms,F goto INT_1S ; jeste neni 0 ; ------------------------ !!! kazdych 200ms !!! movlw .20 ; pri docitani k 0 obnovit hodnotu movwf C_100ms ;------------------------------- ; blikat s LED btfss B_END goto INT_1S ; =0, zakazan citac bcf STATUS,C ; prednastaveni bitu C btfsc POSUN,0 bsf STATUS,C rrf POSUN,F ; ------------------------ btfsc STATUS,C bsf Q_LEDR ; =1, LED sviti btfss STATUS,C bcf Q_LEDR ; =0, LED zhasnuta ;------------------------------- INT_1S decfsz C_1s,F goto INT_END ; jeste neni 0 ; ------------------------ !!! kazdych 1000ms !!! movlw .100 ; pri docitani k 0 obnovit hodnotu movwf C_1s btfss B_END goto INT_END ; =0, zakazan citac call REAL_T ; vypocet realneho casu kazdou sekundu call ALARM ; porovnat nastaveny cas ;------------------------------- ; obnoveni hodnot registru W a STATUS INT_END swapf TMP_S,W ; prohodi nibble TMP_S a ulozi do W movwf STATUS ; obnova STATUS swapf TMP_W,F ; prohodi nibble TMP_W swapf TMP_W,W ; obnova W ; ------------------------ retfie ; navrat z preruseni ;************************************************************************** REAL_T incf T_SEC,F ; pricti sekundy (00 - 59) movlw .60 subwf T_SEC,W btfss STATUS,Z return ; neni prenos sekund clrf T_SEC ;------------------------------- incf T_MIN,F ; pricti minuty (00 - 59) movlw .60 subwf T_MIN,W btfss STATUS,Z return ; neni prenos minut clrf T_MIN ;------------------------------- incf T_HOD,F ; pricti hodiny (00 - 23) movlw .24 subwf T_HOD,W btfss STATUS,Z return ; neni prenos hodin clrf T_HOD ;------------------------------- return ;************************************************************************** ALARM movlw .00 ; porovnat sekundy subwf T_SEC,W ; T_SEC - W -> W btfss STATUS,Z return ; =0, neni 0 sekund ;------------------------------- movf AL_HOD,W ; porovnat hodiny subwf T_HOD,W ; T_HOD - W -> W btfss STATUS,Z return ; =0, hodnoty se neshoduji ; ------------------------ movf AL_MIN,W ; porovnat minuty subwf T_MIN,W ; T_MIN - W -> W btfss STATUS,Z return ; =0, hodnoty se neshoduji ;------------------------------- ; vyhodnocen cas alarmu movlw .10 ; pocet pipnuti movwf POCET movlw .10 ; delka pipnuti 10 * 10ms -> 100ms movwf BEEP1 movlw .10 ; delka mezery 10 * 10ms -> 100ms movwf BEEP0 bsf B_PIP8 ; povoleno pipani ; ------------------------ bcf B_END ; zakazan citac clrf PROVOZ bcf Q_LEDR ; LED zhasnuta bsf Q_LEDZ ; LED sviti bsf Q_100m ; vypnout proud 100mA bsf Q_200m ; vypnout proud 200mA ; ------------------------ return ;************************************************************************** INIT movlw b'110000' ; prednastavit 0 na GP0 - GP5 movwf GPIO movlw b'00000111' ; =07h, digitalni vstupy na GP0 - GP2 (comparator OFF) movwf CMCON ; ------------------------ bsf STATUS,RP0 ; nastaveni BANKY 1 movlw B'001000' movwf TRISIO ; nastaveni portu GP0 (0=vystup, 1=vstup) movlw b'11011000' ; PULL-UPy OFF, preddelic=1:1 pripojen k WDT movwf OPTION_REG ; f=4,0MHz :4 :1 :250 = 4000Hz (250us) call 03FFh ; zapsat kalibraci vnitrniho oscilatoru movwf OSCCAL ; 00h min. f, 80h stred f, 0FFh pro max. f ; ------------------------ movlw b'00000000' ; nastaveni PULL-UP na vstupu GP0 - GP2, GP4-GP5 movwf WPU ; (0 zakazan, 1 povolen) movlw b'00000000' ; preruseni pri zmene na vstupu GP0 - GP5 movwf IOCB ; Povolit INT on CHANGE na GP0 (0 zakazano, 1 povoleno) bcf STATUS,RP0 ; nastaveni BANKY 0 ;------------------------------- clrf PRIZNAK clrf AL_MIN clrf AL_HOD clrf T_SEC clrf T_MIN clrf T_HOD clrf PROVOZ clrf POSUN movlw 01h movwf C_10ms movwf C_100ms movwf C_1s bsf Q_LEDZ ; LED sviti ; ------------------------ clrf TMR0 ; nulovat TMR0 (i jeho preddelic) movlw b'10100000' ; povolit preruseni od preteceni TMR0 movwf INTCON ;************************************************************************** MAIN call STISK ; vyhodnotit stisk tlacitka ; ------------------------ btfss B_TISK goto MAIN ; =0 tlacitko neni stisknuto ;------------------------------- ; tlacitko je stisknuto incf PROVOZ,F movlw b'00000011' andwf PROVOZ,F bcf B_TISK ; ------------------------ movlw .0 subwf PROVOZ,W btfss STATUS,Z goto $+9 movlw b'00000000' ; nastav blikani movwf POSUN bcf B_END ; zakazan citac clrf PROVOZ bcf Q_LEDR ; LED zhasnuta bsf Q_LEDZ ; LED sviti bsf Q_100m ; vypnout proud 100mA bsf Q_200m ; vypnout proud 200mA ; ------------------------ movlw .1 subwf PROVOZ,W btfss STATUS,Z goto $+.10 movlw b'00000001' ; nastav blikani movwf POSUN movlw .14 ; nastav HOD movwf AL_HOD movlw .00 ; nastav MIN movwf AL_MIN bcf Q_100m ; zapnout proud 100mA bsf Q_200m ; vypnout proud 200mA call SET_AL ; ------------------------ movlw .2 subwf PROVOZ,W btfss STATUS,Z goto $+.10 movlw b'00000101' ; nastav blikani movwf POSUN movlw .07 ; nastav HOD movwf AL_HOD movlw .00 ; nastav MIN movwf AL_MIN bsf Q_100m ; vypnout proud 100mA bcf Q_200m ; zapnout proud 200mA call SET_AL ; ------------------------ movlw .3 subwf PROVOZ,W btfss STATUS,Z goto $+.10 movlw b'00010101' ; nastav blikani movwf POSUN movlw .05 ; nastav HOD movwf AL_HOD movlw .00 ; nastav MIN movwf AL_MIN bcf Q_100m ; zapnout proud 100mA bcf Q_200m ; zapnout proud 200mA call SET_AL ;------------------------------- goto MAIN ;************************************************************************** SET_AL clrf T_SEC clrf T_MIN clrf T_HOD ; ------------------------ bcf Q_LEDR ; LED zhasnuta bcf Q_LEDZ ; LED zhasnuta bsf B_END ; povolen citac ;------------------------------- return ;************************************************************************** ; Vyhodnoceni stisku tlacitka STISK btfss TLAC1 goto $+3 ; =0, tlacitko stisknuto bcf B_TLAC ; tlacitko neni stisknuto tak smaz bit stisku return ;------------------------------- btfsc B_TLAC goto $+4 ; =1, stisk byl vyhodnocen v prvnim cteni bsf B_TLAC ; vyhodnocen prvni stisk movlw .10 ; 4ms * 10 = 40ms movwf LOOP3 ; ------------------------ STISK1 call CEK4m ; cekej 4ms btfsc TLAC1 goto STISK ; =1, tlacitko neni stisknuto ; ------------------------ decf LOOP3,F movf LOOP3,W btfss STATUS,Z goto STISK1 ; jeste neni konec vyhodnoceni casu tlacitka ; ------------------------ bsf B_TISK ; vyhodnoceno stisknute tlacitko ;------------------------------- ; Pipnout movlw .10 ; delka pipnuti 10ms * 10 -> 100ms movwf T_BEEP bcf B_PIP8 ; zakazano (konec) pipani bsf B_PIP ; povoleno pipnuti ;------------------------------- return ;************************************************************************** CEK100m movlw 0CFh ; cas = 100,009 ms movwf LOOP0 movlw 0A0h movwf LOOP1 goto SMYCKA ;------------------------------- CEK4m movlw 0A5h ; cas = 4,001 ms movwf LOOP0 movlw 008h movwf LOOP1 goto SMYCKA ;------------------------------- SMYCKA movf LOOP0,W movwf LOOP2 SMYCKA1 decfsz LOOP2,F ; mala smycka goto SMYCKA1 decfsz LOOP1,F ; velka smycka goto SMYCKA return ;************************************************************************** end ; konec programu
Kaynak site kapanmış açıklamaların google translate ile çevirisini ekliyorum;
USB bağlantı noktası ile AAA pil şarj cihazı
Şarj akımı 3 seçenekler arasından seçim yapabilirsiniz . Sayısı düğmesi kırmızı LED yanıp sönmeye başlar ve şarj akımı ve zaman ayarlar edilir . Şarj edildikten sonra ,yeşil LED ve sesli alarm başlar .
Set programa göre şarj şarj pil . Şarj süresi sınırlıdır vebelirlenen süre sonra şarj gerilimi aküden ayırır . Güncel saati ayarlama ve bu seçti . 1 darbe 14 saat boyunca 100 mA olan , iki yanıp 7 saat 200mA ve 3 yanıp 5 saat boyunca 300 mA . Biz hesappil 900 mA veya 1000 mA içine almak ve nominal akımının 0,1 C yani onda biri şarj tavsiye , biz de 14 saat boyunca 100 mA akım şarj edin. Süresi çok uzun , belirli bir durumda olduğu için , bu şarj süresini kısaltan ve 200 mA , 300 mAakım artırmak mümkündür . Ben şarj ısıtılır ve pil şarjpilin sıcaklığı denetlemediği için daha güncel kullanmanızı tavsiye etmiyoruz . Bu pil aşırı ısınmaya ve sonraki imha neden olabilir . Şarj pil sıcaklığı kontrol etmek ve yüksek ısıtma gücü ile azaltmak ya da şarj durdurmak için uygun eller zaman !
Önemli uyarı : USB aygıtları kadar 100 mA PC’den çekebilir . Akım aralığı yapılandırma tanımlayıcı istenen sadece alınan ve Enerji işletim sistemi onaylar olabilir . Bu şarj değil ve bu nedenle her PC çalışmayabilir. Bu nedenle , akılda da olabilir ( ve olmalıdır ) bir kısa devre olarak tanımlanan ve USB bağlantı noktası kesin olarak uzun süre ve mantarlar için büyük bir akım çekecek C1 kapasitörü , personel .
Işlemin açıklaması: PC’nin USB portuna adaptörü bağladıktan sonra yeşil yanar. Buşarj enerji ve şarj etmek için hazır olduğunu gösterir . Düğmesine basarak yeşil ve her 1.6 saniyede bir yanıp sönerLED 1 kırmızı ışık gider sonra . Basıldığında 2 kez yanıp ve bastıktan sonra 3 kez yanıp söner olacaktır . Yanıp sönen kırmızı ve yeşil ışıklar söner durdurma basılması ve şarj cihazı şarj çalışmaya hazırdır . Düğmeye her bastığınızda , bir bip sesi duymak ve bip bip 10 kez şarj ettikten sonra olacaktır .
USB Charger
Charger recharges the battery according to the set program. Charging time is limited and after the set time disconnects the battery from the charging voltage . Setting the current time and I chose this. 1 pulse is 100 mA for 14 hours , two flashes is 200mA for 7 hours and 3 flashes is 300 mA for 5 hours . If we take into account the battery 900 mA or 1000 mA and recommended charging 0.1 C ie one tenth of the nominal current, so we charge current of 100 mA for 14 hours. Because time is too long a particular case , it is possible to shorten the charging time and increase the current to 200 mA and 300 mA . I do not recommend using more current because the charge is heated and the battery charger does not check the temperature of the battery. This could cause excessive overheating and subsequent destruction of the battery. When charging is suitable hands to control the battery temperature and at high heating power to reduce or stop charging !
PIC16F629 ile USB Pil Şarj Devresi dosyalar Kaynak: http://www.cmail.cz/doveda/konstrukce/aku_usb/index.htm
Şifre-Pass: 320volt.com
Yayım tarihi: 2008/03/16 Etiketler: microchip pic projeleri, microcontroller charger, PIC16F629, pil, pil şarj devresi, popis zapojeni, şarj, usb, usb charger, usb şarj