# [Aporte] VUMETRO GIGANTE cuatro efectos



## dinoelectro (Ene 1, 2015)

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!


----------



## anthony123 (Ene 1, 2015)

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


----------



## dinoelectro (Ene 2, 2015)

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.

```
#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();
}
}
```


----------



## Ratmayor (Ene 2, 2015)

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


----------



## dinoelectro (Ene 3, 2015)

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!


----------



## dinoelectro (Ene 9, 2015)

Luego de darme varios cabezazos contra la pared y de jalarme los cabellos :cabezon:, 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!! 
 

```
#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();
}
}
```


----------



## locodelafonola (Ene 9, 2015)

hola





dinoelectro dijo:


> Luego de darme varios cabezasos contra la pared, de alarme los cabellos :cabezon:, 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/-...AAAAAEMQ/J-qB7Cb3MxA/w902-h553-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 ​


----------



## Ratmayor (Ene 9, 2015)

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...


----------



## locodelafonola (Ene 9, 2015)

Ratmayor dijo:


> 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 ????


----------



## Ratmayor (Ene 9, 2015)

locodelafonola dijo:


> 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


----------



## locodelafonola (Ene 9, 2015)

Ratmayor dijo:


> 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.,​ https://www.forosdeelectronica.com/f24/problema-sentencia-do-while-c-125254/#post981334 el problema lo tengo en otro lado.,​ por eso no puedo compilar ., pero lo que vos desis esta en el primer archivo​


----------



## dinoelectro (Ene 10, 2015)

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!

​


----------



## Ratmayor (Ene 10, 2015)

dinoelectro dijo:


> 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...


```
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) > 9 ? ((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-decimal-hexadecimal-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í:


```
output_c(0x26);
```

tendré los mismos resultados que:


```
output_d(0b00010011)
```


----------



## dinoelectro (Ene 13, 2015)

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!!


----------



## miglo (Ene 16, 2015)

dinoelectro dijo:


> 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.


----------



## dinoelectro (Ene 16, 2015)

: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,


----------



## dinoelectro (Ene 16, 2015)

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!!


----------



## Ratmayor (Ene 16, 2015)

Este circuito podría funcionar...


----------



## dinoelectro (Ene 17, 2015)

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 q*ue* no consigo resolver.


----------



## Ratmayor (Ene 17, 2015)

dinoelectro dijo:


> 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...


----------



## dinoelectro (Ene 17, 2015)

bueno lo quiero decir es que al conectar el circuito a la salida de audio.. Los parlantes se apagan.. y no quisiera que aquello ocurra


----------



## Ratmayor (Ene 17, 2015)

dinoelectro dijo:


> bueno lo quiero decir es que al conectar el circuito a la salida de audio.. Los parlantes se apagan.. y no quisiera que aquello ocurra


 La única manera de que esto pase es si se sobrecarga el amplificador, si eso pasa, pasa algo grave  ¿Te hizo eso con el circuito que puse en el post anterior?


----------



## locodelafonola (Ene 17, 2015)

HOLA DINO​


dinoelectro dijo:


> bueno lo quiero decir es que al conectar el circuito a la salida de audio.. Los parlantes se apagan.. y no quisiera que aquello ocurra


 te conviene sacarlo del pre., nunca de la placa de potencia .,​ busca si tiene salida de grabacion o salida para otra potencia (pre)​ es baja señal y mas facil de adaptar ., a la entrada del efecto​


----------



## Ratmayor (Ene 18, 2015)

Pasa que sacar la señal del pre implica desarmar el amplificador y que el PIC le genere interferencias a la entrada de la potencia... Se me ocurre tambien, hacer un divisor de tensión, y usar un operacional como buffer


----------



## dinoelectro (Ene 18, 2015)

Ratmayor dijo:


> La única manera de que esto pase es si se sobrecarga el amplificador, si eso pasa, pasa algo grave  ¿Te hizo eso con el circuito que puse en el post anterior?



No nada de eso, no se trata de ninguna sobrecarga, es muy normal que al conectar los audífonos, los parlantes del computador se apaguen, a si mismo cuando conecto el vumetro las luces bailan, pero la música deja de sonar,,
mi pregunta viene si saben como evitar que se apaguen los parlantes.





locodelafonola dijo:


> HOLA DINO​ te conviene sacarlo del pre., nunca de la placa de potencia .,​ busca si tiene salida de grabacion o salida para otra potencia (pre)​ es baja señal y mas facil de adaptar ., a la entrada del efecto​




yo estoy conectando el vumetro a mi computador, a la salida de audio, donde se conectan los audífonos, pero como lo dije anteriormente, los parlantes dejan de sonar,... yo quisiera encontrar algún método que no implique desarmar al equipo..



Se me esta ocurriendo sacar parlantes externos a ver si funciona este esquema..







no lo he probado aun, pero pienso que si podria funcionar...


----------



## Ratmayor (Ene 18, 2015)

Aaaah! Por eso digo que aun seguía sin entender nada  Verás, el conector de audífonos tiene un interruptor que al introducir el plug, desactiva los parlantes... Así que por ahí, estás frito  en el caso de las laptops y/o computadoras en general, se le puede pedir al sistema operativo que mantenga activa las 2 salidas, pero no todos los dispositivos de audio permiten eso...

Pero la opción que sugieres, puede funcionar sin problemas...


----------



## locodelafonola (Ene 18, 2015)

hola dino., me paso lo mismo que a don rat.,jajajajajajjajajajaja tome para otro lado​ pense que se te activaba., la proteccion., de una potencia a la salida de parlantes.,​ yo tengo una placa por USB y otra en ranura PCI ., mas la que trae la motherboard.,​ ahora la solucion mas simple es esto ., que lo enchufas y listo​


----------



## dinoelectro (Ene 18, 2015)

gracias locodelafonola, la solución que tu me das es la mas viable y satisfactoria por el momento sin embargo, requiere conectar parlantes externos ya que internos del computador se seguirán apagando; 

Ahora la solución que me ofrece don rat tal vez funcione y pueda activar a los parlantes mediante software.. voy a intentarlo


----------



## miglo (Ene 18, 2015)

bueno pues parece que tengo un pequeño problema y es que el video para que se vea es de 21mg y no se como subirlo, haber si me dais alguna idea, he visto que has subido a youtube el tuyo, si me explicas como lo subo pues a lo mejor asi se puede ver.


----------



## dinoelectro (Ene 18, 2015)

hola miglo, yo utilizo el botón "subir" tarda en subirse un vídeo de 5 minutos alrededor de una hora y 30 minutos, aproximadamente.. obviamente deberás crearte una cuenta de correo electrónico en gmail o en google+. (observa la imagen adjunta)


----------



## miglo (Ene 18, 2015)

creo que lo voy a subir en 5 partes ya que me va resultar mas facil vere como lo hago


----------



## dinoelectro (Ene 23, 2015)




----------



## Ratmayor (Ene 23, 2015)

Ayer, trabajando en un tacómetro con LEDs multiplexados, pensé que se podría aplicar también a este proyecto...


```
unsigned char ledbar1[4] = {0x00,0x4C,0x5C,0x7C};
unsigned char ledbar2[3] = {0x46,0x56,0x76};
unsigned char ledbar3[3] = {0x0E,0x1E,0x3E};

