TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: hqv en 04 de Octubre de 2005, 15:59:00
-
hola :Estoy creando mis propias librerias para un chip de voz y he tenido algunos problemas, con lo relacionado a la creación de librerías.
si alguien me pudiese ayudar sería de gran ayuda.
les adjunto el codigo que estoy escribiendo como librería.
me indica el siguiente error.
gracias
hqv
Error[61] C:ARCHIV~1PICCdriversisd2590.c 25 : LVALUE required
////////////////////////////////////////////////////////////////////////////////
// isd2590.c // //
// driver for device isd2590 //
// //
// //
// //
// //
// //
////////////////////////////////////////////////////////////////////////////////
#define isd_CE PIN_B3 //chip enable
#define isd_PD PIN_B4 //power down
#define isd_P/R PIN_B5 //play/record
#define isd_EOM PIN_B6 //end of message
#define isd_OVF PIN_B7 //overflow
////////////////////////////
// FUNCIONES //
////////////////////////////
//función para llevar el puntero dirección a la posición 0 de la memoria
void isd_reset(void)
{
isd_PD =1; //resetea puntero address a address 0 memoria
delay_ms(40); //tiempo necesario operación reset para play=18.75 y record=37.5
isd_PD =0;
}// fin funcion reset
//función para reproducir un mensaje
void play (void)
{
isd_P/R =1; //selecciono operación PLAY
delay_us(350); //tiempo mínimo para set= 300 us
isd_CE=0; // habilitodevice para PLAY
delay_us(150); //tiempo minimo para CE=100 us
isd_CE =1; //deshabilito
}// fin funcion play
//función para grabar un mensaje
void record (void)
{
isd_P/R =0; //selecciono operación RECORD
delay_us(350); //tiempo mínimo para set= 300 us
isd_CE =0; // habilito device para RECORD
delay_us(150); //tiempo minimo para CE=100 us
isd_CE =1; //deshabilito
}//fin funcion record
//funcion usada para reproducir un mensaje grabado dentro del chip
void play_message(int address)
{
disable_interrupts(int_ext); //deshabilito la interrupcion externa ?????
isd_reset();
switch(address)
{
case "0":
{
output_d(0b00000000); //primer mensaje de la memoria
delay_us(350); //tiempo mínimo =300us
break;
}
case "1":
{
break;
}
default:break;
}//fin switch
play();
isd_reset();
enable_interrupts(int_ext);//????
}//fin función play_message
//función para grabar un mensaje en el chip
void record_message(int address)
{
}//fin función record_message
-
estas cometiendo un pequeño fallito en la estructura switch-case...hazlo así a ver q tal...
switch(address) {
case 0: output_d(0b00000000); delay_us(350); break;
case 1: break;
}
saludos
-
gracias por ver esa duda ...
pero el problema principal es que me tira un error al compilar.
el error es el siguiente:
Error[61] C:ARCHIV~1PICCdriversisd2590.c 30 : LVALUE required
Halting build on first failure as requested.
BUILD FAILED: Tue Oct 04 19:13:39 2005
indica a la posición 30 la cual esta la siguiente instrucción:
28 void isd_reset(void)
29 {
30 isd_PD =1; //resetea puntero address a address 0 memoria
31 delay_ms(40); //tiempo necesario operación reset para play=18.75
32 // y record=37.5
33 isd_PD =0;
34 }// fin funcion reset
los números los puse para que vean donde me arroja el error
hqv
-
¿Has probado esto?
PIN_B4 =1;
Es probable que así tampoco funcione, por lo que tendrás que ver dónde está definido PIN_B4
-
cambia todo loq tengas de la forma:
isd_PD =1;
por:
output_bit(isd_PD,TRUE);
creo q eso funcionará... aunq no te se explicar el pq 
saludos
-
La verdad es que no entiendo porqué CCS tiene esta forma tan incómoda de setear los puertos como 0 y como 1
-
la verdad esq si
la primera vez q tuve q hacerlo casi me kedo loco intentando sacar el fallo... la forma en q lo utiliza hqv creo q solo es valido para leer el puerto, pero no para setearlo... pq?? pues no lo se... por cierto otra forma de hacer lo mismo sería esta:
#define GP0 PIN_A0
output_high (GP0);
-
Kizas me equivoque....o mi memoria RAM me esta fallando jeje pero creo recordar que la definicion de los pines ejemplo
#define GP0 PIN_A0
PIN_A0 declara direccion de memoria por lo que no se puede poner una direccion de memoria a 1 o a 0, solamente podemos cambiar el contenido de la direccion de memoria la cual apunta a la salida del pin, un nivel alto(1) o un nivel bajo(0) mediante las funciones ya conocidas: output_high (GP0); ...etc

-
Esa es precísamente la incomodidad de CCS. En C30, por ejemplo, tú sí puedes hacer GP0=1 o GP0=0