Autor Tema: conectar termopar al pic16f877  (Leído 18845 veces)

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

Desconectado LAFUMAT

  • PIC16
  • ***
  • Mensajes: 148
conectar termopar al pic16f877
« en: 07 de Agosto de 2006, 06:41:26 »
hola a todos. Tengo dudas de como conectar el max6675 (adaptador para termopar) al pic.

En principio es facil, pues el max trabaja en modo spi esclavo, entoces, se lo conectamos al pic y listo; pero he visto que el max me da una salida serie de 10 bits, y el pic tiene 8 bits y ya no se por donde coger esto.

espero que alguien más inteligente que yo pueda ayudarme un poco en el hard, y muchom en como hacer funcionar el spi del PIC pues no lo he usado nunca.


gracias

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: conectar termopar al pic16f877
« Respuesta #1 en: 07 de Agosto de 2006, 08:17:12 »
hola a todos. Tengo dudas de como conectar el max6675 (adaptador para termopar) al pic.

En principio es facil, pues el max trabaja en modo spi esclavo, entoces, se lo conectamos al pic y listo; pero he visto que el max me da una salida serie de 10 bits, y el pic tiene 8 bits y ya no se por donde coger esto.

espero que alguien más inteligente que yo pueda ayudarme un poco en el hard, y muchom en como hacer funcionar el spi del PIC pues no lo he usado nunca.


gracias

Los dispositivos SPI rara vez son 'justo' de 8 bits.  Suelen ser de más bits, 8, 10, 16, 24, 21, etc.

Lo bueno es que el módulo no te enviará datos al menos que tu generes una transmisión, ya que el pic hace de master y por lo tanto controla el clock.

Debes hacer 2 lecturas.  En la primera leeras 8 bits y en la segunda también 8 bits, pero solo te harán falta 2.

Deberas entonces tener en tu software 1 variable de 16 bits que contenga ambos bytes.

Espero haberme explicado, sino vuelve a preguntar.

Saludos


- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado LAFUMAT

  • PIC16
  • ***
  • Mensajes: 148
Re: conectar termopar al pic16f877
« Respuesta #2 en: 07 de Agosto de 2006, 10:50:40 »
muchas gracias, pero sigo dudando, pues veo que conoces muy bien el modulo spi.

la duda que me surge es la siguiente;

el maX6675 tiene un cs(chip select), cuando se pone esta linea a cero, manda por la salida los 10 bit ( con un star), entonces, como me los manda de seguido, ¿me da tiempo a hacer dos lecturas?


Desconectado GustavoT

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 102
Re: conectar termopar al pic16f877
« Respuesta #3 en: 07 de Agosto de 2006, 11:46:39 »
El SPI tiene 4 líneas
 
Data out
Data in
Clock
CS

Cuando habilitas el cs lo que haces es decirle al esclavo, te escojo a ti , nada mas

Para comenzar a trasmitir tienes que enviar una palabra desde el PIC al MAX con cualquier dato basura, este a medida que se va enviando la palabra basura ira devolviendo (MAX --> PIC) los 8 primeros bits , estos quedaran guardados en el modulo del pic, tienes que tomar esos datos y pasarlos a alguna otra variable

Luego comienza de vuelta a mandar la segunda palabra basura , y el max te devolverá los siguientes 8 bits.


Si te fijas en la figura 1a y 1b , vas a ver que son 16bits lo que se te envían, pero cada bit se envían en el momento en el que el clock habilita, por lo que no te tenes que preocupar de los tiempos todo lo maneja el pic

También en la figura 2 te indica que el dato se encuentra en los bits 14 al 3 , siendo el 14 el mas significativo, por lo que cuando tengs las dos palabras en el pic, tendrás que acomodar estos datos para que te queden cómodo para su uso

En tu caso solo tenes 3 lineas,

Desde el pic tenes Data in Clock out, CS

Desde el MAX tenes Data out, Clock In ,CS




Saludos
Hay dos cosas infinitas: el Universo y la estupidez humana. Y del Universo no estoy seguro.   Albert Einstein

Desconectado LAFUMAT

  • PIC16
  • ***
  • Mensajes: 148
Re: conectar termopar al pic16f877
« Respuesta #4 en: 08 de Agosto de 2006, 05:31:18 »
muchas gracias, me empiezo a enterar.

