Pages: [1]   Go Down
Author Topic: Re: Como Asignar una interrupcion a flanco de la salida PWM?  (Read 1113 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Jr. Member
**
Karma: 0
Posts: 53
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Pensaba:
Desenganchar la interrupción nada más empezar a ejecutarse la interrupcion (detachInterrupt).
esperar unos microsegundos. (habrá que ver cuantos....)
Leer la entrada analógica, y almacenar el resultado
« Last Edit: August 30, 2011, 07:41:19 am by Valen » Logged

Donostia
Offline Offline
God Member
*****
Karma: 3
Posts: 744
elektronikadonbosco
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Que yo sepa las interrupciones son de entrada, aunque igor comentó que arduino tiene un porrón de interrupciones pero para eso hay que entrar al datasheet. Mira en el Playground los tutoriales de interrupciones te llevará al post donde se comentaba.

Con la poca información que has dado sobre lo que quieres hacer resulta complicado, porque por hacer seguro que se pueden hacer muchas cosas, como generar tu la señal PWM así podrás esperar lo que quieras.
Logged

Madriz
Offline Offline
Full Member
***
Karma: 0
Posts: 176
Glober Arduiner
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Necesitas que salta exactamente con el PWM o con su frecuencia? en cualquier caso ya puedes hacer un código compacto, porque por defecto son 490hz

http://arduino.cc/en/Reference/AnalogWrite
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 53
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola, se trata de que la salida PWM dispare un semiconductor que alimenta una caga, y esperar unos instantes, antes de leer la corriente que se establece por dicha carga. Y hacer esto constantemente, para monitorizarla.
Sí, tiene que sincronizarse con el flanco ascendente.
Quisiera evitar generar yo mismo la onda pwm, aunque si no hay otra forma.....
Logged

Madriz
Offline Offline
Full Member
***
Karma: 0
Posts: 176
Glober Arduiner
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hombre, podrías probar conectando la salida analógica al pin de interrupción no?
Logged

0
Offline Offline
Edison Member
*
Karma: 16
Posts: 1579
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

No te queda otra que tirar de datasheet.

Algunos buenos tutoriales en ingles:
http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=50106
http://winavr.scienceprog.com/avr-gcc-tutorial/program-16-bit-avr-timer-with-winavr.html

Veras que existen diversas fuentes de interrupcion y flags de los timers que puedes usar....

Si lo quieres hacer en plan facil (que no significa optimo) con funciones de Arduino y analogWrite te funciona para tus propositos, te unes el pin de salida del PWM a uno de los pines de interrupcion, y ya lo tienes....



Nota.- no tengo ni acentos ni enyes en este ordenador....
« Last Edit: August 30, 2011, 05:30:35 am by Igor R » Logged


Offline Offline
Jr. Member
**
Karma: 0
Posts: 53
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Gracias,
una solución sencilla sería emplear la entrada 2 ó la 3, como disparador de la interrupción. No es que me encante, pero sí que funciona, ya que la entrada 2 la estoy utilizando para atender al bus SPI que tengo conectado, y va bien.....
Logged

0
Offline Offline
Edison Member
*
Karma: 16
Posts: 1579
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Me imagino que te refieres al pin de chip select para el SPI. Si tienes libre la otra, pues ya lo tienes o siempre tienes la posibilidad de cambiar dicho pin(chip select del SPi) por cualquier otro... Eso ya eleccion del disenyador.

Si te miras los timers, veras que puedes usar interrupciones que se generar al overflow y demas, pero claro, eso depende de cuanto quieres profundizar... Si te sobran pines, y vas a por lo sencillo, pues a unirlos....
No se a que velocidad vas hacer el PWM, pero ten en cuenta que tendras que tener cuidado con el codigo que pones al atender la interrupcion, ya que solo tendras el periodo del PWM para poder hacer todas las operaciones.


smiley-wink
« Last Edit: August 30, 2011, 05:52:43 am by Igor R » Logged


Offline Offline
Jr. Member
**
Karma: 0
Posts: 53
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quiero trabajar con un PWM a 8KHZ.
Solo necesito hacer un AnalogRead(), así que espero que me de tiempo. En realidad, me valdría leer cada segundo, pero siempre sincronizado con el flanco de subida que toque.....


(En el bus SPI aprovecho el flaco de selección para limpiar las variables de la rutina de atención al SPI (este arduino está funcionando como slave))
Logged

0
Offline Offline
Edison Member
*
Karma: 16
Posts: 1579
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

como curiosidad....
que tipo de carga es?
por que tienes que medir sincronizado con el pwm?


Logged


Offline Offline
Jr. Member
**
Karma: 0
Posts: 53
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Es una carga muy inductiva, un motor mediano.
Quiero medir la corriente por la carga siempre en el mismo instante, para que el resultado de la medida no varíe tanto, y manejar así unos márgenes de tolerancia aceptables.
Logged

0
Offline Offline
Edison Member
*
Karma: 16
Posts: 1579
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Puedes hacer que el timer lance el inicio de la conversion mediante HW.
Tienes que mirarte el tema de tiempos, a ver si con las instrucciones de Arduino vas a cumplir requisitos...
Logged


Offline Offline
Jr. Member
**
Karma: 0
Posts: 53
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Pensaba:
Desenganchar la interrupción nada más empezar a ejecutarse la interrupcion (detachInterrupt).
esperar unos microsegundos. (habrá que ver cuantos....)
Leer la entrada analógica, y almacenar el resultado en una variable volatile.


Cuando use el resultado leído, en el bucle del programa loop(), y haya pasado por ej. un segundo, volver a conectar la interrupción. (attachInterrupt). (esto para no sobrecargar el hardware, ya que no necesito leer todo el tiempo).

No sé si funcionará.....


« Last Edit: August 30, 2011, 07:31:55 am by Valen » Logged

Pages: [1]   Go Up
Jump to: