Autor Tema: Ayuda por favor, ARRAYS Y PICS mejora codigo?  (Leído 1882 veces)

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

Desconectado gamch2004

  • PIC10
  • *
  • Mensajes: 11
Ayuda por favor, ARRAYS Y PICS mejora codigo?
« en: 13 de Septiembre de 2004, 06:32:00 »
Reciban un cordila saludo, mi nombre es Gustavo Martinez, estudiante de la U.P.C. en Barcelona.

El motivo de mi mensaje es el de pedirle por favor su opinion y de no tener inconveniente su ayuda, entorno a un problema que me sucito durante uno de los proyectos de microntroladores, y que a la fecha sigo sin poder resolver, y se relaciona con el uso de algun tipo de PIc.

En la escuela me pidieron que pudiera captura los valores de un sensor formado por un arreglo de 256 pixeles de la casa hamamatsu, y que los valores de cada uno de los pixeles los captura mediante el convertidor A/D del propio PIC via el protocolo RS232,

Para ello me facilitaron el compilador de PIC en lenguaje C de CCS ver 3.11.

Los datos del sensor estan aqui;

http://usa.hamamatsu.com/hcpdf/parts_S/S8377-128BQ.pdf


Para atender este proyecto, utilice el PIC16F876,por ser uno de los mas comunes entre la tiendas de electronica de Barcelona.

El trabajo lo inicie poniendo en marcha el funcionamiento del arreglo de 256 pixeles, para suy operacion se requiere de dos se;ales de reloj, una usada como disparo o periodo de integracion (SI)y la segunda como sincronismo (clk) hasta este momento todo camino bien.

Este es el codigo que genera los pulsos de operacion del arreglo.

#include <16f876.h>
#device ADC=10 // A/D Result format
#fuses HS,NOWDT,NOPROTECT,PUT,BROWNOUT,NOLVP,NOCPD,NOWRT

#use delay (CLOCK=10000000)
#use rs232 (BAUD=9600, XMIT=PIN_C6, RCV=PIN_C7)

#use fast_io (b)
#byte porta = 5
#byte portb = 6
#byte portc = 7

main()
{

int i;
set_tris_a(0x00);
set_tris_b(0x00);

portb=0;
porta=0;

Do
{

bit_set(PORTB,7); //CLK High
bit_set (PORTB,6); //SI High

bit_clear(PORTB,6); //SI High
delay_us(1);
bit_clear (PORTB,7); //CLK Low

delay_us(1);
bit_set (PORTB,6); //SI High
delay_us(1);
bit_set(PORTB,7); //CLK High

for(i=0; i<255; i++)
{
bit_clear(PORTB,7); //CLK Low
delay_us(1);
bit_set(PORTB,7); //CLK High
}
delay_ms(50);
}
while(1);
}


Con este codigo se pudo confirmar el buen funcionamiento del arreglo .

El inconveniente que se presenta y es parte de mi situacion escolar en que no soy capas de capturar los 256 pixeles o alguna serie de ellos (64 0 128 picxels) utilizando las funciones del convertidor A/D para poder enviarlo via el protocolo RS/232 y observar los resultados en la hipertimal de windows. Para despues con la hoja de Excell poder ver su dibujo, la idea es el poder improvisar un espectro segun si se incide poco o mucha luz en cada uno de los pixeles del sensor.


Me comentan mis compaeros que el pic no es el adedcuado, que tiene poca memoria que es muy lento, etc

Uno de mis amigos me propuso emplear interupciones, en lo particular no soy muy habil programandolas y creo que menos las del convertidor A/D con el lenguaje C.

Este es lo ultimo que puedo hacer en lo refernte al codigo, y observo que no funciona..

#include <16f876.h>

#fuses HS,NOWDT,NOPROTECT,PUT,BROWNOUT,NOLVP,NOCPD,NOWRT
#device ADC=10