ahora lo que voy a hacer es montar el ciruito y empezar a programar con las directrices que me habeis hecho llegar.

os agradezco un monton vuestra ayuda, aunque seguro que os vuelvo a preguntar, pues estoy empezando y hago aguas rapidamente.

os ire contando.


:)

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: conectar termopar al pic16f877
« Respuesta #5 en: 08 de Agosto de 2006, 08:23:37 »
muchas gracias, me empiezo a enterar.

ahora lo que voy a hacer es montar el ciruito y empezar a programar con las directrices que me habeis hecho llegar.

os agradezco un monton vuestra ayuda, aunque seguro que os vuelvo a preguntar, pues estoy empezando y hago aguas rapidamente.

os ire contando.


:)


No hay problema en que preguntes una y otra vez.

Acá encontraras siempre buena disposición para ayudarte siempre y cuando tú demuestres buena disposición para aprender, leer.

Hay muy buena gente y muy buenos profesionales en este foro, solo piden lo que te acabo de decir.

Saludos y bienvenido.
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado GustavoT

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 102
Re: conectar termopar al pic16f877
« Respuesta #6 en: 08 de Agosto de 2006, 09:51:25 »
Te paso el código de mi programa, suponiendo que sabes manejar interrupciones, esto esta como para hacer una transmisión de 16bits como la que vos queres hacer, el código esta para la serie 18F es muy simple por lo que no tenes que tener problemas para pasarlo a la serie 16F

;-------------------------------------------------------------------
;   Inicializo   SPI  Para 16F818 , mandando el primer dato
;Nota: cada vez que llames a esta rutina va a comenzar una trasmisión de datos, es importante que dejes el tiempo prudencial como para que termine la
:         trasmisión antes de llamar nuevamente la rutina
;-------------------------------------------------------------------
inicializo_trasmision_con_16F818

       BCF PORTC,1,0  ; Cler linea de /CS ; Comienza la comunicacion con  16F818

      nop  ; pequeño delay
      nop
      nop      
      nop
   
; -- mando el primer dato
         movlw 0xAB        ; Dato basura
         movwf SSPBUF,0 ; al cargar el registro SSPBUF comienza la tramision de dato

   Return
;-------------------------------------------------------------------
;     SPI  Para 16F818
;-------------------------------------------------------------------



Una vez que mandaste el primer dato tenes que esperar a la interrupcion del SPI que va a volver con los primero 8 bits

En el lugar de las interrupciones va esto:


;-----------------------------------------------------------------------------------------
;  Modulo SPI para 16F818 INTERRUPCION
;-----------------------------------------------------------------------------------------
Modulos_16F818

            btfsc   Flag_SPI,0   ; uso esta bandera para saber si llegaron los primero 8 bits o los segundos 8 bits
            Goto Resivo_los_segundo_8bits
   
;-----------------------------------------
;Resivo_los_primero_8bits

        movFF SSPBUF,Datos1  ; aqui se guardan los primeros 8 bits

       bsf Flag_SPI,0 ; esta bandera es importante por que indica que la próxima vez que llame la interrupción va a venir los 8 segundos bits

        nop
       nop
        nop
       nop

      movlw  0x07
      movwf  SSPBUF,0  ; cargo cualquier gyuebada, para inicializar nuevamente la tramisión de datos y resivir los segundos 8 bits

        Fin_de_INTERUPCION  ; ---MACRO---- ; esto esta en todos los datasheet de microchip como entrar y salir de las interrupciones
;---------------------------------------


;-------------------------------------
Resivo_los_segundo_8bits

      movFF SSPBUF,Dato2  ;   aqui se guardan los segundos 8 bits

           bcf Flag_SPI,0 ; esta bandera es importante por que indica que la próxima vez que llame la interrupción va a venir los 8 primeros bits

        Fin_de_INTERUPCION  ; ---MACRO---- ; esto esta en todos los datasheet de microchip como entrar y salir de las interrupciones
;-----------------------------------------------------------------------------------------
;  Modulo SPI para 16F818  FIN de INTERRUPCION
;-----------------------------------------------------------------------------------------




