Autor Tema: Leer y almacenar datos en MikroC  (Leído 9552 veces)

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

Desconectado AuPata

  • PIC10
  • *
  • Mensajes: 9
Leer y almacenar datos en MikroC
« en: 26 de Marzo de 2011, 19:06:27 »
Reciban todos un cordial saludo.

Soy nueva en el entorno de MikroC, y hasta el momento me ha parecido muy bueno. Me estoy enfrentando a un problema y es que deseo leer los datos que entran por un pin del micro, por ejemplo PORTB.F0, estos datos irlos almacenando, cuando reciba 8 bits armar una palabra y mostralo por un puerto con leds.

Será que alguien podría ayudarme con las instrucciones de lectura en MikroC, por favor??? Y con todo lo demás! muchisimas gracias


Desconectado bigluis

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 511
    • Tutoriales de Qt C++
Re: Leer y almacenar datos en MikroC
« Respuesta #1 en: 26 de Marzo de 2011, 20:00:32 »
Puedes hacer lo siguiente
Código: [Seleccionar]
for(i=8;i--;){       //Para i igual a 8 hasta i igual a 1;
   aux<<=1;          //Desplazamos 1 bit a la izquierda la variable aux
   aux.F0=PORTB.F0;  //El bit 0 de aux sera igual al bit 0 de PORTB
   }
PORTC=aux;

Aunque si no me equivoco lo que tu deseas hacer es transmisión SPI o Serial, por lo cual puedes utilizar el módulo de transmisión SPI que traen algunos PIC y resolver esto mejor.
« Última modificación: 26 de Marzo de 2011, 20:04:07 por bigluis »
Tutoriales de Qt C++

No es necesario que hagamos Grandes cosas, sino que lo que hagamos sea importante.

SI la NECESIDAD es la MADRE del CONOCIMIENTO, SEGURAMENTE la PEREZA su TÍA.

Cuando el ARTE requiere de PRECISION le llamamos CIENCIA

Desconectado AuPata

  • PIC10
  • *
  • Mensajes: 9
Re: Leer y almacenar datos en MikroC
« Respuesta #2 en: 26 de Marzo de 2011, 20:24:04 »
Gracias por sacar de tu tiempo y ayudarme!

Específicamente estoy trabajando sobre el siguiente ejemplo: por el pin E0 estoy enviando una trama de datos, en este caso 10011010, esto lo pongo como entrada en el pin A0, y lo que deseo es esperar a que por AO me lleguen los 8 bits, armar la "palabra"y por el puerto C puede ser escribir esto mismo, 10011010.  Pongo algunos leds testigo, y esto es lo que no he podido, coger los datos.

En lo que me enviaste aux es una variable? de que tipo?
Realmente es de gran ayuda para mi, muchisimas gracias!!!


int i, aux=0;

void salidatos(){
 PORTE.F0=0;
 PORTE.F1=0;
for (i=0; i<=2; i++)
{
PORTE.F1=1      ;

PORTE.F0 = 1;
Delay_ms(50);
PORTE.F0 = 0;
Delay_ms(50);
PORTE.F0 = 0;
Delay_ms(50);
PORTE.F0 = 1;
Delay_ms(50);
PORTE.F0 = 1;
Delay_ms(50);
PORTE.F0 = 0;
 Delay_ms(50);
PORTE.F0 = 1;
Delay_ms(50);
PORTE.F0 = 0;
 Delay_ms(50)   ;

PORTE .F1=0;
Delay_ms(100);
   }
   }
void main ( void )

{
TRISE = 0;
TRISC=0;
TRISA=1;

     PORTA.F0=1;

 Delay_ms(50);
     salidatos();



}
 

Desconectado bigluis

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 511
    • Tutoriales de Qt C++
Re: Leer y almacenar datos en MikroC
« Respuesta #3 en: 27 de Marzo de 2011, 19:25:13 »
El tipo de transmisión serie más simple que conosco es SPI (Serial Perpheral Interface), esta utliza 4 pines para realizar la transmisión, estos son:
  • SDI o Serial Data Imput,
  • SDO Serial Data Ouput
  • SCK o Serial Clock
  • SS o Slave Select tambien conocido como CS o Chip select

En la todos los protocolos de transmisión serie siempre existe un dispositivo Master y un Dispositivo Slave, el dispositivo Master controla toda la transmisión el Slave unicamente recive ordenes.

Para realizar una transmisión el Master debe generar una señal de reloj mediante SCK y el slave recibirla, Mediante el pin SDO el Master envia los datos a transmitir y mediante el pin SDI recibe los datos del Slave.