#use delay(CLOCK = 10000000)
#use rs232(BAUD = 9600, XMIT = PIN_C6, RCV = PIN_C7)

#byte porta = 5
#byte portb = 6
#byte portc = 7

unsigned char Data[64];
unsigned long indice=0;

#INT_AD
void rutina_AD()
{
Data[indice]=read_adc(ADC_READ_ONLY);
indice++;
}


void main (void)
{

long data; // Variable para los datos del A/D.
int i;
int j;
int k; // Variable para el inicio del retardo.

//analog data 1
Setup_adc_ports (RA0_RA1_RA3_ANALOG); //RA3 is Ref+ others A/D
Setup_adc (ADC_CLOCK_DIV_32); //Fosc/32 FULL speed

set_tris_a(0x00); // Los puertos a y b se configuran como salida
set_tris_b(0x00); // Si se busca que sean entradas, basta con colocar FF

portb=0; // Inicialisa el puerto "a" a cero
porta=0; // Inicialisa el puerto "b" a cero

//*** Se definen el inicio de la señal (SI) y (CLK) del S8733***//
//**********************************************************************************//

bit_set(PORTB,7); //CLK High
bit_set (PORTB,6); //SI High

bit_clear(PORTB,6); //SI High
delay_us(1);
bit_clear (PORTB,7); //CLK Low

delay_us(1);
bit_set (PORTB,6); //SI High
delay_us(1);
bit_set(PORTB,7); //CLK High

//*** Se iniciA el ciclo de captura del A/D PIC16F876 una vez en alto la señal (SI) ***//
//*****************************************************************************************/


Set_adc_channel(1); //set channel
Delay_us(10); // retardo en 1 us
enable_interrupts(INT_AD);
enable_interrupts(GLOBAL);

for(i=0; i<64; i++)
{
bit_clear(PORTB,7); //CLK Low
read_adc(ADC_START_ONLY); //iniciar conversion
bit_set(PORTB,7); //CLK High
delay_us(1);
}
delay_ms(50);

disable_interrupts(INT_AD);


//*** Se iniciA el ciclo de captura del A/D PIC16F876, e imprime los 64 valores ***//
//*****************************************************************************************/

for(K=0; k<64; k++) // Se coloca la rutina de 64 ciclos para imprimir
{
Printf ("%4LX",Data[k]);

}

}


Por favor pueden ayudarme para sacr este proyecto..

Cualquier ayuda les estare muy agradecido por ello.



Gustavo A. Mtz.
E_mail: gamartinezch@yahoo.com

Desconectado cHiPmAn

  • PIC16
  • ***
  • Mensajes: 110
RE: Ayuda por favor, ARRAYS Y PICS mejora codigo?
« Respuesta #1 en: 14 de Septiembre de 2004, 07:30:00 »
Hola Gustavo,

En principio no veo problema para hacerlo con el pic que comentas.
He visto la documentación del sensor y el unico requisito en cuanto a velocidad es que la señal de CLK sea superior a 100Hz. A a esta frequencia te da tiempo de hacer la lectura con ADC y mandarlo por el puerto serie para visualizar el resultado por el hiperterminal.

El principal problema que se te puede plantear es almacenar estos datos en el micro, pero para ello puedes usar una memoria FLASH externa.

Yo te recomiendo ir poco a poco y usar los perifericos del micro por separado (Conversor AD, interrupciones,... ) y una vez entendido, hacer el programa entero.

Suerte!





Desconectado gamch2004

  • PIC10
  • *
  • Mensajes: 11
RE: Ayuda por favor, ARRAYS Y PICS mejora codigo?
« Respuesta #2 en: 22 de Septiembre de 2004, 09:21:00 »
Muchas  gracias a todos por su ayuda, no obstante estoy deseperado porque no se la forma de resolver mi problema, he empezad a utilizar un PIC18F452, y el programa siguesin funcioinar, por favor si alguien observa este mensaje, agradeceia cualquier ayuda que me pudieran proporcionar..gracias


 

anything