Hola a todos soy nuevo en arduino y estoy trabajando en un proyecto con un arreglo de sensores TSL1402R que posee dos arreglos de 128 sensores fotonicos cada uno, el cual para procesar la informacion luminica recibida posee una ecuación de tiempo de integración
la cual es Tint = (1/frecuencia Clock)*(n-18)+20us
donde n es la cantidad de sensores fotonicos a usar (maximo 128 por cada arreglo por separado).
estoy utilizando este codigo para la lectura (tomado y modificado desde https://playground.arduino.cc/Main/TSL1402R)
int CLKpin = 5; // <-- Pin Arduino que entrega los pulsos de reloj al pin 5 (CLK) del TSL1402R
int SIpin = 4; // <-- Pin Arduino que entrega el impulso SI (entrada serie) al pin 4 del TSL1402R
int AOpin1 = 4; // <-- Pin Arduino conectado al pin 4 (salida analógica 1) del TSL1402R// salida analoga 1
int AOpin2 = 5; // <-- Pin Arduino conectado al pin 5 (salida analógica 5) del TSL1402R// salida Analoga 2
int IntArray[256]; // <-- El Array donde se almacena la lectura de los fotodiodos, como números enteros entre 0 y 1023.
int np = 128; //numero de datos
int Ch1Pin2 = 2;
//caracterizacion de entradas y salidas.
void setup()
{
// Inicializa dos pines de Arduino como salida.
pinMode(CLKpin, OUTPUT);
pinMode(SIpin, OUTPUT);
//Limpia todos los pines análogos y digitales del Arduino:
for ( int i = 0; i < 14; i++ )
{
digitalWrite(i, LOW);
}
// Retirar cualquier impulso SI existente a través del registro ccd:
for (int i = 0; i < 260; i++)
{
ClockPulse();
}
// Crear un nuevo pulso de reloj de SI y que mismo pulso SI a través del registro del sensor:
digitalWrite(SIpin, HIGH);
ClockPulse();
digitalWrite(SIpin, LOW);
for (int i = 0; i < 260; i++)
{
ClockPulse();
}
Serial.begin(115200);
//Pin para la primera Salida Digital en pos de paralelizar los canales (Canal 1 en pin 2 digital).
pinMode(Ch1Pin2, OUTPUT);
}
//lectura serial del arreglo de sensores.
void loop()
{
//Detiene la integración continua de los quantos de luz de cada fotodiodo mediante un pulso de reloj de SI en el registro de sensores:
digitalWrite(SIpin, HIGH);
ClockPulse();
digitalWrite(SIpin, LOW);
// A continuación, se leen los 256 píxeles en paralelo. Se Guarda el resultado en un array.
// Cada pulso de reloj hace que un nuevo píxel exponga su valor en las dos salidas:
for (int i = 0; i < np; i++)
{
// delayMicroseconds(20);// <-- Añadimos un retraso para estabilizar la salida AO del sensor
IntArray[i] = analogRead(AOpin1);
IntArray[i + np] = analogRead(AOpin2);
ClockPulse();
}
// A continuación, se detiene la integración en curso de los cuantos de luz de cada fotodiodo mediante un pulso reloj en SI:
digitalWrite(SIpin, HIGH);
ClockPulse();
digitalWrite(SIpin, LOW);
// A continuación, se envia la medición almacenada en el arreglo a la computadora usando el puerto serial usb.
// Esto lleva al rededor de 80 ms durante el cual no hay pulsos de reloj que alcancen el sensor.
// No ocurre ninguna integración durante este tiempo a partir de los fotodiodos ya que la integración comienza
// después del décimo octavo pulso de reloj después de insertar un pulso SI envía los datos de forma serial.
Serial.print(" linea : ");
for (int i = 0; i < 256; i++)
{
//Serial.print(IntArray[i]);
//Serial.print(" ");
//Discrimina sobre y bajo lecura de 250 e imprime por consola serial el valor.
if (IntArray[i]> 250){
Serial.print(IntArray[i]);
Serial.print("Alto");
Serial.print(" ");
}else{
Serial.print(IntArray[i]);
Serial.print("Bajo");
Serial.print(" ");
}
}
Serial.println(" "); // <-- Envíe un salto de línea para indicar que la medición se transmite.
for (int i = 0; i < 255; i++)
{
digitalWrite(CLKpin, HIGH);
digitalWrite(CLKpin, LOW);
}
// El tiempo de integración del ciclo de medición actual del programa es ~ 3ms. Si se desea un mayor tiempo de integración, descomente la siguiente línea:
// delay(2); // <-- Añadir tiempo de integración, aumentar el tiempo de integracion en 2us.
}
// Esta función genera un pulso de reloj saliente desde el pin digital de Arduino 'CLKpin'. Este impulso de reloj alimenta al pin 5 del sensor lineal:
void ClockPulse()
{
digitalWrite(CLKpin, HIGH);
digitalWrite(CLKpin, LOW);
}
mis dudas son la siguiente:
-
El tiempo de integración del sensor es modificable? , se que al final abajo dice para agregar tiempo de integracion pero esto es para aumentar el tiempo de integracion solamente y el calculo de la ecuacion que ya mencione es transparente por ende no se a que frecuencia esta trabajando dado que arduino uno tiene clock de 16Mhz y el sensor trabaja en el rango de 5Khz a 8Mhz.
-
Por lo ultimo deberia asumir que esta trabajando a maxima frecuencia?
Gracias por el tiempo utilizado en leer el post y perdón si esta en un apartado diferente al correcto
en el foro.