La señal de reloj sirve para que ambos dispositivos se sincronicen y puedan entenderse, ya que cada bit se recibe o transmite en uno de los flancos del reloj.

Te recomiendo que busques un poco más de información.

En MikroC para transmitir un dato debes utilizar la función SPI_write(byte) y para leer un dato debes utilizar la función byte=SPI_read().

Tutoriales de Qt C++

No es necesario que hagamos Grandes cosas, sino que lo que hagamos sea importante.

SI la NECESIDAD es la MADRE del CONOCIMIENTO, SEGURAMENTE la PEREZA su TÍA.

Cuando el ARTE requiere de PRECISION le llamamos CIENCIA

Desconectado AuPata

  • PIC10
  • *
  • Mensajes: 9
Re: Leer y almacenar datos en MikroC
« Respuesta #4 en: 28 de Marzo de 2011, 12:40:25 »
De nuevo muchas gracias por las respuestas, realmente lo que estoy haciendo es trabajando con el sensor SHT 71, este es un sensor que trabaja con el protocolo wire to wire. Tiene dos pines de "control", así como mencionabas con SCK y uno de datos. Hasta el momento estoy programando para realizar el ejemplo de leer humedad que sale en el datasheet. http://www.sensirion.com/en/pdf/product_information/Datasheet-humidity-sensor-SHT7x.pdf . Página 7.

El sensor simulado en proteus, ya recibe datos, lo que no he podido hacer es que los lea y los escriba para poder hacer la ecuación, lo hice de esta manera, pero no me funciona, por eso decidí devolverme e intentar realizar el ejemplo que anteriormente pregunte.

Así se lee el dato que ingresa por el pin E0, mientras E1 es el sck!


Código: [Seleccionar]
unsigned short ReadGen(){//
unsigned short Read = 0;//
TRISE.F0 = 1; // DATA COMO ENTRADA

PORTE.F1 = 1;
Delay_us(50);
Read.F7 = PORTE.F0;
Delay_us(50);
PORTE.F1 = 0;
Delay_us(100);
PORTE.F1 = 1;
Delay_us(50);
Read.F6 = PORTE.F0;
Delay_us(50);
PORTE.F1 = 0;
Delay_us(100);
PORTE.F1 = 1;
Delay_us(50);
Read.F5 = PORTE.F0;
Delay_us(50);
PORTE.F1 = 0;
Delay_us(100);
PORTE.F1 = 1;
Delay_us(50);
Read.F4 = PORTE.F0;
Delay_us(50);
PORTE.F1 = 0;
Delay_us(100);
PORTE.F1 = 1;
Delay_us(50);
Read.F3 = PORTE.F0;
Delay_us(50);
PORTE.F1 = 0;
Delay_us(100);
PORTE.F1 = 1;
Delay_us(50);
Read.F2 = PORTE.F0;
Delay_us(50);
PORTE.F1 = 0;
Delay_us(100);
PORTE.F1 = 1;
Delay_us(50);
Read.F1 = PORTE.F0;
Delay_us(50);
PORTE.F1 = 0;
Delay_us(100);
PORTE.F1 = 1;
Delay_us(50);
Read.F0 = PORTE.F0;
Delay_us(50);
PORTE.F1 = 0;
Delay_us(100);
//TRISE.F0 = 0;
//PORTE.F0 = 0;
//PORTE.F1 = 1;
//Delay_us(100);
//PORTE.F1 = 0;
//Delay_us(100);
TRISE.F0 = 0;
return Read;
}]

Después de tener Read hago, PORTC=Read. Pero no me sale nada, de nuevo muchas gracias por la ayuda!

Desconectado AuPata

  • PIC10
  • *
  • Mensajes: 9
Re: Leer y almacenar datos en MikroC
« Respuesta #5 en: 28 de Marzo de 2011, 12:41:09 »
De nuevo muchas gracias por las respuestas, realmente lo que estoy haciendo es trabajando con el sensor SHT 71, este es un sensor que trabaja con el protocolo wire to wire. Tiene dos pines de "control", así como mencionabas con SCK y uno de datos. Hasta el momento estoy programando para realizar el ejemplo de leer humedad que sale en el datasheet. http://www.sensirion.com/en/pdf/product_information/Datasheet-humidity-sensor-SHT7x.pdf . Página 7.

El sensor simulado en proteus, ya recibe datos, lo que no he podido hacer es que los lea y los escriba para poder hacer la ecuación, lo hice de esta manera, pero no me funciona, por eso decidí devolverme e intentar realizar el ejemplo que anteriormente pregunte.

Así se lee el dato que ingresa por el pin E0, mientras E1 es el sck!


