Autor Tema: Problema con comunicacion SPI entre Pic 16f877a y mcp41010  (Leído 2585 veces)

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

Desconectado Ala

  • PIC10
  • *
  • Mensajes: 5
Problema con comunicacion SPI entre Pic 16f877a y mcp41010
« en: 29 de Diciembre de 2013, 11:56:54 »
Hola, estimados personajes, mi duda se centra en que he realizado el codigo para comunicacion SPI entre el pic 16f887a y el potenciometro digital mcp41010, pero no se xq no funciona, que alguien me explique ¡¡¡¡.. dice la frase.
Me encuentro utilizando la libreria Spi del programa MikroC_PRO, adjunto el codigo y su simulacion en proteus 8.
utilizando el SPI_debuger del simulador al parecer llega el byte de datos, pero el pot digital no realiza nada.
De antemano Gracias  Sad ...

Código: [Seleccionar]
unsigned int value=0;                     // Dato a ser enviado es de tipo unsigned int
void main() {
  TRISC.B0=0;                   //configurcion de pines como salida y entrada
  TRISC.B3=0;
  TRISC.B5=0;
  TRISC.B4=1;
  PORTC.F0=1;
  // inicio del modulo SPI
  SPI1_Init_Advanced(_SPI_MASTER_OSC_DIV64, _SPI_DATA_SAMPLE_MIDDLE, _SPI_CLK_IDLE_LOW, _SPI_LOW_2_HIGH);       // Inicializar el módulo SPI
  delay_ms(10);
    while(1){
   PORTC.F0=0;  //seleccion de dispositivo
   delay_ms(10);
   SPI1_Write(value);    // Envíar el valor
   value++;   // invcremento del valorpara enviar al pot dig
   if(value==256)value=255;
  PORTC.F0=1;  //deseleccion del dispositivo
  delay_ms(500);
 }
 }
Oj_alá: del árabe لو شاء لله , law sha'a Allah; «si Dios quisiera»

Desconectado PCCM

  • PIC16
  • ***
  • Mensajes: 109
Re: Problema con comunicacion SPI entre Pic 16f877a y mcp41010
« Respuesta #1 en: 29 de Diciembre de 2013, 12:43:15 »
En estas comunicaciones como el SPI, primero tienes que enviar una instrucción de lo que se debe realizar al integrado(leer, escribir, testear, etc).
y después enviar el valor que quieres colocar(en el caso que quieras realizar la instrucción de escribir)

En tu código aparece que solo envias 0,1,2,3...., pero esos datos no son datos que pueda interpretarlo.

En el datasheet, pagina 18:

http://ww1.microchip.com/downloads/en/DeviceDoc/11195c.pdf

te dice los datos que debes enviar para que se comporte como requieres.
primero envia un byte de comando y despues envia la data necesaria.

Otra cosa es que también seria bueno que lo pruebes fisicamente, ya que a veces proteus no te simula bien el comportamiento del SPI cuando hay 2 integrados comunicandose(Me sucedió para 2 dspics).
« Última modificación: 29 de Diciembre de 2013, 12:45:23 por PCCM »

Desconectado Ala

  • PIC10
  • *
  • Mensajes: 5
Re: Problema con comunicacion SPI entre Pic 16f877a y mcp41010
« Respuesta #2 en: 29 de Diciembre de 2013, 16:39:03 »
 ((:-))   puccha muchas gracias PCCM  :-/     eso habia sido....  :D....    al parecer la simulación funciona, esperemos en realidad lo haga también,, jeje
« Última modificación: 29 de Diciembre de 2013, 16:48:45 por Ala »
Oj_alá: del árabe لو شاء لله , law sha'a Allah; «si Dios quisiera»

Desconectado Firguel

  • PIC10
  • *
  • Mensajes: 2
Re: Problema con comunicacion SPI entre Pic 16f877a y mcp41010
« Respuesta #3 en: 27 de Enero de 2014, 16:19:52 »
Buenas estoy intentando programar en hitech el spi del pic16f877a pero no me entra en ningun momento en la interrupcion. Expongo el programa a ver si sabeis cual es el problema.
Un saludo.

#include <htc.h>

 
__CONFIG(WRT_OFF & WDTE_OFF & PWRTE_OFF & FOSC_HS & LVP_OFF);
 
#define _XTAL_FREQ 20000000 //Oscilador Interno de 20MHZ
#define PIN_SCE   PORTA,0
#define PIN_RESET PORTA,1
#define PIN_DC    PORTA,2
#define PIN_SDIN  PORTA,3
#define PIN_SCLK  PORTA,4
 
// Configuracion del Lcd
#define LCD_C     0
#define LCD_D     1
#define LCD_CMD   0
 
// Tamaño del Lcd
#define LCD_X     84
#define LCD_Y     48

signed int scrollPosition=-10,index=1;
const signed espacio[5]={0,0,0,0,0};
const char exclamacion[5]={0,0,0,0,0};

void main ()
{
TRISA=0X00;
PORTA=0X00;
TRISB=0X00;
TRISC=0b00000000;
SMP=1;
SSPM3:SSPM0=0010;
CKP=0;
SMP=1;
CKE=0;
PEIE=1;
GIE=1;
SSPIE=1;
SSPEN=1;
TRISB=0X00;
SSPBUF=0X22;
while(1)
{
}
}

static void interrupt isr(void)
{
if(SSPIF==1)
{
SSPIF=0;
PORTB=0XFF;
if(WCOL==1)
{
WCOL=0;
}
if(SSPOV==1)
{
SSPOV=0;
}
}
}

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Problema con comunicacion SPI entre Pic 16f877a y mcp41010
« Respuesta #4 en: 27 de Enero de 2014, 18:10:15 »
Buenas estoy intentando programar en hitech el spi del pic16f877a pero no me entra en ningun momento en la interrupcion. Expongo el programa a ver si sabeis cual es el problema.
Un saludo.

#include <htc.h>

 
__CONFIG(WRT_OFF & WDTE_OFF & PWRTE_OFF & FOSC_HS & LVP_OFF);
 
#define _XTAL_FREQ 20000000 //Oscilador Interno de 20MHZ
#define PIN_SCE   PORTA,0
#define PIN_RESET PORTA,1
#define PIN_DC    PORTA,2
#define PIN_SDIN  PORTA,3
#define PIN_SCLK  PORTA,4
 
// Configuracion del Lcd
#define LCD_C     0
#define LCD_D     1
#define LCD_CMD   0
 
// Tamaño del Lcd
#define LCD_X     84
#define LCD_Y     48

signed int scrollPosition=-10,index=1;
const signed espacio[5]={0,0,0,0,0};
const char exclamacion[5]={0,0,0,0,0};

void main ()
{
TRISA=0X00;
PORTA=0X00;
TRISB=0X00;
TRISC=0b00000000;
SMP=1;
SSPM3:SSPM0=0010;
CKP=0;
SMP=1;
CKE=0;
PEIE=1;
GIE=1;
SSPIE=1;
SSPEN=1;
TRISB=0X00;
SSPBUF=0X22;
while(1)
{
}
}

static void interrupt isr(void)
{
if(SSPIF==1)
{
SSPIF=0;
PORTB=0XFF;
if(WCOL==1)
{
WCOL=0;
}
if(SSPOV==1)
{
SSPOV=0;
}
}
}

  ¿Puedes mostrar tu conexionado? ¿Por qué defines SDI como "PORTA,3" si el pin para SDI es RC4?
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas


 

anything