RS485 üzerinde Tiny Pic Bootloader

Başlatan RcALTIN, 04 Aralık 2010, 21:39:31

RcALTIN

Bir süredir rs485 üzerinde çalışmalar yapıyorum, projemin bir ayağıda otomatik firmware güncellemesini sağlamak, tabi ki sistem rs485 tabanlı olunca bootloader da buna uygun olmalı... Tahmin edebileceğiniz tiny pic bootloader RS232 kullandığından, RS485 için pic tarafında transceiverın RE-DE kontrolünü sağlamak gerekiyor. Nette bu konuyu araştırdım, şöyle bir kod buldum ama bir türlü çalıştıramadım, ASM bilen üyelerden bir göz atmalarını rica edeceğim.
radix DEC 
   LIST      P=PIC18F452   ; change also: Configure->SelectDevice from Mplab 
   xtal EQU 20000000     ; you may want to change: _XT_OSC_1H  _HS_OSC_1H  _HSPLL_OSC_1H 
   baud EQU 9600        ; standard TinyBld baud rates: 115200 or 19200 
   ; The above 3 lines can be changed and buid a bootloader for the desired frequency (and PIC type) 
    
   ;******************************************************************** 
   ;   Tiny Bootloader      18F series      Size=132words 
   ;   claudiu.chiculita@ugal.ro 
   ;   http://www.etc.ugal.ro/cchiculita/software/picbootloader.htm 
   ;******************************************************************** 
    

   #include "icdpictypes.inc"   ;takes care of: #include "p18fxxx.inc",  max_flash, IdTypePIC 
   #include "spbrgselect.inc"   ; RoundResult and baud_rate 

      #define first_address max_flash-264      ;132 words 


      __CONFIG   _CONFIG1H, _OSCS_OFF_1H & _HS_OSC_1H 
      __CONFIG   _CONFIG2L, _BOR_ON_2L & _BORV_20_2L & _PWRT_ON_2L 
      __CONFIG   _CONFIG2H, _WDT_OFF_2H & _WDTPS_128_2H 
      __CONFIG   _CONFIG4L, _STVR_ON_4L & _LVP_OFF_4L & _DEBUG_OFF_4L 
        
;----------------------------- PROGRAM --------------------------------- 
      cblock 0 
      crc 
      i 
      cnt1 
      cnt2 
      cnt3 
      counter_hi 
      counter_lo 
      flag 
      endc 
      cblock 10 
      buffer:64 
      dummy4crc 
      sendb   ; Byte to send 
      d1      ; For delay routine 
      endc 

    
;0000000000000000000000000 RESET 00000000000000000000000000 

      ORG     0x0000 
      GOTO    IntrareBootloader 

;view with TabSize=4 
;&&&&&&&&&&&&&&&&&&&&&&&   START     &&&&&&&&&&&&&&&&&&&&&& 
;----------------------  Bootloader  ---------------------- 
;PC_flash:      C1h       U            H         L         x  ...  <64>   ...  crc    
;PC_eeprom:     C1h     40h         EEADR    EEDATA    0      crc                
;PC_cfg         C1h     U OR 80h      H         L         1      byte   crc 
;PIC_response:      type `K` 
    
      ORG first_address      ;space to deposit first 4 instr. of user prog. 
      nop 
      nop 
      nop 
      nop 
      org first_address+8 
IntrareBootloader   
       movlw b'10111111' 
       movwf TRISC     
                     ;init serial port 
      movlw b'00100100' 
     movwf TXSTA 
      movlw spbrg_value 
      movwf SPBRG 
      movlw b'10010000' 
      movwf RCSTA 
                     ;wait for computer 
      rcall Receive          
      sublw 0xC1            ;Expect C1h = 'K' 
      bnz way_to_exit 
      movlw IdTypePIC 
      rcall SendW               ;send PIC type 
MainLoop 
      movlw 'K' 
      rcall SendW               ; "-Everything OK, ready and waiting." 
mainl 
      clrf crc 
      rcall Receive         ;Upper 
      movwf TBLPTRU 
    movwf flag         ;(for EEPROM and CFG cases) 
      rcall Receive         ;Hi 
      movwf TBLPTRH 
    movwf EEADR         ;(for EEPROM case) 
      rcall Receive         ;Lo 
      movwf TBLPTRL 
    movwf EEDATA      ;(for EEPROM case) 

      rcall Receive         ;count 
      movwf i 
      incf i 
      lfsr FSR0, (buffer-1) 