void main(){
   setup_adc_ports(sAN4|VSS_VDD);
   setup_adc(ADC_CLOCK_INTERNAL);
   setup_vref(FALSE);
   
   for(;;){
      set_adc_channel(4);
      delay_ms(2);
      a = read_adc();

      if(a>3){d=3;}else{d=a;}
      output_b(ledbar1[d]);
      delay_ms(20);

      if(a>5){b=2;}else{b=a-4;}
      output_b(ledbar2[b]);
      delay_ms(20);
      
      c=a-7;
      output_b(ledbar3[c]);
      delay_ms(20);
   }
}
```

Con esto controlo 9 LEDs usando sólo 6 pines del PIC.


----------



## miglo (Ene 24, 2015)

Bueno pues como lo prometido es deuda aqui esta mi pequeña aportacion.
Voy haber si me aclaro y lo subo bien.
Solo hay que unir todas las partes, jejeje.


----------



## dinoelectro (Ene 26, 2015)

gracias miglo.. esya muy bueno

RatMayor para aplicar, multiplexacion mi circuito tendría que cambiar, así como esta no funciona.


----------



## Ratmayor (Ene 26, 2015)

dinoelectro dijo:


> gracias miglo.. esya muy bueno
> 
> RatMayor para aplicar, multiplexacion mi circuito tendría que cambiar, así como esta no funciona.


Sip, claro, es para los casos en los que quieras ampliar pa cantidad de LEDs y al PIC se le acaben los puertos


----------



## dinoelectro (Ene 27, 2015)

tal vez me puedas recomendar un esquemático,... ahora estoy controlando cintas RGB y la verdad que me hace falta muchos pines para el microcontrolador 18F4550.. ya luego he de subir un video de este proyecto que tengo en mente..




 saludos!.


----------



## Ratmayor (Ene 27, 2015)

Interesante, pero cuéntame ¿De cuantos LEDs estamos hablando? Digo para hacer el diagrama más entendible


----------



## dinoelectro (Ene 27, 2015)

Si ahora estoy controlando 5 LEDS RGB y ya he ocupado 15 pines de los puertos B y D.. el puerto A y C están dedicados para otras tareas así que también ya están copados, así que me parece necesario recurrir a la multiplexacion para controlar 8 RGBs


----------



## miglo (Ene 27, 2015)

mira ver si te sirve de algo el esquema de mi proyecto, aunque es con 16f877a.


----------



## dinoelectro (Ene 27, 2015)

gracias miglo justamente asi los tengo conectados.. pero de esa manera solo podría controlar hasta cinco leds RGB.. hay que recurrir a la multiplexacion para controlar mas LED RGB con la misma cantidad de pines.

Saludos!


----------



## Ratmayor (Ene 27, 2015)

Bien, a la mano tengo un diagrama que podría darte alguna idea, cuando llegue a casa si puedo ayudarte con un diagrama más concreto...

​
Pero como te fijas, todos los LED están interconectados igual, lo que difiere es el común de todos ellos, la cosa es que el PIC sólo va a controlar un renglón a la vez, cuando termine pasa al otro renglón, pero para hacer que quede bien, debes saber donde está parado cada bit de los puertos  es medio fastidiosona la cuestión, pero cuando la ves funcionar, te enamoras 

Lo más importante es saber por cuanto tiempo se va a detener el PIC a enviar los bits que controlan cada renglón, de manera de engañar la vista y dar la impresión de que todos están encendidos a la vez, algunos usan 100mS yo estuve usando 30mS pero ya depende de cada aplicación, PIC, super ojos XD, etc. 

Saludos...


----------



## dinoelectro (Ene 28, 2015)

Gracias rat mayor,...

Aquí les dejo este pequeño tutorial: 

*Como controlar 8 LEDS RGB utilizando 11 pines del microcontrolador*​
con los transistores TIP32 seleccionamos el color RGB y con el CI ULN2803 encendemos los LEDs que deseemos.

Ejemplo 1. para encender 8 LEDs azules:







Ejemplo 2. para encender 4 leds en combinacion verde-rojo:






Ejemplo 3. para encender 6 leds en combinacion verde-azul:






..., y así por el estilo vamos encendiendo combinaciones de LED RGB con un numero reducido de pines, la misma idea se puede extender para mas LEDs inclusive; 

*Para 8 LEDS utilizaríamos  11 pines
Para 9 LEDS utilizaríamos  12 pines
Para 10 LEDs utilizaríamos 13 pines
.
.
.

para N LEDS utilizaríamos N+3 pines*​
Espero les haya sido util


----------



## dinoelectro (Ene 24, 2016)

Hola Amigos foreros, les cuento que después de algunos meses he retomado este proyecto, pero ahora estoy tratando de economizar componentes y simplificar el diseño, por ello decidí emplear módulos LED en lugar de diseñar un circuito impreso. 



​
Así me resulta mas económico y mas sencillo de armar y alambrar;. 











​


----------



## dinoelectro (Ene 25, 2016)

...Aquí están las fotos del controlador...





/
	








​
Una vez ensamblado el circuito procedo a conectar 


El potenciometro para seleccionar los efectos, 
El micrófono para detectar el sonido ambiente 
El adaptador de 12V para alimentar al circuito
y las barras de LED para mostrar el nivel de sonido








​
En los siguientes vídeos muestro las primeras pruebas de funcionamiento...


----------



## faluncho (May 5, 2016)

dinolectro; 

Veo que has mejorado el circuito; en los primeros posts ponías el esquemático y el código pero:

¿Podrías subir código y esquemático de esta mejora?

Estoy interesado en realizar tu proyecto que me parece de lo más interesante.

Un abrazo.


----------



## dinoelectro (May 8, 2016)

Hola Faluncho, este vumetro ya tiene algún tiempo que lo fabrique y no tengo nada documentado, tampoco tengo el programa en mi computador, pero te comento algunas premisas para ver si te sirven y haces tu propio diseño..

básicamente el circuito es este






El programa en el microcontrolador consiste activar los Leds; mientras más grande la señal entregada por el micrófono, mayor es la cantidad de LEDS deberás encender

Cualquier duda estoy listo para responder... Saludos


----------



## faluncho (May 8, 2016)

Gracias por responder;

Si, además veo en la foto Darlingtons de potencia, que tipo son y cómo los conectaste, básicamente eso es lo que quería saber.


----------



## dinoelectro (May 8, 2016)

Si; en el primer diseño utilice transistores TIP-41, los cuales soportan 8 amperios; pero luego me di cuenta que no eran necesarios teniendo en cuenta la dimensión del vumetro, entonces decidí reemplazarlos por los ocho transistores darlingthon que vienen encapsulados en un solo circuito integrado; el ULN2803 cada canal soporta 300mA y son suficientes para construir un vumetro ultra gigante, 

Con el nuevo diseño economice dinero y espacio en el PCB. (fijate en la figuras que pongo a continuaci'on)


----------



## faluncho (May 9, 2016)

Gracias por responder;

Raul; perdona, no me he expresado con claridad y claro, te he despistado.

Planteo mi pregunta correctamente:

Tengo unos grandes y extraños módulos (30 cubos) de leds marca Krausse (30x30 cm) con una controladora positiva -que no funciona- que estaban en una sala de fiestas y que adquirí a muy buen precio.

Mi idea sobre todo al ver tu Vúmetro fue de hacer uno con estos trastos pero lo que no caí es que se alimentaban con positivo -he intentado alimentarlos al revés pero curiosamente no funcionan- es decir, sólo encienden cuando les aplicas positivo a los ánodos y negativo a los cátodos y además con mucha "chicha" del orden de 5A ó más. 

Lo que realmente me hace falta es que alguien me sugiera con algún esquema una etapa amplificadora pero que acepte la señal negativa de los drivers, la amplifique bastante y la convierta en positiva para aplicarla a la entrada de las resistencias ó ánodos. Se me ocurre un paso previo con un pequeño transistor tipo BC y después amplificarla del orden de 6-8A con algún TIP ó IRF.

He estado tentado a probarlo yo pero además de confiar más en vosotros que en mi mismo, tengo miedo de quemar algún cubo.

Como siempre, un millón de gracias.


----------



## dinoelectro (Jun 5, 2016)

hola faluncho, debes utilizar transistores de mayor potencia en lugar de los uln2803... te recomiendo los TIP31 o TIP122 que soportan corrientes mayores a 8A... e mejor aun con transistores MOSFET irf530. saludos!



aquí dejo un nuevo diseño, utilizo ahora el pic16f886, el cual es mas económico y posee excelentes características en entre ellas la del poseer un oscilador interno de 8Mhz

he aqui el plano;



​
el código esta por acá.. por favor comenten y mejorenlo..


saludos


----------



## faluncho (Jun 7, 2016)

Gracias por responder;

Bien, a tenor de los comentarios y de la gran ayuda que me brindáis, me atrevo a mostraros este pequeño circuito.

¿Qué os parece, puede funcionar bien o habría que hacer algunas modificaciones?

Apreciado Raúl; Tu VU Meter ya está en marcha, sólo me falta que me llegue el 16F886, que según veo por tus comentarios funciona igual que el anterior que cuesta 3 veces más ¿no?

Un saludo a todos.


----------



## dinoelectro (Jun 7, 2016)

hola faluncho, el circuito que muestras, si puede funcionar, pero considera utilizar solo el irf9530 nada más ya que colocar dos transistores es un poco exagerado... (observa este video solo utilizo un solo un transistor por canal y funciona perfecto 



)

Ahora el pic16f886 es mucho mas económico y funciona mejor para este proyecto...saludos!


----------



## faluncho (Jun 8, 2016)

Gracias Raul;

Me pongo manos a la obra.

En cuanto esté terminado, subo fotos.

Saluditos.


----------



## perfectgaxx (Dic 28, 2016)

Hola, buenas tardes; estaba queriendo hacer un vumetro con varios efectos de 20 canales en lo posible. Que otro transistor podría utilizar? Los efectos que necesito son solo de barrido, una secuencia, fijo (todos prendidos). 
Las tiras led que voy a utilizar son bastante mas grandes aproximadamente un 1 amp por tira. eh visto que la tira led lo maneja con tips, y los colores también?
o con una controladora de color?. En donde yo estuve viendo utilizaban este circuito que le dejo abajo. Mire su foro y encontre tambien que lo volvio a hacer pero mas pequeño
Al caso, me eh estado rompiendo la cabeza por todos lados buscado ayuda, le agradecería muchísimo su ayuda. y quisiera que me aconseje


----------



## dinoelectro (Dic 31, 2016)

hola amigo el MOSFET IRF530 soporta 14A suficientes para controlar tiras LED de hasta 5 metros.
el circuito puede simplificarse; eliminando el transistor BC548y la resistencia; no son necesarios.


----------



## Daniel Lopes (Dic 31, 2016)

dinoelectro dijo:


> hola amigo el MOSFET IRF530 soporta 14A suficientes para controlar tiras LED de hasta 5 metros.
> el circuito puede simplificarse; eliminando el transistor BC548y la resistencia; no son necesarios.


Hola a todos , caro Don dinoelectro , ese transistor BC548 es una interface de tensión , el es nesesario  porque los 5 voltios de salida del PIC como VGS de control puede NO cerriar totalmente lo canal Dreno y Sourse , ya con 12 Voltios SI !.
Otra questón es la polaridad del sinal de control  "ON" y "OFF" con lo uso del transistor esa logica es inbertida , asi solamente quitando el lo circuito NO te anda como debe , tanbien es nesesario canbiar la lógica de salida del PIC.
! Saludos !.
Att,
Daniel Lopes.


----------



## perfectgaxx (Ene 5, 2017)

hola a todos, gracias por responder a mi primer consulta. Estaría necesitando saber que pic pudiese utilizar para manejar 20 salidas digitales?
de forma de vumetro (barrido y punto), fijo y secuencia


----------



## dinoelectro (Ene 5, 2017)

Daniel Lopes dijo:


> Hola a todos , caro Don dinoelectro , ese transistor BC548 es una interface de tensión , el es nesesario  porque los 5 voltios de salida del PIC como VGS de control puede NO cerriar totalmente lo canal Dreno y Sourse , ya con 12 Voltios SI !.
> Otra questón es la polaridad del sinal de control  "ON" y "OFF" con lo uso del transistor esa logica es inbertida , asi solamente quitando el lo circuito NO te anda como debe , tanbien es nesesario canbiar la lógica de salida del PIC.
> ! Saludos !.
> Att,
> Daniel Lopes.



bueno; el vumetro ya lo tengo funcionando 4 años, y anda perfecto sin ese transistor.



perfectgaxx dijo:


> hola a todos, gracias por responder a mi primer consulta. Estaría necesitando saber que pic pudiese utilizar para manejar 20 salidas digitales?
> de forma de vumetro (barrido y punto), fijo y secuencia



16f877a mas que suficiente


----------



## perfectgaxx (Ene 10, 2017)

hola a todos
gracias por la respuesta anterior
estuve viendo el pic 16f877a para hacer lo que propongo. El circuito seria similar a el de la foto?
ese pic se pudiese utilizar para mi proyecto?
podría remplazar el micrófono por una entrada de audio (jack) ?


----------



## dinoelectro (Ene 12, 2017)

perfectgaxx dijo:


> hola a todos
> gracias por la respuesta anterior
> estuve viendo el pic 16f877a para hacer lo que propongo. El circuito seria similar a el de la foto?
> ese pic se pudiese utilizar para mi proyecto?
> podría remplazar el micrófono por una entrada de audio (jack) ?




Hola amigo.. la respuesta es si a todas tus preguntas
El pic 16f877a tiene suficientes pines para conectar tus leds
Si puedes poner en tu diseño un conector jack para microfono
El circuito es el mismo sea el pic que sea


----------



## perfectgaxx (Ene 12, 2017)

hola,  el código que pasaron anteriormente no funciona para el pic que yo estoy por utilizar y no me compila (cambie la librería pero el lenguaje que utiliza especifico del pic no me deja compilar, y tampoco puedo encontrar la librería correcta ). 
me podrían ayudar para mi proyecto de 20 canales?
ya que quise probar en proteus y no lo pude hacer   
o me pueden mandar el programa?


----------



## pepibho (Ene 14, 2017)

dinoelectro dijo:


> Hola amigo.. la respuesta es si a todas tus preguntas
> El pic 16f877a tiene suficientes pines para conectar tus leds
> Si puedes poner en tu diseño un conector jack para microfono
> El circuito es el mismo sea el pic que sea



bueno. algo sencillo para ti ya lo tienes. pero no estaba mal, replantearse el proyecto y acer algo chulo.. por lo menos la parte de motor donde se pudieran sacar una bariables que aumentasen a relacion de la señal en frecuencias, leer los dos canales L y R.. que seria lo que tendria que encargarse el motor del programa por interrucciones.

el muestreo puedes usar un integrado multiblesor de estos de pantallas display, como el TM1628 por ser muy comun en DVD o chismes de estos comerciales con pulsadores y display o mejor en velocidad de refresco seria max7219-max7221 que seria el mas comun por velocidad y facil aceso en arduino. asi con el pic lo usamos perfet.. con estos integrados y mirando como aislar con octoacopladores (ya sea para disparar un triac o disparar un mosfet) tendriamos un total de 64 salidas o lo que serian 8 modulos de 8 salidas cada uno.. unos a mosfet otros triac para 220V...


ahora que lo mas importante es.
 la señal de audio hay que incorporarsela bien al pic, octaba por un amplificador operacional a la entrada del pic A/D. la señal deberia estar bien calibrada en continua que tenga Vcc/2 sin señal..

ahora como podriamos estar captando en barias bariables la cantidad de señal en frecuencias diversas.. no solo la amplitud de la señal 

creo que seria lo importante de este post.. despues si problemas segundarios el como encender diversas luces.. y sigo octando por matricial led o serial paralelo 74ls595 o similar..

pero intentar preparar solo una parte de programa  para las lecturas de la señal de audio..

como se podria empezar a replantear???


----------



## perfectgaxx (Ene 26, 2017)

no logro comprender lo que dijiste


----------



## Fogonazo (Ene 26, 2017)

perfectgaxx dijo:


> no logro comprender lo que dijiste



Lo que dijo ¿ Quién ?


----------



## perfectgaxx (Feb 8, 2017)

Hola amigos. ¿Qué tal?
Tengo un problema con mi PIC, ya que al compilar con CCS Compiler, me deriva a un error el cual no comprendo bien.

Según leí, es por desbordamiento de la pila, pero sé que el error se encuentra por falta de ROM.
¿Cómo lo soluciono?
Me dijeron que con #separate, pero soy nuevo en el tema de programación y no sé utilizarlo correctamente.

Saludos cordiales.

```
#include <16F877A.h>
#device adc=8
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES HS                       //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection
#FUSES NOWRT                    //Program memory not write protected
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOPROTECT                //Code not protected from reading
#use delay(clock=20M, RESTART_WDT)
#define LCD_RS_PIN               PIN_E0
#define LCD_RW_PIN               PIN_E1
#define LCD_ENABLE_PIN           PIN_E2
#define LCD_DATA4                PIN_D2
#define LCD_DATA5                PIN_D3
#define LCD_DATA6                PIN_D4
#define LCD_DATA7                PIN_D5
#include <lcd.c>
void main(){
lcd_init();
int i;
int andata1;
int andata2;
int tiempo=250;
int8 tiempo2= 5;
int8 dato=0;
setup_adc_ports(NO_ANALOGS);
set_tris_a(0b00111111);
set_tris_b(0);
set_tris_c(0);
set_tris_d(0);
set_tris_e(0);
setup_adc_ports(AN0_AN1_AN3);
setup_adc(ADC_CLOCK_INTERNAL);
output_b(0);
output_c(0);
output_d(0);

{
while(true)
{
if (input(pin_A2)==0 && input(pin_A5)==0 && input(pin_A4)==0){
{
{
while(dato<1)
{
if (input(pin_A2)==0 && input(pin_A5)==0 && input(pin_A4)==0){

lcd_gotoxy(1,1);
  printf(LCD_PUTC, "\fCARGANDO ARCHIVO");


for (i=1;i<=16;++i)
{
  lcd_gotoxy(i,2);
    printf(LCD_PUTC, "*");
  delay_ms( 5 );
}
}

dato=+1;
printf(LCD_PUTC, "\f");
}
}
printf(LCD_PUTC, "\f");
if (input(pin_A2)==0 && input(pin_A5)==0 && input(pin_A4)==0){

{
lcd_gotoxy(1,1);
printf(lcd_putc,"SECCION 0");
lcd_gotoxy(1,2);
printf(lcd_putc,"MOVER PERILLA ");
delay_ms(tiempo2);
}
}


printf(LCD_PUTC, "\f");
if (input(pin_A2)==1 && input(pin_A5)==0 && input(pin_A4)==0){

{
lcd_gotoxy(1,1);
printf(lcd_putc,"SECCION 1");
lcd_gotoxy(1,2);
printf(lcd_putc,"VUMETRO 1 ");
delay_ms(tiempo2);
}
}
{
if (input(pin_A2)==1 && input(pin_A5)==0 && input(pin_A4)==0){
set_adc_channel(0);

if(andata1<=45)                 {output_c(0b00000000);}
if(andata1>45 && andata1<=50)   {output_c(0b00000001);}
if(andata1>50 && andata1<=55)   {output_c(0b00000011);}
if(andata1>55 && andata1<=60)   {output_c(0b00000111);}
if(andata1>60 && andata1<=65)   {output_c(0b00001111);}
if(andata1>65 && andata1<=70)   {output_c(0b00011111);}
if(andata1>70 && andata1<=75)   {output_c(0b00111111);}
if(andata1>75 && andata1<=80)   {output_c(0b01111111);}
if(andata1>80 && andata1<=85)   {output_c(0b11111111);}
if(andata1>85 && andata1<=90)   {output_d(0b00000010);}
if(andata1>90)                  {output_d(0b00000011);}
set_adc_channel(3);
andata1=read_adc();
output_c(0);
output_d(0);
}
if (input(pin_A2)==1 && input(pin_A5)==0 && input(pin_A4)==0){
if(andata2<=45)                {output_b(0b00000000);}
if(andata2>45 && andata1<=50)  {output_b(0b10000000);}
if(andata2>50 && andata1<=55)  {output_b(0b11000000);}
if(andata2>55 && andata1<=60)  {output_b(0b11100000);}
if(andata2>60 && andata1<=65)  {output_b(0b11110000);}
if(andata2>65 && andata1<=70)  {output_b(0b11111000);}
if(andata2>70 && andata1<=75)  {output_b(0b11111100);}
if(andata2>75 && andata1<=80)  {output_b(0b11111110);}
if(andata2>75 && andata1<=85)  {output_b(0b11111111);}
if(andata2>85 && andata1<=90)  {output_d(0b00000000);}
if(andata2>90)                 {output_d(0b00000000);} //prenden leds del puerto D porterior al puerto C
set_adc_channel(1);
andata2=read_adc();
output_b(0);
output_d(0);
}
}
printf(LCD_PUTC, "\f");
if (input(pin_A2)==0 && input(pin_A5)==1 && input(pin_A4)==0){
{
lcd_gotoxy(1,1);
printf(lcd_putc,"SECCION 2");
lcd_gotoxy(1,2);
printf(lcd_putc,"VUMETRO 2 ");
delay_ms(tiempo2);
}
}
{
if (input(pin_A5)==1 && input(pin_A4)==0 && input(pin_A2)==0 ){
set_adc_channel(0);
if(andata1<=45)                 {output_c(0b00000000);}
if(andata1>45 && andata1<=50)   {output_c(0b10000000);}
if(andata1>50 && andata1<=55)   {output_c(0b11000000);}
if(andata1>55 && andata1<=60)   {output_c(0b11100000);}
if(andata1>60 && andata1<=65)   {output_c(0b11110000);}
if(andata1>65 && andata1<=70)   {output_c(0b11111000);}
if(andata1>70 && andata1<=75)   {output_c(0b11111100);}
if(andata1>75 && andata1<=80)   {output_c(0b11111110);}
if(andata1>80 && andata1<=85)   {output_c(0b11111111);}
if(andata1>85 && andata1<=90)   {output_d(0b00000001);}
if(andata1>90)                  {output_d(0b00000011);}  
set_adc_channel(3);
andata1=read_adc();
output_c(0);
output_d(0);
}
if (input(pin_A5)==1 && input(pin_A4)==0 && input(pin_A2)==0 ){
if(andata2<=45)                 {output_b(0b00000000);}
if(andata2>45 && andata1<=50)   {output_b(0b00000001);}
if(andata2>50 && andata1<=55)   {output_b(0b00000011);}
if(andata2>55 && andata1<=60)   {output_b(0b00000111);}
if(andata2>60 && andata1<=65)   {output_b(0b00001111);}
if(andata2>65 && andata1<=70)   {output_b(0b00011111);}
if(andata2>70 && andata1<=75)   {output_b(0b00111111);}
if(andata2>75 && andata1<=80)   {output_b(0b01111111);}
if(andata2>80 && andata1<=85)   {output_b(0b11111111);}
if(andata2>85 && andata1<=90)   {output_d(0b01000000);}
if(andata2>90)                  {output_d(0b11000000);}//prenden leds del puerto D porterior al puerto C
set_adc_channel(1);
andata2=read_adc();
output_b(0);
output_d(0);
}
}
printf(LCD_PUTC, "\f");
if (input(pin_A2)==0 && input(pin_A5)==0 && input(pin_A4)==1){
{
lcd_gotoxy(1,1);
printf(lcd_putc,"SECCION 3");
lcd_gotoxy(1,2);
printf(lcd_putc,"JUEGO DE LUCES ");
delay_ms(tiempo2);
}
}
{
if (input(pin_A4)==1 && input(pin_A5)==0 && input(pin_A2)==0){
  output_b(0b00000001)&& output_c(0b00000001);
 delay_ms(tiempo);}
if (input(pin_A4)==1 && input(pin_A5)==0 && input(pin_A2)==0){
 output_b(0b00000010)&& output_c(0b00000010);
 delay_ms(tiempo);}
if (input(pin_A4)==1 && input(pin_A5)==0 && input(pin_A2)==0){
  output_b(0b00000100)&& output_c(0b00000100);
 delay_ms(tiempo);}
if (input(pin_A4)==1 && input(pin_A5)==0 && input(pin_A2)==0){  
  output_b(0b00001000)&& output_c(0b00001000);
 delay_ms(tiempo);}
if (input(pin_A4)==1 && input(pin_A5)==0 && input(pin_A2)==0){  
  output_b(0b00010000)&& output_c(0b00010000);
  delay_ms(tiempo);}
if (input(pin_A4)==1 && input(pin_A5)==0 && input(pin_A2)==0){
  output_b(0b00100000)&& output_c(0b00100000);
 delay_ms(tiempo);}
if (input(pin_A4)==1 && input(pin_A5)==0 && input(pin_A2)==0){
 output_b(0b01000000)&& output_c(0b01000000);
  delay_ms(tiempo);}
 if (input(pin_A4)==1 && input(pin_A5)==0 && input(pin_A2)==0){ 
  output_b(0b10000000)&& output_c(0b10000000);
 delay_ms(tiempo);}
 if (input(pin_A4)==1 && input(pin_A5)==0 && input(pin_A2)==0){ 
  output_b(0b00000000)&& output_c(0b00000000);
 delay_ms(tiempo);}
if (input(pin_A4)==1 && input(pin_A5)==0 && input(pin_A2)==0){  
  output_b(0b10000000)&& output_c(0b10000000);//vuelta
  delay_ms(tiempo);}
if (input(pin_A4)==1 && input(pin_A5)==0 && input(pin_A2)==0){
  output_b(0b01000000)&& output_c(0b01000000);
 delay_ms(tiempo);}
 if (input(pin_A4)==1 && input(pin_A5)==0 && input(pin_A2)==0){ 
  output_b(0b00100000)&& output_c(0b00100000);
 delay_ms(tiempo);}
 if (input(pin_A4)==1 && input(pin_A5)==0 && input(pin_A2)==0){ 
  output_b(0b00010000)&& output_c(0b00010000);
 delay_ms(tiempo);}
 if (input(pin_A4)==1 && input(pin_A5)==0 && input(pin_A2)==0){ 
  output_b(0b00001000)&& output_c(0b00001000);
 delay_ms(tiempo);}
if (input(pin_A4)==1 && input(pin_A5)==0 && input(pin_A2)==0){  
  output_b(0b00000100)&& output_c(0b00000100);
 delay_ms(tiempo);}
  if (input(pin_A4)==1 && input(pin_A5)==0 && input(pin_A2)==0){
  output_b(0b00000010)&& output_c(0b00000010);
 delay_ms(tiempo);}
 if (input(pin_A4)==1 && input(pin_A5)==0 && input(pin_A2)==0){
  output_b(0b00000001)&& output_c(0b00000001);
 delay_ms(tiempo);}
if (input(pin_A4)==1 && input(pin_A5)==0 && input(pin_A2)==0){
  output_b(0b00000001)&& output_c(0b00000001);
 delay_ms(tiempo);}
 if (input(pin_A4)==1 && input(pin_A5)==0 && input(pin_A2)==0){
  output_b(0b00000000)&& output_c(0b00000000);
 delay_ms(tiempo);}
  if (input(pin_A4)==1 && input(pin_A5)==0 && input(pin_A2)==0){
  output_b(0b11111111)&& output_c(0b11111111);
 delay_ms(tiempo);}
  if (input(pin_A4)==1 && input(pin_A5)==0 && input(pin_A2)==0){
  output_b(0b00000000)&& output_c(0b00000000);
 delay_ms(tiempo);}
  if (input(pin_A4)==1 && input(pin_A5)==0 && input(pin_A2)==0){
  output_b(0b11111111)&& output_c(0b11111111);
  delay_ms(tiempo);}
  if (input(pin_A4)==1 && input(pin_A5)==0 && input(pin_A2)==0){
  output_b(0b00000000)&& output_c(0b00000000);
 delay_ms(tiempo);}
  if (input(pin_A4)==1 && input(pin_A5)==0 && input(pin_A2)==0){
  output_b(0b11111111)&& output_c(0b11111111);
 delay_ms(tiempo);}
  if (input(pin_A4)==1 && input(pin_A5)==0 && input(pin_A2)==0){
  output_b(0b00000000)&& output_c(0b00000000);
  delay_ms(tiempo);}
    if (input(pin_A4)==1 && input(pin_A5)==0 && input(pin_A2)==0){
  output_b(0b11111111)&& output_c(0b11111111);
 delay_ms(tiempo);}
output_b(0);
output_c(0);
}
}
}
}
}
}
```


----------



## D@rkbytes (Feb 8, 2017)

Revisa bien tu programa y verás que tiene corchetes mal colocados por todos lados, pero ese no es el problema principal.
El problema de falta de ROM cuando aún deberías tener, se debe a que estás incluyendo demasiadas rutinas dentro del bucle main.
Si bien se puede solucionar con #separate, es mejor que pongas algunas rutinas fuera.

_[Editado tiempo después para publicar el código corregido...]_


```
#include <16F877A.h>
#use     delay(crystal = 20 MHz, RESTART_WDT)
#define LCD_RS_PIN               PIN_E0
#define LCD_RW_PIN               PIN_E1
#define LCD_ENABLE_PIN           PIN_E2
#define LCD_DATA4                PIN_D2
#define LCD_DATA5                PIN_D3
#define LCD_DATA6                PIN_D4
#define LCD_DATA7                PIN_D5
#include <lcd.c>