Código: [Seleccionar]
unsigned short ReadGen(){//
unsigned short Read = 0;//
TRISE.F0 = 1; // DATA COMO ENTRADA

PORTE.F1 = 1;
Delay_us(50);
Read.F7 = PORTE.F0;
Delay_us(50);
PORTE.F1 = 0;
Delay_us(100);
PORTE.F1 = 1;
Delay_us(50);
Read.F6 = PORTE.F0;
Delay_us(50);
PORTE.F1 = 0;
Delay_us(100);
PORTE.F1 = 1;
Delay_us(50);
Read.F5 = PORTE.F0;
Delay_us(50);
PORTE.F1 = 0;
Delay_us(100);
PORTE.F1 = 1;
Delay_us(50);
Read.F4 = PORTE.F0;
Delay_us(50);
PORTE.F1 = 0;
Delay_us(100);
PORTE.F1 = 1;
Delay_us(50);
Read.F3 = PORTE.F0;
Delay_us(50);
PORTE.F1 = 0;
Delay_us(100);
PORTE.F1 = 1;
Delay_us(50);
Read.F2 = PORTE.F0;
Delay_us(50);
PORTE.F1 = 0;
Delay_us(100);
PORTE.F1 = 1;
Delay_us(50);
Read.F1 = PORTE.F0;
Delay_us(50);
PORTE.F1 = 0;
Delay_us(100);
PORTE.F1 = 1;
Delay_us(50);
Read.F0 = PORTE.F0;
Delay_us(50);
PORTE.F1 = 0;
Delay_us(100);
//TRISE.F0 = 0;
//PORTE.F0 = 0;
//PORTE.F1 = 1;
//Delay_us(100);
//PORTE.F1 = 0;
//Delay_us(100);
TRISE.F0 = 0;
return Read;
}]

Después de tener Read hago, PORTC=Read. Pero no me sale nada, de nuevo muchas gracias por la ayuda!

Desconectado bigluis

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 511
    • Tutoriales de Qt C++
Re: Leer y almacenar datos en MikroC
« Respuesta #6 en: 28 de Marzo de 2011, 18:36:44 »
Existen muchos tipos de transmisión serie, el otro tipo sumamente utilizado es la transmisión I2C, este tipo se caracteriza por utilizar solo dos pines para la transmisión, los cuales son SCK o SCL que transmite la señal de reloj y DATA o SDA que sirve para transmitir y recibir datos, es decir es un tipo de transmisión Half-duplex (si no me equivoco).

Algunos MCU como el PIC16F887 traen un módulo de transmisión I2C integrado que les permite realizar este tipo de comunicación, para programarlos con MikroC es necesario utilizar las siguientes funciones:

I2C1_init(const unsigned long clock);
Se utiliza para inicializar el módulo a una velocidad de reloj determinada por el valor clock que le ingreses.

unsigned short I2C1_Start(void);
Inicia la transmisión I2C y retrona 0 si no ocurre ningun error.

void I2C1_Repeated_Start(void);
Se utiliza si es necesario reiniciar la transmisión despues de haberla terminado.

unsigned short I2C1_Is_Idle(void);
Se utiliza para ver si otro dispositivo no ha iniciado transmisión I2C. Retorna 1 si esta libre de lo contrario retorna 0.

unsigned short I2C1_Rd(unsigned short ack);
Lee el dato recibido del dispositivo esclavo y envia una señal de no acuse si el parametro ack es 0, de lo contrario envia la señal de acuse.

unsigned short I2C1_Wr(unsigned short data_);
Escribe un dato en el dispositivo esclavo y retorna 0 si no hay errores.

Por los momentos solo escribire esto, te recomiendo que leas un poco mas sobre comunicación I2C, luego escribire algo mas ya que debo leer la hoja de datos del dispositivo para siguirte ayudanto.

Otra cosa que te recomiendo es que mires el ejemplo que trae la Ayuda de MikroC.
Tutoriales de Qt C++

No es necesario que hagamos Grandes cosas, sino que lo que hagamos sea importante.

SI la NECESIDAD es la MADRE del CONOCIMIENTO, SEGURAMENTE la PEREZA su TÍA.

Cuando el ARTE requiere de PRECISION le llamamos CIENCIA

Desconectado AuPata

  • PIC10
  • *
  • Mensajes: 9
Re: Leer y almacenar datos en MikroC
« Respuesta #7 en: 28 de Marzo de 2011, 19:45:45 »
Una vez más gracias por la ayuda!

En el datasheet mencionan lo siguiente:

The sensor cannot be addressed by I2C protocol, however, the sensor can be connected to an I2C bus without interference with other devices connected to the bus.

Mencionan que el protocolo es Wire to Wire.
Communication digital 2-wire interface.