rcvoct                  ;read 64+1 bytes 
    movwf TABLAT      ;prepare for cfg; => store byte before crc 
      rcall Receive 
      movwf PREINC0 
      decfsz i 
      bra rcvoct 
    
      tstfsz crc            ;check crc 
      bra ziieroare 
    btfss flag,6      ;is EEPROM data? 
    bra noeeprom 
    movlw b'00000100'   ;Setup eeprom 
    rcall Write 
    bra waitwre 
noeeprom 
    btfss flag,7      ;is CFG data? 
    bra noconfig 
    tblwt*            ;write TABLAT(byte before crc) to TBLPTR*** 
    movlw b'11000100'   ;Setup cfg 
    rcall Write 
    bra waitwre 
noconfig 
                     ;write 
eraseloop 
      movlw   b'10010100'      ; Setup erase 
      rcall Write 
      TBLRD*-               ; point to adr-1 
    
writebigloop    
      movlw 8               ; 8groups 
      movwf counter_hi 
      lfsr FSR0,buffer 
writesloop 
      movlw 8               ; 8bytes = 4instr 
      movwf counter_lo 
writebyte 
      movf POSTINC0,w         ; put 1 byte 
      movwf TABLAT 
      tblwt+* 
      decfsz counter_lo 
      bra writebyte 
    
      movlw   b'10000100'      ; Setup writes 
      rcall Write 
      decfsz counter_hi 
      bra writesloop 
waitwre    
      ;btfsc EECON1,WR      ;for eeprom writes (wait to finish write) 
      ;bra waitwre         ;no need: round trip time with PC bigger than 4ms 
    
      bcf EECON1,WREN         ;disable writes 
      bra MainLoop 
    
ziieroare               ;CRC failed 
      movlw 'N' 
      rcall SendW 
      bra mainl 
      
;******** procedures ****************** 

; Delay is needed because the SN75176 need time for transitions. 
; Only required for the RE_DE line. 
Delay_0 
      decfsz   d1, f 
      goto   Delay_0 
      return 
SendW 
    movwf sendb 
     bsf PORTC,5        ; RE_DE_485 PORTE pin 0 hoog maken om RS485 te zenden 
      btfss PIR1,TXIF 
      goto $-2 

      movff sendb,TXREG 

      nop 
      bsf PORTC,5             ; RE_DE_485 PORTE pin 0 hoog maken om RS485 te zenden 
      btfss TXSTA,TRMT 
      goto $-2 
      bcf PORTC,5             ; RE_DE_485 PORTE pin 0 laag maken om RS485 te ontvangen 
      return 

Write 
      clrwdt 
      movwf EECON1 
      movlw 0x55 
      movwf EECON2 
      movlw 0xAA 
      movwf EECON2 
      bsf EECON1,WR         ;WRITE 
      nop 
   ;nop 
      return 


Receive 
    clrwdt 
      movlw xtal/2000000+1   ; for 20MHz => 11 => 1second delay 
      movwf cnt1 
rpt2                    
      clrf cnt2 
rpt3 
      clrf cnt3 
rptc 
    btfss PIR1,RCIF         ;test RX 
    bra notrcv 
    movf RCREG,w         ;return read data in W 
    addwf crc,f            ;compute crc 
    return 
notrcv 
      decfsz cnt3 
      bra rptc 
      decfsz cnt2 
      bra rpt3 
      decfsz cnt1 
      bra rpt2 
      ;timeout: 
way_to_exit 
      bcf   RCSTA,   SPEN         ; deactivate UART 
    movlw b'11111111' 
    movwf TRISC 
      bra first_address 
;************************************************************* 
; After reset 
; Do not expect the memory to be zero, 
; Do not expect registers to be initialised like in catalog. 

            END


burada adam bu kodları 18F8722, RE0 dan RE-DE kontrolü yapacak şekilde düzenlemiş ancak anladığım kadarıyla çalıştıramamış ve fazladan 50ms'lik delaylar kullanmış, bende yukarıda delayı kaldırıp kodu 18f452 için RC5 den RE-DE kontrolü yapacak şekilde olmayan ASM bilgimle kendime göre düzenledim.

Şimdi derlediğimde kod proteusta rs232 ile çalışıyor, ancak gerçek devre üzerinde rs232(ft232 çıkışlarından direkt bağladığımda) veya rs485 ile denediğimde çalışmıyor, sizce sorun ne olabilir?

