Autor Tema: enviar datos de un sensor de temperatura y de un pot por el puerto serie RS232  (Leído 25863 veces)

0 Usuarios y 5 Visitantes están viendo este tema.

Desconectado edu1989

  • PIC18
  • ****
  • Mensajes: 275
Re: enviar datos de un sensor de temperatura y de un pot por el puerto serie RS232
« Respuesta #60 en: 14 de Diciembre de 2010, 21:23:16 »
La verdad es que nunca entendi bien para que funcionaban los jumpers. Se que se le puede quitar como la capucha para deshabilitar pines no?
No se muy bien.. por tanto no he configurado los jumpers.

Edito: En Programmer, settings y power pone que MPLAB ICD2 Vpp 12.46

Gracias
« Última modificación: 14 de Diciembre de 2010, 21:32:51 por edu1989 »

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: enviar datos de un sensor de temperatura y de un pot por el puerto serie RS232
« Respuesta #61 en: 14 de Diciembre de 2010, 23:38:02 »
La verdad es que nunca entendi bien para que funcionaban los jumpers. Se que se le puede quitar como la capucha para deshabilitar pines no?
No se muy bien.. por tanto no he configurado los jumpers.

Edito: En Programmer, settings y power pone que MPLAB ICD2 Vpp 12.46

Gracias

  Por lo que yo entiendo del párrafo (ese que copié) dice que de fábrica no tiene los jumper, que se puede cortar las pistas e instalarlos. También creo que dice que de fábrica viene para trabajar con RB6 y RB7 como si fueran los pines de ICSP (InCircuitSerialPrograming) por lo tanto nuestro programa no los podría utilizar como pine I/O
  Ah, si dice que VPP es 12.46V entonces no es necesario que LVP esté activado.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado edu1989

  • PIC18
  • ****
  • Mensajes: 275
Re: enviar datos de un sensor de temperatura y de un pot por el puerto serie RS232
« Respuesta #62 en: 15 de Diciembre de 2010, 06:21:51 »
Edito: Creo que el problema que tengo esta en los CONFIG. Tengo que declarar todas las opciones de cada palabra? Si el config1 tiene 6 palabras tengo que poner las 6? Para usar un cristal a 4MHz, esta bien configurado? Gracias de antemano.

Código: [Seleccionar]
__CONFIG(1, CPUDIV1 & PLLDIV1 & XT & FCMDIS);  
__CONFIG(2, VREGDIS & PWRTEN & WDTDIS);
__CONFIG(3, PBADEN & MCLREN);
__CONFIG(4, ICPORTEN & LVPDIS & DEBUGEN);
__CONFIG(5,UNPROTECT);
__CONFIG(6,UNPROTECT);
__CONFIG(7,UNPROTECT);
« Última modificación: 16 de Diciembre de 2010, 09:50:11 por edu1989 »

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: enviar datos de un sensor de temperatura y de un pot por el puerto serie RS232
« Respuesta #63 en: 16 de Diciembre de 2010, 15:16:49 »
  Yo creería que no es necesario poner todas las opciones de cada palabra. En los 16f que tienen una palabra de configuración no se necesita poner todo. Fijate que cada una de las opciones se agregan con el operador &, que hace una "and" entre una opción y otra.

  De hecho la opción "CPUDIV1" es el valor 0xFFFF así que si ponés sólo esa opción quedarían seteados todos los bits de la palabra de configuración en cuestión.

  Yo creería que está bien como está configurado la palabra 1 para que trabaje con 4MHz.

  Tené en cuenta que si habilitás MasterClear, dicho pin tiene que quedar conectado a VCC (generalmente por medio de una resistencia) porque sino el micro no va a trabajar.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado edu1989

  • PIC18
  • ****
  • Mensajes: 275
Re: enviar datos de un sensor de temperatura y de un pot por el puerto serie RS232
« Respuesta #64 en: 16 de Diciembre de 2010, 15:27:46 »
Edito el mensaje porque la situacion actual es totalmente distinta. Hoy he estado probando de grabar el programa y no da ningun error ( en el debug si) y no funciona. He mirado el datasheet para ver si utilitzaba los puertos correctos y he grabado un programa de prueba mas que nada para comprobar si funcionaba y si estaba grabando bien. Todo esto ha ido bien pero el programa sigue sin funcionar.