int andata1, andata2;

void rutina1 (void)
{
   set_adc_channel(0);

   if(andata1 <= 45) output_c(0b00000000);
   if(andata1 > 45 && andata1 <= 50)   output_c(0b00000001);
   if(andata1 > 50 && andata1 <= 55)   output_c(0b00000011);
   if(andata1 > 55 && andata1 <= 60)   output_c(0b00000111);
   if(andata1 > 60 && andata1 <= 65)   output_c(0b00001111);
   if(andata1 > 65 && andata1 <= 70)   output_c(0b00011111);
   if(andata1 > 70 && andata1 <= 75)   output_c(0b00111111);
   if(andata1 > 75 && andata1 <= 80)   output_c(0b01111111);
   if(andata1 > 80 && andata1 <= 85)   output_c(0b11111111);
   if(andata1 > 85 && andata1 <= 90)   output_d(0b00000010);
   if(andata1 > 90)  output_d(0b00000011);
   
   set_adc_channel(3);
   andata1 = read_adc();
   output_c(0);
   output_d(0);
}

void rutina2 (void)
{
   if(andata2 <= 45) output_b(0b00000000);
   if(andata2 > 45 && andata1 <= 50)   output_b(0b10000000);
   if(andata2 > 50 && andata1 <= 55)   output_b(0b11000000);
   if(andata2 > 55 && andata1 <= 60)   output_b(0b11100000);
   if(andata2 > 60 && andata1 <= 65)   output_b(0b11110000);
   if(andata2 > 65 && andata1 <= 70)   output_b(0b11111000);
   if(andata2 > 70 && andata1 <= 75)   output_b(0b11111100);
   if(andata2 > 75 && andata1 <= 80)   output_b(0b11111110);
   if(andata2 > 75 && andata1 <= 85)   output_b(0b11111111);
   if(andata2 > 85 && andata1 <= 90)   output_d(0b00000000);
   if(andata2 > 90)  output_d(0b00000000);   //prenden leds del puerto D porterior al puerto C
   
   set_adc_channel(1);
   andata2 = read_adc();
   output_b(0);
   output_d(0);
}

void rutina3 (void)
{
   set_adc_channel(0);
   
   if(andata1 <= 45) output_c(0b00000000);
   if(andata1 > 45 && andata1 <= 50)   output_c(0b10000000);
   if(andata1 > 50 && andata1 <= 55)   output_c(0b11000000);
   if(andata1 > 55 && andata1 <= 60)   output_c(0b11100000);
   if(andata1 > 60 && andata1 <= 65)   output_c(0b11110000);
   if(andata1 > 65 && andata1 <= 70)   output_c(0b11111000);
   if(andata1 > 70 && andata1 <= 75)   output_c(0b11111100);
   if(andata1 > 75 && andata1 <= 80)   output_c(0b11111110);
   if(andata1 > 80 && andata1 <= 85)   output_c(0b11111111);
   if(andata1 > 85 && andata1 <= 90)   output_d(0b00000001);
   if(andata1 > 90)  output_d(0b00000011);
   
   set_adc_channel(3);
   andata1 = read_adc();
   output_c(0);
   output_d(0);
}

void rutina4 (void)
{
   if(andata2 <= 45) output_b(0b00000000);
   if(andata2 > 45 && andata1 <= 50)   output_b(0b00000001);
   if(andata2 > 50 && andata1 <= 55)   output_b(0b00000011);
   if(andata2 > 55 && andata1 <= 60)   output_b(0b00000111);
   if(andata2 > 60 && andata1 <= 65)   output_b(0b00001111);
   if(andata2 > 65 && andata1 <= 70)   output_b(0b00011111);
   if(andata2 > 70 && andata1 <= 75)   output_b(0b00111111);
   if(andata2 > 75 && andata1 <= 80)   output_b(0b01111111);
   if(andata2 > 80 && andata1 <= 85)   output_b(0b11111111);
   if(andata2 > 85 && andata1 <= 90)   output_d(0b01000000);
   if(andata2 > 90)  output_d(0b11000000);   //prenden leds del puerto D posterior al puerto C
   
   set_adc_channel(1);
   andata2 = read_adc();
   output_b(0);
   output_d(0);
}


