Elektronika.lt
 2025 m. balandžio 10 d. Projektas | Reklama | Žinokite | Klausimai | Prisidėkite | Atsiliepimai | Kontaktai
Paieška portale
EN Facebook RSS

 Kas naujo  Katalogas  Parduotuvės  Forumas  Tinklaraščiai
 Pirmas puslapisSąrašas
 Forumas / + pokalbiai
 - Paieška forume
 - D.U.K. / Forumo taisyklės
 - Narių sąrašas
 - Registruotis
 - Prisijungti

Elektronika.lt portalo forumas

Jūs esate neprisijungęs lankytojas. Norint dalyvauti diskusijose, būtina užsiregistruoti ir prisijungti prie forumo. Prisijungę galėsite kurti naujas temas, atsakyti į kitų užduotus klausimus, balsuoti forumo apklausose.

Administracija pasilieka teisę pašalinti pasisakymus bei dalyvius, kurie nesilaiko forumo taisyklių. Pastebėjus nusižengimus, prašome pranešti.

Dabar yra 2025 04 10, 12:27. Visos datos yra GMT + 2 valandos.
 Forumas » Mikrovaldikliai » Ar kas bandet prie PIC prijungti DS1820 termometra
Jūs negalite rašyti naujų pranešimų į šį forumą
Jūs negalite atsakinėti į pranešimus šiame forume
Jūs negalite redaguoti savo pranešimų šiame forume
Jūs negalite ištrinti savo pranešimų šiame forume
Jūs negalite dalyvauti apklausose šiame forume
 
  
Puslapis 11
Pradėti naują temą  Atsakyti į pranešimą Rodyti ankstesnį pranešimą :: Rodyti kitą pranešimą 
 Ar kas bandet prie PIC prijungti DS1820 termometra
PranešimasParašytas: 2005 05 18, 16:05 Pranešti apie taisyklių pažeidimą Atsakyti su citata
automatikas
Dažnas dalyvis
Dažnas dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
na turiu keleta tokiu termometru ir galvoju reikia juos pasijungti, radau internete pora pic rutinu, bet jos neveikia, tai gal kas gali pasidalinti idejomis?
 Re: Ar kas bandet prie PIC prijungti DS1820 termometra
PranešimasParašytas: 2005 05 18, 17:50 Pranešti apie taisyklių pažeidimą Atsakyti su citata
GedasL
Užkietėjęs dalyvis
Užkietėjęs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą Siųsti el. laišką ICQ numeris
automatikas rašo:
na turiu keleta tokiu termometru ir galvoju reikia juos pasijungti, radau internete pora pic rutinu, bet jos neveikia, tai gal kas gali pasidalinti idejomis?


Kas gi tau neveikia. Atsmenu kai reikėjo ant ryt kursinį priduoti, tai per porą valandų užkūriau. Matyt nelabai reikia Very Happy
 Ar kas bandet prie PIC prijungti DS1820 termometra
PranešimasParašytas: 2005 05 18, 17:53 Pranešti apie taisyklių pažeidimą Atsakyti su citata
automatikas
Dažnas dalyvis
Dažnas dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
imesk pavizdziu savo kodo jei negala Rolling Eyes
 Ar kas bandet prie PIC prijungti DS1820 termometra
PranešimasParašytas: 2005 05 18, 23:14 Pranešti apie taisyklių pažeidimą Atsakyti su citata
GedasL
Užkietėjęs dalyvis
Užkietėjęs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą Siųsti el. laišką ICQ numeris
automatikas rašo:
imesk pavizdziu savo kodo jei negala Rolling Eyes



Metu. Turėtų veikti. Čia šiap dariau tempratūros nuskaityma is DS1820 su PIC16F84, duomenu ismetimas i softwarini uarta. Kompo puseje duomenis priimdavo LabView. Atsimenu kai jau viskas buvo padaryta, PICas numire. Kito neturejau ir teko 12 nakties perdarineti ant AT90S1200, kad tureciau ryte ka pademonstruoti destytojui Smile

Kodas:

;**********************************************************************
;   This file is a basic code template for assembly code generation   *
;   on the PICmicro PIC16F84. This file contains the basic code       *
;   building blocks to build upon.                                    * 
;                                                                     *
;   If interrupts are not used all code presented between the ORG     *
;   0x004 directive and the label main can be removed. In addition    *
;   the variable assignments for 'w_temp' and 'status_temp' can       *
;   be removed.                                                       *                       
;                                                                     *
;   Refer to the MPASM User's Guide for additional information on     *
;   features of the assembler (Document DS33014).                     *
;                                                                     *
;   Refer to the respective PICmicro data sheet for additional        *
;   information on the instruction set.                               *
;                                                                     *
;   Template file assembled with MPLAB V3.99.18 and MPASM V2.15.06.   *
;                                                                     *
;**********************************************************************
;                                                                     *
;    Filename:       xxx.asm                                           *
;    Date:                                                            *
;    File Version:                                                    *
;                                                                     *
;    Author:                                                          *
;    Company:                                                         *
;                                                                     *
;                                                                     *
;**********************************************************************
;                                                                     *
;    Files required:                                                  *
;                                                                     *
;                                                                     *
;                                                                     *
;**********************************************************************
;                                                                     *
;    Notes:  naudosime 4MHz kvarca, 4800bps greiti. Bito trukme - 208us.      *
;                                                                     *
;                                                                     *
;                                                                     *
;                                                                     *
;**********************************************************************


   list      p=16F84A             ; list directive to define processor
   #include <p16F84A.inc>         ; processor specific variable definitions

   __CONFIG   _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

; '__CONFIG' directive is used to embed configuration data within .asm file.
; The lables following the directive are located in the respective .inc file.
; See respective data sheet for additional information on configuration word.




 ;***** VARIABLE DEFINITIONS

CNTMSEC             EQU     0x0C
MSGPTR              EQU     0x0D
CNTSEC              EQU     0x0E
TEMP                EQU     0x0F       
TXREG               EQU     0x10       
BITS                EQU     0x11       
RXREG               EQU     0x12       
TENS                EQU     0X13   
VALUE               EQU     0x14
SIGN                EQU     0x15
     






;**********************************************************************
      ORG     0x000             ; processor reset vector
        goto    MAIN              ; go to beginning of program


      ORG     0x004             ; interrupt vector location
;      movwf   w_temp            ; save off current W register contents
;      movf   STATUS,w          ; move status register into W register
;      movwf   status_temp       ; save off contents of STATUS register


; isr code can go here or be located as a call subroutine elsewhere


;      movf    status_temp,w     ; retrieve copy of STATUS register
;      movwf   STATUS            ; restore pre-isr STATUS register contents
;      swapf   w_temp,f
;      swapf   w_temp,w          ; restore pre-isr W register contents
      retfie                    ; return from interrupt

;*********************Ivairios paprogrames*****************************


                      ;*** Program reads temperature ***
                      ;*** with a DS1820 thermometer ***
                      ;*** and puts out PC COM port. ***



                       ;***  delay for N (in W) msec  ***


NMSEC       MOVWF CNTMSEC              ;delay for N (in W) milliseconds
MSECLOOP    MOVLW 0xF8                  ;(248) allow for 8 micro overhead
            CALL MICRO4                ;248*4+2=994 microsec here
            NOP                        ;make up additional 6...
            NOP                        ;microseconds in loop
            DECFSZ CNTMSEC,f           ;decrement count, skip when zero
            GOTO MSECLOOP             
            RETURN                     
            NOP                        ;***  1 millisec delay routine ***
MSEC        MOVLW 0xF9                  ;allow for 4 microsec overhead
            NOP                        ;( 2 accounted for in call )
MICRO4      ADDLW 0xFF                  ;subtract 1 from 'W'
            BTFSS STATUS,Z             ;skip when you reach zero
            GOTO MICRO4                ;more loops
            RETURN                     


                      ;***      Delay N seconds      ***

NSEC        MOVWF CNTSEC               ;number of seconds delay
QUARTER     MOVLW 0x04                  ;4 x 250 msec = 1 second
            MOVWF TEMP                 ;temp will count quarters
SECLOOP     MOVLW 0xFA                  ;250 decimal
            CALL NMSEC                 ;delay for quarter of a second
            DECFSZ TEMP,f              ;more 1/4 seconds?
            GOTO SECLOOP               ;yes, loop
            DECFSZ CNTSEC,f            ;more seconds to delay?
            GOTO QUARTER               ;yes, reset 1/4 sec cnt
            RETURN                     ;finished


                        ;***  Character in W out RS232 ***
OUTCH       MOVWF TXREG                ;put W into transmit register
            MOVLW 0x08                  ;eight bits of data
            MOVWF BITS                 ;a counter for bits
            BSF PORTA,.3                ;start bit (flipped remember) RA2
TXLOOP      MOVLW 0x31                  ;49 decimal, delay time
            CALL MICRO4                ;wait 49 x 4 = 196 microseconds
            RRF TXREG,f                ;roll rightmost bit into carry
            BTFSC STATUS,C             ;if carry 0, want to set bit (low)
            GOTO CLRBIT                ;else clear bit, (a high)
            BSF PORTA,.3                ;+5V on pin 1 ( RA2 )
            GOTO TESTDONE              ;are we finished?
