Autor Tema: error con la pata RC3/SCK  (Leído 2788 veces)

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

Desconectado josselo24

  • PIC10
  • *
  • Mensajes: 6
error con la pata RC3/SCK
« en: 08 de Marzo de 2006, 10:42:00 »
estoy tratando de configurar la comunicacion spi de mi pic18f452, este como master y un conversor (max 191 ) co slave, no me funciona el reloj, alguien podria ayudarme, tendra que ver con las interrupciones

Desconectado javisus

  • PIC10
  • *
  • Mensajes: 18
RE: error con la pata RC3/SCK
« Respuesta #1 en: 22 de Marzo de 2006, 18:32:00 »
Suponiendo que lo has mirado con un osciloscopio y no va pues...
pueden ser varias cosas. Si estás programando en C, intenta inicializar de forma manual los registros afectos (SSPSTAT=0x...). Fíjate bien en el datasheet respecto al modo en que se transmiten los datos (forma de la onda ,inicia en alto, en bajo,etc). Inicializa bien el puerto C.(TRISCbits.RC3=0//TRISC=0b00010000).
Fijate bien en los registros del conversor y lee al dedillo el datasheet.

No sé , en fin si te ves muy apurado, está el asembler: Un ejemplo


               
               LIST P=18F452
               #include<p18f452.inc>

               udata
dato        res 1


reset       code 0x00
               goto start


pgm         code
start        nop
                movlw   b"00001010"  ;E/S digitales
                movwf   ADCON1
                movlw   b"10010010"             ;rc4 sdi
                movwf   TRISC                   ;rc3 clock
                movlw   0x07                    ;rc5 sdo
                movwf   CMCON    
     
                movlw   b"00000000"     ;CKE=0  MODO 1,1  inicia alto
                movwf   SSPSTAT

                movlw   b"00110010"     ;ckp=1  fosc/64
                movwf   SSPCON1

                bcf     PORTC,0      ;cs=0

                movlw      0x20
                movwf      SSPBUF            ;enviamos un byte ejemplo un comando
                btfss         PIR1,SSPIF
                goto          $-2
                bcf             PIR1,SSPIF

                movlw      .0
                movwf      SSPBUF            ;enviamos pulsos de relog
                btfss         PIR1,SSPIF
                goto          $-2
                bcf             PIR1,SSPIF
     
                movff         SSPBUF,Dato   ;recogemos un datoSonrisa Gigante

               end

bueno es tarde y me duermo hasta pronto



Desconectado josselo24

  • PIC10
  • *
  • Mensajes: 6
RE: error con la pata RC3/SCK
« Respuesta #2 en: 27 de Marzo de 2006, 08:35:00 »
gracias por el consejo, igual realice la programacion manualmenet y me dio resultado

Desconectado O_R_E

  • PIC10
  • *
  • Mensajes: 13
RE: error con la pata RC3/SCK
« Respuesta #3 en: 28 de Marzo de 2006, 17:04:00 »
Hola muy buenas,

Yo estoy usando un PIC16F877, que es el homólogo al de la familia 18F que estás utilizando. Al ver tu mensaje, yo tengo unas dudas, ya que coloco en el programa el siguiente código en C, programado mediante CCS, y no consigo leer el valor de un LM35, y posteriormente visualizarlo en el display. Es correcto el código que genero para conseguir la conversion de 12 bits de mi MAX187?, porque como consigo los 13 pulsos de reloj que necesita mi conversor para convertir el dato? Haber como lo realizas, para ver si debo corregir algún error:

// Configuracion chip y compilador

#include "16F877.h"
#fuses EC_IO,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP
#use delay(clock=10000000)
#use rs232(baud=57600, xmit=PIN_C6, rcv=PIN_C7)

// Definición de pins ADC

#define MAX187_CS    = 7.2
#define MAX187_SCLK    = 7.3
#define MAX187_DOUT   = 7.4

// Funciones

int leerMAX187(void);

void main(void)
{
   // Variables
   int dato;

   // Configuracion de los puertos
   #use fast_io(A)
   #use fast_io(B)
   #use fast_io(C)
   #use fast_io(D)
   #use fast_io(E)
   set_tris_a(0b00000000);
   set_tris_b(0b00000000);
   set_tris_c(0b00110110);
   set_tris_d(0b00000000);
   set_tris_e(0b00000000);

   // Inicializacion del SPI
   output_high(MAX187_CS);         // Activo el pin CS a nivel bajo

   // Inicialización del puerto SPI
   setup_spi(SPI_MASTER | SPI_L_TO_H | SPI_CLK_DIV_16);
   
                while(1)
                {
                           dato = leerMAX187();
                           printf("Este es el valor procedente del ADC: %d
",dato);
                           delay_us(100);
                }

   return;
}

int leerMAX187(void)
{
   int datoMAX187;

   output_low(MAX187_CS);                            // Seleciono CS para decirle al ADC que va ha comenzar la adquisición de datos
   delay_us(MAX187_Aquire_Time);                     // Espera
   datoMAX187 = spi_read(0);                         // Adquiero el dato del MAX187
   output_high(MAX187_CS);                           // Desabilito el ADC  

   return datoMAX187;
}

No se si estoy realizando lo correcto y si te servirá de ayuda.

Un saludo,

Desconectado josselo24

  • PIC10
  • *
  • Mensajes: 6
RE: error con la pata RC3/SCK
« Respuesta #4 en: 31 de Marzo de 2006, 14:43:00 »
vi tu porgrama y en general esta bien, la diferencia que hice yop, fue utilizar los comandos directamente (osea los registros), para asi no utilizar el comando que te facilita el ccs para esta comunicacion, ya que, al visualizar estos registros en en mi lcd no me reflejaba exactamente lo que yo queria.

como tu sabras el pic solo convierte 8 bit, y yo necesitaba la conversion de 12, por lo que use el max 191 he utilice el pic como master, a mi solo me interesa los datos que envia el conversor para reflejarlos en mi lcd, como el pic almacena de 8 bit, hay que decirle que pida dos veces y asi puedes leer completa la informacion

Desconectado O_R_E

  • PIC10
  • *
  • Mensajes: 13
RE: error con la pata RC3/SCK
« Respuesta #5 en: 01 de Abril de 2006, 06:34:00 »
Hola Josselo,

Es cierto lo que comentas, espero realizar algunos cambios en el programa que postee aqui, porque me da la sensación de que no recibiré bién los datos. Ya que viendo el data sheet de ambos componentes me asaltan varias dudas que espero resolver en estos días para posteriormente hacer lo mismo que tú, visualizar por el lcd el valor convertido por mi MAX187, hay vienen mis dudas, porque al ser de 12 bits, y recibir solo 8 bits, me quedan 4 del conversor, no se como gestionarlo. Espero poder gestionarlo de forma correcta.

Un saludo,

Desconectado josselo24

  • PIC10
  • *
  • Mensajes: 6
RE: error con la pata RC3/SCK
« Respuesta #6 en: 01 de Abril de 2006, 21:07:00 »
holaFlash
ojala puedas solucionar tu problema, lo que te puedo decir como experiencia personal, es que el microcontrolador es muy, pero muy inteligente...me explico....
el pic te va a tomar los datos cuanto tu le digas y los va ha almacenar en ocho bit,
el max es torpe, ya que te envia dos byte con la informacion de la conversion de alli tu tienes que interpretarla, lo que tienes que hacer es leer dos veces inicializando dos variables disyintas y te daras cuenta que sus valores son distintos al visualizarlas en tu lcd, yo lo hice...incluso le pedi que le leyera mas veces en una conversion y sólo me da los datos de dos variables, ya que el max te envia en cada conversion 16bit de los cuales 4 son basuras, ojala te ayude esto ha aclarar un poco tus ideas.

aprovecho de preguntarte si has tenido experiencias con la comunicacion serial utilizando las normas rs 232 y rs485

chaoDivertido

Desconectado O_R_E

  • PIC10
  • *
  • Mensajes: 13
RE: error con la pata RC3/SCK
« Respuesta #7 en: 02 de Abril de 2006, 09:51:00 »
Hola josselo,

Efectivamente todo lo que comentas es cierto, una de las utilidades que he visto para poder modificar el programa que postee es leer en dos bytes, tal y como dice el data sheet del MAX187 de la siguiente forma:

for (i=0;i<16;i++){
      shift_left(&data,2,input(MAX187_DOUT));      //leer en 2 bytes el dato del adc del  pin MAX187_DOUT
      output_high(MAX187_SCLK);
      output_low(MAX187_SCLK);
   }

En referencia a lal comunicación, yo lo realizo mediante RS232, el problema que he tenido principalmente es que fundi totalmente la fuente de alimentación del primer PC, el integrado del port 1 del RS232 de otro PC, incluso saltaba el diferencial de mi casa al conectar la fuente de alimentación de mi aplicación...hasta que me di cuenta que tenía un condensador polarizado incorrectamente con el MAX232. Yo segui un ejemplo en este enlace:

http://miarroba.com/foros/ver.php?foroid=46840&temaid=4061462&pag=6
del amigo vszener...un carck

y de este:

http://miarroba.com/foros/ver.php?foroid=46840&temaid=4679539

Pero para la próxima vez, he conseguido averiguar que donde cursaba mis estudios, hay una aplicación para comprobar el hardware, antes de que pase lo que te comentaba antes, menos mal que lo que no fundi es el puerto serie del portátil, sino me da algo. Ya que puedes encontrar PC"s por 35€ para programar este tipo de comunicaciones antes de fastidiar algo.

Un saludo,


Desconectado josselo24

  • PIC10
  • *
  • Mensajes: 6
RE: error con la pata RC3/SCK
« Respuesta #8 en: 03 de Abril de 2006, 10:46:00 »
Hola O_R_E Rebotado

Lamento que te pasara eso en tu pc al conectar la max232, a mi nunca me ha pasado, quizas estuve con un poco mas de suerte, igual al armar circuitos uno siempre se equivoca y es normal quemar algunos dispositivos por una mala conexion Enfurruñado , lo importante , es no cometer el error mas de una vez.

Yo estoy trabajando en el protocolo Modbus utilizando un Pic,  he realizado una conexion utilizando las pastillas 75176b para realizar una conversión rs232 a rs485,  baje un esquema de este mismo foro, pero solo me funciona a veces, espero solucionar luego ese problema, bueno estamos en contactos....

Divertido adios