¿Cómo funciona un datalogger?
Como estas como según veo tu eres una persona experta en programación y me interesa saber que protocolo de programación utilizan con los microcontroladores que se utilizan en el datalogger y también quiero saber como funciona el protocolo para que este guarde los datos en una memoria externa y después los pueda yo leer por medio de una interface en un computador.
1 respuesta
Respuesta de diegoantelo
1
1
diegoantelo, Estudiante avanzado de Ingeniería Electrónica, 10 años de...
La verdad es que no se que es un datalogger. Si se lo que es un microcontrolador y una memoria externa. Los microcontroladores de microchip (los que he usado siempre) se programan en lenguaje ensamblador (parecido al del pc, pero con muchos menos registros, memoria interna e instrucciones).
Las memorias externas pueden ser de acceso serie o paralelo. Las primeras necesitan 5 o 6 conexiones. Alimentación, un reset para volver la posición a cero, un clock para avanzar una posición los datos, la salida de datos (que va a ser uno o cero, ta da de a un bit), una pata que elije si vas a leer o grabar, y una alimentación extra más grande en el caso de memorias que se pueden grabar una sola vez (ejemplo tarjetas de teléfono).
Las memorias de acceso paralelo, (de acuerdo a su capacidad) necesitan de por lo menos 8 conexiones para datos (ya que te lanza los 8 bits en paralelo), unos 10 bits de direccionamiento (sea una memoria de 1024 bits, por ejemplo), un pin que la active, otro pin para seleccionar lectura o escritura, y la alimentación.
No se tu nivel de conocimientos en electrónica, pero la posición de los datos en una memoria es un numero en binario representado por tensiones que son 0V para el cero y 5V para el 1.
¿Hasta aquí vamos? Contestame y vamos acomodando el rumbo hacia lo que te interesa saber.
Las memorias externas pueden ser de acceso serie o paralelo. Las primeras necesitan 5 o 6 conexiones. Alimentación, un reset para volver la posición a cero, un clock para avanzar una posición los datos, la salida de datos (que va a ser uno o cero, ta da de a un bit), una pata que elije si vas a leer o grabar, y una alimentación extra más grande en el caso de memorias que se pueden grabar una sola vez (ejemplo tarjetas de teléfono).
Las memorias de acceso paralelo, (de acuerdo a su capacidad) necesitan de por lo menos 8 conexiones para datos (ya que te lanza los 8 bits en paralelo), unos 10 bits de direccionamiento (sea una memoria de 1024 bits, por ejemplo), un pin que la active, otro pin para seleccionar lectura o escritura, y la alimentación.
No se tu nivel de conocimientos en electrónica, pero la posición de los datos en una memoria es un numero en binario representado por tensiones que son 0V para el cero y 5V para el 1.
¿Hasta aquí vamos? Contestame y vamos acomodando el rumbo hacia lo que te interesa saber.
Hola gracias por tu pronta respuesta hasta el momento todo lo que me escribes lo entiendo pero de pronto quisiera que me explicaras más afondo como hace la memoria para guardar los datos según el pulso del reloj, ha y por cierto un datalogger es básicamente es un dispositivo que me mide la temperatura. Humedad relativa, punto rocío e intensidad de luz luego de que me mide estos parámetros me los digitaliza por medio del un conversor análogo digital de un micro y por ultimo me guarda estos datos a través de un protocolo de comunicación en una memoria externa de 2Mb, para que el usuario después de un determinado tiempo lea los datos que se encuentran el la memoria, los elimine y reinicie el dispositivo para que empiece a tomar datos de nuevo y otra duda que tengo que es muy grande es que no se que tipo de protocolo utiliza el microcontrolosdor para enviar los datos digitales a la memoria no se si también tu puedas regalarme ese dato.
Gracias por tu interés espero tu valiosa colaboración.
Saludos...
Gracias por tu interés espero tu valiosa colaboración.
Saludos...
Bien. Ya te he dicho que depende de si es una memoria serie o paralelo.
Y no hay mucho protocolo. Hagamos un ejemplo básico.
Supongamos memoria paralelo de 128 bytes de capacidad, con 8 bits de datos.
Para elegir a cual de las 128 posiciones deseas acceder (ya sea para leer o escribir) necesitas un numero de 7 bits.
El acceso a las posiciones lo daríamos con la siguiente tabla:
Posición 0: 0000000
Posición 1: 0000001
Posición 2: 0000010
Posición 3: 0000011
...
Posición 126: 1111110
Posición 127: 1111111
O sea que el integrado tendría 7 patas (que se llaman de direccionamiento), donde poniéndole 1 o 0 a cada pata eliges la posición a la que le vas a hacer algo. (1=5V ; 0=0V)
Ahora, falta que le pongamos el dato (si es que le vamos a escribir algo)
Para eso necesitamos 8 patas más. Por ejemplo queremos poner el dato 253 (1111101)
Entonces ponemos ese valor binario en las patas D0, D1, D2,... D7 (con los voltajes de 5V o 0V)
Ahora le indicamos si lo que queremos es leer o escribir. Para lo cual hay una pata R/W (read o write, leer o escribir) que es 0 para leer o 1 para escribir.
Luego, le das 1 en otra pata que es digamos como decirle, ponte en acción (CS=chip select) es decir te he seleccionado memoria, has lo que te digo, y los datos se graban
O sea que numero por numero, o letra por letra, tienes que ir poniendo la dirección y el dato luego si es leer o escribir y darle machacar.
Nuestro integrado teórico tendría pues:
7 patas de direccionamiento (A0... A6)
8 patas de datos (D0... D7)
1 pata leer o escribir (RD / WR)
1 pata ponte a trabajar (CS)
2 patas de alimentación (masa y 5V)
Con lo cual, son 19 patas, seguro que vendría de 20, con una no conectada
Para la memoria de 2MB se necesitarían de 19 patas de direccionamiento. Con lo cual tu integrado de memoria debe tener unas 32 patas por lo menos, si es de direccionamiento paralelo.
Bueno, entiende esto y le seguimos.
Y no hay mucho protocolo. Hagamos un ejemplo básico.
Supongamos memoria paralelo de 128 bytes de capacidad, con 8 bits de datos.
Para elegir a cual de las 128 posiciones deseas acceder (ya sea para leer o escribir) necesitas un numero de 7 bits.
El acceso a las posiciones lo daríamos con la siguiente tabla:
Posición 0: 0000000
Posición 1: 0000001
Posición 2: 0000010
Posición 3: 0000011
...
Posición 126: 1111110
Posición 127: 1111111
O sea que el integrado tendría 7 patas (que se llaman de direccionamiento), donde poniéndole 1 o 0 a cada pata eliges la posición a la que le vas a hacer algo. (1=5V ; 0=0V)
Ahora, falta que le pongamos el dato (si es que le vamos a escribir algo)
Para eso necesitamos 8 patas más. Por ejemplo queremos poner el dato 253 (1111101)
Entonces ponemos ese valor binario en las patas D0, D1, D2,... D7 (con los voltajes de 5V o 0V)
Ahora le indicamos si lo que queremos es leer o escribir. Para lo cual hay una pata R/W (read o write, leer o escribir) que es 0 para leer o 1 para escribir.
Luego, le das 1 en otra pata que es digamos como decirle, ponte en acción (CS=chip select) es decir te he seleccionado memoria, has lo que te digo, y los datos se graban
O sea que numero por numero, o letra por letra, tienes que ir poniendo la dirección y el dato luego si es leer o escribir y darle machacar.
Nuestro integrado teórico tendría pues:
7 patas de direccionamiento (A0... A6)
8 patas de datos (D0... D7)
1 pata leer o escribir (RD / WR)
1 pata ponte a trabajar (CS)
2 patas de alimentación (masa y 5V)
Con lo cual, son 19 patas, seguro que vendría de 20, con una no conectada
Para la memoria de 2MB se necesitarían de 19 patas de direccionamiento. Con lo cual tu integrado de memoria debe tener unas 32 patas por lo menos, si es de direccionamiento paralelo.
Bueno, entiende esto y le seguimos.
Hola me encanto tu ejemplo. Bien hata este momento todo claro pero quiero saber si entre el micro y la memoria no se necesita ningún tipo de interfaz para que los datos puedan ser grabados en las posiciones que ya me mencionaste o solamente se conecta el bus con los datos directamente a la memoria.
Gracias espero tu pronta respuesta saludos.
Gracias espero tu pronta respuesta saludos.
Aja.
-Si te alcanzan los pines de entrada y salida del microcontrolador, puedes manejar la memoria directamente con el micro.
-Si no te alcanzan, pues tienes que transformar el direccionamiento de paralelo a serie, usando algún registro de desplazamiento.
-Si te alcanzan los pines, pero tienes que manejar más de un dispositivo, sea memoria, pantalla, sensores, etc... bueno tienes que inventarte un bus, utilizando "buffers", lineas de selección de dispositivo, etc..
Ejemplos:
1) Digamos que los pines de entrada/salida del micro, son suficientes para manejar la memoria directamente, pero quieres usar 8 memorias. Agregas 8 buffers (tri-state) y mediante 3 pines del micro (con 3 pines logras 8 combinaciones digitales) puedes a través de un decodificador de 3 a 8 (integrado con 3 entradas y 8 salidas), ir seleccionando a cual memoria le hablas (a través de los buffers) y así manejar más de lo que dispones de capacidad.
2) Sea que los pines de tu micro no alcanzan para direccionar la memoria completa. Utilizando 1 solo pin del micro y un registro de desplazamiento, le vas inyectando bit por bit la dirección y cuando la tienes cargada completamente, efectúas la operación de lectura y escritura. En este caso utilizarías un direccionamiento serie.
3) Igualmente para los datos, que normalmente son de 8 bits / líneas / pines.
¿Cómo vamos, se entiende?
-Si te alcanzan los pines de entrada y salida del microcontrolador, puedes manejar la memoria directamente con el micro.
-Si no te alcanzan, pues tienes que transformar el direccionamiento de paralelo a serie, usando algún registro de desplazamiento.
-Si te alcanzan los pines, pero tienes que manejar más de un dispositivo, sea memoria, pantalla, sensores, etc... bueno tienes que inventarte un bus, utilizando "buffers", lineas de selección de dispositivo, etc..
Ejemplos:
1) Digamos que los pines de entrada/salida del micro, son suficientes para manejar la memoria directamente, pero quieres usar 8 memorias. Agregas 8 buffers (tri-state) y mediante 3 pines del micro (con 3 pines logras 8 combinaciones digitales) puedes a través de un decodificador de 3 a 8 (integrado con 3 entradas y 8 salidas), ir seleccionando a cual memoria le hablas (a través de los buffers) y así manejar más de lo que dispones de capacidad.
2) Sea que los pines de tu micro no alcanzan para direccionar la memoria completa. Utilizando 1 solo pin del micro y un registro de desplazamiento, le vas inyectando bit por bit la dirección y cuando la tienes cargada completamente, efectúas la operación de lectura y escritura. En este caso utilizarías un direccionamiento serie.
3) Igualmente para los datos, que normalmente son de 8 bits / líneas / pines.
¿Cómo vamos, se entiende?
Ah, me olvidaba un detalle importante.
Si la memoria es del tipo estático, le escribes los datos y vienes al otro día, (siempre que la alimentación siga encendida) y los datos allí están todavía.
Si es del tipo dinámico, tienes que "refrescarle" los datos, cada algunos milisegundos, constantemente, para que se mantengan.
Tu dirás, para que cuernos, las hacen dinámicas, y el caso es que son más económicas, ya que la "celda" de memoria es una especie de micro capacitor que se va descargando, por lo cual la tienes que estar leyendo y volviendo a escribir constantemente. Una tortura electrónica ... pero más barata.
Si la memoria es del tipo estático, le escribes los datos y vienes al otro día, (siempre que la alimentación siga encendida) y los datos allí están todavía.
Si es del tipo dinámico, tienes que "refrescarle" los datos, cada algunos milisegundos, constantemente, para que se mantengan.
Tu dirás, para que cuernos, las hacen dinámicas, y el caso es que son más económicas, ya que la "celda" de memoria es una especie de micro capacitor que se va descargando, por lo cual la tienes que estar leyendo y volviendo a escribir constantemente. Una tortura electrónica ... pero más barata.
huyyyyyy que buen detalle pero uno tiene que ir y físicamente extraerla y leerla o es una rutina que se realiza en el programa del micro para que la este refrescando constantemente para que no se pierdan los datos.
Esta muy interesante este tema sera que dentro de tus curiosidades como programador no tienes un programa hecho en assembler que me envíes para echarle una ojeadita te lo agradecería en el alma..
gracias saludos T,Q,M,
Esta muy interesante este tema sera que dentro de tus curiosidades como programador no tienes un programa hecho en assembler que me envíes para echarle una ojeadita te lo agradecería en el alma..
gracias saludos T,Q,M,
En este momento no tengo nada a la mano, ya que hace bastante que no programo, pero te voy a buscar alguno, y luego lo comentamos.
El refresco lo haces obviamente con una rutina dentro del programa del microcontrolador-
El refresco lo haces obviamente con una rutina dentro del programa del microcontrolador-
Te agradezco infinitamente tu ayuda me sirvió ciento por ciento y espero que no te olvides de mi favor de el programa para que me lo hagas llegar y así poder de pronto despejar muchas más dudas no solo con respecto al funcionamiento de las memorias externas si no también hacia otros temas de programación..
Gracias y espero tu pronta respuesta...
Saludos..
Gracias y espero tu pronta respuesta...
Saludos..
- Compartir respuesta
- Anónimo
ahora mismo