CLRBIT      BCF PORTA,.3                ;0 Volts on pin 1 ( RA2 )
            NOP                        ;to make both options 12 microsec
TESTDONE    DECFSZ BITS,f              ;one less data bit, skip when zero
            GOTO TXLOOP                ;more bits left, delay for this one
            MOVLW 0x34                  ;full 208 microsec delay this time
            CALL MICRO4                ;delay for last data bit
            BCF PORTA,.3                ;0V, ( a high ) for stop bits
            MOVLW 0x68                  ;decimal 104 delay, 2 stop bits
            CALL MICRO4               
            RETURN                     

                       ;***   PIC sets I/O line high  ***

M1HI        BSF STATUS,RP0             ;goto to page 1
            BSF TRISB,.1                ;RB1 
;            BSF TRISA,3                ;make RA3 an input
            BCF STATUS,RP0             ;back to page 0
            RETURN                     ;master 1 wire line hi

                        ;***  Master sets I/O line low ***

M1LO        BCF PORTB,.1                ;Port B bit 1
;M1LO        BCF PORTA,3                ;Port A bit 3 low
            BSF STATUS,RP0             ;goto to page 1
            BCF TRISB,.1               
;            BCF TRISA,3                ;make RA3 an output
            BCF STATUS,RP0             ;back to page 0
            RETURN                     ;master 1 wire line low

                       ;***    PIC sends low bit      ***

SLOTLO      CALL M1LO                  ;begin by taking RA3 low
            GOTO DLY80                 ;and remain low
SLOTHI      CALL M1LO                  ;a quick low on RA3
            CALL M1HI                  ;return high right away
DLY80       MOVLW 0x14                  ;20 x 4 = 80 microseconds
            CALL MICRO4                ;delay
            CALL M1HI                 
            RETURN                     

                       ;***   PIC outputs byte in W   ***

TXBYTE1     MOVWF TXREG                ;put W into transmit register
            MOVLW 0x08                  ;eight bits of data
            MOVWF BITS                 ;a counter for bits
TX1LOOP     RRF TXREG,f                ;roll rightmost bit into carry
            BTFSC STATUS,C             ;if carry 0 want low bit output
            GOTO HIBIT1                ;else send a 1
            CALL SLOTLO                ;output a low bit ( RA3 )
            GOTO DONE1                 ;are we finished?
HIBIT1      CALL SLOTHI                ;output a high bit ( RA3 )
DONE1       DECFSZ BITS,f              ;1 less data bit, skip when 0
            GOTO TX1LOOP               ;more bits left
            RETURN                     

                      ;***  PIC gets byte from 1820  ***

RXBYTE1     MOVLW 0x08                  ;eight bits of data
            MOVWF BITS                 ;a counter for bits
RX1LOOP     CALL M1LO                  ;a quick low pulse
            CALL M1HI                  ;and back high

            NOP                        ;waiting for about ...
            NOP                        ;14 microseconds ...
            NOP                        ;to elapse ...
            NOP                        ;before reading RA3
            NOP                        ;
             
            MOVF PORTB,W         
;          MOVF PORTA,W               ;get port into W
            ANDLW 0x01
;            ANDLW 0x08                  ;W > 0 if RA3 high
            ADDLW 0xFF                  ;C set if W > 0
            RRF RXREG,f                ;roll carry into RXREG MSB
            MOVLW 0x14                  ;delay 80 microseconds
            CALL MICRO4               
            DECFSZ BITS,f              ;1 less data bit, skip when zero
            GOTO RX1LOOP               ;more bits left
            MOVF RXREG,W               ;routine return value in W
            RETURN                     

                      ;***     Send a reset pulse    ***

RESET       CALL M1LO                  ;make I/O line low
            MOVLW 0x96                  ;150 x 4 = 600 microseconds
            CALL MICRO4                ;delay
            CALL M1HI                  ;and back high
            MOVLW 0x64                  ;100 x 4 = 400 microseconds
            CALL MICRO4                ;delay
            RETURN                     

                       ;***  Output binary as decimal ***

BIN2DEC     MOVWF TEMP                 ;put binary number in reg TEMP
            CLRF TENS                  ;clear the tens register
            MOVLW 0x64                  ;decimal 100
            SUBWF TEMP,W               ;greater than 100?
            BTFSS STATUS,C             ;W >= 0  send a '1' out
            GOTO TENSLOOP              ;no, forget the '1'
            MOVWF TEMP                 ;change TEMP
            MOVLW 0x31                  ;'1' in 'W'
            CALL OUTCH                 ;send out RS232
