TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: nahueldiaz1992 en 16 de Enero de 2014, 12:03:02
-
Hola gente queria saber si se puede tener ambos modulos funcionando a la par ya que necesito crear una comunicacion entre dos pics y con uno de los dos comunicar a la pc lo que ocurre desde alguno de los dos pics , mi preocupacion es que comparten lineas de datos ... hay alguna manera de hacer que funcione ?
-
claro que pueden funcionar ambos al mismo tiempo, que modelo estas usando? en caso de que compartan pines, siempre podrias usar rs232 o spi por software para tener ambos al mismo tiempo
-
ESTOY UTILIZANDO UN PIC 16F88
Y ALGO ASI ESTOY PENSANDO EN HACER:
(http://imagizer.imageshack.us/v2/800x600q90/703/zrj1.jpg)
-
La parte de utilizar el rs232 es si o si ya que tengo que comunicarme con la pc , sino los niveles de tension para la comunicacion entre el pic y la pc no daria , .. pero como decis que se puede hacer ?
-
La parte de utilizar el rs232 es si o si ya que tengo que comunicarme con la pc , sino los niveles de tension para la comunicacion entre el pic y la pc no daria , .. pero como decis que se puede hacer ?
en que estas programando?
tal vez podrías usar rs232 e I2c esos no comparten pines
-
mmmm ... estoy programando en assembler .. igual me genera conflicto ya que estoy trabajando con un modulo inalambrico que esta preparado para usarse con spi ... es un nrlf24l01 si no me equivoco
-
si, por lo que veo tu módulo solo trabaja con spi, podrias realizar la comunicacion por spi o por rs232 por software, aunque no se que tan conveniente sea que hagas eso o mejor cambies el modelo de tu pic :?.
-
Si capas que es mas facil cambiando el pic .. muchas gracias por la ayuda ! igualmente .. algun ejemplo que tengas por ahi de comunicacion forzada por soft ? si no es mucha molesti .. solo para ver .. ya que habia escuchado pero nunca vi un ejemplo o como se deberia de hacer ..
Gracias !
-
no he realizado la comunicación por soft usando ensamblador, (la ventaje que el ccs lo hace solo), sin embargo para realizarla tienes que verificar los tiempos de los pulsos necesarios y crear una libreria que interprete cada dato y genere los pulsos con el tiempo necesario para que la pc pueda entenderlos.
La desventaja que se tiene al realizar la comunicacion por soft es que no tienes una interrupcion asociada a la recepción de datos, tendrias que estar verificando continuamente si se recibe algún dato.
Busca dentro del foro, tal vez alguién haya realizado el código y te ayudaría bastante
-
La desventaja que se tiene al realizar la comunicacion por soft es que no tienes una interrupcion asociada a la recepción de datos, tendrias que estar verificando continuamente si se recibe algún dato.
Busca dentro del foro, tal vez alguién haya realizado el código y te ayudaría bastante
Se podría utilizar un pin de interrupción externa y detectar el cambio de 1 a 0 y eso indicaría que la pc quiere enviar datos al PIC. Una vez detectado ese cambio se procede a ejecutar la función de lectura de UART por soft.
Definitivamente, hacer las rutinas de UART y/o I2C y/o SPI por soft es mucho más fácil en C. :D
-
Se podría utilizar un pin de interrupción externa y detectar el cambio de 1 a 0 y eso indicaría que la pc quiere enviar datos al PIC. Una vez detectado ese cambio se procede a ejecutar la función de lectura de UART por soft.
Definitivamente, hacer las rutinas de UART y/o I2C y/o SPI por soft es mucho más fácil en C. :D
Muy buen punto!, no pensé en eso, esa sería una buena solución. ((:-))
Creo que falta que nahueldiaz valore que es mas factible, yo voto por cambiar de modelo de pic :mrgreen:
-
Se podría utilizar un pin de interrupción externa y detectar el cambio de 1 a 0 y eso indicaría que la pc quiere enviar datos al PIC. Una vez detectado ese cambio se procede a ejecutar la función de lectura de UART por soft.
Eso daria problemas porque estarias perdiendo el bit de start, eso si llegaras a utilizar alguna de las rutinas por software empleadas por el ccs, pero si se haces la rutina por asembler seria muy factible.
Saludos
-
Se podría utilizar un pin de interrupción externa y detectar el cambio de 1 a 0 y eso indicaría que la pc quiere enviar datos al PIC. Una vez detectado ese cambio se procede a ejecutar la función de lectura de UART por soft.
Eso daria problemas porque estarias perdiendo el bit de start, eso si llegaras a utilizar alguna de las rutinas por software empleadas por el ccs, pero si se haces la rutina por asembler seria muy factible.
Saludos
Supongo que dependerá un poco de la velocidad de transmisión. Digo, si se recibe a 9600 y dentro de la propia rutina de interrupción se hace la lectura de la UART (y el pic está trabajando a, supongamos 20MHz) no se demoraría tanto en llegar el punto de lectura.
-
Muchas gracias a todos por las ideas ! de hecho por el momento estoy viendo de cambiar de pic a alguno en el que pueda utilizar los dos modulos sin inconvenientes , tambien seria la primera vez que me salgo del 16f88 asi que estoy viendo como puedo encontrar otro pic .. si resultara de no poder hacerse cambiando el pic veria de hacerlo por soft .. mm otra cosa me han comentado de que en ccc se pueden crear sentencias en asm , para no perder lo que hice se podria agregar a el programa en c ? y de paso les mando algo mas detallado de lo que estoy haciendo si les interesa ..
-
La idea que tenia era de hacer " mover " este interruptor=
con el esclavo y su modulo registro si las luces de los estados del interruptor se encienden u apagan y a su vez mando pulsos high o low para las botoneras o el arranque del cargador de disparos
Placa del esclavo con su microcontrolador , los cables del spi irian directamente al modulo nrlf24l01
(https://imagizer.imageshack.us/v2/562x542q90/30/dnp7.jpg)
Modulo de recepcion de datoy y disparos
(https://imagizer.imageshack.us/v2/802x542q90/841/e2q7.jpg)
Para recibir el estado de las luces uso los modulos comparadores ... ya que cuando las luces encienden u apagan generan dos estados de tension distintos . La tension recibida por las luces estaria en donde dice 220 v en la imagen de arriba del lado izquierdo y su salida , la que leo con el comparador es la denominada "señal"
Programa para U2:
;******************************************************************************
; This file is a basic code template for code generation *
; on the PIC16F88. This file contains the basic code building *
; blocks to build upon. *
; *
; Refer to the MPASM User's Guide for additional information on *
; features of the assembler. *
; *
; Refer to the respective data sheet for additional *
; information on the instruction set. *
; *
;******************************************************************************
; *
; Filename: xxx.asm *
; Date: *
; File Version: *
; *
; Author: *
; Company: *
; *
;******************************************************************************
; *
; Files Required: P16F88.INC *
; *
;******************************************************************************
; *
; Features of the 16F88: *
; *
; 1 10-bit PWM *
; 8 MHz Internal Oscillator *
; ICD support *
; 256 bytes of EEPROM data memory *
; Capture/Compare Module *
; *
;******************************************************************************
; *
; Notes: *
; *
; *
;******************************************************************************
; *
; Revision History: 15/1/14 *
; *
;******************************************************************************
;------------------------------------------------------------------------------
; PROCESSOR DECLARATION
;------------------------------------------------------------------------------
LIST p=16F88 ; list directive to define processor
#INCLUDE <P16F88.INC> ; processor specific variable definitions
;------------------------------------------------------------------------------
;
; CONFIGURATION WORD SETUP
;
; The 'CONFIG' directive is used to embed the configuration word within the
; .asm file. The lables following the directive are located in the respective
; .inc file. See the data sheet for additional information on configuration
; word settings.
;
;------------------------------------------------------------------------------
__CONFIG _CONFIG1, _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF &_CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_OFF & _PWRTE_OFF & _WDT_OFF& _XT_OSC & _FOSC_XT
__CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF
;------------------------------------------------------------------------------
;
; VARIABLE DEFINITIONS
;
; Available Data Memory divided into Bank 0 through Bank 3. Each Bank contains
; Special Function Registers and General Purpose Registers at the locations
; below:
;
; SFR GPR SHARED GPR's
; Bank 0 0x00-0x1F 0x20-0x6F 0x70-0x7F
; Bank 1 0x80-0x9F 0xA0-0xEF 0xF0-0xFF
; Bank 2 0x100-0x10F 0x110-0x16F 0x170-0x17F
; Bank 3 0x180-0x18F 0x190-0x1EF 0x1F0-0x1FF
;
;------------------------------------------------------------------------------
CBLOCK 0x20 ; Sample GPR variable registers allocated contiguously
MYVAR1 ; User variable
MYVAR2 ; User variable
MYVAR3 ; User variable
DY1
DY2
DY3
ENDC
W_TEMP EQU 0x7D ; w register for context saving (ACCESS)
STATUS_TEMP EQU 0x7E ; status used for context saving (ACCESS)
PCLATH_TEMP EQU 0x7F ; variable used for context saving
;------------------------------------------------------------------------------
; EEPROM INITIALIZATION
;
; The 16F88 has 256 bytes of non-volatile EEPROM, starting at address 0x2100
;
;------------------------------------------------------------------------------
DATAEE ORG 0x2100
DE "MCHP" ; Place 'M' 'C' 'H' 'P' at address 0,1,2,3
;------------------------------------------------------------------------------
; RESET VECTOR
;------------------------------------------------------------------------------
RESET ORG 0x0000 ; processor reset vector
PAGESEL START
GOTO START ; go to beginning of program
;------------------------------------------------------------------------------
; INTERRUPT SERVICE ROUTINE
;------------------------------------------------------------------------------
ISR ORG 0x0004 ; interrupt vector location
; Context saving for ISR
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
MOVF PCLATH,W ; move pclath register into W register
MOVWF PCLATH_TEMP ; save off contents of PCLATH register
;------------------------------------------------------------------------------
BANKSEL CMCON
BTFSS CMCON,C2OUT
GOTO UNO
BSF SSPBUF,7
RET1
BTFSS CMCON,C1OUT
GOTO DOS
BSF SSPBUF,0
RET2
BANKSEL PIR2
BCF PIR2,CMIF
BANKSEL PIR1
BCF PIR1,3
;------------------------------------------------------------------------------
; Restore context before returning from interrupt
MOVF PCLATH_TEMP,W ; retrieve copy of PCLATH register
MOVWF PCLATH ; restore pre-isr PCLATH register contents
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
;------------------------------------------------------------------------------
; MAIN PROGRAM
;------------------------------------------------------------------------------
START
;INICIALIZACION DE PUERTOS
BANKSEL TRISA
MOVLW 0X01
MOVWF TRISA
MOVLW 0XF2
;CONFIGURACION ADICIONAL
BANKSEL ADCON0
MOVLW 0XC0
MOVWF ADCON0
;INICIALIZACION DE COMPARADOR ANALOGO
BANKSEL CMCON
MOVLW 0XB2
MOVWF CMCON
BCF CMCON,7
BANKSEL CVRCON
MOVLW 0X8F
MOVWF CVRCON
;INICIALIZACION DE MODULO SPI
BANKSEL SSPSTAT
MOVLW 0X40
MOVWF SSPSTAT
BANKSEL SSPCON
MOVLW 0X34
MOVWF SSPCON
;INTERRUPCIONES
BANKSEL INTCON
BSF INTCON,GIE
BSF INTCON,PEIE
BANKSEL OPTION_REG
BSF OPTION_REG,INTEDG
BANKSEL PIE2
BSF PIE2,CMIE
;PROGRAMA PRINNCIPAL
BUSQUEDA
BANKSEL SSPSTAT
BTFSS SSPSTAT,BF
GOTO BUSQUEDA
RECIBED
BANKSEL SSPBUF
MOVF SSPBUF,W
MOVWF MYVAR2
BANKSEL PORTA
BTFSS MYVAR2,3
GOTO TRES
BSF PORTA,4
RET3 BTFSS MYVAR2,4
GOTO CUATRO
BSF PORTB,0
RET4
BTFSS MYVAR2,5
GOTO CINCO
BSF PORTB,3
RET5 NOP
CALL DELAY
CALL DELAY
CALL DELAY
SEND
CLRF SSPBUF
BANKSEL PORTB
BTFSS PORTB,6
GOTO SEIS
BSF SSPBUF,1
RET6 BTFSS PORTB,7
GOTO SIETE
BSF SSPBUF,2
RET7 GOTO BUSQUEDA
;SUBRUTINAS
UNO
BANKSEL SSPBUF
BCF SSPBUF,7
GOTO RET1
DOS
BANKSEL SSPBUF
BCF SSPBUF,0
GOTO RET2
TRES
BCF PORTA,4
GOTO RET3
CUATRO
BCF PORTB,0
GOTO RET4
CINCO
BCF PORTB,3
GOTO RET5
SEIS
BANKSEL SSPBUF
BCF SSPBUF,1
GOTO RET6
SIETE
BANKSEL SSPBUF
BCF SSPBUF,2
GOTO RET7
DELAY CLRF DY1
CLRF DY2
clrf DY3
ITER DECFSZ DY1
GOTO ITER
DECFSZ DY2
GOTO ITER
DECFSZ DY3
GOTO ITER
RETURN
GOTO $
END
;EN ESTE PROGRAMA SE REALIZA LA COMUNICACION SPI Y ADEMAS verificar el estado de
;un comparador y dos puertos para definir el estado de las luces ,
; la comunicacion se realiza a 250 khz cada 4 microseg
Programa para U3:
;******************************************************************************
; This file is a basic code template for code generation *
; on the PIC16F88. This file contains the basic code building *
; blocks to build upon. *
; *
; Refer to the MPASM User's Guide for additional information on *
; features of the assembler. *
; *
; Refer to the respective data sheet for additional *
; information on the instruction set. *
; *
;******************************************************************************
; *
; Filename: xxx.asm *
; Date: *
; File Version: *
; *
; Author: *
; Company: *
; *
;******************************************************************************
; *
; Files Required: P16F88.INC *
; *
;******************************************************************************
; *
; Features of the 16F88: *
; *
; 1 10-bit PWM *
; 8 MHz Internal Oscillator *
; ICD support *
; 256 bytes of EEPROM data memory *
; Capture/Compare Module *
; *
;******************************************************************************
; *
; Notes: *
; *
; *
;******************************************************************************
; *
; Revision History: *
; *
;******************************************************************************
;------------------------------------------------------------------------------
; PROCESSOR DECLARATION
;------------------------------------------------------------------------------
LIST p=16F88 ; list directive to define processor
#INCLUDE <P16F88.INC> ; processor specific variable definitions
;------------------------------------------------------------------------------
;
; CONFIGURATION WORD SETUP
;
; The 'CONFIG' directive is used to embed the configuration word within the
; .asm file. The lables following the directive are located in the respective
; .inc file. See the data sheet for additional information on configuration
; word settings.
;
;------------------------------------------------------------------------------
__CONFIG _CONFIG1, _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_ON & _PWRTE_ON & _WDT_OFF & _INTRC_IO
__CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF
;------------------------------------------------------------------------------
;
; VARIABLE DEFINITIONS
;
; Available Data Memory divided into Bank 0 through Bank 3. Each Bank contains
; Special Function Registers and General Purpose Registers at the locations
; below:
;
; SFR GPR SHARED GPR's
; Bank 0 0x00-0x1F 0x20-0x6F 0x70-0x7F
; Bank 1 0x80-0x9F 0xA0-0xEF 0xF0-0xFF
; Bank 2 0x100-0x10F 0x110-0x16F 0x170-0x17F
; Bank 3 0x180-0x18F 0x190-0x1EF 0x1F0-0x1FF
;
;------------------------------------------------------------------------------
CBLOCK 0x20 ; Sample GPR variable registers allocated contiguously
MYVAR1 ; User variable
MYVAR2 ; User variable
MYVAR3 ; User variable
ENDC
W_TEMP EQU 0x7D ; w register for context saving (ACCESS)
STATUS_TEMP EQU 0x7E ; status used for context saving (ACCESS)
PCLATH_TEMP EQU 0x7F ; variable used for context saving
;------------------------------------------------------------------------------
; EEPROM INITIALIZATION
;
; The 16F88 has 256 bytes of non-volatile EEPROM, starting at address 0x2100
;
;------------------------------------------------------------------------------
DATAEE ORG 0x2100
DE "MCHP" ; Place 'M' 'C' 'H' 'P' at address 0,1,2,3
;------------------------------------------------------------------------------
; RESET VECTOR
;------------------------------------------------------------------------------
RESET ORG 0x0000 ; processor reset vector
PAGESEL START
GOTO START ; go to beginning of program
;------------------------------------------------------------------------------
; INTERRUPT SERVICE ROUTINE
;------------------------------------------------------------------------------
ISR ORG 0x0004 ; interrupt vector location
; Context saving for ISR
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
MOVF PCLATH,W ; move pclath register into W register
MOVWF PCLATH_TEMP ; save off contents of PCLATH register
;------------------------------------------------------------------------------
BANKSEL CMCON
BTFSS CMCON,C2OUT
GOTO UNO
BSF PORTB,3
RET1
BTFSS CMCON,C1OUT
GOTO DOS
BSF PORTB,4
RET2
BANKSEL PIR2
BCF PIR2,CMIF
BANKSEL PIR1
BCF PIR1,3
;------------------------------------------------------------------------------
; Restore context before returning from interrupt
MOVF PCLATH_TEMP,W ; retrieve copy of PCLATH register
MOVWF PCLATH ; restore pre-isr PCLATH register contents
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
;------------------------------------------------------------------------------
; MAIN PROGRAM
;------------------------------------------------------------------------------
START
;INICIALIZACION DE PUERTOS
;CONFIGURACION ADICIONAL
BANKSEL ADCON0
MOVLW 0XC0
MOVWF ADCON0
;INICIALIZACION DE COMPARADOR ANALOGO
BANKSEL CMCON
MOVLW 0XB2
MOVWF CMCON
BCF CMCON,7
BANKSEL CVRCON
MOVLW 0X8F
MOVWF CVRCON
;INTERRUPCIONES
BANKSEL INTCON
BSF INTCON,GIE
BSF INTCON,PEIE
BANKSEL OPTION_REG
BSF OPTION_REG,INTEDG
BANKSEL PIE2
BSF PIE2,CMIE
;SUBRUTINAS
UNO
BANKSEL PORTA
BCF PORTB,3
GOTO RET1
DOS
BANKSEL SSPBUF
BCF PORTB,4
GOTO RET2
;------------------------------------------------------------------------------
; PLACE USER PROGRAM HERE
;------------------------------------------------------------------------------
GOTO $
END
Circuito que iria a la pc :
(https://imagizer.imageshack.us/v2/519x542q90/14/wdvy.jpg)
Por ahora esta completamente analogo .. pero necesitaria hacer que comunique con la pc asi que estoy buscando un pic en el que los modulos SPI y AUSART no interfieran entre si .
-
gracias por compartir tu proyecto ((:-))
creo que podrías migrar a un 16f88x sin problemas ;-)