Not: transceiverlar sn75176, denemelerimde RC5i pulldown yapmayı da denedim ama bir sonuç alamadım; zaten devre firmware yazılımımla rs485 üzerinden modbus ile sorunsuz haberleşiyor, yani sorun donanımsal değil gibi...
KİMSEYİ ENGELLEDİĞİM YOK, ÖZEL İLETİ DEVRE DIŞI !

ErsinErce

Birde bu şekilde dener misiniz?
radix DEC
   LIST      P=PIC18F452   ; change also: Configure->SelectDevice from Mplab
   xtal EQU 20000000     ; you may want to change: _XT_OSC_1H  _HS_OSC_1H  _HSPLL_OSC_1H
   baud EQU 9600        ; standard TinyBld baud rates: 115200 or 19200
   ; The above 3 lines can be changed and buid a bootloader for the desired frequency (and PIC type)
   
   ;********************************************************************
   ;   Tiny Bootloader      18F series      Size=132words
   ;   claudiu.chiculita@ugal.ro
   ;   http://www.etc.ugal.ro/cchiculita/software/picbootloader.htm
   ;********************************************************************
   

   #include "icdpictypes.inc"   ;takes care of: #include "p18fxxx.inc",  max_flash, IdTypePIC
   #include "spbrgselect.inc"   ; RoundResult and baud_rate

      #define first_address max_flash-264      ;132 words


      __CONFIG   _CONFIG1H, _OSCS_OFF_1H & _HS_OSC_1H
      __CONFIG   _CONFIG2L, _BOR_ON_2L & _BORV_20_2L & _PWRT_ON_2L
      __CONFIG   _CONFIG2H, _WDT_OFF_2H & _WDTPS_128_2H
      __CONFIG   _CONFIG4L, _STVR_ON_4L & _LVP_OFF_4L & _DEBUG_OFF_4L
       
;----------------------------- PROGRAM ---------------------------------
      cblock 0
      crc
      i
      cnt1
      cnt2
      cnt3
      counter_hi
      counter_lo
      flag
      endc
      cblock 10
      buffer:64
      dummy4crc
      sendb   ; Byte to send
      d1      ; For delay routine
      endc

   
;0000000000000000000000000 RESET 00000000000000000000000000

      ORG     0x0000
      GOTO    IntrareBootloader

;view with TabSize=4
;&&&&&&&&&&&&&&&&&&&&&&&   START     &&&&&&&&&&&&&&&&&&&&&&
;----------------------  Bootloader  ----------------------
;PC_flash:      C1h       U            H         L         x  ...  <64>   ...  crc   
;PC_eeprom:     C1h     40h         EEADR    EEDATA    0      crc               
;PC_cfg         C1h     U OR 80h      H         L         1      byte   crc
;PIC_response:      type `K`
   
      ORG first_address      ;space to deposit first 4 instr. of user prog.
      nop
      nop
      nop
      nop
      org first_address+8
IntrareBootloader   
       movlw b'10011111'   ;TRISC ile oynama yapmamışsınız
       movwf TRISC             ;init serial port
       bcf PORTC,5              ;Recieve
      movlw b'00100100'
     movwf TXSTA
      movlw spbrg_value
      movwf SPBRG
      movlw b'10010000'
      movwf RCSTA
                     ;wait for computer
      rcall Receive         
      sublw 0xC1            ;Expect C1h = 'K'
      bnz way_to_exit
      movlw IdTypePIC
      rcall SendW               ;send PIC type
MainLoop
      movlw 'K'
      rcall SendW               ; "-Everything OK, ready and waiting."
mainl
      clrf crc
      rcall Receive         ;Upper
      movwf TBLPTRU
    movwf flag         ;(for EEPROM and CFG cases)
      rcall Receive         ;Hi
      movwf TBLPTRH
    movwf EEADR         ;(for EEPROM case)
      rcall Receive         ;Lo
      movwf TBLPTRL
    movwf EEDATA      ;(for EEPROM case)

      rcall Receive         ;count
      movwf i
      incf i
      lfsr FSR0, (buffer-1)
rcvoct                  ;read 64+1 bytes
    movwf TABLAT      ;prepare for cfg; => store byte before crc
      rcall Receive
      movwf PREINC0
      decfsz i
      bra rcvoct
   
      tstfsz crc            ;check crc
      bra ziieroare
    btfss flag,6      ;is EEPROM data?
    bra noeeprom
    movlw b'00000100'   ;Setup eeprom
    rcall Write
    bra waitwre