TENSLOOP    MOVLW 0x0A                  ;decimal 10
            SUBWF TEMP,W               ;greater or equal to 10?
            BTFSS STATUS,C             ;yes, process tens
            GOTO UNITS                 ;no, finish with 10's
            MOVWF TEMP                 ;update TEMP
            INCF TENS,f                ;add 1 to tens digit
            GOTO TENSLOOP              ;try subtracting 10 again
UNITS       MOVF TENS,W                ;get tens digit into W
            ADDLW 0x30                  ;change to ascii
            CALL OUTCH                 ;send 10's out RS232
            MOVF TEMP,W                ;get remainder
            ADDLW 0x30                  ;change to ascii
            CALL OUTCH                 ;and ouput units character
            RETURN                     



;*************Perduodame komandas DS18S20**********************

MEASURE     CALL RESET                 
            MOVLW 0xCC                  ;skip address
            CALL TXBYTE1               
            MOVLW 0x44                  ;start conversion
            CALL TXBYTE1               
            MOVLW 0xFA                  ;delay 250 milliseconds
            CALL NMSEC                 
            MOVLW 0xFA                  ;and another 250 msec
            CALL NMSEC                 
            CALL RESET                 ;reset pulse
            MOVLW 0xCC                  ;skip address
            CALL TXBYTE1               
            MOVLW 0xBE                  ;read scratchpad memory
            CALL TXBYTE1               

;**********************Nuskaitinėjame DS18S20*******************           

            CALL RXBYTE1               ;read value byte from scratchpad
            MOVWF VALUE                ;transfer to value register
            CALL RESET                 ;stop collecting data
            RETURN

;***************************************************************


                      ;***     The Main routine      ***

MAIN           MOVLW 0x00                   ;all port bits to output
               BSF   STATUS,RP0
               MOVWF TRISA                  ;on port A
               MOVWF TRISB                  ;and port B
               BCF  STATUS,RP0
               CLRF PORTA                   ;RA2 is 0 ( RS232 high )
               MOVLW 0xff                   ;delay
               CALL MICRO4                  ;so no glitches interfere
             
MATUOK         CALL MEASURE
               MOVF VALUE,0                 ;VALUE i W irasome
               CALL OUTCH                   ;Issiunciame



;VEL            MOVLW 0x21                   ;this is offset of the message
;               CALL OUTCH                   ;output '!'
           
               MOVLW 0x2                    ;2 sekundes laukiame
               CALL NSEC

;              GOTO VEL   
           
               GOTO MATUOK                   ;go into an endless loop


           

















