informe practica 3 - micros ii

8
UNIVERSIDAD PRIVADA DEL VALLE FACULTAD DE INFORMATICA Y ELECTRONICA INGENIERIA ELECTRONICA CAMPUS TIQUIPAYA MICROPROCESADORES II PRACTICA # 3 PIANO ELECTRONICO Grupo “A” Estudiantes: Gregory Oquendo Tapia Tania Rubí Alcocer Ariel Adrián Carvajal Pardo Evaluación

Upload: ariel-carvajal

Post on 12-Jan-2016

252 views

Category:

Documents


0 download

DESCRIPTION

El siguiente documento muestra la creaccion de piano electrico en el microcontrolador, y asi mismo la explicacion del codigo

TRANSCRIPT

Page 1: Informe Practica 3 - Micros II

UNIVERSIDAD PRIVADA DEL VALLEFACULTAD DE INFORMATICA Y ELECTRONICAINGENIERIA ELECTRONICA CAMPUS TIQUIPAYA

MICROPROCESADORES II

PRACTICA # 3

PIANO ELECTRONICO

Grupo “A”

Estudiantes: Gregory Oquendo TapiaTania Rubí AlcocerAriel Adrián Carvajal Pardo

Docente: Msc. Ing. Gerson Pérez Villarroel

Cochabamba 25 de Junio

Gestión I – 2015UNIVERSIDAD PRIVADA DEL VALLE

SERVICIOS DE LABORATORIO

LABORATORIOS DE DISEÑO ELECTRONICO II

Evaluación

Page 2: Informe Practica 3 - Micros II

PRACTICA Nº 3

PIANO ELECTRONICO

1. Utilizar el Módulo CCP1 de un microcontrolador PIC16F877 (ó PIC16F877A) en modo PWM para Realizar un programa que genere notas musicales de 2 octavas de un teclado musical correspondientes a las frecuencias que van desde 261,1 Hz hasta 987,77 Hz. Las frecuencias para cada nota se muestran en la figura 4.

Figura 4.- frecuencias de las notas musicales

Utilice el CCP1 como salida del sonido, se recomienda que use teclados matriciales 5x5 para las conectar las 24 teclas correspondientes a las 2 octavas. Para generar las frecuencias de las notas use por comodidad solo CCPR1L y un Prescaler para TMR2=16. El tiempo en Duty o de trabajo (Ton) debe ser el 50% del periodo, por tanto la duración de los pulsos o de los periodos (T) será:

Las 2 octavas a ser representadas

Page 3: Informe Practica 3 - Micros II

T=1/fHz = (PR2+1)* Prescaler_TMR2 * 4/4MHz

De esta ecuación se obtiene el valor que se debe cargar a PR2 para obtener el periodo correspondiente a cada una de las notas. El tiempo en Duty o de trabajo (Ton) está dado por:

Ton=1/(2*fHz)=4*(CCPR1L) * Prescaler_TMR2 * 1/4MHz

De esta ecuación se obtiene el valor que se debe cargar a CCPR1L para obtener el tiempo Duty o de trabajo del periodo correspondiente a cada una de las notas.

CODIGO

Para la primera parte del código se tuvo:

#include <18F4520.h>

#device adc=8

#FUSES NOWDT //No Watch Dog Timer

#FUSES WDT128 //Watch Dog Timer uses 1:128 Postscale

#FUSES XT //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD

#FUSES NOPROTECT //Code not protected from reading

#FUSES NOBROWNOUT //No brownout reset

//#FUSES BORV20 //Brownout reset at 2.0V

#FUSES NOPUT //No Power Up Timer

#FUSES NOCPD //No EE protection

#FUSES STVREN //Stack full/underflow will cause reset

#FUSES NODEBUG //No Debug mode for ICD

#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O

#FUSES NOWRT //Program memory not write protected

#FUSES NOWRTD //Data EEPROM not write protected

#FUSES IESO //Internal External Switch Over mode enabled

#FUSES FCMEN //Fail-safe clock monitor enabled

#FUSES PBADEN //PORTB pins are configured as analog input channels on RESET

#FUSES NOWRTC //configuration not registers write protected

#FUSES NOWRTB //Boot block not write protected

#FUSES NOEBTR //Memory not protected from table reads