void main (void)
{
   lcd_init();
   
   int i;
   int tiempo = 250;
   int8 tiempo2 = 5;
   int8 dato = 0;

   set_tris_a(0b00111111);
   set_tris_b(0);
   set_tris_c(0);
   set_tris_d(0);
   set_tris_e(0);

   setup_adc_ports(AN0_AN1_AN3);
   setup_adc(ADC_CLOCK_INTERNAL);
   
   output_b(0);
   output_c(0);
   output_d(0);

   while(true)
   {
      if (!input(pin_A2) && !input(pin_A5) && !input(pin_A4))
      {
         while(dato<1)
         {
            if (!input(pin_A2) && !input(pin_A5) && !input(pin_A4))
            {
               lcd_gotoxy(1,1);
               printf(LCD_PUTC, "\fCARGANDO ARCHIVO");

               for (i=1;i<=16;++i)
               {
                  lcd_gotoxy(i,2);
                  printf(LCD_PUTC, "*");
                  delay_ms( 5 );
               }
            }
            dato ++;
            printf(LCD_PUTC, "\f");
         }
      }
      
      if (!input(pin_A2) && !input(pin_A5) && !input(pin_A4))
      {
         lcd_gotoxy(1,1);
         printf(lcd_putc,"\fSECCION 0");
         lcd_gotoxy(1,2);
         printf(lcd_putc,"MOVER PERILLA");
         delay_ms(tiempo2);
      }
      
      if (input(pin_A2) && !input(pin_A5) && !input(pin_A4))
      {
         lcd_gotoxy(1,1);
         printf(lcd_putc,"SECCION 1");
         lcd_gotoxy(1,2);
         printf(lcd_putc,"VUMETRO 1");
         delay_ms(tiempo2);
      }
      
      if (input(pin_A2) && !input(pin_A5) && !input(pin_A4))
         rutina1();
      
      if (input(pin_A2) && !input(pin_A5) && !input(pin_A4))
         rutina2();

      if (input(pin_A5) && !input(pin_A4) && !input(pin_A2))
         rutina3();
      
      if (input(pin_A5) && !input(pin_A4) && !input(pin_A2))
         rutina4();
      
      if (!input(pin_A2) && input(pin_A5) && !input(pin_A4))
      {
         lcd_gotoxy(1,1);
         printf(lcd_putc,"\fSECCION 2");
         lcd_gotoxy(1,2);
         printf(lcd_putc,"VUMETRO 2 ");
         delay_ms(tiempo2);
      }
      
      if (!input(pin_A2) && !input(pin_A5) && input(pin_A4))
      {
         lcd_gotoxy(1,1);
         printf(lcd_putc,"\fSECCION 3");
         lcd_gotoxy(1,2);
         printf(lcd_putc,"JUEGO DE LUCES");
         delay_ms(tiempo2);
      }
      
      if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
      {
         output_b(0b00000001) && output_c(0b00000001);
         delay_ms(tiempo);
      }
      if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
      {
         output_b(0b00000010);
         output_c(0b00000010);
         delay_ms(tiempo);
      }
      if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
      {
         output_b(0b00000100);
         output_c(0b00000100);
         delay_ms(tiempo);
      }
      if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
      {
         output_b(0b00001000);
         output_c(0b00001000);
         delay_ms(tiempo);
      }
      if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
      {
         output_b(0b00010000);
         output_c(0b00010000);
         delay_ms(tiempo);
      }
      if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
      {
         output_b(0b00100000);
         output_c(0b00100000);
         delay_ms(tiempo);
      }
      if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
      {
         output_b(0b01000000);
         output_c(0b01000000);
         delay_ms(tiempo);
      }
      if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
      {
         output_b(0b10000000);
         output_c(0b10000000);
         delay_ms(tiempo);
      }
      if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
      {
         output_b(0b00000000) && output_c(0b00000000);
         delay_ms(tiempo);
      }
      if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
      {
         output_b(0b10000000);
         ;output_c(0b10000000);  //vuelta
         delay_ms(tiempo);
      }
      if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
      {
         output_b(0b01000000) && output_c(0b01000000);
         delay_ms(tiempo);
      }
      if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
      {
         output_b(0b00100000);
         output_c(0b00100000);
         delay_ms(tiempo);
      }
      if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
      {
         output_b(0b00010000);
         output_c(0b00010000);
         delay_ms(tiempo);
      }
      if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
      {
         output_b(0b00001000);
         output_c(0b00001000);
         delay_ms(tiempo);
      }
      if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
      {
         output_b(0b00000100);
         output_c(0b00000100);
         delay_ms(tiempo);
      }
      if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
      {
         output_b(0b00000010);
         output_c(0b00000010);
         delay_ms(tiempo);
      }
      if (input(pin_A4)==1 && !input(pin_A5) && !input(pin_A2))
      {
         output_b(0b00000001);
         output_c(0b00000001);
         delay_ms(tiempo);
      }
      if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
      {
         output_b(0b00000001);
         output_c(0b00000001);
         delay_ms(tiempo);
      }
      if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
      {
         output_b(0b00000000);
         output_c(0b00000000);
         delay_ms(tiempo);
      }
      if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
      {
         output_b(0b11111111);
         output_c(0b11111111);
         delay_ms(tiempo);
      }
      if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
      {
         output_b(0b00000000);
         output_c(0b00000000);
         delay_ms(tiempo);
      }
      if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
      {
         output_b(0b11111111);
         output_c(0b11111111);
         delay_ms(tiempo);
      }
      if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
      {
         output_b(0b00000000);
         output_c(0b00000000);
         delay_ms(tiempo);
      }
      if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
      {
         output_b(0b11111111);
         output_c(0b11111111);
         delay_ms(tiempo);
      }
      if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
      {
         output_b(0b00000000);
         output_c(0b00000000);
         delay_ms(tiempo);
      }
      if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
      {
         output_b(0b11111111);
         output_c(0b11111111);
         delay_ms(tiempo);
      }
      output_b(0);    // Esto debe afectar los cambios del puerto B, pero así viene en el programa.
      output_c(0);    // Esto debe afectar los cambios del puerto C, pero así viene en el programa.
   }
}
```


----------



## miglo (Feb 9, 2017)

```
if(andata1 <= 45) output_c(0b00000000);
   if(andata1  <= 50)   output_c(0b00000001);
   if(andata1  <= 55)   output_c(0b00000011);
   if(andata1  <= 60)   output_c(0b00000111);
   if(andata1  <= 65)   output_c(0b00001111);
   if(andata1  <= 70)   output_c(0b00011111);
   if(andata1  <= 75)   output_c(0b00111111);
   if(andata1  <= 80)   output_c(0b01111111);
   if(andata1  <= 85)   output_c(0b11111111);
   if(andata1  <= 90)   output_d(0b00000010);
   if(andata1 > 90)  output_d(0b00000011);
```

Tambien puedes ahorrar haciendo esto en vez de como lo tienes puesto.


----------



## D@rkbytes (Feb 9, 2017)

No, porque así estás quitando el rango de tolerancia.


----------



## cosmefulanito04 (Feb 10, 2017)

Miglo, si por ej. el dato es menor a 45, entra en todos.

Dark, en vez de estar preguntando en cada if el rango (eso serían dos saltos), conviene usar el else y los límites, ej:

if(var<=45)
... accion 1
else if(var<=50)
... accion 2
else if... 

Y así con todos los límites.


----------



## perfectgaxx (Feb 10, 2017)

Muchas gracias D@rkbytes, por el apoyo. 

Hola.
Para cambiar el vumetro a modo estereo. ¿Podría hacer este conexionado?
Uno de esos, por salida (AN1 y AN3)
El potenciómetro delimitará la cantidad niveles.  (No lo voy a hacer cambiar de efectos)


```
#include <16F877A.h>
#device adc=8
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES HS                       //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection
#FUSES NOWRT                    //Program memory not write protected
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOPROTECT                //Code not protected from reading
#use     delay(crystal = 20 MHz, RESTART_WDT)
#define LCD_RS_PIN               PIN_E0
#define LCD_RW_PIN               PIN_E1
#define LCD_ENABLE_PIN           PIN_E2
#define LCD_DATA4                PIN_D2
#define LCD_DATA5                PIN_D3
#define LCD_DATA6                PIN_D4
#define LCD_DATA7                PIN_D5
#include <lcd.c>

int andata1, andata2, tiempo = 250;

void rutina1 (void)
{
   set_adc_channel(0);

   if(andata1 <= 45) output_c(0b00000000);
   if(andata1 > 45 && andata1 <= 50)   output_c(0b00000001);
   if(andata1 > 50 && andata1 <= 55)   output_c(0b00000011);
   if(andata1 > 55 && andata1 <= 60)   output_c(0b00000111);
   if(andata1 > 60 && andata1 <= 65)   output_c(0b00001111);
   if(andata1 > 65 && andata1 <= 70)   output_c(0b00011111);
   if(andata1 > 70 && andata1 <= 75)   output_c(0b00111111);
   if(andata1 > 75 && andata1 <= 80)   output_c(0b01111111);
   if(andata1 > 80 && andata1 <= 85)   output_c(0b11111111);
   if(andata1 > 85 && andata1 <= 90)   output_d(0b00000010);
   if(andata1 > 90)  output_d(0b00000011);
   
   set_adc_channel(3);
   andata1 = read_adc();
   output_c(0);
   output_d(0);
}

void rutina2 (void)
{
   set_adc_channel(0);
   if(andata2 <= 45) output_b(0b00000000);
   if(andata2 > 45 && andata1 <= 50)   output_b(0b10000000);
   if(andata2 > 50 && andata1 <= 55)   output_b(0b11000000);
   if(andata2 > 55 && andata1 <= 60)   output_b(0b11100000);
   if(andata2 > 60 && andata1 <= 65)   output_b(0b11110000);
   if(andata2 > 65 && andata1 <= 70)   output_b(0b11111000);
   if(andata2 > 70 && andata1 <= 75)   output_b(0b11111100);
   if(andata2 > 75 && andata1 <= 80)   output_b(0b11111110);
   if(andata2 > 75 && andata1 <= 85)   output_b(0b11111111);
   if(andata2 > 85 && andata1 <= 90)   output_d(0b01000000);
   if(andata2 > 90)  output_d(0b11000000);   //prenden leds del puerto D porterior al puerto C
   
   set_adc_channel(1);
   andata2 = read_adc();
   output_b(0);
   output_d(0);
}

void rutina3 (void)
{
   set_adc_channel(0);
   
   if(andata1 <= 45) output_c(0b00000000);
   if(andata1 > 45 && andata1 <= 50)   output_c(0b10000000);
   if(andata1 > 50 && andata1 <= 55)   output_c(0b11000000);
   if(andata1 > 55 && andata1 <= 60)   output_c(0b11100000);
   if(andata1 > 60 && andata1 <= 65)   output_c(0b11110000);
   if(andata1 > 65 && andata1 <= 70)   output_c(0b11111000);
   if(andata1 > 70 && andata1 <= 75)   output_c(0b11111100);
   if(andata1 > 75 && andata1 <= 80)   output_c(0b11111110);
   if(andata1 > 80 && andata1 <= 85)   output_c(0b11111111);
   if(andata1 > 85 && andata1 <= 90)   output_d(0b00000001);
   if(andata1 > 90)  output_d(0b00000011);
   
   set_adc_channel(3);
   andata1 = read_adc();
   output_c(0);
   output_d(0);
}

void rutina4 (void)
{  set_adc_channel(0);
   if(andata2 <= 45) output_b(0b00000000);
   if(andata2 > 45 && andata1 <= 50)   output_b(0b00000001);
   if(andata2 > 50 && andata1 <= 55)   output_b(0b00000011);
   if(andata2 > 55 && andata1 <= 60)   output_b(0b00000111);
   if(andata2 > 60 && andata1 <= 65)   output_b(0b00001111);
   if(andata2 > 65 && andata1 <= 70)   output_b(0b00011111);
   if(andata2 > 70 && andata1 <= 75)   output_b(0b00111111);
   if(andata2 > 75 && andata1 <= 80)   output_b(0b01111111);
   if(andata2 > 80 && andata1 <= 85)   output_b(0b11111111);
   if(andata2 > 85 && andata1 <= 90)   output_d(0b01000000);
   if(andata2 > 90)  output_d(0b11000000);   //prenden leds del puerto D posterior al puerto C
   
   set_adc_channel(1);
   andata2 = read_adc();
   output_b(0);
   output_d(0);
}

void rutina5 (void)
{
      if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
      {
         output_b(0b00000001) && output_c(0b00000001);
         delay_ms(tiempo);
      }
      if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
      {
         output_b(0b00000010);
         output_c(0b00000010);
         delay_ms(tiempo);
      }
      if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
      {
         output_b(0b00000100);
         output_c(0b00000100);
         delay_ms(tiempo);
      }
      if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
      {
         output_b(0b00001000);
         output_c(0b00001000);
         delay_ms(tiempo);
      }
      if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
      {
         output_b(0b00010000);
         output_c(0b00010000);
         delay_ms(tiempo);
      }
      if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
      {
         output_b(0b00100000);
         output_c(0b00100000);
         delay_ms(tiempo);
      }
      if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
      {
         output_b(0b01000000);
         output_c(0b01000000);
         delay_ms(tiempo);
      }
      if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
      {
         output_b(0b10000000);
         output_c(0b10000000);
         delay_ms(tiempo);
      }
      if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
      {
         output_b(0b00000000) && output_c(0b00000000);
         delay_ms(tiempo);
      }
      if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
      {
         output_b(0b10000000);
         ;output_c(0b10000000);  //vuelta
         delay_ms(tiempo);
      }
      if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
      {
         output_b(0b01000000) && output_c(0b01000000);
         delay_ms(tiempo);
      }
      if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
      {
         output_b(0b00100000);
         output_c(0b00100000);
         delay_ms(tiempo);
      }
      if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
      {
         output_b(0b00010000);
         output_c(0b00010000);
         delay_ms(tiempo);
      }
      if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
      {
         output_b(0b00001000);
         output_c(0b00001000);
         delay_ms(tiempo);
      }
      if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
      {
         output_b(0b00000100);
         output_c(0b00000100);
         delay_ms(tiempo);
      }
      if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
      {
         output_b(0b00000010);
         output_c(0b00000010);
         delay_ms(tiempo);
      }
      if (input(pin_A4)==1 && !input(pin_A5) && !input(pin_A2))
      {
         output_b(0b00000001);
         output_c(0b00000001);
         delay_ms(tiempo);
      }
      if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
      {
         output_b(0b00000001);
         output_c(0b00000001);
         delay_ms(tiempo);
      }
      if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
      {
         output_b(0b00000000);
         output_c(0b00000000);
         delay_ms(tiempo);
      }
      if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
      {
         output_b(0b11111111);
         output_c(0b11111111);
         delay_ms(tiempo);
      }
      if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
      {
         output_b(0b00000000);
         output_c(0b00000000);
         delay_ms(tiempo);
      }
      if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
      {
         output_b(0b11111111);
         output_c(0b11111111);
         delay_ms(tiempo);
      }
      if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
      {
         output_b(0b00000000);
         output_c(0b00000000);
         delay_ms(tiempo);
      }
      if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
      {
         output_b(0b11111111);
         output_c(0b11111111);
         delay_ms(tiempo);
      }
      if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
      {
         output_b(0b00000000);
         output_c(0b00000000);
         delay_ms(tiempo);
      }
      if (input(pin_A4) && !input(pin_A5) && !input(pin_A2))
      {
         output_b(0b11111111);
         output_c(0b11111111);
         delay_ms(tiempo);
      }
      
}

