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

Temas similares

01/01/2015 #1

Avatar de dinoelectro

[Aporte] VUMETRO GIGANTE cuatro efectos
Hola, Amigos quiero compartir con ustedes este pequeño proyectillo que en lo personal me ha dado muchas satisfacciones.

Se trata de un medidor de sonido echo a base de micro-controlador PIC18F4550 y una interface transistor-izada para comandar LEDs de alto brillo

El Vumetro posee cuatro efectos y quince niveles de medición que pueden seleccionarse la sensibilidad y el efecto a través de un potenciometro conectado al canal AN0 del PIC. mientras que en el canal AN1 se conecta el sensor de sonido.

por ahora no dejo mayor detalle pero, prometo seguir con el tema en los días venideros, siempre que encuentre el interés por parte de vosotros.

bueno aquí dejo un par de vídeos:



bueno gracias, hasta pronto!
01/01/2015 #2

Avatar de anthony123

Que tal? Primero que todo, excelente proyecto pero me surge una duda. Cual es la necesidad de usar un micro tan "complejo"? Aqui en Venezuela, la familia 18 cuesta hasta 3 veces mas que la 16. En todo caso, un 16f877 podria hacer el trabajo.

Saludos
02/01/2015 #3

Avatar de dinoelectro

Gracias por comentar, Anthony.
Estoy de acuerdo contigo, se puede realizar con un PIC16F877A, pero yo tenía a la mano el 18F4550 y por eso utilicé ese PIC.
Sin embargo, me extraña la diferencia de costo entre los dos PICS allá en Venezuela.
Acá en Ecuador los primeros están en 5,50 y los otros a 8 dolares.

