Autor Tema: Duda respecto a comunicación serial pic - pc mediante teclado matricial.  (Leído 183 veces)

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

Desconectado Skelton

  • PIC10
  • *
  • Mensajes: 12
Buenas tardes a todos los presentes en el foro, estoy realizando un montaje el cual debe capturar la temperatura ambiente mediante un sensor, y que cuando este capture 30 grados envié un mensaje de alerta, y este mensaje este guardado en la eeprom (Ya esto lo realize con éxito).

Ahora bien, la cuestión es que mediante un teclado matricial cuando yo le de a una tecla por ejemplo 'A', envié ese mensaje 'alerta' por comunicación serial a un dispositivo, en este caso un pc. Adjunto con lo que tengo hecho en código hasta el momento

Código: [Seleccionar]
Device = 16F877A        'DECLARAMOS EL PIC A USAR
XTAL = 4                 'CRYSTAL DE 4Mhz
 

Declare LCD_TYPE 0           'DECLARAMOS LOS PUERTOS DE SALIDA Y DE PROGRAMACIÓN.
Declare LCD_DTPIN PORTD.4
Declare LCD_RSPIN PORTD.2
Declare LCD_ENPIN PORTD.3
Declare LCD_LINES 2


TRISD=0                     'PUERTO D COMO SALIDA.
TRISA.0=1                    'PUERTO A.0 COMO ENTRADA ANALOGICA.
ADCON1=%100000                   
Dim adc As Float
Dim resultado As Float
Dim teclado As Byte
   
     Print At 1,1, "   SENSOR DE    "        'FRASES AL COMENSAR LA PROGRAMACION.
     Print At 2,1, "TEMPERATURA LM35"
     DelayMS 3000

     Print At 1,1, " PROGRAMADO CON "
     Print At 2,1, "  PIC 16F877A   "
     DelayMS 3000
   
inicio:
    adc = ADIn 0
    resultado = adc * 500/65472              'AQUÍ APARECE LA TEMPERATURA.
    If resultado < 30 Then
        Print At 1,1, "  TEMPERATURA   "       'EN LA PRIMERA FILA LA PALABRA TEMPERATURA.
        Print At 2,1, "ACTUAL "                'FILA 2 PALABRA ACTUAL ASTA COLUMNA 8.
        Print At 2,8,DEC1,resultado,0
        Print %11011111                         'Imprime el símvolo de grados
        Print "C"
    Else
        Print At 1,1, "    ¡ALERTA!    "
        Print At 2,1, "    "
        Print At 2,5,DEC1,resultado,0
        Print %11011111                         'Imprime el símbolo de grados
        Print "C   "
        EWrite 1, ["    ¡ALERTA!    "]
    EndIf
    teclado= InKey
    If teclado > 15 Then teclado=0   
    SerOut PORTC.7, 9600,["Temperatura: ", #resultado," %",10,13]         '9600 baudios de conexion, al puerto DB9 del pc, de serial a usb usare'
    SerOut PORTC.7, 9600,[13]
    GoTo inicio
    End

Simulación como la llevo hasta el momento: https://www50.zippyshare.com/v/vjaiMc3a/file.html

Por otro lado, si me podrían ayudar  a realizar la conexión del ft232 o rs232 en el proteus o me podrían indicar como, estaría totalmente agradecido

Desconectado Skelton

  • PIC10
  • *
  • Mensajes: 12
Re:Duda respecto a comunicación serial pic - pc mediante teclado matricial.
« Respuesta #1 en: 06 de Noviembre de 2019, 15:03:20 »

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1054
Re:Duda respecto a comunicación serial pic - pc mediante teclado matricial.
« Respuesta #2 en: 06 de Noviembre de 2019, 15:15:44 »
No puedo ver tu archivo debido a que estoy en el trabajo y se bloque el link.
Pero te puedo decir que es muy simple. Solamente agrega la terminal que está en el ícono de herramientas (donde se encuentran el voltmetro, ampermetro, osciloscopio, etc). Ahí se encuentra la terminal, luego conectas RX del PIC con el TX de la terminal y el TX del PIC con el RX de la terminal.
La terminal por default está configurada a 9600 bps. Así que después de eso, solo ejecuta tu simulación.

elreypic.

Desconectado Skelton

  • PIC10
  • *
  • Mensajes: 12
Re:Duda respecto a comunicación serial pic - pc mediante teclado matricial.
« Respuesta #3 en: 06 de Noviembre de 2019, 18:20:58 »
Hola, gracias por tu ayuda, ya lo realice pero no me están llegando los datos al virtual terminator, lo mas seguro es que hay algo mal en el código, si en tu experiencia me podrías ayudar revisándolo te agradecería mucho!

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1054
Re:Duda respecto a comunicación serial pic - pc mediante teclado matricial.
« Respuesta #4 en: 06 de Noviembre de 2019, 19:36:22 »
Skelton,

¿Te está funcionando el teclado? Porque no veo que hayas activado los pull-ups internos del puerto B. ¿Estás usando pull-ups externos?

elreypic.

Desconectado Skelton

  • PIC10
  • *
  • Mensajes: 12
Re:Duda respecto a comunicación serial pic - pc mediante teclado matricial.
« Respuesta #5 en: 06 de Noviembre de 2019, 19:43:57 »
No, y quite el teclado y solo conecte el virtual terminator y aun así tampoco llegan los datos.

Desconectado Skelton

  • PIC10
  • *
  • Mensajes: 12
Re:Duda respecto a comunicación serial pic - pc mediante teclado matricial.
« Respuesta #6 en: 06 de Noviembre de 2019, 19:45:03 »
Tampoco utilizo pullpups externos, solamente conecte el teclado.

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1054
Re:Duda respecto a comunicación serial pic - pc mediante teclado matricial.
« Respuesta #7 en: 06 de Noviembre de 2019, 20:59:37 »
1) Tienes que activar los pull-ups internos del puerto B o bien agregarlos de forma externa en las columnas del teclado, por eso no te funciona el teclado.
2) Ya que estás usando la comunicación serila por software debes configurar el puerto RC.7 como salida (no lo declaras en ningun lado, por eso no te funciona la comunicación serial).