Es simplemente el programa que encendia el led cuando el pulsador estaba pulsado y lo apagaba cuando no. Creo que es un tema de fuses, que no lo configuro del todo bien. Me gustaria que alguien pudiese darme su opinion al respecto o algun ejemplo parecido. 
 
Edito1: Acabo de encontrar un fichero donde explica como son les config de cada PIC en mi caso pero no se como relacionar esos numeros en HEX  con las posibles palabras:
Código: [Seleccionar]
[b][18F4550][/b]
[b]CFGS_UNPROG=1,35C0,2,FFDF,3,F3FF,4,FF9F,5,FFFF,6,FFFF,7,FFFF[/b]

CFGS_UNPROG=<config word number>,<unprogrammed value>,...
# This is used to specified the unprogrammed value of a configuration word.
# Entries for each word are entered as a list of pairs as above.
# Every config word must be specified
# <config word number> = 1,2,3, etc
# <unprogrammed value> = a hex number, don't need to indicate radix

No se como relacionar 35C0 con las posibles opciones:
Código: [Seleccionar]
// config word 1
// USB Clock Selection
 #define USBPLL 0xFFDF // clk src from 96MHz PLL/2
 #define USBOSC 0xFFFF // clk src from OSC1/OSC2
// CPU Sys CLK Select
 #define CPUDIV4 0xFFE7 // div by 4
 #define CPUDIV3 0xFFEF // div by 3
 #define CPUDIV2 0xFFF7 // div by 2
 #define CPUDIV1 0xFFFF // no divide
 #define PLLPOSTDIV6 CPUDIV4 // 96 MHz PLL div by 6
 #define PLLPOSTDIV4 CPUDIV3 // 96 MHz PLL div by 4
 #define PLLPOSTDIV3 CPUDIV2 // 96 MHz PLL div by 3
 #define PLLPOSTDIV2 CPUDIV1 // 96 MHz PLL div by 2
// OSC Select
 #define PLLDIV12 0xFFF8 // div by 12 {48MHz input}
 #define PLLDIV10 0xFFF9 // div by 10 {40MHz input}
 #define PLLDIV6 0xFFFA // div by 6 {24MHz input}
 #define PLLDIV5 0xFFFB // div by 5 {20MHz input}
 #define PLLDIV4 0xFFFC // div by 4 {16MHz input}
 #define PLLDIV3 0xFFFD // div by 3 {12MHz input}
 #define PLLDIV2 0xFFFE // div by 2 {8MHz input}
 #define PLLDIV1 0xFFFF // no divide {4MHz input}

« Última modificación: 18 de Diciembre de 2010, 14:45:32 por edu1989 »

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: enviar datos de un sensor de temperatura y de un pot por el puerto serie RS232
« Respuesta #65 en: 20 de Diciembre de 2010, 11:23:49 »
  Yo no puedo ayudarte mucho más porque no trabajé nunca con los PIC18, y creería que con la configuración que habías puesto debería funcionar.

  Sí puedo intentar ayudarte a entender de donde sale la configuración que muestras .

Tomemos como caso la primer palabra que dice 35C0, esto es en binario 0011 0101 1100 0000

Mirando el datasheet del 4550 (documento DS39632D, página 286) indica que los bit 6 y 7 de CONFIG1L y los bit 4 y 5 de CONFIG1H no están implementados y como dice el datasheet, hay que dejarlos en "1"

La configuración que se puede hacer con Hitech usa una & entre distintos valores, hay que recordar que al hacer uso de & (and) el bit x va a tomar el valor "1" sí y sólo sí el bit x está en "1" en todos los valores que usemos en la &. Veamos si con un ejemplo me explico mejor

  0011 & 0001 --> 0001  --> sólo queda en "1" el bit 0 porque es el único bit que está en "1" en los dos operandos.

Siguiendo con el ejemplo, para que el primer número sea 3 hay que lograr que la & forme dicho número y la única combinación que logra eso es (IESOEN & FCMEN) --> 7FFF & BFFF --> 0111 1111 1111 1111 & 1011 1111 1111 1111 -->
0011 1111 1111 1111 (al separar en hexa, cada dígito sale de utilizar 4 bits)

el primer dígito es 0011 --> 3

  Acá ya se me complica pues según tu ejemplo el siguiente número sería la 5 que en binario es 0101. Según el datasheet dicho valor correspondería a la configuración EC con CLKO en RA6, pero según el archivo PIC18F4550.h que tengo en mi HiTech nohay ningún valor que se corresponda con el 5 como segundo dígito.
  Con lo cual no sé si es un error mio (que no esté entendiendo algo), un error del .h del HiTech o un error en el datasheet.

  Si seguimos con tu ejemplo, el tercer dígito es la C --> 1100, busquemos que combinación daría ese valor y sería
(USBPLL & CPUDIV4) o (USBPLL & CPUDIV3) o (USBPLL & PLLPOSTDIV4) o (USBPLL & PLLPOSTDIV6) -->

(FFDF & FFE7) o (FFDF & FFEF) --> (1111 1111 1101 1111 & 1111 1111 1110 0111) o
(1111 1111 1101 1111 & 1111 1111 1110 1111) vamos a separar solo el tercer dígito que es el que nos interesa y quedaría

(1101 & 1110) o (1101 & 1110) --> 1100  o 1100 así que llegamos a la combinación de la C

  Esa sería la idea de como se forman las palabras de configuración. Pero como noté esa diferencia entre el .h de HiTech y el datasheet no sé que pensar.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado edu1989

  • PIC18
  • ****
  • Mensajes: 275
Re: enviar datos de un sensor de temperatura y de un pot por el puerto serie RS232
« Respuesta #66 en: 20 de Diciembre de 2010, 16:15:39 »
Muchas gracias. Tienes toda la razon del mundo el datasheet dice lo contrario a lo que dice el .h del pic18f4550
Por ejemplo el bit 7 de CONFIG1H

#define IESODIS   0xFFFF    // Disabled         1111  1111  1111  1111
#define IESOEN   0x7FFF    // Enabled          0111  1111  1111  1111

El IESOEN tendria que estar enabled pero en el datasheet dice que si ese bit esta a 0 no esta activo...

Es como si estuvieran al revés. Es como si un 1111 1111 1111 1111 fuera un 0000 0000 0000 0000

Que solucion le ves al asunto? No podria configurar los fuses directamente tratandolo como si fuera un registro mas?

por ejemplo CONFIG1L=255 etc..

Muchas gracias como siempre por tu ayuda

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: enviar datos de un sensor de temperatura y de un pot por el puerto serie RS232
« Respuesta #67 en: 20 de Diciembre de 2010, 16:24:50 »
Muchas gracias. Tienes toda la razon del mundo el datasheet dice lo contrario a lo que dice el .h del pic18f4550
Por ejemplo el bit 7 de CONFIG1H

#define IESODIS   0xFFFF    // Disabled         1111  1111  1111  1111
#define IESOEN   0x7FFF    // Enabled          0111  1111  1111  1111

El IESOEN tendria que estar enabled pero en el datasheet dice que si ese bit esta a 0 no esta activo...

Es como si estuvieran al revés. Es como si un 1111 1111 1111 1111 fuera un 0000 0000 0000 0000

Que solucion le ves al asunto? No podria configurar los fuses directamente tratandolo como si fuera un registro mas?

por ejemplo CONFIG1L=255 etc..

Muchas gracias como siempre por tu ayuda


  Creo que no se podría escribir como si fuese un registro mas, pero sí podrías escribirlo de la siguiente manera

__CONFIG (1,0XFFFF); Obviamente eligiendo un valor que se corresponda con la configuración que uno pretende.

  Otra solución, más trabajosa pero reutilizable, sería modificar el archivo .h en cuestión y así la próxima vez que quieras programar los fuses vas a tener bien los datos en el archivo.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado edu1989

  • PIC18
  • ****
  • Mensajes: 275
Re: enviar datos de un sensor de temperatura y de un pot por el puerto serie RS232
« Respuesta #68 en: 20 de Diciembre de 2010, 16:30:25 »
Gracias por la solucion. Obviamente me quedare con la primera ya que todo esto me corre un poco de prisa.
He estado mirando y es que ni el ejemplo que sale en la guia del compilador (quickstart) esta bien.