void main (void)
{
   lcd_init();
   
   int i;
   
   int8 tiempo2 = 5;
   int8 dato = 0;

   set_tris_a(0b00111111);
   set_tris_b(0);
   set_tris_c(0);
   set_tris_d(0);
   set_tris_e(0);

   setup_adc_ports(AN0_AN1_AN3);
   setup_adc(ADC_CLOCK_INTERNAL);
   
   output_b(0);
   output_c(0);
   output_d(0);
   
 for(;;){ 
 if (!input(pin_A2) && !input(pin_A5) && !input(pin_A4)) 
 
   while(true)
   {
      if (!input(pin_A2) && !input(pin_A5) && !input(pin_A4))
      {
         while(dato<1)
         {
            if (!input(pin_A2) && !input(pin_A5) && !input(pin_A4))
            {
               lcd_gotoxy(1,1);
               printf(LCD_PUTC, "\fCARGANDO ARCHIVO");

               for (i=1;i<=16;++i)
               {
                  lcd_gotoxy(i,2);
                  printf(LCD_PUTC, "*");
                  delay_ms( 5 );
               }
            }
            dato ++;
            printf(LCD_PUTC, "\f");
         }
      }
     
      if (!input(pin_A2) && !input(pin_A5) && !input(pin_A4))
      {
         printf(LCD_PUTC, "\f");
         lcd_gotoxy(1,1);
         printf(lcd_putc,"SECCION 0");
         lcd_gotoxy(1,2);
         printf(lcd_putc,"MOVER PERILLA");
         delay_ms(tiempo2);
      }
      
      if (input(pin_A2) && !input(pin_A5) && !input(pin_A4))
      {
         printf(LCD_PUTC, "\f");
         lcd_gotoxy(1,1);
         printf(lcd_putc,"SECCION 1");
         lcd_gotoxy(1,2);
         printf(lcd_putc,"VUMETRO 1");
         delay_ms(tiempo2);
      }
      
      if (input(pin_A2) && !input(pin_A5) && !input(pin_A4))
         rutina1();
      
      if (input(pin_A2) && !input(pin_A5) && !input(pin_A4))
         rutina2();

      if (input(pin_A5) && !input(pin_A4) && !input(pin_A2))
         rutina3();
      
      if (input(pin_A5) && !input(pin_A4) && !input(pin_A2))
         rutina4();
         
      if (!input(pin_A2) && !input(pin_A5) && input(pin_A4))
         rutina5();
      
      if (!input(pin_A2) && input(pin_A5) && !input(pin_A4))
      {  
         printf(LCD_PUTC, "\f");
         lcd_gotoxy(1,1);
         printf(lcd_putc,"\fSECCION 2");
         lcd_gotoxy(1,2);
         printf(lcd_putc,"VUMETRO 2 ");
         delay_ms(tiempo2);
      }
      
      if (!input(pin_A2) && !input(pin_A5) && input(pin_A4))
      {  
         printf(LCD_PUTC, "\f");
         lcd_gotoxy(1,1);
         printf(lcd_putc,"\fSECCION 3");
         lcd_gotoxy(1,2);
         printf(lcd_putc,"JUEGO DE LUCES");
         delay_ms(tiempo2);
      }
      
      

   }
}  
}
```


----------



## dinoelectro (Feb 12, 2017)

perfectgaxx dijo:


> Muchas gracias D@rkbytes, por el apoyo.
> 
> Hola.
> Para cambiar el vumetro a modo estereo. ¿Podría hacer este conexionado?
> ...



Hola perfectgaxx si no piensas cambiar de efectos mejor retira ese potencio-metro; Para delimitar la cantidad de niveles el cambio se debería hacer en el código.


saludos!


----------



## perfectgaxx (Feb 12, 2017)

> Hola perfectgaxx si no piensas cambiar de efectos mejor retira ese potencio-metro; Para delimitar la cantidad de niveles el cambio se debería hacer en el código.


 
     Hola dinoelectro, que clases de cambios debería hacer en mi código?
Mi objetivo era poner un potenciometro, para los niveles, ya que si yo pondría la música mas fuerte no prendan todas las tiras, y lograr un efecto óptico favorable. Donde se note la diferencia de picos de la canción. Y ademas, pensé poner estéreo  para captar los volumen izquierdo y derecho de una canción.

gracias por la respuesta, saludos de antemano!


----------



## perfectgaxx (Mar 7, 2017)

como podria conectar directo la entrada de audio del movil al pic, que circuito podria usar?


----------



## dinoelectro (Mar 8, 2017)

perfectgaxx dijo:


> Hola dinoelectro, que clases de cambios debería hacer en mi código?
> Mi objetivo era poner un potenciometro, para los niveles, ya que si yo pondría la música mas fuerte no prendan todas las tiras, y lograr un efecto óptico favorable. Donde se note la diferencia de picos de la canción. Y ademas, pensé poner estéreo  para captar los volumen izquierdo y derecho de una canción.
> 
> gracias por la respuesta, saludos de antemano!



Hola perfectgaxx, si deseas captar el sonido ambiente; una buena opción es utilizar este sensor de sonido prefabricado, fíjate que ya viene con potenciometro para regular el nivel máximo de respuesta.











perfectgaxx dijo:


> como podria conectar directo la entrada de audio del movil al pic, que circuito podria usar?



si deseas recibir la señal de audio directamente de tu equipo de sonido o móvil puedes seguir utilizando el sensor de sonido con transistor 2n3904.


----------



## perfectgaxx (Mar 10, 2017)

> si deseas recibir la señal de audio directamente de tu equipo de sonido o móvil puedes seguir utilizando el sensor de sonido con transistor 2n3904.



Hola dino gracias por la respuesta. Se podría remplazar la resistencia de 100k por un potenciometro, y de esa manera regular la ganancia?


----------



## dinoelectro (Mar 10, 2017)

perfectgaxx dijo:


> Hola dino gracias por la respuesta. Se podría remplazar la resistencia de 100k por un potenciometro, y de esa manera regular la ganancia?




El circuito anterior lamentablemente tiene muy baja ganancia si le colocas el potenciometro vas a degradar aun mas la señal. Mejor deberías probar con el amplificador de audio LM386;






NOTA: no lo he probado pero; en teoría, debería funcionar


----------



## Apology (Mar 11, 2017)

Hola dinoelectro,podrias decirme los componentes usados para este controlador,y el codigo,y circuito para hacerlo impreso,me gusta tu trabajo,gracias a ti gente como yo vamos aprendiendo un poco cada dia.
Tambien queria saber si este otro circuito me valdria,y tendria efectos parecidos al tuyo.
Una cuestion mas,funciona tu vumetro con leds rgb?,si no es asi,se podria adaptar para que funcionasen?

gracias.


----------



## dinoelectro (Mar 12, 2017)

perfectgaxx dijo:


> Hola dino gracias por la respuesta. Se podría remplazar la resistencia de 100k por un potenciometro, y de esa manera regular la ganancia?




Hola perfectgaxx estuve realizando pruebas y este circuito funciona perfecto para lo que deseas hacer..





Apology dijo:


> Hola dinoelectro,podrias decirme los componentes usados para este controlador,y el codigo,y circuito para hacerlo impreso,me gusta tu trabajo,gracias a ti gente como yo vamos aprendiendo un poco cada dia.
> Tambien queria saber si este otro circuito me valdria,y tendria efectos parecidos al tuyo.
> Una cuestion mas,funciona tu vumetro con leds rgb?,si no es asi,se podria adaptar para que funcionasen?
> 
> gracias.



Gracias apology por tu interés, bueno los componentes estan etiquetados en el circuito, el transistor es un 2N3904, el capacitor de 0,1uf y el potenciometro es de 10K.

El código ya esta posteado en este mismo hilo;ahora mismo estoy retomando el proyecto y pronto publicare una version mejorada. 

el circuito que muestras utiliza un circuito integrado LM3915 que no necesita ser programado, trabaja con dos efectos MODO PUNTO y MODO BARRA.  

Saludos Cordiales


----------



## dinoelectro (Mar 12, 2017)

*VUMETRO DE 15 NIVELES CON MICROCONTROLADOR PIC16F887*​
La construccion del vumetro puede resumirse en tres etapas:


*Etapa 1 Captación de la señal de audio*

El circuito siguiente permite amplificar las señal de AUDIO proveniente de un micrófono ELECTRET o un equipo de sonido:






El potenciómetro RV1 permite calibrar la sensibilidad del vúmetro; si se desea amplificar la señal de un micrófono ELECTRET, conviene colocarlo a una resistencia 0.

*Etapa 2 Procesamiento de la señal de audio*

Según mediciones realizadas en el laboratorio se determinó que la señal de audio amplificada por el transistor 2N3904 cambia en un rango comprendido entre 0.5 y 2,1V; Sobre esta lógica tendremos; 


0.5V, o menos   ningún LED enciende
0.6V,               enciende 1 LED
0.7V,               encienden 2 LEDs
0.8V,               encienden 3 LEDs
0.9V,               encienden 4 LEDs
.
.etc.
.
2.1V                 encienden 15 LEDs


*¡ADVERTENCIA!  el rango comprendido entre 0.5V y 2.1V NO es válido para todos los micrófonos ELECTRET, por lo que se hace necesario que usted realice sus propias mediciones y encuentre la calibración apropiada para su micrófono; Es buena idea enviar los datos del canal analógico a través del puerto serial para observar el rango de mediciones en las que se mueve su señal amplificada*


Cada nivel del vúmetro es representado por LEDs conectados a los pines del puerto B y D. (en total tenemos 15 niveles)






* Etapa 3. Conmutación de transistores darlinghton*

Cuando deseamos hacer un vúmetro gigante,el voltaje y la corriente manejados por el microcontrolador son insuficientes para controlar un gran número de LEDS; por lo que se hace necesario recurrir a transistores DARLINGTHON;que permitan conmutar la tensión entre 0/12V a partir de un PIN del microcontrolador.






De esta manera, deberíamos repetir 15 veces.


----------



## Apology (Mar 12, 2017)

dinoelectro dijo:


> Hola perfectgaxx estuve realizando pruebas y este circuito funciona perfecto para lo que deseas hacer..
> 
> 
> 
> ...



Gracias por tu pronta respuesta dinoelectro,tengo una tira led rgb de 5m y me gustaría saber si podria aprovecharla para este vumetro.


----------



## dinoelectro (Mar 12, 2017)

Apology dijo:


> Gracias por tu pronta respuesta dinoelectro,tengo una tira led rgb de 5m y me gustaría saber si podria aprovecharla para este vumetro.



Hola Apology, es una genial idea.


----------



## anseb12 (Mar 12, 2017)

dinoelectro dijo:


> 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!



Como podria hacerlo pero con tiras led rgb???
espero tu respuesta


----------



## locodelafonola (Mar 13, 2017)

Hola 





anseb12 dijo:


> Como podria hacerlo pero con tiras led rgb???
> espero tu respuesta


 Tendrias que poner ., el modelo de tira de led que tenes 
 De alli se empieza a ver ., de como se adapta la salida al micro ., no todas las tira de led son iguales​


----------



## dinoelectro (Mar 13, 2017)

anseb12 dijo:


> Como podría hacerlo pero con tiras led rgb???
> espero tu respuesta



Si deseas hacer un vumetro RGB; te recomiendo que revices el siguiente ejemplo:


*Como controlar 8 LEDS RGB con 11 pines del microcontrolador*​
con los transistores TIP32 seleccionamos el color RGB y con el CI ULN2803 encendemos los LEDs que deseemos.

Ejemplo 1. para encender 8 LEDs azules:







Ejemplo 2. para encender 4 leds en combinacion verde-rojo:






Ejemplo 3. para encender 6 leds en combinacion verde-azul:






..., y así por el estilo vamos encendiendo combinaciones de LED RGB con un numero reducido de pines, la misma idea se puede extender para mas LEDs inclusive; 

*Para 8 LEDS utilizaríamos  11 pines
Para 9 LEDS utilizaríamos  12 pines
Para 10 LEDs utilizaríamos 13 pines
.
.
.

para N LEDS utilizaríamos N+3 pines*​
Como dice locodelafonola; danos mas detalles de las cintas y lo que deseas hacer y te ayudamos mejor

saludos!


----------



## perfectgaxx (Mar 14, 2017)

hola a todos. Dinoelectro Probé el circuito que me pasaste en proteus, pero directamente no hace nada. esta bien así?


----------



## dinoelectro (Mar 15, 2017)

Hola perfectgaxx

YO Probé con el sensor de audio prefabricado retirándose el micrófono y colocando en su lugar un conector para audio y me funcionó genial...





También le puse un potenciometro al otro circuito y funcionó bien.. pon uno máximo de 1k


----------



## anseb12 (Mar 19, 2017)

locodelafonola dijo:


> Hola  Tendrias que poner ., el modelo de tira de led que tenes
> De alli se empieza a ver ., de como se adapta la salida al micro ., no todas las tira de led son iguales​



Leds RGB 50/50 60 leds por metro a 12v


----------



## locodelafonola (Mar 19, 2017)

Hola ¿¿¿¿ Esquema ????​ ¿¿¿¿ Hoja de datos ????​ ¿¿¿¿ Foto ????​ ¿¿¿¿ Dibujo de conexiones ????​


anseb12 dijo:


> Leds RGB 50/50 60 leds por metro a 12v


 Esos datos no indican nada ., la bola de cristal esta fallando ., no ilumina bien​


----------



## dinoelectro (Mar 25, 2017)

anseb12 dijo:


> Leds RGB 50/50 60 leds por metro a 12v




Hola Anseb, este circuito te permitiria controlar hasta 10m de cinta de 12V.






si tenemos 60 leds por metro y considerando que cada led consume 25mA el consumo de corriente seria 

I = 60 LEDs x 0,25mA = 1.5A

considerando que la cinta es RGB, la corriente se multiplica por tres (tres colores RGB)

I = 1.5A x 3 = 4.5A


entonces se recomienda una fuente de alimentacion de 12V/5A


----------



## Apology (Mar 25, 2017)

Hola dinoelectro,quiero montar un circuito para controlar tiras rgb 5050,y me preguntaba si este circuito vale,y que efectos tendria,estoy mirando circuitos sencillos para alguien con poca experiencia como yo,y parece que este que has subido lo es,pero no sé si hace falta algo mas,o no.Gracias.


----------



## locodelafonola (Mar 25, 2017)

Hola 





Apology dijo:


> Hola dinoelectro,quiero montar un circuito para controlar tiras rgb 5050,y me preguntaba si este circuito vale,y que efectos tendria,estoy mirando circuitos sencillos para alguien con poca experiencia como yo,y parece que este que has subido lo es,pero no sé si hace falta algo mas,o no.Gracias.


Ese circuito que posteo dinielectro ., es para una tira de led MONOCROMATICA (un solo color) ., y como desis vos la tuya es RGB​ Todavia esperamos datos de tu tira ., porque seguis preguntando ., cosas que nosotros no tenemos idea (NO adivinamos)​


----------



## Apology (Mar 25, 2017)

Hola locodelafonola,ya he dicho en el anterior mensaje que la tira es 5050 rgb de 12v,no sé qué más datos necesitas,porque no tengo más datos acerca de la tira led.


----------



## dinoelectro (Mar 25, 2017)

Hola locodelafonola; hola apology. 

No hay mucha tela que cortar aquí. 

El circuito funciona para cualquier cinta RGB. Cada transistor controlaría a cada color.

Yo he controlado tiras rgb hasta 10 metros con transistores BJT TIP120 y con TIP41; también lo he controlado con MOSFET irf530. 

Lo mas critico es saber seleccionar la fuente de alimentación adecuada para ello debemos suponer que cada LED consume 25mA y calcular el amperaje que debe entregar la fuente.

Si eres novato es mejor que empieces revisando este articulo que es para Arduino pero también es también valido para PIC que me pareció interesante para aprender:

http://www.prometec.net/tira-de-leds/

Saludos!


----------



## Apology (Mar 25, 2017)

Gracias por tu pronta respuesta dinoelectro,supongo que necesitaré un programador pickit2 para programar los diferentes modos de trabajar,pero solo tendria que instalar tú archivo con pickit2,o me equivoco?.
Otra pregunta más,donde tendría que poner,o conectar un conmutador para elegir por ejemplo modo barra,o modo punto en el circuito del enlace que me has puesto?
Gracias


----------



## dinoelectro (Mar 25, 2017)

Apology dijo:


> Gracias por tu pronta respuesta dinoelectro,supongo que necesitaré un programador pickit2 para programar los diferentes modos de trabajar,pero solo tendria que instalar tú archivo con pickit2,o me equivoco?.
> Otra pregunta más,donde tendría que poner,o conectar un conmutador para elegir por ejemplo modo barra,o modo punto en el circuito del enlace que me has puesto?
> Gracias




No apology las cosas no son asi de sencillas... para el vumetro RGB habria que hacer un nuevo programa para el PIC este vumetro no te va a servir.

Mi recomendacion es que es que empieces por entender como funciona este vumetro sencillo y de ahi pases a algo mas complejo como es el control RGB

Saludos!


----------



## locodelafonola (Mar 25, 2017)

HolaQUOTE=Apology;1158903]Hola locodelafonola,ya he dicho en el anterior mensaje que la tira es 5050 rgb de 12v,no sé qué más datos necesitas,porque no tengo más datos acerca de la tira led.[/QUOTE]bueno .,entonces conectala ., si vos no te tomas tu trabajo ., yo no lo voy a hacer por vos (es imposible)​ Hay cerca de 10 modelos de tiras rgb ., que maneja con el W28XX ., tiene distinto tipo de conexiones ., (serie ., paraleleo .,  en tandem ., multipleexado ., logica negativa ., logica positiva ., etc)​ Ahora vos pretendes que yo adivine cual es la que tenes y te diga como conectarla​ creo que va ser medio imposible ¿¿¿ no ???​ Yo te lo pregunte por aca​


locodelafonola dijo:


> Hola ¿¿¿¿ Esquema ????​ ¿¿¿¿ Hoja de datos ????​ ¿¿¿¿ Foto ????​ ¿¿¿¿ Dibujo de conexiones ????​


 ¿¿¿¿ no me vas a decir .,  que no tenes ., o no podes hacer nada de eso ???​


dinoelectro dijo:


> Hola locodelafonola; hola apology.
> 
> No hay mucha tela que cortar aquí.
> 
> ...


 Amigo querido ., hay distintos tipos de tiras RGB​ Las hay ., de esas que prenden de un solo color (mezcla de los 7 colores) ., Tambien las que van "corriendo el color ., las hay las que van haciendo el efecto "RAIBOW"​ No te olvideas que el encendido de los led lo maneja el "chip" interno ., esa es la diferencia ., busca W2812 por ejemplo y vas aver En la pagina ., solo muestra una tira monocromatica ., cuando es RGB ., la cosa cambia ., fijate eso​


----------



## dinoelectro (Mar 25, 2017)

Bueno no lo había visto desde ese punto de vista locodelafonola, pero veo que tienes mucha razón hay muchos modelos y hay muchos parámetros que considerar... 

Para ponernos de acuerdo yo he experimentado con la cinta RGB 5050 de 12V 5m 60 LEDS metro. quizas es la mas comun de encontrar y la que recomiendo para trabajar con este circuito








entonces aqui algunos datos de tiras RGB

30 LEDs por metro SMD 5050 = 7,2 W por metro de tira.
60 LEDs por metro SMD 5050 = 14,4 W por metro de tira.
72 LEDs por metro SMD 5050 = 17,3 W por metro de tira.
120 LEDs por metro SMD 5050 = 28,8 W por metro de tira.

para el caso de 60 led por metro el consumo de corriente por metro se calcularía de la siguiente manera: 

P= V x I

I= P/V = 14,4W/12V = 1.2A


----------



## Apology (Mar 26, 2017)

Hola locodelafonola,la verdad es que no puedo darte mucha más información,los compré en una web china y no dan apenas información,te adjunto un par de fotos a ver si así te sirve para acerte una idea,yo creo que son iguales que las que ha puesto dinoelectro,pero no estoy seguro.
Lo que yo quiero hacer es un vumetro para leds rgb de 5050 a 12v y de 60 leds por metro,y no te puedo dar más información porque no viene más información,me llego en una caja blanca sin especificaciones.Me gustaría saber que vumetro debo hacer para los leds rgb,porque como dije anteriormente no soy un entendido y no sé exactamente cuál es el que tengo que hacer.


----------



## locodelafonola (Mar 27, 2017)

Hola





Apology dijo:


> Hola locodelafonola,la verdad es que no puedo darte mucha más información,los compré en una web china y no dan apenas información,te adjunto un par de fotos a ver si así te sirve para acerte una idea,yo creo que son iguales que las que ha puesto dinoelectro,pero no estoy seguro.
> Lo que yo quiero hacer es un vumetro para leds rgb de 5050 a 12v y de 60 leds por metro,y no te puedo dar más información porque no viene más información,me llego en una caja blanca sin especificaciones.Me gustaría saber que vumetro debo hacer para los leds rgb,porque como dije anteriormente no soy un entendido y no sé exactamente cuál es el que tengo que hacer.


Por lo que veo en las imagenes ., no son ni parecidas al las de dinoelectro​ Y asi como esta ., no puedo guiarte ., ni darte informacion., porque no tengo idea que tira de led es​ La uses para lo que quieras usarla ., ya sea un vumetro o para otra cosa​


----------



## pepibho (Abr 2, 2017)

dinoelectro dijo:


> Gracias rat mayor,...
> 
> Aquí les dejo este pequeño tutorial:
> 
> ...






y as pensado en usar el WS2801 o WS2811, es un poco mas caro pero regula bien el color RGB  via serial o usar otro pic pequeño y crear un programa simulando ese integrado sin el voltage de calibracion (igual sale mas barato y versatil)..

o usar un 12f629 y hacer un codigo imitando el WS2801 sin voltage referencia que saldria mas barato y versatil. (mas que nada para poder tener una pequeña paleta de colores)...


pero aun asi teneis que mejorar por mucho ese programa de crio de 14 o 16 años... y creae un buen motor para analizar el espectro de las distintas frecuencias.


----------



## dinoelectro (Abr 4, 2017)

Bueno amigo espero ver tu trabajo... tengo entendido que las tiras ws2801 tienen integrado ya un contolador lo cual facilitaria el trabajo. Esto es un vumetro no lo compares con un analizador de espectro. 

¿No te gusta los vumetro? ¿prefieres los analizadores de espectro? Hazte uno trbaja mas critica menos.





pepibho dijo:


> pero aun asi teneis que mejorar por mucho ese programa de crio de 14 o 16 años... y creae un buen motor para analizar el espectro de las distintas frecuencias.



Agradezco tus sugerencias. Bueno yo ya di el primer paso ahora espero ver mejoras por parte de los usuarios del foro.


----------



## Apology (Abr 26, 2017)

Hola dinoelectro,he montado un circuito para vumetro gigante con 300 leds rgb 5050 a 12v con 4 cables red,green,blue,y positivo,y me gustaría poner los efectos que tú tienes,lo que pasa es que yo lo quiero hacer en atmega328p con arduino,también conectare a un controlador que viene con la tira leds y su respectivo mando,quería preguntarte también que potenciometro comprar si lineal o algorítmico para cambiar los efectos,también he comprado un ampli de micro para controlar la entrada de audio.He de decirte que no controlo mucho de programar por eso te pido ayuda.
Gracias


----------



## dinoelectro (Abr 26, 2017)

Apology dijo:


> Hola dinoelectro,he montado un circuito para vumetro gigante con 300 leds rgb 5050 a 12v con 4 cables red,green,blue,y positivo,y me gustaría poner los efectos que tú tienes,lo que pasa es que yo lo quiero hacer en atmega328p con arduino,también conectare a un controlador que viene con la tira leds y su respectivo mando,quería preguntarte también que potenciometro comprar si lineal o algorítmico para cambiar los efectos,también he comprado un ampli de micro para controlar la entrada de audio.He de decirte que no controlo mucho de programar por eso te pido ayuda.
> Gracias ��



Excelente Apology, seria bueno que nos mostraras lo que tienes echo segun eso ver en que podemos mejorar; yo emplee un potenciometro de los mas sencillos que existe, pero como no uno lineal y deslisable seria la mejor opcion(ver foto).







estoy de acuerdo, reeplazar al PIC con arduino, ya que ahorra muchas molestias eso de estar diseñando placas de circuito impreso

Saludos apology!


----------



## Apology (Abr 27, 2017)

Dinoelectro aqui tienes el circuito terminado,solo tengo que conectar el micro,y el potenciometro para selecionar los modos de los efectos.Si te fijas en la placa hay 3 pines libres para conectar el potenciometro al atmega328p,o el micro.Sobre lo del potenciometro me gustaria uno mas pequeño de los de rueda ya que al circuito le quiero hacer una caja de metacrilato para que quede mas bonito y el potenciometro que tu dices es muy grande.Tiene 9pines de conexion a cada lado para los leds.En el panel de los leds rgb si te fijas esta conectado para que haya 3 niveles de colores que quiero controlar con el controlador con mando a distancia que venia con la tira leds,hay una manera de conectar el panel al controlador de tal manera que puedes conseguir esos 3 niveles de colores sin tener que programar en el atmega328p los colores y simplificar la programacion,decirte que son 2 paneles iguales,es decir unos 3360 leds en total.Lo que quiero es hacer los efectos que tu tienes programados en estos 2 paneles con un atmega328p,por eso necesito saber como conectar los leds,el potenciometro,y el micro,de tal manera que pueda conseguir tus efectos con el atmega328p.


----------



## dinoelectro (May 8, 2017)

Apology dijo:


> Dinoelectro aqui tienes el circuito terminado,solo tengo que conectar el micro,y el potenciometro para selecionar los modos de los efectos.Si te fijas en la placa hay 3 pines libres para conectar el potenciometro al atmega328p,o el micro.Sobre lo del potenciometro me gustaria uno mas pequeño de los de rueda ya que al circuito le quiero hacer una caja de metacrilato para que quede mas bonito y el potenciometro que tu dices es muy grande.Tiene 9pines de conexion a cada lado para los leds.En el panel de los leds rgb si te fijas esta conectado para que haya 3 niveles de colores que quiero controlar con el controlador con mando a distancia que venia con la tira leds,hay una manera de conectar el panel al controlador de tal manera que puedes conseguir esos 3 niveles de colores sin tener que programar en el atmega328p los colores y simplificar la programacion,decirte que son 2 paneles iguales,es decir unos 3360 leds en total.Lo que quiero es hacer los efectos que tu tienes programados en estos 2 paneles con un atmega328p,por eso necesito saber como conectar los leds,el potenciometro,y el micro,de tal manera que pueda conseguir tus efectos con el atmega328p.




Hola Apology 

Mil disculpas me he tardado en contestar;

estuve investigando la forma de controlar con ARDUINO y he encontrado un SOFTWARE que se llama WNDLPT y permite tomar la música del reproductor WINAMP (También sirve con AIMP3)
los efectos se programan mediante SCRIPTS y puedes darle la forma que desees, 

Aunque inicialmente este software fue diseñado para funcionar con puerto paralelo; ahora, debido a que las computadoras ya no tienen dicho puerto, se ha echo una modificación para que funcione con el puerto serial; de ahí que se puede aprovechar para utilizarlo con un ARDUINO u otro microcontrolador.

observa el siguiente video:






El software WNDLPT y el código para programar el ARDUINO lo encuentras en el siguiente link:

http://wndlpt.sourceforge.net/arduino/

Saludos cordiales!


----------



## Apology (May 10, 2017)

Gracias por contestar*,* dinoelectro*,* pero yo al arduino lo quiero sólo para programar el atmega328p
*S*acarlo del z*ó*calo de la placa de arduino uno y conectar el atmega en el zocalo soldado a la placa pbc que he hecho y que tienes la foto más arriba*.*

*E*l arduino sólo es para programar*. E*n el sistema que t*ú* me dices*,* tengo que usar el arduino y no quiero.

Por cierto*,* tengo una duda que quizás me puedas decir*.
**¿S*i resetéo el atmega328p en la placa de arduino uno, tengo que volver a cargar en el atmega328p el bootloader para programarlo*?*
*¿O* si viene de fábrica con el bootloader el atmega*, *no necesita que lo vuelva a cargar para poder volver a programarlo*?*


----------



## dinoelectro (May 11, 2017)

Hola apology los armega 328 pueden o no venir con bootloader en caso de que tu atmega no este cargado el bootloader tendras que cargarlo tu mismo utilizando una placa arduino.

El bootloader no se borra el momento que das reset en la placa arduino

En todo caso si deseas revisar el vumetro con einamp tengo toda la informacion lista en mi blog

http://dinoelectro.blogspot.com/?m=1

Saludos!



Que tal amigos... 

Les cuento brevemente que estoy construyendo una nueva version del vumetro ahora utilizando matrices led.. apenas lo tenga listo estare publicando los pormenores. mientras tanto dejo un avance:


----------



## Apology (May 14, 2017)

Una cosa que quiero comentaros y que no entiendo por qu*é* pasa*.
**R*esulta que enciendo mi placa con atmega328p como stand-alone y con 18 salidas para leds rgb 5050
*A* las salidas van conectados los positivos de los ledsy los cables RGB a un controlador que ven*í*a con la tira de leds, y un mando a distancia de 44 teclas*.*
*P*ues lo que pasa es que cuando enciendo la placa y toco con un dedo en las resistencias que est*á*n conectadas a las patas del atmega, se enciende el led correspondiente a la salida de la placa*.*
*L*as resistencias son de 10 kΩ, pero es que si toco las patas del atmega, también se enciende el led correspondiente a la salida, y si toco la pata central del transistor, también se enciende el led correspondiente a la salida de ese led*.** E*l transistor es un 2N2222.
*¿*Alguien sabe cual puede ser el problema?
*L*a placa, el circuito y los leds est*á*n en un post anterior que puse.


----------



## dinoelectro (May 14, 2017)

En lugar de colocar dos transistores, mejor hubiera sido que sólo conectes un transistor del tipo Darlington.




Sospecho que el circuito que conmuta a la tira LED, está demasiado sensible y cualquier corriente que circula por la base, por mínima que esta sea, hace disparar a los LED.

Una solución sería que aumentes la resistencia que va en la base del transistor.


----------



## Apology (May 14, 2017)

He de decirte*,* dinoelectro*,* que el circuito no es m*í*o, es de otra persona*.*
*E*sa persona me dijo que tenía que poner las resistencias que van conectadas a las patas del atmega y fuesen de 10k*.*
*L*uego poner el transistor 2N2222, luego unas resistencias de 1k, y por último un transistor TIP42C, ya que en esas 18 salidas dan un total de 320 leds rgb.

Por cierto*,* el atmega viene con el bootloader de fábrica*,* seg*ú*n el vendedor, pero lo curioso es que al encender el circuito*,* no hacer nada*.
E*s decir*,* no encienden los leds como tendría que hacer el atmega con el programa grabado, y lo raro es que sólo se encienden si paso el dedo por donde te he dicho en el anterior post*.*

No s*é* por qu*é* puede ser*. **E*spero me podáis ayudar, porque el circuito no tiene corto y está revisado con lupa*.*
*L*a fuente de alimentación tiene suficiente potencia y estoy un poco perdido al respecto.


----------



## dinoelectro (May 14, 2017)

Es muy normal que los leds enciendan cuando tocas con el dedo la base del transistor.
Eso quiere decir que el transistor está cumpliendo su función que es conmutar los leds.

Una prueba sencilla que puedes hacer para saber si los transistores están cumpliendo su función, es colocar 5 V. en la base del 2N2222
Los leds deberían encender, luego colocar 0 V. en la base del 2N2222  y los leds deberían permanecer apagados.

Si después de realizar esas pruebas todo marcha bien, entonces te toca revisar el programa que cargaste en el atmega.


----------



## Apology (May 15, 2017)

Ya he hecho lo que me dijistes*,* dinoelectro*,* y los transistores 2N2222 hacen su trabajo correctamente*.*
*C*omo ya te dije anteriormente, uso el atmega328p como stand-alone en la placa*.*
*E*l programa también es de la misma persona que me pas*ó* el circuito, y está para que arranque de forma automática al encenderlo*.*
*N*o controlo mucho esto de programar, por eso si te hago alguna pregunta tonta*,* no te molestes*.*

El programa lo grabo con arduino uno*,* que viene con z*ó*calo para el atmega y lo graba en AVRS MkII, pero no funciona en la placa*.*
*H*e leído por ahí*,* que para utilizarlo como stand-alone tendr*í*a que grabarlo en ISP, pero que se pierde el bootloader*.*
*N*o s*é* qu*é *puede ser, porque en los leds que vienen en la placa de arduino uno*, *si que parece que hace los encendidos del programa*.*

*E*ste es el programa*:*

```
//esta es na programacion basica para checar el funcionamiento de la torre
//motoro 
//vercion 1.0
int led[20] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18}; 
int leftChannel = 6; 
int left, i;
int temp, temp1, temp2,temp3,temp4,temp5,temp6,temp7,temp8,temp9,temp10,temp11,temp12;
int cont=20;
int t0=25, t1=200, t2=100, t3=50, t4=20, t5=200,t6=20,t7=50,t8=300;
void setup()
{
for (i = 0; i < 18; i++) 
pinMode(led[i], OUTPUT);
}
void loop(){

//esta es la opcion de vumetro si desactivan esta fucnon es necesario colocar un preamplificador en el pin que corresponda
//for(temp=0; temp<30000; temp++){
//vumetro();
//}

for(temp1=0; temp1<10; temp1++){
shiftLED();
}

for(temp2=0; temp2<5; temp2++){
rutina3();
}

//ESTROBO
for(temp3=0; temp3<17; temp3++){
rutina4();
}


//motoro 

for(temp5=0; temp5<1; temp5++){
rutina6();
}

for(temp6=0; temp6<4; temp6++){
rutina7();
}

//mitad apaga mitad prende
for(temp7=0; temp7<9; temp7++){
rutina8();
}



//ESTROBO
for(temp3=0; temp3<17; temp3++){
rutina4();
}

for(temp9=0; temp9<2; temp9++){
rutina10();
}

for(temp10=0; temp10<3; temp10++){
rutina11();
}




//ESTROBO
for(temp3=0; temp3<17; temp3++){
rutina4();
}




//estrobo
for(temp3=0; temp3<17; temp3++){
rutina4();
}


}