Bueno, aquí dejo el esquemático para el vumetro.
Como ves, no es muy complicado, no requiere de cristal pues utilizo el oscilador interno del PIC.
Y acá está la interfaz al LED de potencia.
El vumetro consta de 15 módulos LED cuyo circuito se muestra a continuación:
El código está realizado en PIC C.
Código:
#include <18F4550.h>
#device adc=8
#FUSES NOMCLR, INTRC_IO, WDT               
#use delay(clock=8000000, RESTART_WDT)
int8 andata0,andata1;
void main(){
setup_adc_ports(NO_ANALOGS);
set_tris_a(0b00000011);
set_tris_b(0);
set_tris_c(0);
set_tris_d(0);
setup_adc_ports(AN0_TO_AN1);
setup_adc(ADC_CLOCK_INTERNAL);
while(true){
set_adc_channel(0);
andata0=read_adc();
if(andata0<=64){
//lineal
if(andata1<=35)              {output_d(0b00000000);output_b(0b00000000);}
if(andata1>35 && andata1<=40){output_d(0b00000000);output_b(0b01100000);}
if(andata1>40 && andata1<=45){output_d(0b00000000);output_b(0b01111000);}
if(andata1>45 && andata1<=50){output_d(0b00000000);output_b(0b01111110);}
if(andata1>50 && andata1<=55){output_d(0b10000000);output_b(0b01111111);}
if(andata1>55 && andata1<=60){output_d(0b11100000);output_b(0b01111111);}
if(andata1>60 && andata1<=65){output_d(0b11111000);output_b(0b01111111);}
if(andata1>65 && andata1<=70){output_d(0b11111110);output_b(0b01111111);}
if(andata1>70)               {output_d(0b11111111);output_b(0b01111111);}
}
if(andata0>64 && andata0<=128){
//logaritmica
if(andata1<=75)                {output_d(0b00000000);output_b(0b00000000);}
if(andata1>75 && andata1<=80)  {output_d(0b10000000);output_b(0b00000000);}
if(andata1>80 && andata1<=85)  {output_d(0b11000000);output_b(0b00000001);}
if(andata1>85 && andata1<=90)  {output_d(0b11100000);output_b(0b00000011);}
if(andata1>90 && andata1<=95)  {output_d(0b11110000);output_b(0b00000111);}
if(andata1>95 && andata1<=100) {output_d(0b11111000);output_b(0b00001111);}
if(andata1>100 && andata1<=105){output_d(0b11111100);output_b(0b00011111);}
if(andata1>105 && andata1<=110){output_d(0b11111110);output_b(0b00111111);}
if(andata1>110)                {output_d(0b11111111);output_b(0b01111111);}
}
if(andata0>128 && andata0<=192){
//logaritmica2
if(andata1<=100)                {output_d(0b00000000);output_b(0b00000000);}
if(andata1>100 && andata1<=105)  {output_d(0b00000001);output_b(0b01000000);}
if(andata1>105 && andata1<=110)  {output_d(0b00000011);output_b(0b01100000);}
if(andata1>110 && andata1<=115) {output_d(0b00000111);output_b(0b01110000);}
if(andata1>115 && andata1<=120){output_d(0b00001111);output_b(0b01111000);}
if(andata1>120 && andata1<=125){output_d(0b00011111);output_b(0b01111100);}
if(andata1>125 && andata1<=130){output_d(0b00111111);output_b(0b01111110);}
if(andata1>130 && andata1<=135){output_d(0b01111111);output_b(0b01111111);}
if(andata1>135)                {output_d(0b11111111);output_b(0b01111111);}
}
if(andata0>192){
//lineal2
if(andata1<=150)                {output_d(0b00000000);output_b(0b00000000);}
if(andata1>155 && andata1<=160) {output_d(0b00000011);output_b(0b00000000);}
if(andata1>160 && andata1<=165){output_d(0b00001111);output_b(0b00000000);}
if(andata1>165 && andata1<=170){output_d(0b00111111);output_b(0b00000000);}
if(andata1>170 && andata1<=175){output_d(0b11111111);output_b(0b00000000);}
if(andata1>175 && andata1<=180){output_d(0b11111111);output_b(0b00000011);}
if(andata1>180 && andata1<=185){output_d(0b11111111);output_b(0b00001111);}
if(andata1>185 && andata1<=190){output_d(0b11111111);output_b(0b00111111);}
if(andata1>190)                {output_d(0b11111111);output_b(0b01111111);}
}
set_adc_channel(1);
andata1=read_adc();
}
}
Imágenes Adjuntas
Tipo de Archivo: png vum.PNG (49,5 KB (Kilobytes), 663 visitas)
Tipo de Archivo: png led interface.PNG (36,4 KB (Kilobytes), 642 visitas)
02/01/2015 #4
Moderador

Avatar de Ratmayor

Interesante proyecto, incluso se me ocurre que podrías usar los puertos que te sobran para multiplexar y así ampliar la cantidad de LEDs...
03/01/2015 #5

Avatar de dinoelectro

Gracias Ratmayor te cuento que tengo miles de LED los compre de esos que vienen en alambre para adornar arboles de navidad, comprarlos así me resultan mucho mas económicos, eso me esta haciendo pensar si lo hago aun mas grande. Saludos!
09/01/2015 #6

Avatar de dinoelectro

Luego de darme varios cabezazos contra la pared y de jalarme los cabellos , estuve a punto de volverme loco.
No conseguía hacer que los LEDs tiemblen menos.
El problema principal del diseño anterior, era el bendito condensador C2 que nunca debió estar ahí.
En lugar de filtrar la señal, hacia todo lo contrario, introducía ruido y esa era la causa de todos mis males
Retirar el condensador y re-calibrar la programación del PIC solucionó el problema.
Les comento amigos, mi penosa experiencia, por si de pronto algún día se animan a construir un vumetro, para que no pasen las de Caín.
El buen carácter ha regreso a mi y orgullosamente les muestro mi progreso.
Saludos!!

Código:
#include <18F4550.h>
#device adc=8
#FUSES NOMCLR, INTRC_IO, WDT               
#use delay(clock=8000000, RESTART_WDT)
int8 SELECTOR1,SELECTOR2,SELECTOR3; 
int8 andata0,andata1;
void main(){
setup_adc_ports(NO_ANALOGS);
set_tris_a(0b00000011);
set_tris_b(0);
set_tris_c(0);
set_tris_d(0);
setup_adc_ports(AN0_TO_AN1);
setup_adc(ADC_CLOCK_INTERNAL);
while(true){
set_adc_channel(0);
andata0=read_adc();
if(andata0<=64){
//lineal
if(andata1<=45)              {output_d(0b00000000);output_b(0b00000000);}
if(andata1>45 && andata1<=50){output_d(0b00000000);output_b(0b01100000);}
if(andata1>50 && andata1<=55){output_d(0b00000000);output_b(0b01111000);}
if(andata1>55 && andata1<=60){output_d(0b00000000);output_b(0b01111110);}
if(andata1>60 && andata1<=65){output_d(0b10000000);output_b(0b01111111);}
if(andata1>65 && andata1<=70){output_d(0b11100000);output_b(0b01111111);}
if(andata1>70 && andata1<=75){output_d(0b11111000);output_b(0b01111111);}
if(andata1>75 && andata1<=80){output_d(0b11111110);output_b(0b01111111);}
if(andata1>80)               {output_d(0b11111111);output_b(0b01111111);}
}
if(andata0>64 && andata0<=128){
//logaritmica
if(andata1<=45)              {output_d(0b00000000);output_b(0b00000000);}
if(andata1>45 && andata1<=50){output_d(0b10000000);output_b(0b00000000);}
if(andata1>50 && andata1<=55){output_d(0b11000000);output_b(0b00000001);}
if(andata1>55 && andata1<=60){output_d(0b11100000);output_b(0b00000011);}
if(andata1>60 && andata1<=65){output_d(0b11110000);output_b(0b00000111);}
if(andata1>65 && andata1<=70){output_d(0b11111000);output_b(0b00001111);}
if(andata1>70 && andata1<=75){output_d(0b11111100);output_b(0b00011111);}
if(andata1>75 && andata1<=80){output_d(0b11111110);output_b(0b00111111);}
if(andata1>80)               {output_d(0b11111111);output_b(0b01111111);}
}
if(andata0>128 && andata0<=192){
//logaritmica2
if(andata1<=45)              {output_d(0b00000000);output_b(0b00000000);}
if(andata1>45 && andata1<=50){output_d(0b00000001);output_b(0b01000000);}
if(andata1>50 && andata1<=55){output_d(0b00000011);output_b(0b01100000);}
if(andata1>55 && andata1<=60){output_d(0b00000111);output_b(0b01110000);}
if(andata1>60 && andata1<=65){output_d(0b00001111);output_b(0b01111000);}
if(andata1>65 && andata1<=70){output_d(0b00011111);output_b(0b01111100);}
if(andata1>70 && andata1<=75){output_d(0b00111111);output_b(0b01111110);}
if(andata1>75 && andata1<=80){output_d(0b01111111);output_b(0b01111111);}
if(andata1>80)               {output_d(0b11111111);output_b(0b01111111);}
}
if(andata0>192){
//lineal2
if(andata1<=45)              {output_d(0b00000000);output_b(0b00000000);}
if(andata1>45 && andata1<=50){output_d(0b00000011);output_b(0b00000000);}
if(andata1>50 && andata1<=55){output_d(0b00001100);output_b(0b00000000);}
if(andata1>55 && andata1<=60){output_d(0b00110000);output_b(0b00000000);}
if(andata1>60 && andata1<=65){output_d(0b11000000);output_b(0b00000000);}
if(andata1>65 && andata1<=70){output_d(0b00000000);output_b(0b00000011);}
if(andata1>70 && andata1<=75){output_d(0b00000000);output_b(0b00001100);}
if(andata1>75 && andata1<=80){output_d(0b00000000);output_b(0b00110000);}
if(andata1>80)               {output_d(0b00000000);output_b(0b01100000);}
}
set_adc_channel(1);
andata1=read_adc();
}
}
Imágenes Adjuntas
Tipo de Archivo: png VUMETRO.PNG (250,4 KB (Kilobytes), 648 visitas)
09/01/2015 #7

Avatar de locodelafonola

hola
dinoelectro dijo: Ver Mensaje
Luego de darme varios cabezasos contra la pared, de alarme los cabellos , estuve a punto de volverme loco, No conseguía hacer que los LEDs tiemblen menos,... el problema principal del diseño anterior, era el bendito condensador C2 que nunca debió estar ahí, en lugar de filtrar la señal, hacia todo lo contrario, introducía ruido y esa era la causa de todos mis males .. retirar el condensador y re-calibrar la programación del PIC solucionó el problema. Les comento amigos mi penosa experiencia, por si de pronto algún día se animan a construir un vumetro, para que no la pasen las de cain... El buen carácter ha regreso a mi y orgullosamente le muestro mi progreso Saludos!!

https://lh5.googleusercontent.com/-q...no/VUMETRO.PNG
https://www.youtube.com/watch?v=8gGViiqN3ek
como anda mi amigaso querido., bueno amigo esto esta fabuloso., la verdad expextacular.,
lo del capacitor., no me di cuenta., y es error en el video anterior tampoco lo note pero esta muy bueno
09/01/2015 #8
Moderador

Avatar de Ratmayor

Una preguntonta... Si colocas los valores fijos en hexadecimal dentro de un arreglo y llamas a cada uno por medio de un número que le asignes, no te ahorrarías algunas líneas de código?

Luego coloco el ejemplo, estoy lejos de la PC y no quiero que se me vaya la idea

Saludos...
09/01/2015 #9

Avatar de locodelafonola

Ratmayor dijo: Ver Mensaje
Una preguntonta... Si colocas los valores fijos en hexadecimal dentro de un arreglo y llamas a cada uno por medio de un número que le asignes, no te ahorrarías algunas líneas de código?

Luego coloco el ejemplo, estoy lejos de la PC y no quiero que se me vaya la idea

Saludos...
don rat ¿¿¿¿ usted dice algo como una tabla ????
09/01/2015 #10
Moderador

Avatar de Ratmayor

locodelafonola dijo: Ver Mensaje
don rat ¿¿¿¿ usted dice algo como una tabla ????
Exactamente incluso se me ocurre la idea de hacer una matriz, de manera que se pueda asignar un solo número para una posición del LED y otra para los efectos y funciones
09/01/2015 #11

Avatar de locodelafonola

Ratmayor dijo: Ver Mensaje
Exactamente incluso se me ocurre la idea de hacer una matriz, de manera que se pueda asignar un solo número para una posición del LED y otra para los efectos y funciones
jajajajajaj yo hice algo como eso ., aver si te fijas por aca.,
Problema en sentencia DO-while en C
el problema lo tengo en otro lado.,
por eso no puedo compilar ., pero lo que vos desis esta en el primer archivo
10/01/2015 #12

Avatar de dinoelectro

Gracias, Ratmayor y locodelafonola, por sus sugerencias.
¿Y el código mediante tablas? ¿Cómo sería?

Publico esta imagen para aquellos que están interesados en ver más de cerca el circuito.
Saludos y hasta la próxima!

Imágenes Adjuntas
Tipo de Archivo: jpg 20150110_090145.jpg (139,9 KB (Kilobytes), 635 visitas)
10/01/2015 #13
Moderador

Avatar de Ratmayor

dinoelectro dijo: Ver Mensaje
Gracias Ratmayor, locodelafonola, por sus sugerencias ¿Y el codigo mediante tablas? ¿como seria?
Bien, te mostraré un código que uso para multiplexar displays y supongo que lo podrás aplicar a este proyecto...