En la palabra 1 salen activadas FCMDIS(FFFF), IESODIS(FFFF),XT(FAFF). Haciendo la & vemos que el resultado es FAFF. He supuesto que los bits estaban girados asi que he hecho el contrario digamos: 0500 que viene a ser : 0000 0101 0000 0000 . Los ultimos 8 bits(CONFIGL1) estan OK pero de los otros 8 el bit 0 no importa el valor que pongas( tanto 1 como 0 sirve) pero en el bit 2 tiene que ser 0, para poder usar la opcion XT (bits FOSC3-FOSC0) y no lo es.

Me pongo ahora mismo  a hacerlo como dices.
Gracias de nuevo.

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: enviar datos de un sensor de temperatura y de un pot por el puerto serie RS232
« Respuesta #69 en: 20 de Diciembre de 2010, 16:35:00 »
  Yo acabo de comparar el .h correspondiente al pic 16f877 y el datasheet de dicho pic y en este caso si se corresponden los valores. Así que casi seguro es un error en el .h del 4550
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado edu1989

  • PIC18
  • ****
  • Mensajes: 275
Re: enviar datos de un sensor de temperatura y de un pot por el puerto serie RS232
« Respuesta #70 en: 20 de Diciembre de 2010, 19:10:24 »
Código: [Seleccionar]
Que mala suerte la mia! porque tenia que pasarme a mi!! Bueno, ahora que ya se donde esta el fallo.. nada.. voy a publicar lo que he hecho.
A continuacion explicare un poco como configurare cada palabra a ver si ya mañana todo funciona como dios manda.. alla voy! Ordenare de derecha a izquierda los bits

[code]
CONFIG PALABRA 1
config1H = 0000 000X
bit7 IESO (Internal/External Oscillator Switchover bit) // HE DEJADO EL BIT A 0 (POR DEFECTO VIENE DE ESTA FORMA)
bit6 FCMEN (Fail-Safe clock monitor enable bit)          // HE DEJADO EL BIT A 0 (POR DEFECTO VIENE DE ESTA FORMA)
bit5 y bit 4 :Read as 0
bit 3-0 (FOSC): Para XT hay que escoger 000X ( He puesto un 0 al valor d la x)

config1L=0000 0000
bit 7 y 6: read as 0
bit 5 USB clock selection bit: 0
bit 4-3 CPUDIV : 00 para los 4Mhz
bit 0-2 PLL : 000 para los 4Mhz

Por tanto la palabra 1 me queda 0x0000
[/code]


Código: [Seleccionar]
CONFIG PALABRA 2
config2H = 0000 0000
bit 7-5 : Read as 0
bit 4-1 Postscale Watch dog= 000 (1/1)
bit 0: watchdog disabled (0)

config2L=0011 1001
bit 7-6: Reas as 0
bit 5: VREGEN(USB internal voltatge regulator)=1 ( disabled)
bit 4-3: BORV ( Brown out Reset voltatge bits)= 11( Minimum settings)
bit 2-1: Brown out reset bits: 00 ( disabled in hardware and software)
bit0 PWRTEN ( Power on Reset)= 1 ( disabled)

Por tanto la palabra 2 me queda 0x0039



Código: [Seleccionar]
CONFIG PALABRA 3
config3H = 0000 0001
bit7: MCLRE ( disabled) =0
bit 6-3: Read as 0
bit 2 (LPT1OSC) =0    // HE DEJADO EL BIT A 0 (POR DEFECTO VIENE DE ESTA FORMA)
bit 1 PBADEN Port A/D enable bit = 0
bit 0 CCP2 mux bit = 1 ( multiplexed with RC1)

AQUI SOLO HAY PALABRA DE CONFIGURACION HIGH, LA PALABRA DE CONFIGURACION LOW QUE LA PONGO TODA A 1 O TODA A 0?)

Por tanto queda 0x01XX ( xx=00 o xx=FF)



