Dik za snahu a ochotu mi pomoci.
Mam obe cidla, jak 18B20, tak i 18S20. Jaky problem ma u ktereho typu jsem uz popsal drive a to nadale pretrvava
Presnost mereni mi staci na 0,5st.
Jestli to chapu spravne, jak pises ze mas zapojene 18B20 na 16F877 ? Ja mam 158F877A, nemuze zde byt nejaky “zadrhel” ? Perdpokladam ze pismenko “A” to ale asi nebude.
Jestli muzes, dej mi sem cely asm script, ne jen “rutiny” pro teplotni cidlo. Mozna ze z toho bych neco vycetl.
Tak musis upravit este toto takto staci riadky kde je pripojene cidlo v tomto pripade PORTC,0 tu ti dam upravene ak chces skopiruj cele do programu a malo by to s 18b20 chodit
bez toho co som ti tam poslal sa to korektne nezinicializuje a cidla potom nejdu. Tak je osetrene ze pri zapnuti picu sa nastavy log 1 na vystup PORTUC,0 kde je cidlo a potom pri prikaze TRISC ked sa pin nastavy ako vstupny.
A ako zistujes ze MSB nic nieje … ? hned ako sa vratiz podprogramu namerane ???
INIT
banksel OPTION_REG
movlw b'00000000'
movwf OPTION_REG
;portA
banksel TRISA ; vyber banky
movlw b'00000000' ; 0 vstup, 1 vystup
movwf TRISA ; sup do TRISu
;PORTB
banksel TRISB ; vyber banky
movlw b'00000000' ; 0 vstup, 1 vystup
movwf TRISB ; sup do TRISu
;vypnuti AD
banksel ADCON0 ; vyber banky
movlw b'11000000' ; FRC,ADC is OFF
movwf ADCON0
banksel ADCON1 ; vyber banky
movlw b'00000110' ; vlevo, VSS, VDD
movwf ADCON1 ;
;PORTC
banksel TRISC ; vyber banky
movlw b'00000000' ; 0 vstup, 1 vystup
movwf TRISC ; sup do TRISu
;PORTD
banksel TRISD ; vyber banky
movlw b'00000000' ; 0 vstup, 1 vystup
movwf TRISD ; sup do TRISu
;PORTE
banksel TRISE ; vyber banky
movlw b'00000000' ; 0 vstup, 1 vystup
movwf TRISE ; sup do TRISu
banksel PORTA
clrf PORTD
MSB zjistuji hned za
call KOM_S_C_1 ;
movf TEMP_LSB,0 ;
movwf a1 ; v a1 mam data z TEMP_LSB
call view_bin_data ; vypis na LCD co obsahuje a1
movf TEMP_ MSB,0 ;
movwf a1 ; v a1 mam data z TEMP_MSB
call view_bin_data ; vypis na LCD co obsahuje a1
vymen inicializaciu za tu co som ti dal tam o par prispevkov vyssie.
zistujes to blbo…
call KOM_S_C_1 totot spusta prevod teploty v cidle.
call namerane toto caka na odpoved od cidla ze prevod skoncil a data sa zapisu do LSB A MSB cize to tvoje ma vyzerat takto :
call namerane ;
movf TEMP_LSB,0 ;
movwf a1 ; v a1 mam data z TEMP_LSB
call view_bin_data ; vypis na LCD co obsahuje a1
movf TEMP_ MSB,0 ;
movwf a1 ; v a1 mam data z TEMP_MSB
call view_bin_data ; vypis na LCD co obsahuje a1
a inac to co je poslane ako prve v LSB bude na displeji prepisane tym druhym MSB…
ja sem osel, samozrejme ze to zjistuji az za
call namerane
ja to zkousel uz ze zoufalstvi i zobrazit hned po
call KOM_S_C_1
a to jsem postnul sem na forum.
Ja zkousel i 18B20, uz jsem to uvedl drive. Vysledek je nasledujici:
18B20 zobrazi se hodnota 085.0, zde se nacte jak MSB, tak i LSB, ale nemeri to
18S20 zobrazi se hodnota 003.2, zde jsou same 00000000 v MSB, LSB se meni podel zahrati/ochlazeni cidla
Tak jsem vyzkousel asm od honza3 a svete div se, ono to uz funguje
Ted to meri pres 18S20 s 18B20 to nefunguje (samozrejme pouzil jsem “spravny” ; call Teplota_Prevod_X podle daneho cidla).
Vecer si projdu stary i novy script a postuduji v cem byl problem.
Nejak nechapu ty prevodni tabulky, kdybych chtel aby mi to merilo po 0.1 a ne po 0.5 stupne, jaka je filosofie tech tabulek ?
Kazdopadne vsem dekuji za pomoc pri reseni meho problemu. Chlapi, vy bydlet nekde blizko me, tak Vas za tu ochotu rad pozvu na pivo
Mereni je uz ok, ale nejde mi mereni z AD pervodniku.
Zmenil jsem
;vypnuti AD
; banksel ADCON0 ; vyber banky
; movlw b'11000000' ; FRC,ADC is OFF
; movwf ADCON0
;
; banksel ADCON1 ; vyber banky
; movlw b'00000110' ; vlevo, VSS, VDD
; movwf ADCON1 ;
;zapnuti AD
banksel ADCON0 ; vyber banky
movlw b'01000001' ; FRC,ADC is OFF
movwf ADCON0
;
banksel ADCON1 ; vyber banky
movlw b'00000000' ; vlevo, VSS, VDD
movwf ADCON1 ;
Nameri mi to pouze 4.99V neob 0.00V, podle toho jake mam U na pinu RA0. Zmenu U provadim pripojenym trimrem, kde jeden vyvod je na +, druhy vyvod n - a ten prostredni mi jde na pin RA0. Hodnota trimru je 10K. Kdyz pouziju script asm (viz priloha), tak tam to funguje dobre.