elreypic.

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1054
Re:Duda respecto a comunicación serial pic - pc mediante teclado matricial.
« Respuesta #8 en: 07 de Noviembre de 2019, 02:00:50 »
Que tal Skelton,

Finalmente he podido ver el esquemático y la verdad no sé que estás intentando hacer con el teclado. Esa no es la forma correcta de usarlo y de conectarlo. Por favor mira el manual de programación del compilador protón.

En cuanto a la transmisión serial, de acuerdo a tu programa estás transmitiendo por el pin RC.7, pero tú conectas RC.7 al TX de la terminal, lo que es incorrecto. Segúm tu esquemático el pin de transmisión es el RC.6, así que lo que tienes que hacer es cambiar la transmisión al pin RC.6

elreypic

Desconectado Skelton

  • PIC10
  • *
  • Mensajes: 12
Re:Duda respecto a comunicación serial pic - pc mediante teclado matricial.
« Respuesta #9 en: 07 de Noviembre de 2019, 03:28:30 »
Realize las correciones en cuanto al teclado y a la comunicacion serial, te muestro el codigo nuevo:

Código: [Seleccionar]
Device = 16F877A        'DECLARAMOS EL PIC A USAR
XTAL = 4                 'CRYSTAL DE 4Mhz
 

Declare LCD_TYPE 0           'DECLARAMOS LOS PUERTOS DE SALIDA Y DE PROGRAMACIÓN.
Declare LCD_DTPIN PORTD.4
Declare LCD_RSPIN PORTD.2
Declare LCD_ENPIN PORTD.3
Declare LCD_LINES 2
Declare HSERIAL_BAUD = 9600
Declare HSERIAL_RCSTA = %10010000   'Habilita RX '
Declare HSERIAL_TXSTA = %00100000   'Habilita TX'
KEYPAD_PORT PORTB
PORTB_PULLUPS TRUE

TRISB=0                        'PUERTO B COMO SALIDA PARA TECLADO MATRICIAL.'
TRISC.6=0                   'PUERTO C.6 COMO SALIDA PARA COMUNICACIÓN SERIAL.'
TRISD=0                     'PUERTO D COMO SALIDA.
TRISA.0=1                    'PUERTO A.0 COMO ENTRADA ANALOGICA.
ADCON1=%100000                   
Dim adc As Float
Dim temp As Float
Dim teclado As Byte     
   
     Print At 1,1, "  PROYECTO DE    "        'FRASES AL COMENZAR LA PROGRAMACIÓN.
     Print At 2,1, "  ARQUITECTURA "
     DelayMS 3000

     Print At 1,1, " COMPUTACIONAL "
     Print At 2,1, "  PIC 16F877A   "
     DelayMS 3000
   
