Show Posts
|
|
Pages: [1]
|
|
3
|
Forum 2005-2010 (read only) / Español / Re: programar arduino en ensamblador
|
on: November 18, 2007, 05:07:33 pm
|
Por supuesto que puede programarse en ensamblador, pero NO directamente desde el entorno Arduino. Usa por ejemplo el AVR Studio 4 o bien un editor de texto + toolchain (avr-as, avr-gcc, make, etc) que viene en el directorio C:\arduino-0009\tools y... ¡a currar! El micro es el ATmega168. Pero antes de ponerte a ello piensa si realmente merece la pena escribir en ensamblador. Desde C tienes acceso total al hardware del micro: interrupciones, periféricos, todo. Los micros AVR, además, fueron diseñados para ejecutar de forma eficiente programas escritos en C. Escribir el software en ensamblador realmente no merece la pena a no ser que necesites "contar los ciclos de reloj" que consume cada parte del código, es necesario por ejemplo si tu aplicación es de tiempo real y tiene unas restricciones temporales muy fuertes. Para todo lo demás... C.  Yo personalmente escribo casi todo el software en C, uso Emacs, avr-gcc y avrdude para programar el ATmega168, invoco a todas las herramientas desde un Makefile.
|
|
|
|
|
4
|
Forum 2005-2010 (read only) / Español / Re: arduino y corriente alterna?????
|
on: July 27, 2007, 02:20:52 pm
|
|
Hola. Qué pregunta más interesante, veamos... OPCIÓN 1 ******** Esta es la opción más complicada. No puedes conectar esa señal de 12VAC directamente al CAD de Arduino (ATmega8) por varias razones: # La tensión de entrada a ese CAD debe estar entre 0 y 5V. Por tanto, antes tienes que reducirla mediante un divisor de tensión (2 resistencias). # La tensión de entrada a ese CAD debe ser unipolar (sólo positiva, entre 0 y 5V como ya he dicho). Por tanto, además de reducir la tensión tendrás que sumarle una componente continua (DC) de 2.5V. Una vez que hayas conectado correctamente la señal AC al ADC de Arduino y tengas las muestras de señal, debes escribir un algoritmo de procesado de señal que detecte sus cruces por cero (para saber donde termina un semicilo y empieza el siguiente). El más simple es:
* La muestra x[n] = analogRead() - 512 * Habrá un cruce por cero cuando x[n] y x[n-1] tengan distinto signo
Cada vez que detectes un cruce por cero, usa las salidas digitales de Arduino para generar un pulso que dispare el TRIAC. En realidad, el pulso deberás generarlo no inmediatamente sido con el retardo que tu quieras para regular la potencia que recibe la lámpara. Cuando más tarde generes el pulso menos potencia recibirá la lámpara. OPCIÓN 2 ******** Creo que esta es más simple. Es la que te recomiendo. Usa el siguiente (y muy simple) circuito detector de cruce por cero: Un amp-op como comparador que se sature a +5V cuando la onda AC está en su semiciclo positivo y a +0V cuando esté en su semiciclo negativo. Lo que hace este circuito es convertir la señal AC sinusoidal en una onda cuadrada de la misma frecuencia. Ahora conecta esta onda cuadrada al pin 2 de Arduino y haz que dispare una interrupción cada vez que en la señal haya un flanco (ascendente o descendente) Cada vez que la interrupción dispare, sabrás que la señal AC ha pasado por cero, en ese momento podrás usar la salidas digitales de Arduino para generar el pulso que dispare el TRIAC (igual que lo que te comentaba anteriormente).
O mejor aun, en vez de utilizar un amp-op externo, prueba a usar el comparador que ya trae consigo el ATmega (menos cables) pero antes reduce la tensión con un divisor de resistencias, entre [-5, +5]. Es más fácil de lo que parece (explicarlo con palabras es un lio) ¡Buena suerte! PD. Piensa también en la posibilidad (pregúntale a tu profesor) de usar un transformador 1:1 que sirva para aislar (aislamiento galvánico) la electrónica de control de la electrónica de potencia. De esta forma evitarás que Arduino se queme si algo sale mal. La electrónica de potencia es cosa muy seria así que cuidadito
|
|
|
|
|
5
|
Forum 2005-2010 (read only) / Español / Re: Aumentar alcance sensor infrarojos?
|
on: July 24, 2007, 09:31:31 am
|
Hola. Pongo aquí un enlace en español a un artículo que explica cómo hacer receptor de mando a distancia con Arduino, por si sirve de ayuda. http://hklab.net/wiki/C%C3%B3mo_acoplar_un_mando_a_distancia_en_ArduinoLo mejor, como comentan más arriba es usar un receptor de IR ya integrado porque el hacerlo tú mismo es muy complicado. En el artículo de CNX que mencionas, la demodulación la hacen por software (usando el dichoso LabView), pero aun así no es una tarea trivial. Respecto al transmisor, puedes usar Arduino + resistencia + el típico LED IR L-53 (lambda = 940nm) de KingBright de carcasa azul que te venden en todas partes. Aunque en la tienda no sepan decirte la marca del LED ni qué longitud de onda emite seguro que te venden ese, es el más común. Y escribir el software claro. En el foro francés hay un hilo que indica paso a paso cómo hacerlo. Si quieres más alcance puedes comprar un LED IR de alta potencia (los hay hasta de varios amperios) pero son carísimos :-( Un saludo, Javi
|
|
|
|
|
7
|
Forum 2005-2010 (read only) / Frequently-Asked Questions / Re: Generating Composite Video
|
on: July 23, 2007, 10:27:12 pm
|
Its much more precise using ASM or C but you can generate a valid video signal using arduino. Yes. I agree with you but when I tried Processing transient pulses appeared and they corrupted my tv signal. See this picture in which I show you the transient pulses (in a red circle) due to slowly digitalWrite() calls, the signal timing using delayMicroseconds() is very bad also.  I don't know yet AVR assembly so I decided to use C Regads, Javi
|
|
|
|
|