ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
26 ноября
58907
Олег_К (18.05.2006 00:14, просмотров: 2601)
Помогите разобраться с CAN для пика? Я купил PIC18F2580 и MCP2551 к нему. Вторым устройством пока будет переходник с USB на CAN (он был мной куплен, чтобы отлаживать программу для пика - проще когда есть заведомо рабочее устройство). Со стороны переходника usbcan - там внутри стоит драйвер can на микросхеме philips-SJA1000 с кварцем 24mhz. Для компа есть программа - монитор сети, которая принимает пакеты и может что-нибудь посылать. Для пика я пока использую генератор 11,0592 (просто уже был дома, а в чип-и-дипе не было генераторов). Набросал следующую программу для пика (пишу на ассемблере):
        include P18F2580.INC

        ORG                                             0
        goto                                    init
        ORG                                             8

;::::::::::::    I N T E R R U P T     :::::::::::::::::::::::
        nop


init:
;::::::::::::    I N I T    ::::::::::::::::::::::::::::::::::  
        clrf                                    PORTB
        clrf                                    LATB
        movlw                                   b'11111000'
        movwf                                   TRISB

        bcf                                             WDTCON, 0

;;;     CAN SPEED (11.0592MHz Fosc)
;       movlw                                   b'00000111'
        movlw                                   b'00011100'
        movwf                                   BRGCON1
;       movlw                                   b'11111010'
        movlw                                   b'11110001'
        movwf                                   BRGCON2
;       movlw                                   b'00000110'
        movlw                                   b'00000101'
        movwf                                   BRGCON3
        movlw                                   b'00110000'
        movwf                                   CIOCON

; SET CAN ID's
        movlw                                   0x1F
        movwf                                   TXB0EIDH
        movlw                                   0xFF
        movwf                                   TXB0EIDL
        movlw                                   0x1F
        movwf                                   TXB0SIDH
        movlw                                   0xFF
        movwf                                   TXB0SIDL

; START CAN
        movlw                                   b'00000000'
        movwf                                   CANCON


; SEND 3 bytes to CAN
        bcf                                             TXB0CON, TXREQ  ; clear 
buffer
        movlw                                   0x03
        movwf                                   TXB0DLC         ; len
        movlw                                   0x01
        movwf                                   TXB0D0          ; 1 byte
        movlw                                   0x02
        movwf                                   TXB0D1          ; 2 byte
        movlw                                   0x03
        movwf                                   TXB0D2          ; 3 byte
        movlw                                   0x1F
        movwf                                   TXB0SIDH        ; ID high
        movlw                                   0xFF
        movwf                                   TXB0SIDL        ; ID low
        bsf                                             TXB0CON, TXREQ  ; ready to 
send


; INFINITE LOOP
st_main:

        bsf                                             LATB, 1

        btfss                                   TXB0CON, TXREQ
        bcf                                             LATB, 0
        bsf                                             LATB, 0
        
        goto                                    st_main

;::::::::::::    E N D     :::::::::::::::::::::::::::::::::::
        END
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Whatchdogtimer отключаю, запускаю пик - порты 0 и 1 стоят в единице и usbcan ничего не ловит, хотя вроде пик должен передать 3 байта. Для can расчитывал так: Fosc(Fclock) = 11,0592 Tscl = 1,446759259*1000000 Propagation time = 3*Tscl Phase seg1 = 8*Tscl Phase seg2 = 7*Tscl SJW = 1*Tscl Скорость = 36,37894737 Kbit/s Скорости в пике и в usbcan различаются менее чем 0,05% Сам usbcan заведемо рабочий - т.к. когда покапал - при мне запустили. Может надо как-то инициализировать кан модуль или я еще что-то забыл в програме указать для запуска кан и передачи пакета? Или может подскажете - в какую сторону смотреть?