Jde o celkem jednoduchý indikátor výšky hladiny vody ve studni napájený z baterie (4 tužkové AAA články). Měření je pomocí do studny ponořeného 4 žilového kablíku s odbočkami ve třech úrovních. Výška hladiny se zobrazuje barevnou kombinací na třech indikátorech.
Modrá barva je jako neaktivní posvícení. Jinak kombinace barev znamená:ŽÁDNÁ VODA - ČERVENĚ BLIKAJÍ I + II + III
HLADINA I. - ŽLUTĚ BLIKÁ I
HLADINA I. + II. - ZELENĚ SVÍTÍ I + II
HLADINA I. + II. + III. - ZELENĚ SVÍTÍ I + II + III
Kombinace ČERVENĚ SVÍTÍCÍ (NEBLIKAJÍCÍ) INDIKACE značí chybový stav poškozeného nebo chybně zapojeného měřícího kablíku.
Zařízení je v klidovém stavu odpojeno od 6V baterie a až stiskem tlačítka se připojí napájení a provede se měření. Konkrétně tlačítko připojí napájení přes MOSFET tranzistor [Q1] pro stabilnější sepnutí. Jelikož je snímání velice slabým proudem při malém napětí, je předřazeno impedanční přizpůsobení tranzistory [Q2], [Q3], [Q4] jako emitorivý sledovač. Diody [D1], [D2], [D3] jsou ochranné pro tranzistory v případě naindukování opačného napětí v závěrném směru B-E. Výstupy tranzistorů jsou připojeny na analogové vstupy mikrokontroléru [U1] „PIC16F506“. Tento AD převodníkem vyhodnotí stav hladin a příslušnou barevnou kombinací zobrazí stav na třech RGB indikačních LED diodách. Měřící citlivost lze korigovat binárně na dvou jumperech [JP1], [JP2].
Mikrokontrolér [U1] lze programovat přímo v zařízení připojením „PICKIT“ progamátoru na konektor [J2]. Během programování je odpojeno napájení z baterie (nestisknuto tlačítko) a zárověň dioda [D4] brání napájení tranzistorových emitorových sledovačů napětím z „PICKIT“ programátoru.
El. schéma:
Assembler zdroják:
;#ASM###########################################################################################MCH# ;# # ;# STUDNA-16f506.asm # ;# ````````````````` # #DEFINE k_YY .22 ; ROK (JEN DEKADA) # #DEFINE k_mm .08 ; MESIC # #DEFINE k_dd .08 ; DEN # ;#_________________________________________________________________________________________________# ;# # ;# ______________PIC-16F506_______________ # ;# _._ | ^ | # ;# +6V >---o o---> [01| VDD VSS |14] GND # ;# #CITLIVOST_SW_H --> [02| <> RB5 RB0/AN0/C2IN+/ISPDAT <> |13] <-- HLADINA_1 + ISPDAT # ;# #CITLIVOST_SW_L --> [03| <> RB4 RB1/AN1/C2IN-/ISPCLK <> |12] <-- HLADINA_2 + ISPCLK # ;# VPP --> [04| -> MCLR/VPP RB2/AN2 <> |11] <-- HLADINA_3 # ;# RGB_LED_R <-- [05| <> RC5 RC0/C2IN+ <> |10] -> #RGB_LED_1 # ;# RGB_LED_G <-- [06| <> RC4 RC1/C2IN- <> |09] -> #RGB_LED_2 # ;# RGB_LED_B <-- [07| <> RC3 RC2/CVREF <> |08] -> #RGB_LED_3 # ;# |_______________________________________| # ;#_________________________________________________________________________________________________# ;# # ;# POPIS: # ;# `````` # ;# SNIMANI VYSKY HLADINY KABELOVOU 4 VODICOVOU SONDOU ODBOCKAMI VE 3 UROVNICH A TO PO STISKNUTI # ;# TLACITKA NAPAJENI. SNIMACI NAPETI JE 6V, PROUDOVE OMEZENE POD 1mA. # ;# # ;# NASTAVENI CITLIVOSTI SNIMANI LZE 2 BITOVOU BINARNI KOMBINACI SPINACU. # ;# # ;# NEAKTIVNI LED SVITI MODRE JAKO PODSVICENI. # ;# # ;# STAVY STANDARDNI: # ;# ````````````````` # ;# NEDOSAZENA HLADINA - CERVENE BLIKAJI VSECHNY LED # ;# 1. UROVEN HLADINY - ZLUTE BLIKA 1. LED # ;# 1. + 2. UROVEN HLADINY - ZELENE SVITI 1. + 2. LED # ;# 1. + 2. + 3. UROVEN HLADINY - ZELENE SVITI 1. + 2. + 3. LED # ;# # ;# STAVY CHYBOVE: (SPATNE ZAPOJENY SNIMACI KABEL, NEBO JE POSKOZENY) # ;# `````````````` # ;# 2. UROVEN HLADINY - CERVENE SVITI 2. LED # ;# 3. UROVEN HLADINY - CERVENE SVITI 3. LED # ;# 2. + 3. UROVEN HLADINY - CERVENE SVITI 2. + 3. LED # ;# 1. + 3. UROVEN HLADINY - CERVENE SVITI 1. + 3. LED # ;#_________________________________________________________________________________________________# ; ________ ; PROCESOR LIST P=16F506 ; TYP PROCESORU __config 0014 ; __CONFIG _OSC_IntRC_RB4EN & _WDT_OFF & _CP_OFF & _MCLRE_OFF & _IOSCFS_OFF ; _______ ; SDILENO INCLUDE <P16F506.INC> ; DEFINICE KONSTANT PROCESORU ; _________ ; KONSTANTY #DEFINE BANK_1 STATUS,RP0 ; PREPINANI BANK-0 =1-> BANK-1 =0-> BANK-0 #DEFINE x_FLG_BLIKANI r_HLADINA,7 ; POZICNI BIT PRO PRIZNAK BLIKANI ; --- PERIODICKY CITAC --- #DEFINE x_PERIODA_NACITANI b'00111111' ; PERIODA NACITANI HLADINY LIMITEM CITACE #DEFINE x_PERIODA_BLIKANI r_CITAC,5 ; PERIODA BLIKANI POZICNIM BITEM CITACE ; --- VSTUPNI PORTY DIGITAL A ANALOG --- #DEFINE k_PORT_VSTUPY PORTB #DEFINE x_AD_CITLIVOST_SW_H k_PORT_VSTUPY,5 ; SPINAC PRO AD_CITLIVOST_INC_H #DEFINE x_AD_CITLIVOST_SW_L k_PORT_VSTUPY,4 ; SPINAC PRO AD_CITLIVOST_INC_L #DEFINE k_AD_CITLIVOST .241 ; ZAKLADNI CITLIVOST CIDLA #DEFINE k_AD_CITLIVOST_SW_L .4 ; KODOVYM SPINACEM 'L' PRICTENI K CITLIVOSTI #DEFINE k_AD_CITLIVOST_SW_H .8 ; KODOVYM SPINACEM 'H'PRICTENI K CITLIVOSTI ; --- PRO PREPINANI SNIMACICH ANALOGOVYCH VSTUPU --- #DEFINE k_AD_HLADINA_1 b'11010011' ; ADCON0 ; 11------ ; AKTIVACE AN0 AN1 AN2 ; --11---- ; INTOSC ; ----00-- ; VSTUP AN0 ; -------1 ; AD ZAPNUTO #DEFINE k_AD_HLADINA_2 b'11010111' ; ADCON0 ; 11------ ; AKTIVACE AN0 AN1 AN2 ; --11---- ; INTOSC ; ----01-- ; VSTUP AN1 ; -------1 ; AD ZAPNUTO #DEFINE k_AD_HLADINA_3 b'11011011' ; ADCON0 ; 11------ ; AKTIVACE AN0 AN1 AN2 ; --11---- ; INTOSC ; ----10-- ; VSTUP AN2 ; -------1 ; AD ZAPNUTO ; --- VYSTUPNI PORTY PRO RGB LED INDIKACI A POZICNI BITY REGISTRU HLADINY --- #DEFINE k_PORT_RGB_LED PORTC #DEFINE x_POZICE_CERVENA_LED_1 r_HLADINA,5 ; CERVENA K ZELENE NA LED_1 #DEFINE k_RGB_CERVENA_ZELENA b'00110000' ; RGB PORT ; --11---- ; ZAP: LED_1 CERVENA + ZELENA ; ----0--- ; VYP: LED_1 MODRA #DEFINE k_RGB_MODRA b'00001000' ; RGB PORT ; --00---- ; VYP: LED_1 CERVENA ZELENA ; ----1--- ; ZAP: LED_1 MODRA #DEFINE k_RGB_ZAMASKOVANI b'00000111' ; #LED_123 PORT #DEFINE x_RGB_LED_1 k_PORT_RGB_LED,0 ; #LED_1 (MULTIPLEXOVANE) #DEFINE x_RGB_LED_2 k_PORT_RGB_LED,1 ; #LED_2 (MULTIPLEXOVANE) #DEFINE x_RGB_LED_3 k_PORT_RGB_LED,2 ; #LED_3 (MULTIPLEXOVANE) #DEFINE k_INDIKACE_HLADINA_0 b'10101010' ; PRO r_HLADINA ; 1------- ; BLIKAT ; --10---- ; LED_1 CERVENA ; ----10-- ; LED_2 CERVENA ; ------10 ; LED_3 CERVENA #DEFINE k_INDIKACE_HLADINA_1 b'00101111' ; PRO r_HLADINA ; 0------- ; ZATIM NEAKTIVNI BLIKANI ; --10---- ; LED_1 CERVENA ; ----11-- ; LED_2 CERVENA + ZELENA ; ------11 ; LED_3 CERVENA + ZELENA ; --- CHYBOVE STAVY --- #DEFINE k_ERR_LED_2 b'00000100' ; ----01-- ; LED_2 ZELENA #DEFINE k_ERR_LED_3 b'00000001' ; ------01 ; LED_3 ZELENA #DEFINE k_ERR_LED_2_3 b'00000101' ; ----01-- ; LED_2 ZELENA ; ------01 ; LED_3 ZELENA #DEFINE k_ERR_LED_1_3 b'00010001' ; --01---- ; LED_1 ZELENA ; ------01 ; LED_3 ZELENA ; ________ ; REGISTRY MEM_0x00D UDATA_SHR ; 0x0D ~ 0x0F : SDILENE r_TMP EQU 0x00D ; POMOCNY r_CITAC EQU 0x00E ; PERIODICKY CITAC r_HLADINA EQU 0x00F ; STAV HLADINY PO DVOJICI RG BAREV 00RGRGRG ; ####################################################################################### ; ########################################################################################### ; ############################################################################################### ;################################################################################################### ;# # ;# #### ###### #### ##### ###### # ;# ## ## ## ## ## ## ## # ;# ### ## ###### #### ## # ;# # ## ## ## ## ## ## ## # ;# #### ## ## ## ## ## ## # ;#_________________________________________________________________________________________________# ;################################################################################################### __CODE__0x000 CODE 0x000 GOTO _I_N_I_T_ DB 0x00, k_YY, 0x00, k_mm, 0x00, k_dd ; DATUM AKTUALIZACE ; ####################################################################################### ; ########################################################################################### ; ############################################################################################### ;################################################################################################### ;# # ;# ## ## ## ## ###### # ;# ## ### ## ## ## # ;# ## ## # ## ## ## # ;# ## ## ### ## ## # ;# ## ## ## ## ## # ;#_________________________________________________________________________________________________# ;################################################################################################### _I_N_I_T_: ; --- KALIBRACE INTERNIHO OSCILATORU (ZDE NENI NUTNE) --- ; MOVLW .20 ; XXXXXXXU: 128...254 - 0 + 2...126 ; MOVWF OSCCAL ; KALIBRACE INTERNIHO OSCILATORU ; --- KOMPARATOR, PORTY --- BCF CM1CON0,C1ON ; VYP: COM1 BCF CM2CON0,C2ON ; VYP: COM2 MOVLW b'11010111' ; 1------- ; DISABLE PORT WAKEUP ; -1------ ; DISABLE PULLUP ; --0----- ; ENABLE PORT RC5 ; ---1---- ; TMR0 T0SE _/ ; ----0--- ; PRESCALER -> TMR0 ; -----111 ; PRESCALER 1/256 OPTION ; --- NASTAVENI PORTU PRO VSTUPY JAKO VSTUPNI --- MOVLW b'11111111' TRIS k_PORT_VSTUPY ; --- NASTAVENI PORTU PRO RGB LED JAKO VYSTUPNI --- CLRW TRIS k_PORT_RGB_LED ; --- PREDNASTAVENI REGISTRU --- CLRF r_TMP CLRF r_CITAC DECF r_CITAC,f ; PRO NASLEDNY INKREMENT PERIODY OD 0 CLRF r_HLADINA ; --- STABILIZACNI PRODLEVA --- CALL _PRODLEVA_2MS ; ####################################################################################### ; ########################################################################################### ; ############################################################################################### ;################################################################################################### ;# # ;# ##### ##### ##### #### ##### #### ## ## # ;# ## ## ## ## ## ## ## ## ## ## ## ### ### # ;# ##### #### ## ## ## #### ###### ## # ## # ;# ## ## ## ## ## ## ## ## ## ## ## ## ## # ;# ## ## ## ##### ##### ## ## ## ## ## ## # ;#_________________________________________________________________________________________________# ;################################################################################################### _P_R_O_G_R_A_M_: ; --- PERIODICKY CITAC INTERVALU NACITANI HLADINY A BLIKNUTI --- INCF r_CITAC,w ANDLW x_PERIODA_NACITANI MOVWF r_CITAC BTFSS STATUS,Z ; ?? NACIST HLADINU ?? GOTO _P_R_O_G_R_A_M_.Indikace ; 'NE' ; --- VYNULOVAVI STAVU HLADINY --- CLRF r_HLADINA ; --- NACTENI CIDLA 1. HLADINY --- MOVLW k_AD_HLADINA_1 ; ZVOLEN ANALOGOVY VSTUP AN0 CALL _NACTI_HLADINU ; --- NACTENI CIDLA 2. HLADINY --- MOVLW k_AD_HLADINA_2 ; ZVOLEN ANALOGOVY VSTUP AN1 CALL _NACTI_HLADINU ; --- NACTENI CIDLA 3. HLADINY --- MOVLW k_AD_HLADINA_3 ; ZVOLEN ANALOGOVY VSTUP AN2 CALL _NACTI_HLADINU ; --- VYHODNOCENI STAVU NEDOSAZENE HLADINY --- MOVLW k_INDIKACE_HLADINA_0 ; PREDPRIPRAVENI CERVENE INDIKACE ->'W' MOVF r_HLADINA,f BTFSC STATUS,Z ; ?? NULOVA HLADINA ?? MOVWF r_HLADINA ; 'ANO' <- CERVENA INDIKACE + BLIKANI ; --- VYHODNOCENI CHYBOVYCH STAVU NASNIMANE HLADINY --- BCF STATUS,C MOVLW k_ERR_LED_2_3 CALL _CHYBOVE_STAVY MOVLW k_ERR_LED_1_3 CALL _CHYBOVE_STAVY MOVLW k_ERR_LED_2 CALL _CHYBOVE_STAVY MOVLW k_ERR_LED_3 CALL _CHYBOVE_STAVY ; --- VYHODNOCENI STAVU DOSAZENE POUZE 1. HLADINY --- MOVF r_HLADINA,w ANDLW k_INDIKACE_HLADINA_1 ; MASKA PRO TEST 2. A 3. HLADINY BTFSS STATUS,Z ; ?? DOSAZENA POUZE 1. HLADINA ?? GOTO _P_R_O_G_R_A_M_.Indikace ; 'NE' BSF x_FLG_BLIKANI ; ZAP: BLIKANI BSF x_POZICE_CERVENA_LED_1 ; -> LED_1 ZLUTA _P_R_O_G_R_A_M_.Indikace: ; --- SVIT RGB_LED_1 --- MOVF r_HLADINA,w ; POSUN POZICE RG O BIT VLEVO CALL _NASTAVENI_RGB_LED.1 ; NASTAVENI RGB BAREV A VYPNUTI VSECH RGB_LED BCF x_RGB_LED_1 ; ZAP: RGB_LED_1 CALL _PRODLEVA_SVIT ; PRODLEVA SVITU ; --- SVIT RGB_LED_2 --- RLF r_HLADINA,w ; POSUN POZICE RG O BIT VLEVO MOVWF r_TMP ; <-' CALL _NASTAVENI_RGB_LED.2 ; NASTAVENI RGB BAREV A VYPNUTI VSECH RGB_LED BCF x_RGB_LED_2 ; ZAP: RGB_LED_2 CALL _PRODLEVA_SVIT ; PRODLEVA SVITU ; --- SVIT RGB_LED_3 --- RLF r_HLADINA,w ; POSUN POZICE RG O BIT VLEVO MOVWF r_TMP ; <-' CALL _NASTAVENI_RGB_LED.3 ; NASTAVENI RGB BAREV A VYPNUTI VSECH RGB_LED BCF x_RGB_LED_3 ; ZAP: RGB_LED_3 CALL _PRODLEVA_SVIT_X ; KRACENA PRODLEVA SVITU GOTO _P_R_O_G_R_A_M_ ; ####################################################################################### ; ########################################################################################### ; ############################################################################################### ;################################################################################################### ;# # ;# ##### ##### ##### ##### ##### ##### #### ##### #### ## ## ## ## # ;# ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ### ### ## ## # ;# ##### ## ## ## ## ##### #### ## ## ## #### ###### ## # ## ## # ;# ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## # ;# ## ##### ##### ## ## ## ##### ##### ## ## ## ## ## ## ## # ;#_________________________________________________________________________________________________# ;################################################################################################### ;################################################################################################### _NACTI_HLADINU: ;--------------------------------------------------------------------------------------------------- ; --- PREPNUTI NA VYBRANY AD KANAL Z CIDEL HLADINY (AN0, AN1, AN2) MOVWF ADCON0 ; <-'W' PREPNUTI SNIMACIHO KANALO KANALU GOTO $+1 ; PRODLEVA K USTALENI NAPETI V AD PREVODNIKU GOTO $+1 ; PRODLEVA K USTALENI NAPETI V AD PREVODNIKU ; --- POSUN REGISTRU HLADINY O BIT VLEVO A '0'->BIT 0 --- BCF STATUS,C RLF r_HLADINA,f ; <<<<<<<0 ; --- NACTENI UROVNE HLADINY --- BSF ADCON0,GO ; START AD KONVERZE _NACTI_HLADINU.Smycka: BTFSC ADCON0,GO ; ?? DOBEHLA AD KONVERZE ?? GOTO _NACTI_HLADINU.Smycka ; 'NE' ; --- NASTAVENI CITLIVOSTI DLE BINARNI KOMBINACE KODOVYCH SPINACU --- MOVLW k_AD_CITLIVOST MOVWF r_TMP MOVLW k_AD_CITLIVOST_SW_H ; PREDNASTAVENI INKREMENTU 'H' CITLIVOSTI BTFSS x_AD_CITLIVOST_SW_H ; ?? SEPNUT SPINAC 'H' ZVYSENI CITLIVOSTI ?? ADDWF r_TMP ; 'ANO' MOVLW k_AD_CITLIVOST_SW_L ; PREDNASTAVENI INKREMENTU 'L' CITLIVOSTI BTFSS x_AD_CITLIVOST_SW_L ; ?? SEPNUT SPINAC 'L' ZVYSENI CITLIVOSTI ?? ADDWF r_TMP ; 'ANO' ; --- VYHODNOCENI NACTENE UROVNE CIDLA HLADINY --- BCF STATUS,C ; VYNULOVANI PRIZNAKU PRETECENI MOVF ADRES,w ; VYSLEDEK AD KONVERZE ADDWF r_TMP ; '-> + CITLIVOST ->PRIZNAK 'C' RLF r_HLADINA,f ; <<<<<<0C (POSUN VLEVO, 'C'->BIT 0) RETLW 0 ;################################################################################################### _CHYBOVE_STAVY: ;--------------------------------------------------------------------------------------------------- ; --- JE-LI CHYBOVY STAV, ZMENI SE BARVA NA CERVENOU (POSUNEM V REGISTRU) --- XORWF r_HLADINA,w BTFSC STATUS,Z ; ?? CHYBOVY STAV ?? RLF r_HLADINA,f ; 'ANO' RETLW 0 ;################################################################################################### _NASTAVENI_RGB_LED.3: ;--------------------------------------------------------------------------------------------------- RLF r_TMP,f ; POSUN POZICE RG O BIT VLEVO RLF r_TMP,f ; POSUN POZICE RG O BIT VLEVO ;################################################################################################### _NASTAVENI_RGB_LED.2: ;--------------------------------------------------------------------------------------------------- RLF r_TMP,w ; 'W'<- POSUN POZICE RG O BIT VLEVO ;################################################################################################### _NASTAVENI_RGB_LED.1: ;--------------------------------------------------------------------------------------------------- ; --- EFEKT BLIKANI --- BTFSS x_FLG_BLIKANI ; ?? BLIKAT ?? GOTO _NASTAVENI_RGB_LED ; 'NE' BTFSC x_PERIODA_BLIKANI ; ?? PERIODA PRO BLIKNUTI (ZHASNUTI LED) ?? CLRW ; 'ANO' _NASTAVENI_RGB_LED: ; --- NASTAVENI RGB A LED123 PORTU --- ANDLW k_RGB_CERVENA_ZELENA BTFSC STATUS,Z ; ?? ZHASNUTO ?? MOVLW k_RGB_MODRA ; 'ANO' PREDNASTAVENI MODRE IORLW k_RGB_ZAMASKOVANI ; PONECHANI RGB STAVU A VYPNUTI PRO LED1 LED2 LED3 MOVWF k_PORT_RGB_LED ; ZAPSANI NA PORT RETLW 0 ;################################################################################################### _PRODLEVA_2MS: ;--------------------------------------------------------------------------------------------------- MOVLW .200 ; PRO SVIT 2,5 MS MOVWF r_TMP GOTO _PRODLEVA ;################################################################################################### _PRODLEVA_SVIT: ;--------------------------------------------------------------------------------------------------- MOVLW .247 ; PRO SVIT 2,5 MS MOVWF r_TMP GOTO _PRODLEVA ;################################################################################################### _PRODLEVA_SVIT_X: ;--------------------------------------------------------------------------------------------------- MOVLW .240 ; PRO SVIT 2,4 MS + REZIE ZPRACOVANI VSTUPU MOVWF r_TMP GOTO _PRODLEVA ;################################################################################################### _PRODLEVA: ;--------------------------------------------------------------------------------------------------- GOTO $+1 GOTO $+1 GOTO $+1 NOP DECFSZ r_TMP,f GOTO _PRODLEVA RETLW 0 ;################################################################################################### ;--------------------------------------------------------------------------------------------------- END