//Realiza la lectura de la entrada de audio y la muestra en la barra de LEDs
void vumetro(){
left = analogRead(leftChannel); 
left = left / 25; 
if (left == 0) {
for(i = 0; i < 18; i++){
digitalWrite(led[i], LOW);
}
}
else{
for (i = 0; i < left; i++){
digitalWrite(led[i], HIGH);
}
for(i = i; i < 18; i++){
digitalWrite(led[i], LOW);
}
}
}



void shiftLED(){
for(int led=0; led<18; led++){
digitalWrite(led,HIGH); 
delay(20);
digitalWrite(led,LOW);
}

}
void rutina3(){
for(int led=0; led<18; led++){
digitalWrite(led,LOW); 
delay(70);
digitalWrite(led,HIGH);
delay(10);
}
}

void rutina4(){
for (cont=0; cont <18; cont ++)
switch(cont){
case 0:
PORTD= B11111111;
PORTB= B11111111;
PORTC= B11111111;
delay(t0);
case 1:
PORTD= B00000000;
PORTB= B00000000;
PORTC= B00000000;
delay(t0);
} 
}


void rutina6(){
for(int led=0;led<18;led++){
digitalWrite(led,HIGH); 
delay(t1);
}
for(int pin=18;pin>0;pin--){
digitalWrite(pin,LOW); 
delay(t1); 
}

for(int pin =0;pin<cont;pin++)
{ 
digitalWrite(led[pin],HIGH); 
delay(t1);
digitalWrite(led[pin],LOW); 
}
for(int pin =cont-1; pin >=0;pin--)
{ 
digitalWrite(led[pin],HIGH); 
delay(t1); 
digitalWrite(led[pin],LOW); 
}
}

