problema con proyecto de piano con PIC16F84A

Hola, necesito ayuda con un proyecto que tengo que hacer, es hacer un piano electrónico con el PIC16F84A, el proyecto consiste en que tiene 5 push-buttons, presiono 1 y suena una melodía, presiono los otros 4 y suenan distintas notas musicales, ya hice el código de programación en c compiler y con el simulador de proteus si funciona, pero al momento de hacerlo físico no quiere funcionar, por favor ayudenme.
El codigo es el siguiente:

Código:
#include <16f84a.h>
#use delay (clock=4000000, RESTART_WDT)
#include <TONES.c>
#byte porta=5
#byte portb=6
int corchea=250,fusa=62, S_corchea=125;
long negra=500,blanca=1000,redonda=2000;
void main()
{
set_tris_a(1);
set_tris_b(0);
output_b(0x01);
while (1)
{
if (input(PIN_A0)) 
{
generate_tone(C_NOTE[3], negra);
generate_tone(C_NOTE[3], negra);
generate_tone(F_NOTE[3], negra);
generate_tone(A_NOTE[3], negra);
generate_tone(G_NOTE[3], negra);
generate_tone(F_NOTE[3], negra);
generate_tone(G_NOTE[3], negra);
generate_tone(D_NOTE[3], negra);
generate_tone(E_NOTE[3], negra);
generate_tone(F_NOTE[3], negra);
generate_tone(G_NOTE[3], negra);
generate_tone(F_NOTE[3], negra);
generate_tone(E_NOTE[3], negra);
generate_tone(C_NOTE[3], negra);
generate_tone(C_NOTE[3], negra);
generate_tone(F_NOTE[3], negra);
generate_tone(A_NOTE[3], negra);
generate_tone(G_NOTE[3], negra);
generate_tone(F_NOTE[3], negra);
generate_tone(G_NOTE[3], negra);
generate_tone(D_NOTE[3], negra);
generate_tone(E_NOTE[3], negra);
generate_tone(F_NOTE[3], negra);
generate_tone(F_NOTE[3], negra);
generate_tone(E_NOTE[3], negra);
generate_tone(E_NOTE[3], negra);
generate_tone(D_NOTE[3], negra);
generate_tone(C_NOTE[3], negra);
generate_tone(D_NOTE[3], negra);

}
if (input(PIN_A1))
{
generate_tone(C_NOTE[1], corchea);
}
if (input(PIN_A2))
{
generate_tone(D_NOTE[1], corchea);
}
if (input(PIN_A3))
{
generate_tone(E_NOTE[1], corchea);
}
if (input(PIN_A4))
{
generate_tone(F_NOTE[1], corchea);
}
}
} ...
 
Última edición por un moderador:
Comprime tu simulación de Proteus con Winzip o Winrar y la subes al Foro
 
con el simulador de proteus si funciona, pero al momento de hacerlo físico no quiere funcionar
Te falta poner la palabra de configuración.
La puedes poner por separado, así como esto:
#FUSES XT
#FUSES PUT

// Etcétera.
O así:
#FUSES XT, PUT // Etcétera.
Pero para simplificar y por tratarse de ese PIC, puedes tan sólo escribir esto:
#use delay(crystal = 4MHz)
Con esta declaración el compilador asume que se usará un cristal de 4MHz y establece los fuses adecuados.

También puedes usar el puerto B para los pulsadores y así evitas poner resistencias pull-up/down
Como la salida de los tonos es por el pin RB0, puedes usar de RB1 en adelante.
Sólo tendrás que activar las resistencias pull-up internas del puerto B con port_b_pullups(true);
Y deberás cambiar la forma de sensar los pines que deberán tener los pulsadores hacia VSS.
Antes con pull-down externa:
if (input(PIN_A1))
Ahora con pull-ups internas:
if (!input(PIN_B1))

No olvides poner el pin 4 (MCLR) hacia VDD directamente o con una resistencia de 4.7k o 10k.

Suerte.
 
Última edición:
Atrás
Arriba