noeeprom
    btfss flag,7      ;is CFG data?
    bra noconfig
    tblwt*            ;write TABLAT(byte before crc) to TBLPTR***
    movlw b'11000100'   ;Setup cfg
    rcall Write
    bra waitwre
noconfig
                     ;write
eraseloop
      movlw   b'10010100'      ; Setup erase
      rcall Write
      TBLRD*-               ; point to adr-1
   
writebigloop   
      movlw 8               ; 8groups
      movwf counter_hi
      lfsr FSR0,buffer
writesloop
      movlw 8               ; 8bytes = 4instr
      movwf counter_lo
writebyte
      movf POSTINC0,w         ; put 1 byte
      movwf TABLAT
      tblwt+*
      decfsz counter_lo
      bra writebyte
   
      movlw   b'10000100'      ; Setup writes
      rcall Write
      decfsz counter_hi
      bra writesloop
waitwre   
      ;btfsc EECON1,WR      ;for eeprom writes (wait to finish write)
      ;bra waitwre         ;no need: round trip time with PC bigger than 4ms
   
      bcf EECON1,WREN         ;disable writes
      bra MainLoop
   
ziieroare               ;CRC failed
      movlw 'N'
      rcall SendW
      bra mainl
     
;******** procedures ******************

; Delay is needed because the SN75176 need time for transitions.
; Only required for the RE_DE line.
Delay_0
      decfsz   d1, f
      goto   Delay_0
      return
SendW
    movwf sendb
     bsf PORTC,5        ; RE_DE_485 PORTE pin 0 hoog maken om RS485 te zenden
      btfss PIR1,TXIF
      goto $-2
      movff sendb,TXREG
      nop
      btfss TXSTA,TRMT
      goto $-2
      bcf PORTC,5             ; RE_DE_485 PORTE pin 0 laag maken om RS485 te ontvangen
      return

Write
      clrwdt
      movwf EECON1
      movlw 0x55
      movwf EECON2
      movlw 0xAA
      movwf EECON2
      bsf EECON1,WR         ;WRITE
      nop
   ;nop
      return


Receive
    clrwdt
      movlw xtal/2000000+1   ; for 20MHz => 11 => 1second delay
      movwf cnt1
rpt2                   
      clrf cnt2
rpt3
      clrf cnt3
rptc
    btfss PIR1,RCIF         ;test RX
    bra notrcv
    movf RCREG,w         ;return read data in W
    addwf crc,f            ;compute crc
    return
notrcv
      decfsz cnt3
      bra rptc
      decfsz cnt2
      bra rpt3
      decfsz cnt1
      bra rpt2
      ;timeout:
way_to_exit
      bcf   RCSTA,   SPEN         ; deactivate UART
    movlw b'11111111'
    movwf TRISC
      bra first_address
;*************************************************************
; After reset
; Do not expect the memory to be zero,
; Do not expect registers to be initialised like in catalog.
END

RcALTIN

#2
Gerçekten sağolun; oldu, hemde çok güzel oldu :) Şimdi sırada windows tarafında bu bootloader'a göre yeni uygulama yazıp bus master'a dahil etmek var; biraz reverse engineering ve intel-hex dökümanlarını kurcaladıktan sonra başarabileceğimi düşünüyorum...

Ek: Kullanmak isteyenler için sol hali... Ayrıca tiny bootloader uygulamasını kullanacakların dikkat etmesi gereken bir nokta var, tinybldWin.exe ile aynı konumda bulunan tinybld.ini dosyasında,
[OPTIONS]
altında
SizeOfBLD=264
SizeOfBLD_W=132

tanımlamaları yer almalı, normalde burada yalnızca "SizeOfBLD_W=100" bulunur...