void rutina7(){
int k=17; 
for(int led=8; led<=17;led++)
{ 
digitalWrite(led, HIGH); 
digitalWrite(k-led, HIGH); 
delay(30); 
}
for(int led=8; led>=0;led--)
{ // Al contrario de lo anterior
digitalWrite(led, LOW);
digitalWrite(k-led, LOW);
delay(30);

}
for(int led=17; led>=0;led--)
{ 
digitalWrite(led, HIGH);
digitalWrite(k-led, HIGH);
delay(30);
}
for(int led=0; led<=17;led++)
{
digitalWrite(led, HIGH); 
digitalWrite(k-led, HIGH); 
delay(30); 
}
} 

void rutina8(){
int k=17;
for(int led=0; led<=8;led++){
digitalWrite(led,HIGH);
digitalWrite(k-led,LOW);
}
delay(300);
for(int led=0; led<=8;led++){
digitalWrite(led,LOW);
digitalWrite(k-led,HIGH);
}
delay(300);
}




void rutina10(){

for(int led=0;led<18;led++){
digitalWrite(led,HIGH); 
delay(t4);
}
for(int pin=0;pin<18;pin++){
digitalWrite(pin,LOW); 
delay(t4); 
}

for(int pin =0;pin<cont;pin++)
{ 
digitalWrite(led[pin],HIGH); 
delay(t4);
digitalWrite(led[pin],LOW); 
}
for(int pin =cont-1; pin >=0;pin--)
{ 
digitalWrite(led[pin],HIGH); 
delay(t4); 
digitalWrite(led[pin],LOW); 
}


for(int pin =0;pin<cont;pin++)
{ 
digitalWrite(led[pin],HIGH); 
delay(t4);
digitalWrite(led[pin],LOW);
delay(160);
}
for(int pin =cont-1; pin >=0;pin--)
{ 
digitalWrite(led[pin],HIGH); 
delay(t4); 
digitalWrite(led[pin],LOW); 
delay(80);
}
}
void rutina11(){
for(int led=0; led<9; led++){
digitalWrite(led,LOW); 
delay(100);
digitalWrite(led,HIGH);
delay(10);
}

for(int led=17; led>8; led--){
digitalWrite(led,LOW); 
delay(100);
digitalWrite(led,HIGH);
delay(10);
}

for(int led=0; led<9; led++){
digitalWrite(led,HIGH); 
delay(100);
digitalWrite(led,LOW);
delay(10);
}

for(int led=17; led>8; led--){
digitalWrite(led,HIGH); 
delay(100);
digitalWrite(led,LOW);
delay(10);
}


for(int led=0; led<9; led++){
digitalWrite(led,LOW); 
delay(100);
digitalWrite(led,HIGH);
delay(10);
}
}
```


----------



## dinoelectro (May 26, 2017)

Mil disculpas Apology; , otra vez he tardado en contestar 

Bueno te comento que construí un vumetro utilizando ARDUINO UNO y doce LEDS

aquí esta el código:


```
//Teniendo en cuenta todos los elementos teóricos, se escribió el siguiente programa para Arduino
//Conectar la señal de audio amplificada en el canal A1
//Conectar doce leds con sus respectivas resistencias a los pines 2,3,4,5,6,7,8,9,10,11,12,13

const int ledCount = 12; // numero de leds
int sensorReading;       // lectura del ADC 0-1024  

int ledPins[] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};

void setup() {
  Serial.begin(9600); //inicamos el puerto Serial
  for (int thisLed = 0; thisLed < ledCount; thisLed++) {pinMode(ledPins[thisLed], OUTPUT);}// programamos desde el pin 2 al pin 13 como salidas   
}

void loop() {
  sensorReading = analogRead(A1);//tomamos la lectura del ADC
  Serial.println(sensorReading); //imprimimos en el puerto serie
  int ledLevel = map(sensorReading, 200,500, 0, ledCount);  // mapeamos desde 300 hasta 900 para los LEDS desde 2 a 13 
  
  for (int thisLed = 0; thisLed < ledCount; thisLed++) {
    if (thisLed < ledLevel) {
      digitalWrite(ledPins[thisLed], HIGH);// encendemos los LED segun la intensidad de la señal 
    }
     else {
      digitalWrite(ledPins[thisLed], LOW);// apagamos los LED segun la intensidad de la señal
    }
  }
  delay(10);
  }
