Autor Tema: Problema en comunicacion PIC 18f452 con Matlab mediante Usart rs232  (Leído 3620 veces)

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

Desconectado babadito

  • PIC10
  • *
  • Mensajes: 11
Hola que tal, les cuento que estoy haciendo un proyecto y ya hacen 2 semanas que vengo trabado en la parte de la comunicación Usart del Pic 18f452 con Matlab mediante usart. Para la comunicación utilizo un MAX 232 y un cable Adaptador Usb A Serie Rs-232. Aquí les pongo el código que tengo hasta ahora y la simulación en Proteus (ah para simular los puertos uso el Virtual Serial Port Driver). Lo que sucede es que por ejemplo envio '10101010' y recibo 240-240...-240 en Matlab, y si pongo '10010011' tambien recibo el mismo numero o no recibo nada, en fin, anda mal. La rutina que utilizo en Matlab para recibir los datos también se las adjunto.

En Matlab:

s=serial('COM2')
open(s)
read(s)
Y ES AQUÍ DONDE ME DEVUELVE 240-240-240 .. o si pongo read(s,'int8') me devuelve -16,-16,-16...

Aquí está el programa en assembler:

Código: [Seleccionar]

list p=18F452
#include <p18f452.inc>
 
;Code Protection Deshabilitado
CONFIG     CP0=OFF
 
;Oscillator switch deshabilitado.  Oscilador tipo HS. PLL desactivado
CONFIG     OSCS=OFF, OSC=HS
 
;Brown-OutReset enabled, Voltage de Brown Out es 2.5V
CONFIG     BOR=OFF, BORV=25
 
;Watch Dog Timer Habilitado, Watch Dog Timer PostScaler 1:128
CONFIG     WDT=OFF, WDTPS=128
 
;Low Voltage Programming Deshabilitado
CONFIG     LVP=OFF
 
;CCP2 pin Mux enabled
CONFIG     CCP2MUX=ON
 
;Stack over/underflow Reset Habilitado.
CONFIG     STVR=ON


  ;*******************REGISTROS UTILIZADOS PARA EL RETARDO***********************************************************

PDel0 equ 0x0C ; Seleccionamos posicion en la memoria RAM (GPR) para guardar
; registro utilizado para demora.-
PDel1 equ 0x0D ; Registro utilizado en demora.-     
PDel2   equ 0x0E

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



TEMPVAR equ 0x00 ;En Banco 0.
 
 
org 0x0000
 

_BOOT:

goto _INICIO
 
 
 
org 0x00A0
 

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ AQUÍ COMIENZA EL PROGRAMA PRINCIPAL++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

_INICIO:               


movlw b'10111111' ;TRISC<6> como salida de USART (en los 18F es así)
;y TRISC<7> en 1, para ser configurados como pines USART
movwf TRISC

;defino I/O del puerto B

    movlw   b'00000000'   ; todos los pines del Puerto B como salidas
    movwf   TRISB
   


 
;---------------------------------------------------------------------------------
; Configuración USART Transmisor
;---------------------------------------------------------------------------------
movlw .64      ;clock 10000, 9600 bps y brgh high - pll apagado
   
    movwf SPBRG

movlw   b'00100100'    ;brgh=high, es el bit 2 , TXEN=on , SYNC = 0
movwf TXSTA
     
movlw b'10000010'     ;Habilita la USART en modo USART
movwf RCSTA

movlw b'00000010'     ;Habilita el pin RC6=Tx t RC7=Rx
        movlw   TRISC

ciclo:
 
bsf     PORTB,RB4 ;pongo RB4 en uno, prendo el led

        bcf     PORTB,RB2
   
call DEMORA        ;aplico un retardo

bcf  PORTB,RB4  ;pongo RB4 en cero, apago el led



 ;-----------------Transmite una palabra al buffer de la USART-----------
 
 movlw b'10101010'
 movwf TXREG
 call DEMORA ; es un retardo de 1 segundo aproximadamente

goto ciclo ;VUELVO A CICLO (CICLO INFINITO)


;---------------------------------------------------------------------------------
;             Configuración USART Receptor   (ESTE ESTÁ FUERA DEL CICLO PORQUE TODAVIA NO LO USO, QUERIA PRIMERO PROBAR EL ENVIO DE DATOS DEL PIC A MATLAB Y ;RECIEN DESPUES LA RECEPCIÓN)
;---------------------------------------------------------------------------------
 
; movlw b'00000000'
; movwf RCSTA
; bsf RCSTA,SPEN ;SPEN = 1 habilita el puerto serie, con recepcion continua
;
; call _USARTCLEAR
; bsf RCSTA,CREN ;Habilita Usart.  Recepción Continua
;
;
;_USARTLOOP:
; btfss PIR1,RCIF ;Espera próximo caracter
; goto _USARTLOOP
;
; btfsc RCREG,OERR
; call _USARTCLEAR ;Error de Sobreescritura
; btfsc RCREG,FERR
; call _USARTCLEAR ;Error de Trama
;
; movff RCREG,TEMPVAR
; btfsc PIR1,TXIF ;Con esto garantizo que si el buffer está ocupado
; ;no será sobreescrito.  Se recibe el caracter pero no se responde.
; movwf TXREG
; goto _USARTLOOP
;
;
;_USARTCLEAR
; bcf RCSTA,CREN
; movf RCREG,w
; movf RCREG,w
; movf RCREG,w ;Vacío buffers de usart
; bsf RCSTA,CREN
; return
;
 

;***********************Retardo*******************

DEMORA  movlw     .14       ; 1 set numero de repeticion  (C)
        movwf     PDel0     ; 1 |
PLoop0  movlw     .72       ; 1 set numero de repeticion  (B)
        movwf     PDel1     ; 1 |
PLoop1  movlw     .247      ; 1 set numero de repeticion  (A)
        movwf     PDel2     ; 1 |
PLoop2  clrwdt              ; 1 clear watchdog
        decfsz    PDel2, 1  ; 1 + (1) es el tiempo 0  ? (A)
        goto      PLoop2    ; 2 no, loop
        decfsz    PDel1,  1 ; 1 + (1) es el tiempo 0  ? (B)
        goto      PLoop1    ; 2 no, loop
        decfsz    PDel0,  1 ; 1 + (1) es el tiempo 0  ? (C)
        goto      PLoop0    ; 2 no, loop
PDelL1  goto PDelL2         ; 2 ciclos delay
PDelL2  clrwdt              ; 1 ciclo delay
        return              ; 2+2 Fin.
;----------------------------------------   
   

end



Aquí está el diseño en Proteus:



Espero puedan ayudarme, muchisimas gracias!!





Desconectado babadito

  • PIC10
  • *
  • Mensajes: 11
Re: Problema en comunicacion PIC 18f452 con Matlab mediante Usart rs232
« Respuesta #1 en: 21 de Junio de 2010, 13:20:00 »
Me olvidé de Aclarar que se trabaja con un CLOCK de 10Mhz y no de 10000 como puse en una parte del comentario del código, el resto es todo correcto, opsea el código que puse es el que tengo.

Desconectado alexis78

  • PIC10
  • *
  • Mensajes: 3
Re: Problema en comunicacion PIC 18f452 con Matlab mediante Usart rs232
« Respuesta #2 en: 18 de Septiembre de 2010, 20:19:59 »
Disculpa, usas capacitores de 100nF en el max232? revisa la hoja de datos. Saludos


 

anything