Código PHP:
unsigned char segunit[10] = {0x04,0x0C,0x44,0x4C,0x24,0x2C,0x64,0x6C,0x14,0x1C};
unsigned char segdecs[10] = {0x02,0x0A,0x42,0x4A,0x22,0x2A,0x62,0x6A,0x12,0x1A};
unsigned char segcent[10] = {0x01,0x09,0x41,0x49,0x21,0x29,0x61,0x69,0x11,0x19};

if(
value 99){
    
cent = (value 100) > 99 ? ((value 100) % 100) : (value 100);
    
output_c(segcent[cent]);
    
delay_ms(30);
}
if(
value 9){
    
decs = (value 10) > ? ((value 10) % 10) : (value 10);
    
output_c(segdecs[decs]);
    
delay_ms(30);
}
unit value 10;
output_c(segunit[unit]);
delay_ms(30); 
Como ves, guardé en un array (arreglo)los valores fijos, donde cada posición se encuentra asignado un número HEX, para que encendieran cada salida del puerto y así manejar un 7447 y a su vez encender la salida que activa cada display por separado...

Para no volverme un desastre y saber que puerto voy a encender, uso esta pagina

http://www.mathsisfun.com/binary-dec...converter.html

por ejemplo si quiero encender del puerto C las salidas 0 1 y 4 coloco en "Binary" 00010011 y el resultado en hex sería 26 ó 0x26, entonces si lo pongo así:

Código PHP:
output_c(0x26); 
tendré los mismos resultados que:

Código PHP:
output_d(0b00010011
13/01/2015 #14

Avatar de dinoelectro

Gracias ratmayor voy a intentarlo, con tablas,

he aumentado dos efectos ahora el vumetro posee seis efectos, como se muestra en e video, espero les guste. saludos!!

16/01/2015 #15


dinoelectro dijo: Ver Mensaje
Gracias ratmayor voy a intentarlo, con tablas,

he aumentado dos efectos ahora el vumetro posee seis efectos, como se muestra en e video, espero les guste. saludos!!
dinoelectro, muy bueno. Recuerda que desde el año pasado tengo una deuda pendiente contigo y con los foreros de poner los efectos de luces y por raro que parezca se me ha ido el santo al cielo.
Pido mil disculpas. Esta noche sin falta pondré el video de cómo quedaron los juegos de luces, porque el árbol ya lo he quitado.
Pondré también el código tal y cómo lo he hecho a mi manera para que veas el tema de los arrays, por si te sirve algún ejemplo.
16/01/2015 #16

Avatar de dinoelectro

:Hola miglo, claro que me acuerdo, fue en la navidad anterior, igual yo empezaba con el asunto del vu-metro y hasta ahora recién lo vengo acabar,, me interesaría bastante ver el código y aprender nuevas técnicas de programación. te agradezco bastante esa buena voluntad de compartir con todos nosotros

Saludos miglo,
16/01/2015 #17

Avatar de dinoelectro

Hola,tengo una consulta de pronto ustedes saben de algun circuito para conectar el vumetro a la salida de audio de un equipo de sonido.. es decir no recibir el audio desde un microfono electret, sino directo, para que no se vea afectado por el ruido ambiente... de antemano agradezco a esa alma caritativa que me asesore con esto.. saludos!!
16/01/2015 #18
Moderador

Avatar de Ratmayor

Este circuito podría funcionar...
17/01/2015 #19

Avatar de dinoelectro

Gracias, Don Rat.
¿Y de pronto, sabes si hay forma de conectar a la salida de audio sin callar a los parlantes?
Ese es otro problema que no consigo resolver.
17/01/2015 #20
Moderador

Avatar de Ratmayor

dinoelectro dijo: Ver Mensaje
gracias don rat ... y de pronto no sabes si hay forma de conectar a la salida de audio sin callar a los parlantes? .. ese es otro problema q no consigo resolver
A que te refieres con callar los parlantes? Porque se me ocurren algunas ideas, pero no se si se trata de lo mismo que estás pensando...
¿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.