;            CALL RXBYTE1               ;read sign byte from scratchpad
;            MOVWF SIGN                 ;transfer to sign register
;            CALL RESET                 ;stop collecting data
;            MOVLW 0xFF                  ;compare sign to 0xFF
;            SUBWF SIGN,W               ;test for zero
;            BTFSS STATUS,Z             ;skip if it is zero (negative #)
;            GOTO MAGBYTE               ;don't output anything
;            MOVLW 0x2D                  ;minus sign
;            CALL OUTCH                 ;out RS232
;            BSF STATUS,C               ;bit 7 to be complimented
;            RRF VALUE,W                ;get high 7 bits
;            MOVWF TEMP                 ;put in another register
;            COMF TEMP,W                ;take 2's compliment
;            ADDLW 0x01                 
;            GOTO DECOUT                ;and send it out
;MAGBYTE     BCF STATUS,C               ;clear carry
;            RRF VALUE,W                ;high 7 bits into W
;DECOUT      CALL BIN2DEC               ;output in decimal
;            MOVLW 0x2E                  ;a period
;            CALL OUTCH                 ;output it RS232
;            MOVLW 0x30                  ;ASCII '0'
;            BTFSC VALUE,0              ;skip if bit 0 is 0
;            MOVLW 0x35                  ;an ASCII '5'
;            CALL OUTCH                 ;output fraction
;            MOVLW 0x0D                  ;a carriage return
;            CALL OUTCH                 ;output RS232
;            MOVLW 0x0A                  ;a line feed
;            CALL OUTCH                 



      END                     ; directive 'end of program'




 Ar kas bandet prie PIC prijungti DS1820 termometra
PranešimasParašytas: 2005 05 18, 23:18 Pranešti apie taisyklių pažeidimą Atsakyti su citata
circuit
VIP narys
VIP narys
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą Siųsti el. laišką Apsilankyti vartotojo tinklapyje
Ir komentarus angliškai rašai Question ...
 Ar kas bandet prie PIC prijungti DS1820 termometra
PranešimasParašytas: 2005 05 18, 23:29 Pranešti apie taisyklių pažeidimą Atsakyti su citata
GedasL
Užkietėjęs dalyvis
Užkietėjęs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą Siųsti el. laišką ICQ numeris
BLASTER rašo:
Ir komentarus angliškai rašai Question ...


Šiap tai rasau paprastai angliskai ir kintamuosius ir komentarus, globalizacija visgi Very Happy O šiuo konkrečiu atveju tai pats beveik nieko nerasiau, gal gatava susiradau programa, gal funkcijas atskiras susiradau ir sau pritaikiau. Sakau, prisedau nieko neturedamas ir per porą valandų jau turėjau veikiantį daiktą. Jei būčiau viską nuo 0 , būčiau nespėjęs. Ašku kas tai yra PIC ir DS1820 žinojau.
 Ar kas bandet prie PIC prijungti DS1820 termometra
PranešimasParašytas: 2005 05 18, 23:29 Pranešti apie taisyklių pažeidimą Atsakyti su citata
automatikas
Dažnas dalyvis
Dažnas dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
grazu, reikes pabadyti
pataisyk jei klystu:

RA.2- Tx i rs232
RA.3-DS1820
RB.1-?
 Ar kas bandet prie PIC prijungti DS1820 termometra
PranešimasParašytas: 2005 05 18, 23:31 Pranešti apie taisyklių pažeidimą Atsakyti su citata
GedasL
Užkietėjęs dalyvis
Užkietėjęs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą Siųsti el. laišką ICQ numeris
Va dar imkit kodas for AT90S1200:

Kodas:

                   

.include "1200def.inc"

;*******************************Iejimai ir isejimai***********************************


.equ   TxD              =5            ;Siustuvas                  - PB5

.equ    b                  =135                     ;4800 bps @ 4MHz
.equ    sb                 =1                      ;Vienas STOP bitas

;*********************************Registrai*******************************************


.def   laikinas            =r16
.def   skaitiklis          =r17
.def   priimtas_baitas     =r18
.def   siunciamas_baitas   =r19
.def   velinimas1             =r20

.def   skaitiklis_baitu    =r22
.def   skaitiklis1         =r23
.def   skaitiklis2         =r24
.def   skaitiklis3         =r25
.def   wire_baitas         =r26
.def   convert             =r27

;*************************************************************************************


.equ  wire_line                =4          ; 1Wire linija - PD4
.equ  convert_t                =0x44        ; T-ros konversijos komanda
.equ  read_scratchpad          =0xBE        ; Read scratchpad komanda.Nuskaitome DS18S20.Duomenys siunciami pradedant 0
                                           ; baito jauniausiu bitu.Jei nereikia visko, siuntima nutraukiame RESET komanda.
.equ  skip_rom                 =0xCC        ; Skip rom komanda.I sekancia komanda reaguos visi 1Wire irenginiai


;*************************************************************************************

;
 

.cseg
.org 0

 rjmp   RESET
 reti                                ;Nenaudojamas isorinis pertraukimas
 reti                                ;Nenaudojamas taimerio pertraukimas
 reti                                ;Nenaudojamas komparatoriaus pertraukimas
 
 
 RESET:
 
                                 
 ldi    laikinas,0                 ;00001111
 out    WDTCR,laikinas               ;WDR po 2048K ciklu 1.9sek. prie +5V
 sbi    ACSR,ACD                     ;Isjungiame komparatoriaus maitinima
 ldi    laikinas,0b11111111           ;PORTD - OUT
 out    DDRD,laikinas                ;
 ldi    laikinas,0b00000000           ;
 out    PORTD, laikinas ;            ;Ijungiame PULL-UP rezistorius ant iejimu,ISEJIMAI - "1"
 ldi    laikinas,0b00000001          ;PBO - OUT,KITI -IN
 out    DDRB,laikinas                ;Visi PORTB - IN
 ldi    laikinas,0b11111110
 out    PORTB,laikinas               ;Ijungiame PULL-UP rezistorius ant iejimu, ISEJIME - "0"
 ldi    skaitiklis_baitu, 0
 ldi    laikinas,0
 sei                                 ;Leisti pertraukimus
 
 
 
 

 ;*******************************PAGRINDINE PROGRAMA******************************

 main:       
             rcall sekundes_velinimas
             rcall WIRE_LINE_RESET
             ldi   wire_baitas,skip_rom
             rcall WIRE_LINE_SIUNTIMAS
             rcall VELINIMAS600us
             ldi   wire_baitas,convert_t
             rcall WIRE_LINE_SIUNTIMAS
             rcall VELINIMAS600us
             
             
             rcall WIRE_LINE_RESET
             ldi   wire_baitas,skip_rom
             rcall WIRE_LINE_SIUNTIMAS
             rcall VELINIMAS600us
             ldi   wire_baitas,read_scratchpad
             rcall WIRE_LINE_SIUNTIMAS
             rcall VELINIMAS600us
             rcall WIRE_LINE_NUSKAITYMAS
             rcall WIRE_LINE_RESET
             mov   siunciamas_baitas,wire_baitas
             lsr   siunciamas_baitas
               
       
             rcall putchar
             
             
             
         
             rjmp  main                 

;*********************************SIUNTIMAS******************************************             
             
             
             
                                             
 putchar:     ldi   skaitiklis,9+sb        ; uzkrauname skaitikli (1 START + 8 DATA + sb)
              com   siunciamas_baitas      ; invertuojame siunciama baita
              sec                          ; nustatome carry(START bitas)
                                             
 putchar0:    brcc  putchar1               ; Jei carry nustatytas
              sbi   PORTD,TxD
         ;     cbi   PORTD,TxD              ; siunciame "0"
              rjmp  putchar2               ; jei nenustatytas
                                   
 putchar1:    cbi   PORTD,TxD
; putchar1:    sbi   PORTD,TxD              ; siunciame "1"
              nop
                 
 putchar2:    rcall UART_delay
              rcall UART_delay
             
              lsr   siunciamas_baitas      ; istumiame i carry duomenu bita
              dec   skaitiklis
              brne  putchar0               ; siunciame jei ne visi issiusti
             
              ret                          ; jei visi issiusti, iseiname is paprogrames
 
 
 
 

 
 

;*******************************UART VELINIMAS********************************************
         
 UART_delay:  ldi   laikinas,b     
 UART_delay1: dec   laikinas     
              brne  UART_delay1 
              ret               
             
 
 
 
 
 
 
 
 
;******************************1-Wire RESET******************************
; 1. 600us palaiko 0
; 2. Laukia atsakymo

  WIRE_LINE_RESET:
    clt                            ;Isvalome T bita
    rcall  OUTMOD                  ;wire_line isejimas ir "1"
    cbi    PORTD,wire_line         ;wire_line "0" .Norint , kad butu RESET, reikia palaikyti 500us.
    rcall  VELINIMAS600us          ;Palaikome linijoje "0" 600us
    rcall  INMOD                   ;1 wire linija padarome iejimu ir isjungiame pull-up
                                   ;DS18S20 uzfiksuoja kylanti fronta, palaukia 15-60us ir palaiko "0" 60-240us
                                   ;60us prie 4MHz uzima 240 komandu
 atsistatymas:
    sbis   PIND,wire_line
    rjmp   atsistatymas            ;Laukiame kol ant linijos bus aukstas lygis.Auksta lygi turi padaryti pull-up
                                   ;rezistorius, jei linijos nelaiko ant "0" kontroleris ar DS18S20.
                                   ;Kontroleris laikyti "0"
                                   ;neturetu, nes ka tik tik buvo komanda INMOD, o DS18S20 laukia 15-60us ir tada
                                   ;daro "0"
                                 
    ldi    skaitiklis1,49         ;Sulauke "1" , laukiame DS18S20 atsakymo (15-60us laikotarpyje turetu atsakyti)
 laukiu_atsakymo:
    dec    skaitiklis1             ;Pradedu skaiciuoti laika skirta atsakymui
    breq   NEATSILIEPIA            ;Jei laikas baigesi ir niekas neatsiliepia,pereinu i paprograme "NEATSILIEPIA"                         
    sbic   PIND,wire_line          ;Jei linijoje "0", reiskia atsilepe.Baigiame skaiciuoti atsiliepimui skirta laika
    rjmp   laukiu_atsakymo         ;Jei laikas nesibaige ir neatsiliepe, laukiu toliau   
    rcall  VELINIMAS600us          ;Jei atsiliepe, pdarome pauze, pries duodami kita komanda
    set
    ret                            ;Iseiname is paprogrames
 
;************************************************************************
 
 
;*****************************1-WIRE LINE IN/OUT*************************
 
  OUTMOD:
    sbi   PORTD,wire_line
    sbi   DDRD,wire_line      ;1 wire linija padarome isejimu ir "1" iejime
    ret                       ;4 ciklus uzima
   
  INMOD:
    cbi   PORTD,wire_line
    cbi   DDRD,wire_line      ;1 wire linija padarome iejimu ir isjungiame pull-up
    ret                       ;4 ciklus uzima
   
;************************************************************************   
 
;*****************************600us velinimas****************************

 
  VELINIMAS600us:
  wdr
    ldi   skaitiklis1,200     ;Uzkrauname i registra 200
    ldi   skaitiklis2,4       ;Uzkrauname i registra 10
  ciklas1_600us:
    dec   skaitiklis1         ;Sumaziname pirma skaitikli 1
                              ;dec komanda 1 ciklas
    brne  ciklas1_600us       ;Jei ne nulis, vel maziname
                              ;brne komanda 1 ciklas, jei lygu nuliui, 2 ciklai - jei nelygu nuliui
    ldi   skaitiklis1,200     ;Jei nulis, vel uzkrauname 200
    dec   skaitiklis2         ;Sumaziname antra skaitikli 1
    brne  ciklas1_600us       ;Jei skaitiklis2 nelygu 0, vel maziname skaitiklis1
    ret                       ;Jei skaitiklis2 lygu 0, laikas baigesi, iseiname is paprogrames
                              ;ret komanda uzima 4 ciklus
;************************************************************************   
   
;*****************Jei DS18S20 neatsiliepia i RESET komanda***************   
 
 NEATSILIEPIA:
;    sei                       ;leisti pertraukimus
;    ldi   ISEJIMAI1,0b00000000
;    ldi   ISEJIMAI2,0b00000000
;    ldi   ISEJIMAI3,0b00000000
;    rcall ISEJIMU_NUSTATYMAS
    rjmp  MAIN
   
;************************************************************************   
 
 
;*********************1 Wire komandos siuntimas**************************

 WIRE_LINE_SIUNTIMAS:

;   cli                        ; Uzdrausti pertraukimus
   rcall  OUTMOD              ;
   ldi    skaitiklis1,8       ; 8 bitus siunciame
   
 next:
   cbi    PORTD,wire_line     ; Start bitas
   ldi    skaitiklis2,3       ; Po start bito palaikome linijoje "0" pora mikrosekundziu
 start_bit:
   dec    skaitiklis2
   brne   start_bit           ; Jei dar neparaejo 2us, laukiame
   
   lsr    wire_baitas        ; Istumiame i carry jauniausia komandos bita
   brcs   siusk_1             ; Jei carry bite "1", persokame
   rjmp   siusk_0             ; Jei carry bite "0"
 siusk_1:
   sbi    PORTD,wire_line     ; Jei siunciamas bitas "1", pdarome linijoje auksta lygi
 siusk_0: 
   ldi    skaitiklis2,120     ; Reikiama lygi reika palaikyti minimum 60us.Palaikysime 90   
 vel_80us: 
   dec    skaitiklis2
   brne   vel_80us
   sbi    PORTD,wire_line     ; Jei praejo 90us, vel i linija auksta lygi
                             
                              ; Pasiuntus bita reikia palaukti minimum 1us pries siunciant kita.Palauksime 2us
   ldi    skaitiklis2,3
 vel_2us:
   dec    skaitiklis2
   brne   vel_2us                             
   dec    skaitiklis1         ; Sumaziname issiustu bitu skaitikli
   brne   next                ; Jei dar ne visus issiunteme, siunciame sekanti
;   sei
   rcall OUTMOD
   ret                        ; Jei visus isiunteme, iseiname is paprogrames
   
   
;************************************************************************   



;***************************SEKUNDES VELINIMAS***************************

; Laukiame temperarturos konversijos pabaigos

 sekundes_velinimas:
  ldi   skaitiklis1,255
  ldi   skaitiklis2,255
  ldi   skaitiklis3,64
 maz1:
  dec skaitiklis1
  brne maz1
  ldi skaitiklis1,255
  dec skaitiklis2
  brne maz1
  ldi  skaitiklis2,255
  wdr
  dec skaitiklis3
  brne maz1
  ret
 
;************************************************************************     

;**********************1WIRE  baito nuskaitymas*****************************
;Nuskaito DS18S20 siunciama baita.Nuskaites baita padeda ji i registra "wire_baitas" 



WIRE_LINE_NUSKAITYMAS:
  rcall  OUTMOD
  clc                               ;Isvalyti carry bita.I ji desime priimamus bitus
  ldi    skaitiklis1,8              ;Priimsime po 8 bitus
 
 st_bit1:
  cbi    PORTD,wire_line            ;Start bitas.READ TAIME SLOT pradzia ;                0us
  ldi    skaitiklis2,3
 veli_2us1:
                          ;Palaikome "0" 2us
  dec    skaitiklis2
  brne   veli_2us1
  rcall  INMOD                      ;Perjungiame i iejima;                                2.75us
  ldi    skaitiklis2,10             ;                                                     5.50us
 veli_7us1:
 
  dec    skaitiklis2
  brne   veli_7us1
  sbic   PIND,wire_line             ;Nuskaitome .Nuo READ TIME SLOT pradzios praejo       13us
  sec                               ;Nustatome carry bita, jei linijoje "1"
  ror    wire_baitas                ;carry bita istumiame i registro temperatura vyriausia bita
  dec    skaitiklis1                ;Sumaziname priimtu bitu skaitikli
  breq    ROM_baitas_nuskaitytas     ;Jei priemiau visus bitus
  clc                               ;Isvalome carry bita              14.25us
                                   ;READ TIME SLOT turi buti ne maziau kaip 60us.Padarome 80us
  ldi    skaitiklis2,87
  vel_read_time_slot1:
  dec    skaitiklis2
  brne   vel_read_time_slot1
  rcall  OUTMOD                     ;Pasibaigus READ TIME SLOT , perjungiame i iejima           79.75us                 
  ldi    skaitiklis2,3
  vel_atsistatymas1:                 ;Padarome 2us pauze
  dec    skaitiklis2
  brne   vel_atsistatymas1
  rjmp   st_bit1                    ;Nuskaitome sekanti bita 2.25
  ROM_baitas_nuskaitytas:
  ldi    skaitiklis1,30             ;
 palaukiame:
  dec    skaitiklis1
  brne   palaukiame
  ret     








;*************************************************************************************
                                                     





             
 Ar kas bandet prie PIC prijungti DS1820 termometra
PranešimasParašytas: 2005 05 18, 23:39 Pranešti apie taisyklių pažeidimą Atsakyti su citata
GedasL
Užkietėjęs dalyvis
Užkietėjęs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą Siųsti el. laišką ICQ numeris
automatikas rašo:
grazu, reikes pabadyti
pataisyk jei klystu:

RA.2- Tx i rs232
RA.3-DS1820
RB.1-?


Aiškinkis pats. Man pirmadienį magistrinį priduot Shocked
 Ar kas bandet prie PIC prijungti DS1820 termometra
PranešimasParašytas: 2005 05 25, 00:38 Pranešti apie taisyklių pažeidimą Atsakyti su citata
ATMEGA
VIP narys
VIP narys
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Labai idomus listingai...
Nezinau kaip jie veiks .
Taciau nieko nematau apie tavo temperaturoros konvertavima
i zmogiskus C...
Del to ir klausiu ,kaip tavo destytojas suprato tavo :ALE SAMPLE ?
Kiek ten tos C ?
Pradėti naują temą  Atsakyti į pranešimą
 
Forumo sistema: phpBB
 „Google“ paieška forume
 Kas naujesnio?
 Naujos temos forume

Global electronic components distributor – Allicdata Electronics

Electronic component supply – „Eurodis Electronics“

LOKMITA – įvairi matavimo, testavimo, analizės ir litavimo produkcija

Full feature custom PCB prototype service

Sveiki ir ekologiški maisto produktai

Mokslo festivalis „Erdvėlaivis Žemė

LTV.LT - lietuviškų tinklalapių vitrina

„Konstanta 42“

„Mokslo sriuba“

www.matuok.lt - Interneto spartos matavimo sistema

www.esaugumas.lt – apsaugok savo kompiuterį!

PriedaiMobiliems.lt – telefonų priedai ir aksesuarai

Draugiškas internetas

FS25 Tractors
Farming Simulator 25 Mods, FS25 Maps, FS25 Trucks
ETS2 Mods
ETS2 Trucks, ETS2 Bus, Euro Truck Simulator 2 Mods
FS22 Tractors
Farming Simulator 22 Mods, FS22 Maps, FS25 Mods
VAT calculator
VAT number check, What is VAT, How much is VAT
LEGO
Mänguköök, mudelautod, nukuvanker
KCD2 Mods
Installing KCD 2 Mods, KCD 2 Guides, KCD 2 Cheats
FS25 Mods
FS25 Harvesters, FS25 Tractors Mods, FS25 Maps Mods
Dantų protezavimas
All on 4 implantai,
Endodontija mikroskopu,
Dantų implantacija
FS25 Mods
FS25 Maps, FS25 Cheats, FS25 Install Mods
GTA 6 Wiki
GTA 6 Map, GTA 6 Characters, GTA 6 News
FS25 Mods
Farming Simulator 25 Mods,
FS25 Maps
ATS Trailers
American Truck Simulator Mods, ATS Trucks, ATS Maps
Reklama
‡ 1999– © Elektronika.lt | Autoriaus teisės | Privatumo politika | Atsakomybės ribojimas | Turinys | Reklama | Kontaktai LTV.LT - lietuviškų tinklalapių vitrina
Script hook v, Openiv, Menyoo
gta5mod.net
FS25 Mods, FS25 Tractors, FS25 Maps
fs25mods.lt
Optical filters, UV optics, electro optical crystals
www.eksmaoptics.com
LTV.LT – lietuviškų tinklalapių vitrina
www.ltv.lt/technologijos/
Elektroninių parduotuvių optimizavimas „Google“ paieškos sistemai
www.seospiders.lt
FS22 mods, Farming simulator 22 mods,
FS22 maps

fs22.com
Reklama


Reklama