asm:
radix DEC
   LIST      P=PIC18F452	; change also: Configure->SelectDevice from Mplab
   xtal EQU 20000000		; you may want to change: _XT_OSC_1H  _HS_OSC_1H  _HSPLL_OSC_1H
   baud EQU 9600			; standard TinyBld baud rates: 115200 or 19200
   ; The above 3 lines can be changed and buid a bootloader for the desired frequency (and PIC type)
   
   ;********************************************************************
   ;   Tiny Bootloader
   ;      
   ;   18F series
   ;
   ;   RS485 Compatible Version
   ;
   ;   RE-DE Transmission = PIN RC5
   ;
   ;   Size = 132words
   ;
   ;   claudiu.chiculita@ugal.ro
   ;   http://www.etc.ugal.ro/cchiculita/software/picbootloader.htm
   ;********************************************************************
   

   #include "icdpictypes.inc"   ;takes care of: #include "p18fxxx.inc",  max_flash, IdTypePIC
   #include "spbrgselect.inc"   ; RoundResult and baud_rate

      #define first_address max_flash-264      ;132 words


      __CONFIG   _CONFIG1H, _OSCS_OFF_1H & _HS_OSC_1H
      __CONFIG   _CONFIG2L, _BOR_ON_2L & _BORV_20_2L & _PWRT_ON_2L
      __CONFIG   _CONFIG2H, _WDT_OFF_2H & _WDTPS_128_2H
      __CONFIG   _CONFIG4L, _STVR_ON_4L & _LVP_OFF_4L & _DEBUG_OFF_4L
       
;----------------------------- PROGRAM ---------------------------------
      cblock 0
      crc
      i
      cnt1
      cnt2
      cnt3
      counter_hi
      counter_lo
      flag
      endc
      cblock 10
      buffer:64
      dummy4crc
      sendb						;byte to send
      d1						;for delay routine
      endc

   
;0000000000000000000000000 RESET 00000000000000000000000000

      ORG     0x0000
      GOTO    IntrareBootloader

;view with TabSize=4
;&&&&&&&&&&&&&&&&&&&&&&&   START     &&&&&&&&&&&&&&&&&&&&&&
;----------------------  Bootloader  ----------------------
;PC_flash:      C1h       U            H         L         x  ...  <64>   ...  crc   
;PC_eeprom:     C1h     40h         EEADR    EEDATA    0      crc               
;PC_cfg         C1h     U OR 80h      H         L         1      byte   crc
;PIC_response:      type `K`
   
      ORG first_address			;space to deposit first 4 instr. of user prog.
      nop
      nop
      nop
      nop
      org first_address+8
IntrareBootloader   
      movlw b'10011111'
      movwf TRISC				;init serial port
      bcf PORTC,5				;RS485 receive
      movlw b'00100100'
      movwf TXSTA
      movlw spbrg_value
      movwf SPBRG
      movlw b'10010000'
      movwf RCSTA
								;wait for computer
      rcall Receive         
      sublw 0xC1				;Expect C1h = 'K'
      bnz way_to_exit
      movlw IdTypePIC
      rcall SendW               ;send PIC type
MainLoop
      movlw 'K'
      rcall SendW               ;"-Everything OK, ready and waiting."
mainl
      clrf crc
      rcall Receive				;Upper
      movwf TBLPTRU
    movwf flag					;(for EEPROM and CFG cases)
      rcall Receive				;Hi
      movwf TBLPTRH
    movwf EEADR					;(for EEPROM case)
      rcall Receive				;Lo
      movwf TBLPTRL
    movwf EEDATA				;(for EEPROM case)

      rcall Receive				;count
      movwf i
      incf i
      lfsr FSR0, (buffer-1)
rcvoct							;read 64+1 bytes
    movwf TABLAT				;prepare for cfg; => store byte before crc
      rcall Receive
      movwf PREINC0
      decfsz i
      bra rcvoct
   
      tstfsz crc				;check crc
      bra ziieroare
    btfss flag,6				;is EEPROM data?
    bra noeeprom
    movlw b'00000100'			;Setup eeprom
    rcall Write
    bra waitwre
noeeprom
    btfss flag,7				;is CFG data?
    bra noconfig
    tblwt*						;write TABLAT(byte before crc) to TBLPTR***
    movlw b'11000100'			;Setup cfg
    rcall Write
    bra waitwre
noconfig
                     ;write
eraseloop
      movlw   b'10010100'		;Setup erase
      rcall Write
      TBLRD*-					;point to adr-1
   
writebigloop   
      movlw 8					;8groups
      movwf counter_hi
      lfsr FSR0,buffer
writesloop
      movlw 8					;8bytes = 4instr
      movwf counter_lo
writebyte
      movf POSTINC0,w			;put 1 byte
      movwf TABLAT
      tblwt+*
      decfsz counter_lo
      bra writebyte
   
      movlw   b'10000100'		;Setup writes
      rcall Write
      decfsz counter_hi
      bra writesloop
