Autor Tema: ADC, MikroC PIC 16F877A (Dudas)  (Leído 7113 veces)

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

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: ADC, MikroC PIC 16F877A (Dudas)
« Respuesta #15 en: 08 de Julio de 2015, 13:55:30 »
Bueno... estuve viendo un poco mejor las librerias...

No existe razon de usar SPI_Init y luego SPI_Init_Advance. Ademas ahi esta el problema que te diga que es un cortocircuito

De SPI_Init()
Citar
This routine configures and enables SPI module with the following settings:

master mode
clock Fosc/4
clock idle state low
data transimtted on low to high edge
input data sampled at the middle of interval

Le podes poner dentro lo que quieras pero no te deja seleccionar la frecuencia con eso. Cuando haces eso lo pones en modo master. Eso por un lado.
Por otro lado quita el "delay_ms(100)" del esclavo, o usa interrupciones.

Y otra cosa... no se por que hicimos una transmision como para un ADC de 12/10 bits cuando en el master haces:

Código: C
  1. PORTB = ADC_GET_SAMPLE(0);
  2.                 delay_us(20);
  3.                 VRX = PORTB;
  4.                 SPI1_Write(VRX);

Donde lo que obtenes con el ADC, le estas quitando los 4/2 bits mas significativos, es decir que vas a tener 4 rampas de 0x00 a 0xFF mientras cambian los bits mas significativos y que vos perdes. Ya que PORTB es de 8 bits.
Ahora si usas SOLAMENTE 8 bits en el ADC, entonces el codigo del esclavo esta mal. ya que este espera esos 16 bits por canal.



Código: C
  1. PORTB = SSPBUF;
  2.                 array_valores_rx[i]= SSPBUF;

Esto tambien esta mal, una ves que lees el buffer ese dato desaparece.

Utiliza este codigo en el esclavo, remove el SPI_Init() de antes:

Código: C
  1. while(1){
  2.          if(SSPSTAT.BF==1)
  3.         {
  4.                 resultado[i]= SSPBUF;
  5.                 i++;
  6.                 if(i==2)
  7.                 {
  8.                         i=0;
  9.                         PORTB = resultado[0];
  10.                         PORTD = resultado[1];
  11.                 }
  12.          }
  13.    }
  14. }

Y este en el maestro suponiendo que sea de 10 bits, asi envias los 8 mas significativos. Y solo envias 8 nomas.

Código: C
  1. do{
  2.                 VRX = (ADC_GET_SAMPLE(0) >> 2 );
  3.                 PORTB = VRX;
  4.                 delay_us(20);
  5.  
  6.                 SPI1_Write(VRX);
  7.                 while(SSPSTAT.BF==1);
  8.                 delay_ms(100);
  9.  
  10.                 VRY = (ADC_GET_SAMPLE(1) >> 2 );
  11.                 PORTD = VRY;
  12.                 delay_us(20);
  13.  
  14.                 SPI1_Write(VRY);
  15.                 while(SSPSTAT.BF==1);
  16.                 delay_ms(100);
  17.              }while(1);

En tu maestro estas modificando los regisotrs ADCON0 y ADCON1, y luego usas ADC_Init() el cual te modifica esos registros cambiando lo que hayas puesto antes, asi que no tendria sentido escribir esos registros creo.

Desconectado Ryuzaki

  • PIC10
  • *
  • Mensajes: 16
Re: ADC, MikroC PIC 16F877A (Dudas)
« Respuesta #16 en: 09 de Julio de 2015, 15:40:21 »
Listo corregui los errores y anda re bien!! :D
El unico problemita que quedo, es que el puertoB del receptor aun sigue titilando. Ya no me tira el valor de ambas variables sino que tira VRX y despues tira cualquier verdura, y vuelve a VRX y asi constantemente. Que podra ser?? :?

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: ADC, MikroC PIC 16F877A (Dudas)
« Respuesta #17 en: 09 de Julio de 2015, 19:12:20 »
Bueno al menos solucionamo lo del SPI, ese problema parece ser como que esta recibiendo algo que no debe ser. O se esta enviando algo que no debe ser. lo raro es que no deberia hacerlo.

Se podria probar en el recepto en ves de preguntar por el bit BF, preguntar por la bandera de interrupcion del SPI y limpiarla una ves que se lea ( si es que no lo hace solo), Por lo demas no veo por que puede ocurrir eso.

Desconectado Ryuzaki

  • PIC10
  • *
  • Mensajes: 16
Re: ADC, MikroC PIC 16F877A (Dudas)
« Respuesta #18 en: 10 de Julio de 2015, 22:58:35 »
Seguro me puedas ayudar con el PWM, voy a abrir otro post.
Gracias por todo!! sos un crack!  ((:-)) (Tema solucionado)


 

anything