#FUSES NOEBTRB //Boot block not protected from table reads

#FUSES NOCPB //No Boot Block code protection

#FUSES LPT1OSC //Timer1 configured for low-power operation

#FUSES MCLR //Master Clear pin enabled

#FUSES NOXINST //Extended set extension and Indexed Addressing mode disabled (Legacy mode)

#use delay(clock=4000000)

Page 4: Informe Practica 3 - Micros II

Y para la segunda parte del archivo se tuvo:

#include "C:\Users\ArielAdrian\Documents\Ariel - Jr\I - 2015\Microprocesadores II\Practica Final - Piano electrónico\codigo fuente\piano electrónico.h" //Indicar ruta correcta para compilar#include <TONES.c> //incluímos la libreria para generar los sonidos.#include <kbd.c>

int S_corchea=125,corchea=250,fusa=62;long negra=500,blanca=1000,redonda=2000;char k;int i;

void h_alegria(){generate_tone(E_NOTE[0], negra);generate_tone(E_NOTE[0], negra);generate_tone(F_NOTE[0], negra);generate_tone(G_NOTE[0], negra);generate_tone(G_NOTE[0], negra);generate_tone(F_NOTE[0], negra);generate_tone(E_NOTE[0], negra);generate_tone(D_NOTE[0], negra);generate_tone(C_NOTE[0], negra);generate_tone(C_NOTE[0], negra);generate_tone(D_NOTE[0], negra);generate_tone(E_NOTE[0], negra);generate_tone(E_NOTE[0], 750);generate_tone(D_NOTE[0], corchea);generate_tone(D_NOTE[0], blanca);

generate_tone(E_NOTE[0], negra);generate_tone(E_NOTE[0], negra);generate_tone(F_NOTE[0], negra);generate_tone(G_NOTE[0], negra);generate_tone(G_NOTE[0], negra);generate_tone(F_NOTE[0], negra);generate_tone(E_NOTE[0], negra);generate_tone(D_NOTE[0], negra);generate_tone(C_NOTE[0], negra);generate_tone(C_NOTE[0], negra);generate_tone(D_NOTE[0], negra);generate_tone(E_NOTE[0], negra);generate_tone(D_NOTE[0], 750);generate_tone(C_NOTE[0], corchea);generate_tone(C_NOTE[0], blanca);

generate_tone(D_NOTE[0], negra);generate_tone(D_NOTE[0], negra);generate_tone(E_NOTE[0], negra);generate_tone(C_NOTE[0], negra);generate_tone(D_NOTE[0], negra);generate_tone(E_NOTE[0], corchea);generate_tone(F_NOTE[0], Corchea);generate_tone(E_NOTE[0], negra);generate_tone(C_NOTE[0], negra);generate_tone(D_NOTE[0], negra);generate_tone(E_NOTE[0], corchea);generate_tone(F_NOTE[0], corchea);generate_tone(E_NOTE[0], negra);generate_tone(D_NOTE[0], negra);generate_tone(C_NOTE[0], negra);generate_tone(D_NOTE[0], negra);generate_tone(196, blanca);

generate_tone(E_NOTE[0], negra);generate_tone(E_NOTE[0], negra);generate_tone(F_NOTE[0], negra);

generate_tone(G_NOTE[0], negra);generate_tone(G_NOTE[0], negra);generate_tone(F_NOTE[0], negra);generate_tone(E_NOTE[0], negra);generate_tone(D_NOTE[0], negra);generate_tone(C_NOTE[0], negra);generate_tone(C_NOTE[0], negra);generate_tone(D_NOTE[0], negra);generate_tone(E_NOTE[0], negra);generate_tone(D_NOTE[0], 750);generate_tone(C_NOTE[0], corchea);generate_tone(C_NOTE[0], blanca);

delay_ms(2000);}void para_elisa(){generate_tone(E_NOTE[1], corchea);generate_tone(Eb_NOTE[1], corchea);generate_tone(E_NOTE[1], corchea);generate_tone(Eb_NOTE[1], corchea);generate_tone(E_NOTE[1], corchea);generate_tone(B_NOTE[0], corchea);generate_tone(D_NOTE[1], corchea);generate_tone(C_NOTE[1], corchea);generate_tone(A_NOTE[0], 750);

generate_tone(C_NOTE[0], corchea);generate_tone(E_NOTE[0], corchea);generate_tone(A_NOTE[0], corchea);generate_tone(B_NOTE[0], 750);

generate_tone(E_NOTE[0], corchea);generate_tone(Ab_NOTE[0], corchea);generate_tone(B_NOTE[0], corchea);generate_tone(C_NOTE[1], 750);

generate_tone(E_NOTE[0], corchea);generate_tone(E_NOTE[1], corchea);generate_tone(Eb_NOTE[1], corchea);generate_tone(E_NOTE[1], corchea);generate_tone(Eb_NOTE[1], corchea);generate_tone(E_NOTE[1], corchea);generate_tone(B_NOTE[0], corchea);generate_tone(D_NOTE[1], corchea);generate_tone(C_NOTE[1], corchea);generate_tone(A_NOTE[0], 750);

generate_tone(C_NOTE[0], corchea);generate_tone(E_NOTE[0], corchea);generate_tone(A_NOTE[0], corchea);generate_tone(B_NOTE[0], 750);

generate_tone(E_NOTE[0], corchea);generate_tone(C_NOTE[1], corchea);

Page 5: Informe Practica 3 - Micros II

generate_tone(B_NOTE[0], corchea);generate_tone(A_NOTE[0], 750);

generate_tone(B_NOTE[0], corchea);generate_tone(C_NOTE[1], corchea);generate_tone(D_NOTE[1], corchea);generate_tone(E_NOTE[1], 750);

generate_tone(G_NOTE[0], corchea);generate_tone(F_NOTE[1], corchea);generate_tone(E_NOTE[1], corchea);generate_tone(D_NOTE[1], 750);

generate_tone(F_NOTE[0], corchea);generate_tone(E_NOTE[1], corchea);generate_tone(D_NOTE[1], corchea);generate_tone(C_NOTE[1], 750);

generate_tone(E_NOTE[0], corchea);generate_tone(D_NOTE[1], corchea);generate_tone(C_NOTE[1], corchea);generate_tone(B_NOTE[0], 750);

generate_tone(E_NOTE[0], corchea);generate_tone(E_NOTE[0], corchea);generate_tone(E_NOTE[1], corchea);generate_tone(E_NOTE[0], corchea);generate_tone(E_NOTE[1], corchea);generate_tone(E_NOTE[1], corchea);generate_tone(E_NOTE[2], corchea);

generate_tone(Eb_NOTE[1], corchea);generate_tone(E_NOTE[1], corchea);generate_tone(Eb_NOTE[1], corchea);generate_tone(E_NOTE[1], corchea);generate_tone(Eb_NOTE[1], corchea);

generate_tone(E_NOTE[1], corchea);generate_tone(B_NOTE[0], corchea);generate_tone(D_NOTE[1], corchea);generate_tone(C_NOTE[1], corchea);generate_tone(A_NOTE[0], 750);

generate_tone(C_NOTE[0], corchea);generate_tone(E_NOTE[0], corchea);generate_tone(A_NOTE[0], corchea);generate_tone(B_NOTE[0], 750);

generate_tone(E_NOTE[0], corchea);generate_tone(Ab_NOTE[0], corchea);generate_tone(B_NOTE[0], corchea);generate_tone(C_NOTE[1], 750);

generate_tone(E_NOTE[0], corchea);generate_tone(E_NOTE[1], corchea);generate_tone(Eb_NOTE[1], corchea);

generate_tone(E_NOTE[1], corchea);generate_tone(Eb_NOTE[1], corchea);generate_tone(E_NOTE[1], corchea);generate_tone(B_NOTE[0], corchea);generate_tone(D_NOTE[1], corchea);generate_tone(C_NOTE[1], corchea);generate_tone(A_NOTE[0], 750);

generate_tone(C_NOTE[0], corchea);generate_tone(E_NOTE[0], corchea);generate_tone(A_NOTE[0], corchea);generate_tone(B_NOTE[0], 750);

generate_tone(E_NOTE[0], corchea);generate_tone(C_NOTE[1], corchea);generate_tone(B_NOTE[0], corchea);generate_tone(A_NOTE[0], 1500);

delay_ms(2000);}

