Autor Tema: problema de comunicacion entre pics 18f448  (Leído 1288 veces)

0 Usuarios y 1 Visitante están viendo este tema.

afhernandez

  • Visitante
problema de comunicacion entre pics 18f448
« en: 20 de Junio de 2006, 23:28:38 »
A quien me pueda ayudar a conseguir el codigo de master y esclavo en comunicacion SPI, sin el uso del SS pin, entre los pic 18f458 en lenguaje assembler (para programar en MPLAB), aqui esta el codigo en donde lo pruebo en el esclavo con el PWM (modulo ccp) usando el valor para modificar el ciclo util :


El master:

Código: [Seleccionar]

LIST P=18F448
include <P18F448.INC>



__CONFIG    _CONFIG4L, _STVR_OFF_4L & _LVP_OFF_4L 
__CONFIG    _CONFIG2H, _WDT_OFF_2H & _WDTPS_128_2H
__CONFIG    _CONFIG2L, _BOR_OFF_2L
__CONFIG _CONFIG1H, _OSCS_OFF_1H & _HSPLL_OSC_1H



PWMVAL EQU 1
REG_TEMP_T1L EQU 1
REG_TEMP_T1H EQU 1

ORG 00H
goto Start ;Reset Vector address

ORG 08H
goto ISR_HIGH ;Higher priority ISR at 0x0008

ORG 18H
goto ISR_HIGH ;Lower priority ISR at 0x0018

;****************************************************************
Start
;****************************************************************
;Initialization of the Ports


clrf TRISC ;PORTC all output
clrf PORTC
clrf TRISD ;PORTC all output
clrf PORTD
clrf TRISB ;PORTB all output
clrf PORTB
clrf PORTA
clrf TRISA

MOVLW 0X0F
MOVWF BSR,0
MOVLW 0X00
MOVWF PWMVAL,0
MOVWF REG_TEMP_T1L,0
MOVWF REG_TEMP_T1H,0

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

;Initialize ADC registers

movlw 0X81 ;FOSC/4,CHANNEL 0, ADON
movwf ADCON0,1
movlw 0X40
movwf ADCON1,1 ;ALL CHANNELS AVAILABLE,VCC=VDD, GND=VSS
movlw 0xFF
movwf TRISA,1 ;

;******************************************************************
clrf T1CON,1
movlw 0X34
movwf T1CON,1 ;16 BITS, TIMER1 OFF, PRESCALER 1:8
bsf T1CON,TMR1ON,1

movlw 0x04
movwf T2CON,1 ;INICIALIZA TIMER 2 PARA PWM

movlw 0x0C
movwf CCP1CON,1 ;CCP1 and CCP2 configured to PWM
;movwf ECCP1CON

movlw 0xFF
movwf PR2,1

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

bsf PIE1,ADIE,1 ;AD Converter over Interrupt enable
bsf PIE1,TMR1IE,1 ;Timer 0 interrupt enable
bsf INTCON,PEIE,1 ;Port interrupts enable
bsf INTCON,GIE,1 ;Global interrupt enable


;CONFIGURACION DE COMUNICACION ENTRE MICROS POR MEDIO DEL MODO SPI (MASTER)

movlw 0XC0
movwf SSPSTAT ;MASTER MODE, INPUT DATA SAMPLED AT THE END OF DATA OUTPUT TIME

movlw 0X22
movwf SSPCON1 ;MASTER MODE, FOSC/32

bcf PORTC,5,1 ;SDO salida
bsf PORTC,4,1 ;SDI entrada
bcf PORTC,3,1 ;Master da el clock


bsf PORTB,4,1

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


MAIN_LOOP



bra MAIN_LOOP


ISR_HIGH

btfsc PIR1,ADIF,1
bra AD_CONV_COMPLETE
btfsc PIR1,TMR1IF,1
bra SAMPLING_TIME
RETFIE FAST

AD_CONV_COMPLETE ;ADC interrupt

movff ADRESH,CCPR1L

bsf PORTB,4,1 ;Visualizacion de actividad

NO_TERMINA

btfss SSPSTAT,BF,1 ;data has been received (transmit completed)?
bra NO_TERMINA

bcf PORTB,4,1 ;Visualizacion de actividad

movf SSPBUF,W,1
movwf PWMVAL,0 ;se almacena datos de recepcion

movf ADRESH,W,1
movwf SSPBUF,1 ;se transmite datos de AD por SPI

bcf PIR1,ADIF,1
RETFIE FAST

SAMPLING_TIME

bcf PIR1,TMR1IF,1
movff REG_TEMP_T1L,TMR1L
movff REG_TEMP_T1H,TMR1H
call SET_ADC_GO

RETFIE FAST