;===================================================================
;============   PROGRAMACION DEL MODULO "SPI"   =============================
;===================================================================
; con esto configuras el modulo SPI
     MOVLW   0x00 
     MOVWF SSPSTAT,0
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
     MOVLW   0x31
     MOVWF SSPCON1,0;
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
     MOVLW   0x00  ;
     MOVWF SSPCON2,0;
;===================================================================


« Última modificación: 08 de Agosto de 2006, 09:57:10 por GustavoT »
Hay dos cosas infinitas: el Universo y la estupidez humana. Y del Universo no estoy seguro.   Albert Einstein

Desconectado LAFUMAT

  • PIC16
  • ***
  • Mensajes: 148
Re: conectar termopar al pic16f877
« Respuesta #7 en: 09 de Agosto de 2006, 05:45:52 »
que bueno.

me estais ayudando un monton, pero yo no consigo ir tan deprisa.

 hoy me ha llegado el adaptador de soic a dip para el max6675, asi podre pincharlo en una protoboard.

despues recopilare todas vuestras ideas y empezare a ver que pasa.


espero no tardar mucho tiempo.

:)

Desconectado LAFUMAT

  • PIC16
  • ***
  • Mensajes: 148
Re: conectar termopar al pic16f877
« Respuesta #8 en: 09 de Agosto de 2006, 08:03:57 »
HOLA DE NUEVO:

ME ESTOY MACHACANDO CON EL DATASHEET DEL PIC 16F877 Y EL MAX6675.

EL CASO ES QUE SEGUN LEO HAY QUE CONECTARLO Y YO DE MOMENTO TENGO PENSADO CONECTARLO DE LA SIGUIENTE FORMA:

CS DEL MAX AL SS/RA5 DEL PIC (ES EL CHIP SELECT): CUANDO ESTA A 1 EL MAX ESTA CONVIRTIENDO Y AL PONERLO A CERO ESTE EMPIEZA A TRANSMITIR.

SO DEL MAX (SALIDA) AL SDI/RC4 DEL PIC, POR LA CUAL LEO LOS DATOS.

SCK (CLOCK) DEL MAX AL SCk/RC3 DEL PIC ( QUE ES EL RELOJ).


PERO TENGO DUDAS DE SI ES ASI COMO ME INDICAIS COMO HE DE HACERLO.

PUES ENTONCES TENDRIA QUE PONER EL SS DEL PIC A CERO, EMPEZARIA A TRANSMIOTIR LOS DATOS DESDE EL MAX AL PIC A LA VELOCIDAD DEL RELOJ, Y ENTRARIAN LOS DATOS AL PIC, PERO COMO LEO LOS 12 BIT, SI CREO QUE EL SPI SOLO TIENE 8???

:)

Desconectado LAFUMAT

  • PIC16
  • ***
  • Mensajes: 148
Re: conectar termopar al pic16f877
« Respuesta #9 en: 09 de Agosto de 2006, 08:08:20 »
PODRIA SER LA ALTERNATIVA EL CAMBIAR EL SCK DEL PIC POR EL SDO Y ASI HACER COMO ME DECIS; ES DECIR SACAR UN DATO DE 8 BITS Y ESE ESEL QUE HACE DE RELOJ, LUEGO DEJAR EL SS EN CERO TODAVIA, OPERAR CON LOS 8 PRIMEROS BITS, Y LUEGO SACAR OTROS 8 BITS Y COGER EL SEGUNDO??

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: conectar termopar al pic16f877
« Respuesta #10 en: 09 de Agosto de 2006, 08:23:53 »
Acabo de leer bien el datasheet y en realidad transmite 16 bits no 12!.  Bueno he aquí la respuesta.

CS DEL MAX AL SS/RA5 DEL PIC (ES EL CHIP SELECT): CUANDO ESTA A 1 EL MAX ESTA CONVIRTIENDO Y AL PONERLO A CERO ESTE EMPIEZA A TRANSMITIR.

Cuidado con esto, este pin del pic es el CS del pic pero para cuando el mismo es esclavo.  Si lo usas como salida, actuará como cualquier otro pin de salida y no habrá problemas, pero no confundas su significado.


SO DEL MAX (SALIDA) AL SDI/RC4 DEL PIC, POR LA CUAL LEO LOS DATOS.

