Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

27/12/2008 #1

Avatar de pepechip

Presicion obtenida segun el lenguaje utilizado.
Al programar un microcontrolador en ensamblador si utilizamos un cristal de 4Mhz podemos controlar con exactitud cualquier periodo de tiempo multiplo de 1useg, asi por ejemplo si quiero generar un afrecuencia de 1Khz solo tendre que mantener en "1" la salida durante un tiempo de 500useg y en "0" otros 500 useg y crear un bucle para que se repita esta secuencia. La presicion de este oscilador solo dependera de la exactitud del cristal de cuarzo empleado, siendo lo mas corriente que tenga un error de 30 ppm, que equivale a un error maximo del 0,003%.

Si utilizamos basic o C, al tener que depender de un interprete obtendremos un error considerablemete mayor (corregirme si me equivoco, ya que no utilizo ninguno).

Esta misma situacion quisiera compararla con lenguajes de programacion para PC, en donde aparte de generar esta frecuencia u otras distintas bien mediante la tarjeta de sonido o mejor aun mediante el puerto USB.

Estaba buscando un programa que tenga una buena presentacion visual sobre el monitor y al mismo tiempo la maxima precision al trabajar con una base de tiempos.
Visual Bacis, turbo C, lavie, delphi, python, java ?
Sobre java me lo han aconsejado sobre todo porque puede trabajar sobre cualquier plataforma, da igual windows que linux, que al tratarse de un sotfware de libre distribucion se hace bastante mas atractivo que el windons.
27/12/2008 #2


Hmm, al final no entendí bien si estás buscando el mejor lenguaje para presiciones, en PCs o en microcontroladores.

En microcontroladores PIC en todo caso, es el Assembler. Allí es donde puedes manejar bit por bit de cada cosa, y aprovechar al máximo cada ciclo de relój.

Un programita bastante bueno para "hacer" algoritmos en Assembler que hagan Delays, es este:

http://www.pablin.com.ar/electron/download/picdel.zip

Fíjate, que según el oscilador y el tiempo de espera que le pidas, calcula con exactitud la cantidad de ciclos que deben esperarse (a bajo nivel), y según eso, hará el algoritmo. Me imagino que debe haber un pequeño error por un par de ciclos, pero es casi nada.

Ahora, en computadores, tambén existe el Assembler, pero habría que aprenderlo, y saber mucho sobre la arquitectura interna de toda la placa madre, lo cual es un tema muy grande para abordarlo. Pero yo opino, que sería el más preciso de todos, para computadores.

Saludos!
27/12/2008 #3
Moderador

Avatar de Chico3001

Desafortunadamente en el caso de una PC es el Sistema operativo el que decide que tiempo se ejecutara cada programa antes de pasar el control al siguiente programa, existen maneras de limitar esa secuencia usando interrupciones o bases de tiempo pero son complejas y aun asi no vas a lograr una presicion tan elevada

La manera mas adecuada es usando C, pero tambien escogiendo bien el sistema operativo que uses... alguna vez escuche que windows maneja los programas segun los recursos, un programa define cuantos recursos necesita y windows calcula el tiempo de ejecucion en base a esos recursos esto tiene pobre administracion del sistema por que un programador que pida demasiados recursos y no los use solo lograra que la PC se alente mas, en cambio linux tiene algoritmos mas eficientes de medicion y prediccion, constantemente esta analizando cuantos recursos esta usando el programa y en base a eso asigna los tiempos de ejecucion

La manera ideal es poniendo un procesador dedicado que haga la rutina critica, tendrias que construir una tarjeta PCI con un procesador o microcontrolador, cargarle el programa y despues mandarle la orden de inicio usando una interrupcion, al no depender de windows para controlarse vas a tener una presicion muy elevada, y te puede devolver una interrupcion que hace que windows deje de hacer lo que estaba haciendo y recupere el control de tu aplicacion
27/12/2008 #4

Avatar de pepechip

¿donde estara metido mi viejo Commodore 64? 64K de memoria http://es.wikipedia.org/wiki/Commodore_64

Con ese ordenador era yo el que tenia el control, y no al contrario.
27/12/2008 #5
Moderador

Avatar de Chico3001

Yo comense en un conmodore 16 ...
28/12/2008 #6


Como Chico3001 comentaba el sistema operativo juega un papel muy importante! sin olvidarnos del hardware claro esta.

Tambien hay que recordar que depende del numero de tareas que este ejecutando el sistema operativo, mientras menos mejor.

Yo recomendaria Linux por encima de Windows...aunque Linux tambien tiene sus desventajas.

Ahora bien el lenguaje juega un papel muy importante... creo yo que debes escoger un lenguaje compilado sobre uno interpretado.

Es decir C (incluso basic) sobre Java, Labview o cualquier cosa que se interprete en tiempo de ejecuciòn.

Ahora tener todo es algo complicado, es decir interfaz grafica, ejecuciòn rapida, un buen sistema operativo... en realidad hay pocas opciones.

Algo mas que podrias considerar es notificar al kernel que cierta tarea tenga mayor prioridad sobre otras, en Windows esto se puede hacer mediante el administrador de tareas.

En Linux depende de la distribuciòn, otra opciòn atractiva de Linux, es que puedes modificar el Kernel, recompilarlo y ejecutar ese Kernel modificado de acuerdo a tus necesidades, donde puedes generar Kernel's para aplicaciones especificas, por ejemplo para tareas de tiempo real.
28/12/2008 #7


Si lo que quieres es generar una frecuencia determinada puedes usar el timer junto con un compare match y un prescaler (normalmente viene en los micros), y asi sin importar el lenguaje sacas frecuencias precisas del micro.

fuera de eso solo en ensamblador y mucha pericia

el siguiente nivel seria usar c

Saludos
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.