SET_ADC_GO

btfss ADCON0,GO,1
bsf ADCON0,GO,1 ;Set GO bit for ADC conversion start
return

END



El esclavo


Código: [Seleccionar]

LIST P=18F448
include <P18F448.INC>



__CONFIG    _CONFIG4L, _STVR_OFF_4L & _LVP_OFF_4L 
__CONFIG    _CONFIG2H, _WDT_OFF_2H & _WDTPS_128_2H
__CONFIG    _CONFIG2L, _BOR_OFF_2L
__CONFIG _CONFIG1H, _OSCS_OFF_1H & _HSPLL_OSC_1H



PWMVAL EQU 1
REG_TEMP_T1L EQU 1
REG_TEMP_T1H EQU 1

ORG 00H
goto Start ;Reset Vector address

ORG 08H
goto ISR_HIGH ;Higher priority ISR at 0x0008

ORG 18H
goto ISR_HIGH ;Lower priority ISR at 0x0018

;****************************************************************
Start
;****************************************************************
;Initialization of the Ports


clrf TRISC ;PORTC all output
clrf PORTC
clrf TRISD ;PORTC all output
clrf PORTD
clrf TRISB ;PORTB all output
clrf PORTB
clrf PORTA
clrf TRISA

MOVLW 0X0F
MOVWF BSR,0
MOVLW 0X00
MOVWF PWMVAL,0
MOVWF REG_TEMP_T1L,0
MOVWF REG_TEMP_T1H,0

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

;Initialize ADC registers

movlw 0X81 ;FOSC/4,CHANNEL 0, ADON
movwf ADCON0,1
movlw 0X40
movwf ADCON1,1 ;ALL CHANNELS AVAILABLE,VCC=VDD, GND=VSS
movlw 0xFF
movwf TRISA,1 ;

;******************************************************************
clrf T1CON,1
movlw 0X34
movwf T1CON,1 ;16 BITS, TIMER1 OFF, PRESCALER 1:8
bsf T1CON,TMR1ON,1

movlw 0x04
movwf T2CON,1 ;INICIALIZA TIMER 2 PARA PWM

movlw 0x0C
movwf CCP1CON,1 ;CCP1 and CCP2 configured to PWM
;movwf ECCP1CON

movlw 0xFF
movwf PR2,1

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

;bsf PIE1,ADIE,1 ;AD Converter over Interrupt enable
bsf PIE1,TMR1IE,1 ;Timer 1 interrupt enable
bsf INTCON,PEIE,1 ;Port interrupts enable
bsf INTCON,GIE,1 ;Global interrupt enable


;CONFIGURACION DE COMUNICACION ENTRE MICROS POR MEDIO DEL MODO SPI (esclavo)

movlw 0X40
movwf SSPSTAT ;SLAVE MODE, INPUT DATA SAMPLED AT THE END OF DATA OUTPUT TIME

movlw 0X25
movwf SSPCON1 ;SLAVE MODE, SS PIN DISABLED

bcf PORTC,5,1 ;SDO salida
bsf PORTC,4,1 ;SDI entrada
bsf PORTC,3,1 ;Master da el clock

movf SSPBUF,W,1
clrf W,1
movwf SSPBUF,1

bsf PORTB,7,1

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


MAIN_LOOP



bra MAIN_LOOP


ISR_HIGH

btfsc PIR1,TMR1IF,1
bra SAMPLING_TIME
RETFIE FAST


SAMPLING_TIME

bcf PIR1,TMR1IF,1
movff REG_TEMP_T1L,TMR1L
movff REG_TEMP_T1H,TMR1H


bsf PORTB,7,1 ;Visualizacion de actividad

NO_TERMINA

btfss SSPSTAT,BF,1 ;data has been received (transmit completed)?
bra NO_TERMINA

btfss SSPCON1,6,1 ;OVERFLOW?
bra NO_OVF
bcf SSPCON1,6,1
bsf PORTB,6,1 ;avisa overflow
bra NO_TERMINA

NO_OVF

bcf PORTB,6,1 ;quita aviso overflow
bcf PORTB,7,1 ;Visualizacion de actividad

movf SSPBUF,W,1
movwf PWMVAL,0 ;se almacena datos de recepcion

movff PWMVAL,CCPR1L ;PWM del primer modulo CCP

movf PWMVAL,W,1
movwf SSPBUF,1 ;se transmite datos de RECEPCION por SPI

RETFIE FAST


END


La pregunta es en que estoy fallando porque ni el reloj se puede ver en el osciloscopio......  ya que el master esta en fosc/64???


Gracias por la posible colaboracion



Atte:


Andres Hernandez




« Última modificación: 21 de Junio de 2006, 00:59:41 por afhernandez »