inicio:
    adc = ADIn 0
    temp = adc * 500/65472              'AQUÍ APARECE LA TEMPERATURA.
    If temp < 30 Then
        Print At 1,1, "  TEMPERATURA   "       'EN LA PRIMERA FILA LA PALABRA TEMPERATURA.
        Print At 2,1, "ACTUAL "                'FILA 2 PALABRA ACTUAL HASTA COLUMNA 8.
        Print At 2,8,DEC1,temp,0
        Print %11011111                         'Imprime el símbolo de grados
        Print "C"
    Else
        Print At 1,1,"    ¡ALERTA!    "
        Print At 2,1, "    "
        Print At 2,5,DEC1,temp,0
        Print %11011111                         'Imprime el símbolo de grados
        Print "C   "
        EWrite 1, ["    ¡ALERTA!    "]       'Guardo en la eeprom el mensaje alerta'
    EndIf
    teclado=InKey
    If teclado > 15 Then
    SerOut PORTC.6, 9600,["Temperatura: ", #temp," °C",10,13]         '9600 baudios de conexión, al puerto DB9 del pc, de serial a usb usare'
    SerOut PORTC.6, 9600,[13]
    EndIf     
    GoTo inicio
    End

Aun así, al presionar una tecla del teclado (creo que hay que mantenerla pulsada debería enviarme los datos de temperatura por el puerto serial y mostrármelos y aun no los muestra.
Simulación actualizada: https://www64.zippyshare.com/v/7PCuP2q8/file.html

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1054
Re:Duda respecto a comunicación serial pic - pc mediante teclado matricial.
« Respuesta #10 en: 07 de Noviembre de 2019, 11:11:55 »
Buenos días Skelton,

Ahora estás mezclando las dos formas de operación de la comunicación serial.
Decide cuál es la que vas a usar, por software o por hardware.

Si es por software entonces para transmitor usas: Serout [parametros]
Si es por hardware entonces usas: Hserout [parametros]

Ahora bien, si usas la comunicación serial por software entonces estás configurando equivocadamente. En la página 380 del manual de Proton, está una tabla de valores para configurar el baudrate de forma correcta. El valor de 9600 no es válido si lo que quieres es transmitir a 9600 baudios. Fíjate bien en la tabla y claramente dice que el baudrate 9600, con 8-bit y sin paridad; el valor es: 84 (No 9600 como tú lo estás colocando). Por lo tanto la intrucción sería:

Código: [Seleccionar]
Serout PORTC.6, 84, ["Temperatura: ", #temp," ",248,"C",10,13]        'El numero 248 es para mostrar el símbolo de grados
Otra cosa que necesitas declarar es el puerto RC.6 como salida, y al inicio colocarlo en nivel alto para que no te genere datos basura al inicio de la transmisión serial.

Código: [Seleccionar]
TRISC.6=0           'PUERTO C.6 como salida para la transmisión serial
High   PORTC.6    'Iniciliaza el puerto RC.6 en alto para no generar basura en el pin de transmision

Con esto en mente, las siguientes declaraciones en tu código no son necesarias:

Código: [Seleccionar]
Declare HSERIAL_BAUD = 9600
Declare HSERIAL_RCSTA = %10010000   'Habilita RX '
Declare HSERIAL_TXSTA = %00100000   'Habilita TX'

Ahora bien, si usas la comunicación serial por hardware, es decir el USART interno del microcontrolador, entonces las declaraciones anteriores sí son necesarias. Aquí ya no necesitas declarar el puerto RC.6 como salida, sino dejarlo por default, ni tampoco necesitas poner el puerto en alto.

Para realizar la comunicación usando el USART, entonces usas:
Código: [Seleccionar]
Hserout ["Temperatura: ", #temp," ",248,"C",10,13]        'El numero 248 es para mostrar el símbolo de grados

En cuanto al teclado, la instrucción Inkey te devuelve un valor entre 0 y 15 cuando alguna tecla se ha presionado, y devuelve 16 si ninguna tecla se ha presionado. Por lo tanto en tu lógica de programación estás diciendo que si NO SE HA PRESIONADO ninguna tecla entonces envia el dato de forma serial. Según como conectes el teclado cada tecla tiene un número asignado por Inkey que no coincide con el valor impreso en la tecla. Muestra el valor de la tecla presionada usando el mismo puerto serial para que sepas que valor tiene asignado. Y luego así puedas realizar la operación adecuada.

Espero esto te sirva y te de mejor orientación.

elreypic.

Desconectado Skelton

  • PIC10
  • *
  • Mensajes: 12
Re:Duda respecto a comunicación serial pic - pc mediante teclado matricial.
« Respuesta #11 en: 07 de Noviembre de 2019, 12:01:16 »
Muchas gracias por tu paciencia y gran ayuda elreypic2, ya me funciono la comunicación serial, ahora bien procederé a investigar sobre el teclado y su funcionamiento, y procedo a conectarlo, igual te comentare como finalize el proceso, nuevamente muchas gracias!.


 

anything