void main(){ setup_adc_ports(NO_ANALOGS|VSS_VDD); setup_adc(ADC_CLOCK_DIV_2|ADC_TAD_MUL_0); setup_psp(PSP_DISABLED); setup_spi(SPI_SS_DISABLED); setup_wdt(WDT_OFF); setup_timer_0(RTCC_INTERNAL); setup_timer_1(T1_DISABLED); setup_timer_2(T2_DISABLED,0,1); setup_timer_3(T3_DISABLED|T3_DIV_BY_1); setup_comparator(NC_NC_NC_NC); setup_vref(FALSE);//Setup_Oscillator parameter not selected from Intr Oscillator Config tab

// TODO: USER CODE!!

//::::::::::::::::::: Condiciones Iniciales ::::::::::::::::::::::::::::::: set_tris_A(0111111); //Puerto A como salida "0" Pin 13/14 entradas Xtal set_tris_C(0xFF); //Puerto c como salida set_tris_B(0xFF); //Puerto B como salida "0" set_tris_D(0xFF); //Puerto d como entrada "1" set_tris_E(0xC); //Puerto E como entrada output_C (0x00); output_D (0x00); output_A (0xC0); output_E (0xC); output_B (0x00);//::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

//::::::::::::::::::::::::::::::::::::::::::::::::::::::::while(1){

while (INPUT_STATE(PIN_C0) ==1){generate_tone(C_NOTE[0], negra);}while (INPUT_STATE(PIN_C1) ==1){generate_tone(Db_NOTE[0], negra);}while (INPUT_STATE(PIN_C2) ==1){generate_tone(D_NOTE[0], negra);}while (INPUT_STATE(PIN_C4) ==1){generate_tone(Eb_NOTE[0], negra);}while (INPUT_STATE(PIN_C5) ==1){generate_tone(E_NOTE[0], negra);}while (INPUT_STATE(PIN_C6) ==1){generate_tone(F_NOTE[0], negra);}while (INPUT_STATE(PIN_C7) ==1){generate_tone(Gb_NOTE[0], negra);}while (INPUT_STATE(PIN_D0) ==1){generate_tone(G_NOTE[0], negra);}

Page 6: Informe Practica 3 - Micros II

while (INPUT_STATE(PIN_D1) ==1){generate_tone(Ab_NOTE[0], negra);}while (INPUT_STATE(PIN_D2) ==1){generate_tone(A_NOTE[0], negra);}while (INPUT_STATE(PIN_D3) ==1){generate_tone(Bb_NOTE[0], negra);}while (INPUT_STATE(PIN_D4) ==1){generate_tone(B_NOTE[0], negra);}

while (INPUT_STATE(PIN_D5) ==1){generate_tone(C_NOTE[1], negra);}while (INPUT_STATE(PIN_D6) ==1){generate_tone(Db_NOTE[1], negra);}while (INPUT_STATE(PIN_D7) ==1){generate_tone(D_NOTE[1], negra);}while (INPUT_STATE(PIN_B7) ==1){generate_tone(Eb_NOTE[1], negra);}while (INPUT_STATE(PIN_B6) ==1){generate_tone(E_NOTE[1], negra);}while (INPUT_STATE(PIN_B5) ==1){generate_tone(F_NOTE[1], negra);}while (INPUT_STATE(PIN_B4) ==1){generate_tone(Gb_NOTE[1], negra);}while (INPUT_STATE(PIN_B3) ==1){generate_tone(G_NOTE[1], negra);}while (INPUT_STATE(PIN_B2) ==1){generate_tone(Ab_NOTE[1], negra);}while (INPUT_STATE(PIN_B1) ==1){generate_tone(A_NOTE[1], negra);}while (INPUT_STATE(PIN_B0) ==1){generate_tone(Bb_NOTE[1], negra);}while (INPUT_STATE(PIN_A5) ==1){generate_tone(B_NOTE[1], negra);}while (INPUT_STATE(PIN_A4) ==1){generate_tone(C_NOTE[2], negra);}while (INPUT_STATE(PIN_A3) ==1){ h_alegria();}while (INPUT_STATE(PIN_A2) ==1){ para_elisa();}

}

}

SIMULACION