Código: [Seleccionar]
CONFIG PALABRA 4
config4H = 0010 0101
bit 7 Debug = activo ( a 0)
bit 6 ( XINST--> Extended Instruction Set Enable Bit)= a 0 ( disabled)
bit 5 (ICPRT) dedicated in circuit debut/programming = a 1 ( enabled)
bit 4-3= Read as 0
bit 2 LVP ( Low voltatge programming) a 1 (enabled), (valor por defecto)
bit 1 Read as 0
bit 0 STVREN Stack full/underflow reset enable bit a 1 ( valor por defecto)

AQUI SOLO HAY PALABRA DE CONFIGURACION HIGH, LA PALABRA DE CONFIGURACION LOW QUE LA PONGO TODA A 1 O TODA A 0?)

Por tanto queda 0x25XX (xx=00 o xx=FF)

Las palabras 5,6,7 las he configurado por defecto ya que solo implica proteccion del codigo.

Muchas gracias por la ayuda, espero haber podido hacer esto un poco claro, que la verdad es que no se yo si ha quedado claro
Un saludo

Desconectado edu1989

  • PIC18
  • ****
  • Mensajes: 275
Re: enviar datos de un sensor de temperatura y de un pot por el puerto serie RS232
« Respuesta #71 en: 21 de Diciembre de 2010, 07:43:08 »
Ya funciona!! era eso lo que estaba mal. Ahora voy a probar con el programa del sensor y pote. Ya he grabado este programa y parece que funciona, he puesto temp 15 grados y el led no para de encenderse.. imagino que es porque va enviando los datos.

Para probarlo y conectar desde la salida rs232 del pic, al pc necesito que el cable rs232 sea cruzado verdad?
Pongo aqui la configuracion de los bits:

Código: [Seleccionar]
#include <htc.h>
__CONFIG(1, 0x0000);
__CONFIG(2, 0x0039);
__CONFIG(3, 0x01FF );
__CONFIG(4, 0x29FF);
__CONFIG(5, 0xC00F);
__CONFIG(6, 0xE00F);
__CONFIG(7, 0x000F);

Muchas gracias.

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: enviar datos de un sensor de temperatura y de un pot por el puerto serie RS232
« Respuesta #72 en: 21 de Diciembre de 2010, 09:17:00 »
Ya funciona!! era eso lo que estaba mal. Ahora voy a probar con el programa del sensor y pote. Ya he grabado este programa y parece que funciona, he puesto temp 15 grados y el led no para de encenderse.. imagino que es porque va enviando los datos.

Para probarlo y conectar desde la salida rs232 del pic, al pc necesito que el cable rs232 sea cruzado verdad?
Pongo aqui la configuracion de los bits:


  Qué bueno que se haya podido encontrar el problema.

  Sí, del PIC al PC el cable tiene que ser cruzado TXpic->RXpc y TXpc->RXpic. Pero además de ello necesitás un adaptador de niveles como el max232.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado edu1989

  • PIC18
  • ****
  • Mensajes: 275
Re: enviar datos de un sensor de temperatura y de un pot por el puerto serie RS2
« Respuesta #73 en: 21 de Diciembre de 2010, 09:18:36 »
Y el programa final tambien tiene pinta de funcionar ya que lo he programado para un umbral de temperatura de 15º y el led parpadea y para una temp de 30º y el led no parpadea. A ver a ver...

Muchas gracias como siempre :)

Desconectado edu1989

  • PIC18
  • ****
  • Mensajes: 275
Re: enviar datos de un sensor de temperatura y de un pot por el puerto serie RS232
« Respuesta #74 en: 22 de Diciembre de 2010, 08:13:51 »
Hola de nuevo, estoy probando el programa y no acaba de funcionar.

Estoy alimentando el pic y conectando un cable desde el pic al pc. Cuando intento visualizar los datos en el terminal con el cable cruzado no se ve nada y con el cable normal se ven caracteres pero extraños, imagino que no estan en el formato adequado.

Que puede estar pasando? no tiene sentido que el cable sea el normal.. tendria que ser el cruzado...

P.d: Parece un problema de que los datos no estan en ASCII pero ya he hecho pruebas y se veian bien... es muy extraño.

Muchas gracias.
« Última modificación: 22 de Diciembre de 2010, 08:19:12 por edu1989 »


 

anything