```







Mas detalles sobre este y otros proyectos lo puedes ver en mi blog 

http://dinoelectro.blogspot.com/

Saludos Cordiales!


----------



## dinoelectro (Jun 10, 2017)

ahora estoy haciendo el mismo vumetro con matrices P10, pero creo que le falta mas color, ya estaré publicando mas novedades,






Saludos Cordiales!


----------



## dinoelectro (Jul 3, 2017)

continuando con el vumetro P10, les cuento que he agregado una matriz mas y un efecto para que encienda los LED en forma circular






en mi blog encontraran mas información por si desean construirlo

http://dinoelectro.blogspot.com/2017/05/construya-un-vumetro-con-arduino-y.html

saludos cordiales:


----------



## Apology (Jul 3, 2017)

Dinoelectro te pido disculpas por no contestarte antes,pero he tenido algunos problemas de tiempo,y me ha sido imposible hacerlo antes.Ya di con el problema de que no funcionase el atmega,y en general que no funcionase correctamente el circuito,eran los capacitadores que estan al lado del cristal que no eran los correctos, (aunque la persona que me paso el circuito me dijo que pusiera esos),los he cambiado y ahora funciona correctamente,ya solo me queda hacer un programa en arduino y grabarlo en el atmega con los efectos que tú tienes,ya sabes que soy nuevo en esto de programar,haber si lo consigo


----------



## dinoelectro (Jul 3, 2017)

Me alegro que hayas resuelto ese inconveniente apology... todos pasamos por esos asuntos pero nos dejan una lección valiosa. Los capacitores que acompañan al cristal deben estar entre 22pf y máximo 33pf


----------



## Apology (Jul 22, 2017)

Hola dinoelectro de nuevo,quería preguntarte algunas dudas que tengo,quiero conectar un potenciometro a la salida A4 del atmega 328p para que cambie los distintos efectos,pero no si puedo conectarlo directamente al positivo,negativo,y salida A4 de la placa,o no lo puedo hacer así.Otra duda que tengo es que en el programa que pones arriba de efecto vumetro,no se si pueden hacer los 6 efectos que programastes al principio de este post,me refiero al efecto punto,vumetro,etc,,,de la forma en que lo has programado en arduino.

Gracias


----------



## dinoelectro (Jul 22, 2017)

Apology dijo:


> Hola dinoelectro de nuevo,quería preguntarte algunas dudas que tengo,quiero conectar un potenciometro a la salida A4 del atmega 328p para que cambie los distintos efectos,pero no si puedo conectarlo directamente al positivo,negativo,y salida A4 de la placa,o no lo puedo hacer así.Otra duda que tengo es que en el programa que pones arriba de efecto vumetro,no se si pueden hacer los 6 efectos que programastes al principio de este post,me refiero al efecto punto,vumetro,etc,,,de la forma en que lo has programado en arduino.
> 
> Gracias




Hola APology, como estas? bueno ante todo tenemos que aclarar algunos conceptos, 

1. A4 es una ENTRADA analógica, no una salida como tu la llamas.
2. En el potenciometro debes colocar 5V a uno de sus extremos, Tierra al otro extremo y la pata central se dirije al canal A4.
3. cuando realizas lecturas analógicas estas varían en un rango de 0 hasta 1024, dicho de forma sencilla: cuando mueves la perilla del potenciometro haces variar su valor entre 0 y 1024: entonces supongamos que desees seleccionar cuatro efectos por medio del potenciometro, tendremos el siguiente algoritmo:

 Si la lectura del potenciometro esta entre 0 y 255, haga el EFECTO1
 Si la lectura del potenciometro esta entre 256 y 512, haga el EFECTO2
 Si la lectura del potenciometro esta entre 513 y 765, haga el EFECTO3
 Si la lectura del potenciometro es mayor 765, haga el EFECTO4

mi sugerencia es que empieces construyendo este vumetro con arduino que tiene un solo efecto, y luego cuando ya tengas las cosas claras te indico como hacer los nuevos efectos... revisa el siguiente enlace en el cual explico todo con detalle y luego me comentas tus dudas:

http://dinoelectro.blogspot.com/2017/05/vumetro-12-leds-con-arduino-y-microfono.html

Saludos Cordiales!


----------



## Apology (Jul 23, 2017)

Tienes razón dinoelectro,A4 es una entrada analógica me confundí al decirlo.Yo también te quiero explicar que yo ya tengo mi circuito hecho,no voy ha hacer el que tú has hecho,solo necesito la programación de los efectos,también decirte que yo arduino uno solo lo utilizo para programar el Atmega328p,el circuito lleva soldado un zocalo donde después de programar con arduino el atmega,lo conecto en el zocalo,yo tengo 18 salidas para leds,sobre lo de conectar a 5v el potenciometro,he solda 3 cables uno a positivo,otro a negativo,y otro a la entrada analógica A4 a la pata del zocalo por debajo,por lo que los 5v ya los debería tener,el micro está conectado en A5,lo compré con la placa ya hecha de fábrica.Ya he programado el archivo que hiciste con el efecto vumetro,lo unico en vez de 12 leds como tú tienes,yo le he puesto 18.Lo de la lectura de 0 a 1024 del potenciometro también lo tengo claro,en lo que ando pez es en como programar con arduino los efectos que tu haces.La placa funciona perfectamente con tira led rgb,son en total unos 320 leds,es un señor vumetro ,ya lo tengo montado en una caja de metacrilato hacha por mí,ha quedado bie,solo me falta programar los efectos,y a funcionar.
Saludos


----------



## dinoelectro (Jul 23, 2017)

Hola Apology

te voy a dar un tip para que programes tus propios efectos, comprendo que tu tienes tu propio circuito ya montado y que es diferente al mio, sin embargo te sugiero que te bases en mi código para que lo puedas modificar a tu gusto. Bueno aquí va el tip para programar un efecto:

En mi código en ARDUINO yo siempre llamo a este arreglo: 


```
int ledPins[] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
```

por lo que los LEDS irán encendiéndose en orden:  PRIMERO el conectado al PIN2, SEGUNDO el conectado al PIN3, TERCERO el conectado al PIN4, ...etc. hasta el ULTIMO LED que seria el conectado al PIN13.

Entonces si tu deseas cambiar el efecto podrías modificar el orden de los números que aparecen en el arreglo.

Saludos!


----------



## Apology (Jul 23, 2017)

Hola dinoelectro,quiero hacer la programación con tu archivo,entiendo el funcionamiento y yo tendría que modificarlo asi;int ledPins [ ] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17};esto seria el efecto vumetro,también voy a hacer el efecto vumetro pero al reves,es decir que empiece a encenderse desde el led 17,hasta el led 0,esto es mas o menos sencillo,pero por ejemplo el efecto punto,el efecto que se enciendan desde la mitad hacia arriba y hacia abajo,y los demas efectos que programastes lo veo mas complicado,aparte tampoco tengo tan claro como hacer para que el vumetro cambie los efectos segun en la posición que lo ponga desde 0 a 1024,supongo que hay que definirlo en el void seup,y luego mapearlo dividiendo por ejemplo si son 4 efectos,1024 entre 4=256


----------



## dinoelectro (Jul 23, 2017)

Hola apology todos los efectos que desees los puedes hacer; tengo poco tiempo para hacer un programa ahora, pero te explico como seria encender un LED del ARRAY.

int ledPins [ ] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17};​

```
digitalWrite(ledPins[0], HIGH);//enciende el primer LED del ARREGLO
delay(100)
digitalWrite(ledPins[0], LOW);//apaga el primer LED del ARREGLO
delay(100)
digitalWrite(ledPins[1], HIGH);///enciende el 2do LED del ARREGLO 
delay(100)
digitalWrite(ledPins[1], LOW);//apaga el 2do LED del ARREGLO
```

es decir que puedes encender cualquier LED en el orden que tu desees únicamente indicando su indice; por ejemplo, para encender el LED que esta en posición 9 seria:

digitalWrite(ledPins[9], HIGH);​
es un poco difícil de explicar pero si te pones a experimentar veras que no es tan complicado


respecto al mapeo existe un función en arduino que hace ese trabajo, para mapear la entrada analógica A4 de (0-1024) a (0-4)  seria así:

map(analogRead(A4), 0,1024, 0, 4);​
Entonces al mover la perilla del potenciometro el valor cambiaría entre un mínimo cero hasta un máximo 4


----------



## Apology (Jul 25, 2017)

Hola dinoelectro,lo del mapeo del potenciometro lo entiendo,pero aparte del mapeo habrá que definir el potenciometro,como por ejemplo "int potenciometro = A4;" y para cambiar los efectos según mueves el potenciometro podría ser " if(potenciometro 0>=256){}",o " if(potenciometro <256 && potenciometro <=512){},no se si será así,pero si no es así espero que me guies un poco.
Gracias
PD;se me olvidaba preguntarte si sabes de algún preamplificador para micro electret controlado por un potenciometro para regular la entrada de sonido,la mayoría que encuentro son sencillos sin potenciometro, que tenga positivo,negativo,y output para conectar a A4 del Atmega328p,y al positivo,y negativo de la placa,tengo un preamplificador ya montado de esos que se compran ya hechos de fábrica con potenciometro,y demás componentes,y con las tres salidas(vcc,gnd,output),pero no me convence cómo funciona ya que la señal no hace ese efecto vumetro que por ejemplo te hace a ti,no parece estable la señal,y me gustaría montar otro circuito,y probar a ver si mejora,la verdad es que me costó 2€,no le puedo pedir mucho por ese precio.
Un saludo.


----------



## dinoelectro (Jul 31, 2017)

​


Apology dijo:


> Hola dinoelectro,lo del mapeo del potenciometro lo entiendo,pero aparte del mapeo habrá que definir el potenciometro,como por ejemplo "int potenciometro = A4;" y para cambiar los efectos según mueves el potenciometro podría ser " if(potenciometro 0>=256){}",o " if(potenciometro <256 && potenciometro <=512){},no se si será así,pero si no es así espero que me guies un poco.
> Gracias
> PD;se me olvidaba preguntarte si sabes de algún preamplificador para micro electret controlado por un potenciometro para regular la entrada de sonido,la mayoría que encuentro son sencillos sin potenciometro, que tenga positivo,negativo,y output para conectar a A4 del Atmega328p,y al positivo,y negativo de la placa,tengo un preamplificador ya montado de esos que se compran ya hechos de fábrica con potenciometro,y demás componentes,y con las tres salidas(vcc,gnd,output),pero no me convence cómo funciona ya que la señal no hace ese efecto vumetro que por ejemplo te hace a ti,no parece estable la señal,y me gustaría montar otro circuito,y probar a ver si mejora,la verdad es que me costó 2€,no le puedo pedir mucho por ese precio.
> Un saludo.



la forma correcta seria asi

if(potenciometro <256 && potenciometro <=512){}​
el microfono recomendado es el que muestro en la figura, puedes conectar un potenciometro para regular la ganancia (GAIN). los otros microfonos no tienen una buena respuesta, ya los he comprobado y no sirven para vumetro.

saludos


----------



## Apology (Jul 31, 2017)

Gracias dinoelectro por contestar,el potenciometro tendria que conectarlo a "gnd,vdd,gain",y para conectar el modulo al circuito en A5,tendría que conectar el "gnd,vdd,output" del modulo,al "gnd,vcc,A5" de la placa?.
Un saludo.


----------



## dinoelectro (Ago 3, 2017)

Apology dijo:


> Gracias dinoelectro por contestar,el potenciometro tendria que conectarlo a "gnd,vdd,gain",y para conectar el modulo al circuito en A5,tendría que conectar el "gnd,vdd,output" del modulo,al "gnd,vcc,A5" de la placa?.
> Un saludo.



Asi es amigo,

opcional-mente puedes probar estos circuitos, el potenciometro te regulara la ganancia


----------



## Apology (Ago 29, 2017)

Hola, dinoelectro*.* *E*l módulo que me recomendaste no parece funcionar bien, cuando lo conecto y lo enciendo, se quedan los cinco primeros leds encendidos*.*
*H*e decidido montar uno de los 2 circuitos que me has puesto anteriormente*.

**T*engo un par de preguntas, ya sabes que no estoy muy puesto en tema de circuitos*.*
*¿E*l s*í*mbolo del primer circuito que pone VU, supongo que es el potenciómetro, no?
*T*ampoco entiendo la resistencia de 1M con la flecha atravesada, no sé qué significa.
*Y* en el segundo circuito*. **¿P*uedo poner un potenciómetro de 10K, o tiene que ser de 100K como la resistencia*?

* Gracias.


----------



## Apology (Ago 30, 2017)

He estado buscando por internet,y donde pone VU,es donde tengo que conectar la salida de audio,y la resistencia de 1M es donde tengo que conectar el potenciometro,es así,o me equivoco?


----------



## Apology (Sep 9, 2017)

Estoy montando este circuito para micro elctret,alguien me podría decir como conectar un potenciometro en la residencia variable de 1M que está en el ciercuito que pongo,para controlar la entrada de audio del micro?,he mirado por internet pero no me aclaro,agradeceria la ayuda para la conexión de las 3 patas del potenciometro.Creo que la pata 1 se conecta a tierra,la pata 2 a la salida,y la pata 3 a la entrada del micro,creo que sería así.
Gracias


----------



## djchispitaqbsas (Ago 15, 2018)

Amigo dinoelectro, has hecho un trabajo increible con ese vumetro me encanto, es excelente algo que busque por mucho tiempo y sin poder conseguir, me imagino haciendolo en modo de analizador de expectro con funciones de modo punto y con retención de pico, o efectos como..... no se si recuerdan dentro de la cabina de kitt el auto fantastico que cuando hablaba tenia un especie de vumetro que la linea del medio era mas grande y las que seguian a la derecha e izquierda eran mas chicas cada vez???, algo asi y con tiras RGB y colocando solo los negativos de la controladora para cambiar de colore o hacer fundidos, uff me imagino este vumetro con estas caracteristica seria genial, vere de replicarlo y hacer los cambios que pueda y luego lo comparto y de ahi eremos mejorando.
Gracias por este aporte.

Un saludo cordial.

	Mensaje automáticamente combinado: Ago 15, 2018



perfectgaxx dijo:


> Hola, buenas tardes; estaba queriendo hacer un vumetro con varios efectos de 20 canales en lo posible. Que otro transistor podría utilizar? Los efectos que necesito son solo de barrido, una secuencia, fijo (todos prendidos).
> Las tiras led que voy a utilizar son bastante mas grandes aproximadamente un 1 amp por tira. eh visto que la tira led lo maneja con tips, y los colores también?
> o con una controladora de color?. En donde yo estuve viendo utilizaban este circuito que le dejo abajo. Mire su foro y encontre tambien que lo volvio a hacer pero mas pequeño
> Al caso, me eh estado rompiendo la cabeza por todos lados buscado ayuda, le agradecería muchísimo su ayuda. y quisiera que me aconseje


Estimado Perfectgaxx, yo utilizo en todos mis proyectos mosfet IRFZ44N este en su linea es el de mayor amperaje de trabajo 50Amp, pero dentro de la linea de mosfet IRF ej. IRF530 si mal no recuerdo es de 10Amp no son costoso y no requieren disipador al menos que uses toda su capacidad.
Una cosa estos fet van conectados a los pines del Pic, es decir ej. rb3 del pic a la pata 1 del fet, la pata 2 a los Leds y la pata 3 a tierra, no se les puede dar voltaje a la pata 1 solo señal.
Espero te sirva este comentario.
Cordial saludo.


----------



## dinoelectro (Sep 9, 2018)

djchispitaqbsas dijo:


> Amigo dinoelectro, has hecho un trabajo increible con ese vumetro me encanto, es excelente algo que busque por mucho tiempo y sin poder conseguir, me imagino haciendolo en modo de analizador de expectro con funciones de modo punto y con retención de pico, o efectos como..... no se si recuerdan dentro de la cabina de kitt el auto fantastico que cuando hablaba tenia un especie de vumetro que la linea del medio era mas grande y las que seguian a la derecha e izquierda eran mas chicas cada vez???, algo asi y con tiras RGB y colocando solo los negativos de la controladora para cambiar de colore o hacer fundidos, uff me imagino este vumetro con estas caracteristica seria genial, vere de replicarlo y hacer los cambios que pueda y luego lo comparto y de ahi eremos mejorando.
> Gracias por este aporte.
> 
> Un saludo cordial.


Desde luego seria muy interesante todas las mejoras que mencionas Para eso estamos estimado djchispitaqbsas un abrazo


----------