waitwre   
      ;btfsc EECON1,WR			;for eeprom writes (wait to finish write)
      ;bra waitwre				;no need: round trip time with PC bigger than 4ms
   
      bcf EECON1,WREN			;disable writes
      bra MainLoop
   
ziieroare						;CRC failed
      movlw 'N'
      rcall SendW
      bra mainl
     
;******** procedures ******************
SendW
    movwf sendb
     bsf PORTC,5				;RS485 transmit
      btfss PIR1,TXIF
      goto $-2
      movff sendb,TXREG
      nop
      btfss TXSTA,TRMT
      goto $-2
      bcf PORTC,5				;RS485 receive
      return

Write
      clrwdt
      movwf EECON1
      movlw 0x55
      movwf EECON2
      movlw 0xAA
      movwf EECON2
      bsf EECON1,WR				;WRITE
      nop
   ;nop
      return


Receive
    clrwdt
      movlw xtal/2000000+1		;for 20MHz => 11 => 1second delay
      movwf cnt1
rpt2                   
      clrf cnt2
rpt3
      clrf cnt3
rptc
    btfss PIR1,RCIF				;test RX
    bra notrcv
    movf RCREG,w				;return read data in W
    addwf crc,f					;compute crc
    return
notrcv
      decfsz cnt3
      bra rptc
      decfsz cnt2
      bra rpt3
      decfsz cnt1
      bra rpt2
      ;timeout:
way_to_exit
      bcf   RCSTA,   SPEN		;deactivate UART
    movlw b'11111111'
    movwf TRISC
      bra first_address
;*************************************************************
; After reset
; Do not expect the memory to be zero,
; Do not expect registers to be initialised like in catalog.
END


tiny bootloader v1.95 ile sorunsuz çalışmakta...
KİMSEYİ ENGELLEDİĞİM YOK, ÖZEL İLETİ DEVRE DIŞI !

Murat Mert

S.A.
Hocam rica etsek hexini koyarmısınız?
mert07

Erol YILMAZ

Tiny Bootloader  RS485 ile çalışıyor mu şimdi yani ? :)

RcALTIN

Alıntı yapılan: Allegro - 18 Eylül 2011, 15:38:27
Tiny Bootloader  RS485 ile çalışıyor mu şimdi yani ? :)

evet fakat yeni versiyon loader ile çalışmamıştı sanırım, orada hangi sürüm loader ile çalıştığını yazmışımdır. ama ben bunu projemde kullanmadım, çünkü loader için bir API si yoktu ve yeniden yazmam gerekiyordu, bunun yerine ds30loader diye birşey bulup onu kullanmıştım, desteklediği pic yelpazesi daha genişti ve c# için API'si vardı.  :)
KİMSEYİ ENGELLEDİĞİM YOK, ÖZEL İLETİ DEVRE DIŞI !

Erol YILMAZ

ds30 RS485 için nasıl kullanılıyor acaba?
pek bilgi göremedim bunla ilgili..

RcALTIN

#7
Alıntı yapılan: Allegro - 18 Eylül 2011, 15:52:17
ds30 RS485 için nasıl kullanılıyor acaba?
pek bilgi göremedim bunla ilgili..

hocam o kendinden destekli geliyor zaten 485 için, hatta CAN ile de kullanılabiliyor, sadece derlemeden önce pin belirtiyorduk. yanlış anlaşılma olmasın, rs485 desteğinden kastım sadece transceiver için veri beklerken bir pini low, veri gönderirken high konuma geçirmek...

bu arada ds30 projesi açık kaynak olmaktan çıkmış sanırsam, kaynak kodları kaldırılmış...

ek:
settings.inc içinde, UART settings kısmından
;#define 	USE_TXENABLE	1				;xxx uncomment to use a tx enable pin

başındaki ; kalkıyor alt kısımda da pin belirtiliyor
KİMSEYİ ENGELLEDİĞİM YOK, ÖZEL İLETİ DEVRE DIŞI !

ZiDGED

Merhaba,

RS485 üzerinden bir çok PIC kullanarak sıcaklık ölçümü yapacağım. Uzaktan firmware güncellemesi yapabilmek için bootloader kullanıldığını biliyorum fakat hiç kullanmadım.
Konuyu biraz anlatabilir misiniz bir de benim uygulamamda aynı anda bütün PICleri programlamak mümkün mü ya da RS485 hattından tek tek seçerek firmware güncellemek mümkün mü?

Teşekkürler.