SCK (CLOCK) DEL MAX AL SCk/RC3 DEL PIC ( QUE ES EL RELOJ).

Esto está bien, pero también al menos el SDO del pic (RC5) ponle una resistencia de 10K por ejemplo a GND para que no quede al aire.


PERO TENGO DUDAS DE SI ES ASI COMO ME INDICAIS COMO HE DE HACERLO.

PUES ENTONCES TENDRIA QUE PONER EL SS DEL PIC A CERO, EMPEZARIA A TRANSMIOTIR LOS DATOS DESDE EL MAX AL PIC A LA VELOCIDAD DEL RELOJ, Y ENTRARIAN LOS DATOS AL PIC, PERO COMO LEO LOS 12 BIT, SI CREO QUE EL SPI SOLO TIENE 8???

Esto ya fue explicado pero si aún no has entendido te lo explico de otra forma

1) Configuras el módulo SPI

2) Haces un CS del MAX

3) Envías un byte basura (Escribiendo cualquier cosa en el registro SSPBUF).  El pic enviará 8 bits automáticamente con sus correspondientes clock.  Qué envía no te importa ya que al MAX6675 solo le llega el clock.

4) Esperas a que se ponga en 1 el bit SSPSTAT,BF

5) Lees el 1er byte recibido, haciendo un MOVF SSPBUF,W  (sí acá ahora tienes los primero 8 bits que te envío el max).  Luego lo guardas en por ejemplo MAX6675_DATAHIGH

6) Envías un byte basura (Escribiendo cualquier cosa en el registro SSPBUF).  El pic enviará 8 bits automáticamente con sus correspondientes clock.  Qué envía no te importa ya que al MAX6675 solo le llega el clock.

7) Esperas a que se ponga en 1 el bit SSPSTAT,BF

8 ) Lees el 2do byte recibido, haciendo un MOVF SSPBUF,W  (acá tienes el 2do byte) , luego lo puedes guardar en MAX6675_DATALOW

En MAX6675_DATAHIGH y MAX6675_DATALOW tienes los 16 bits de la respuesta del MAX.

Ahora bien, deberás ir rotando hacia la derecha para quedarte con los 12 bits que solo corresponden al dato leído.

Creo que ya explicar como rotar ... es algo bastante básico.

Saludos


- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado LAFUMAT

  • PIC16
  • ***
  • Mensajes: 148
Re: conectar termopar al pic16f877
« Respuesta #11 en: 09 de Agosto de 2006, 15:04:43 »
gracias maunix.

eres el más grande. Me lo has explicado de sobresaliente. Creo que ya entendi todo muy bien.

ya solo me queda como dije esta mañana, montarlo y empezar a probar.

ojala ualgun dia me parezca a todos los que sabeis tanto, y asi poder ayudar yo tambien.


mil gracias

 :-/

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: conectar termopar al pic16f877
« Respuesta #12 en: 09 de Agosto de 2006, 15:50:23 »
gracias maunix.

eres el más grande. Me lo has explicado de sobresaliente. Creo que ya entendi todo muy bien.

ya solo me queda como dije esta mañana, montarlo y empezar a probar.

ojala ualgun dia me parezca a todos los que sabeis tanto, y asi poder ayudar yo tambien.


mil gracias

 :-/

Agradezco tus agradecimientos. :), de todas formas era una pregunta no muy difícil, no es para tanto.  :)

Tu recién comienzas, todo te será nuevo, luego si algún día relees estos posts, sabrás que no fue para tanto la explciación.  Sabemos 'antes' que es diferente :)

Acá encontrarás mucha gente que sabe mucho y te sentirás a gusto de seguro, tu sigue estudiando sin perder las ganas de leer y de esforzarte por obtener tú mismo los resultados


Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado LAFUMAT

  • PIC16
  • ***
  • Mensajes: 148
Re: conectar termopar al pic16f877
« Respuesta #13 en: 14 de Agosto de 2006, 08:21:29 »
BUENO, COMO ERA DE ESPERAR TENGO QUE PREGUNTAR :shock:

HE REALIZADO UNA PROTOBOARD CON UN 16F877, AL CUAL ENTRE EL PUERTO B Y CUATRO LINEAS DEL A, TENGO 4 DISPLAYS DE 7SEG.

HE CONECTADO EL MAX COMO ME DIJISTE MAUNIX, SOLO QUE EL CS LO HE COGIDO DEL RE0. PUSE AL SDO LA RESISTENCIA DE 10K, REALIZE EL PROGRAMA, PARA QUE LEYERA LOS DATOS, Y EN PRINCIPIO (A MODO DE PRUEBA), COGER POR EJEMPLO EL MAXLOW Y PASARLO A BCD Y PONERLO EN EL DISPLAY.

PERO NO ME FUNCIONA.

LAS DOS RUTINAS (DDE CONFIGURACION DEL SPI) Y LA DE LEER SON LAS SIGUIENTES:


RUTINA DE CONFIGURACION DEL SPI:

CONF_SPI

      BCF      STATUS,RP1      ;BANCO 1
      BSF      STATUS,RP0
      MOVLW   B'00000000'      ;REGISTRO
      MOVWF   SSPSTAT
      BCF      STATUS,RP1      ;BANCO 0
      BCF      STATUS,RP0
      MOVLW   B'00110001'      ;SSPCON1
      MOVWF   SSPCON
      BCF      STATUS,RP1      ;BANCO 1
      BSF      STATUS,RP0
      MOVLW   B'00000000'      ;SSPCON2
      MOVWF   SSPCON2

      RETURN

RUTINA DE CONFIGURACION DEL PUERTO E (PARA EL CS):
CONF_PORTE                  ;CONFIGURA EL PORT B COMO SALIDA

      BCF      STATUS,RP1      ;BANCO 1
      BSF      STATUS,RP0
      MOVLW   B'00000000'      ;SALIDAS
      MOVWF   TRISE
      BCF      STATUS,RP0      ;BANCO 0
      MOVLW   B'00000111'
      MOVWF   PORTE
      RETURN

Y LA RUTINA QUE SE SUPUNE QUE LEERIA EL PUERTO Y ALMACENA EN VARIABLE

LEE_SPI

      bcf         STATUS, RP0         ; Go to BANK0
      bcf         STATUS, RP1
      MOVLW      B'00000110'      ;ACTIVAMOS CS DEL MAX
      MOVWF      PORTE   
      MOVLW      B'01010101'      ;BYTE BASURA
      MOVWF      SSPBUF
      NOP
      NOP
      bSf         STATUS, RP0         ; Go to BANK1
      bcf         STATUS, RP1
ESP1   BTFSS      SSPSTAT,BF
      GOTO ESP1
      bcf         STATUS, RP0         ; Go to BANK0
      bcf         STATUS, RP1   
      MOVFW      SSPBUF
      MOVWF      MAXHIGH            ;ESCRIBE EN MAXHIG LOS PRIMEROS 8 BITS
      NOP
      MOVLW      B'01010101'      ;BYTE BASURA
      MOVWF      SSPBUF
      NOP
      NOP
      bSf         STATUS, RP0         ; Go to BANK1
      bcf         STATUS, RP1
ESP2   BTFSS      SSPSTAT,BF
      GOTO ESP2
      bcf         STATUS, RP0         ; Go to BANK0
      bcf         STATUS, RP1   
      MOVFW      SSPBUF
      MOVWF      MAXLOW            ;ESCRIBE EN MAXHIG LOS SEGUNDOS 8 BITS
      NOP
      bcf         STATUS, RP0         ; Go to BANK0
      bcf         STATUS, RP1
      MOVLW      B'00000111'      ;DESACTIVAMOS CS DEL MAX
      MOVWF      PORTE         
      RETURN


DE MOMENTO ESA ES MI DUDA, NO SE SI HAGO ALGO MAL EN EL SOFTWARE O EN EL HARDWARE, PUES SEGUN SEEXPLICA ES SENCILLO DE HACER ESTO...


GRACIAS

Desconectado LAFUMAT

  • PIC16
  • ***
  • Mensajes: 148
Re: conectar termopar al pic16f877
« Respuesta #14 en: 16 de Agosto de 2006, 02:12:06 »
sigo buscando:

¿puedo tener problemas por no esperar el tiempo suficiente para la conversion?

he leido por internet que debo esperar unos 200ms antes de leer el max.

sera cuestion de probar


 :shock:


 

anything