TODOPIC
Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: alexcarrero en 30 de Mayo de 2008, 01:07:42
-
SALUDOS
estoy utilizando el pic 16f88 por primer vez y al compilar el programa me sale el siguiente error
" redifinition of var. (16f88.bas) "
ya el codigo lo e probado en otro pic el 16f877 corre bien pero modificandolo para el 16f88 claro esta el MicroCode Studio que estoy utizando es es el picbasic pro 2.46
ah otro cosa cuales son los fusibles que deben estar habitado y deshabilitado para la configuracion de del picl
espero me colaboren
-
Si pudieras subir el codigo para ver en lo que esta fallando, asi es muy ambiguo tu problema. O bien decirnos que es lo que quieres hacer.
-
SALUDOS
este es el codigo
DEFIne osc 4
DEFINE LCD_DREG PORTB ' Setea el port de datos LCD
DEFINE LCD_DBIT 0 ' Setea el bit de comienzo de datos (0 o 4) si el bus es de 4-bit
DEFINE LCD_RSREG PORTC ' Setea el port LCD Register Select
DEFINE LCD_RSBIT 4 ' Setea el bit LCD Register Select
DEFINE LCD_EREG PORTC ' Setea el port LCD Enable
DEFINE LCD_EBIT 5 ' Setea el bit LCD Enable
DEFINE LCD_BITS 4 ' Setea el tamaño del bus LCD (4 o 8 bits)
DEFINE LCD_LINES 2 ' Setea el numero de lineas en el LCD
ACD VAR WORD
MAP VAR WORD
RPM VAR WORD
TRISB = %00000000
TRISA = %00001111 ' PORTA DEL BIT 7-1 SON LALIDAS Y EL BIT 0 ENTRADA
ADCON1 = %10000010 ' RESULTADOS JUTIFICAR A LA DERECHA Y EL BIT RA0 A RA4 COMO ENTRADO ANALOGICA
ADCON0 = %01011001 ' QUEDA CONF EL CLOCK FOSC/8 el modulo de A/D Y EP PUETO RA3 IN ANALOGICA
Pause 500 ' pausa de 500 ms
loop_2: ADCON0.2 = 1 'Start Conversion
Bucle_2: pause 5
if ADCON0.2 = 1 Then bucle_2 'wait for low on bit-2 of ADCON0, conversion finished
ACD.highbyte = ADRESH 'move HIGH byte of result to ADC
ACD.lowbyte = ADRESL 'move LOW byte of result to ADC
MAP = (50*ACD)/1023*100
LCDOUT $FE,1
IF PORTD.0=1 then nolcd
LCDOUT #MAp, " mV "
nolcd: IF RPM<910 then fallas1
PAUSE 100
GOTO LOOP_2
fallas1: if MAP=0 then MAProto
IF MAP>4000 THEN MAPalto
if MAP<300 THEN MAPbajo
goto loop_2
MAPalto: lcdout $fe,1, "VOLT S MAP ALTO "
LCDOUT $fe,$C0,"ERROR CODIGO 33 "
PAUSE 100
GOTO loop_2
MAPbajo: lcdout $fe,1, "VOLT S MAP BAJO"
LCDOUT $fe,$C0,"ERROR CODIGO 34 "
PAUSE 100
GOTO loop_2
MAProto: lcdout $fe,1, "SENSOR CON DEFCT"
LCDOUT $fe,$C0,"CHEQUEAR SEN MAP"
PAUSE 100
GOTO loop_2
END
-
Creo que el problema si viene de los fuses, en este momento no tengo la informacion del data sheet pero seria bueno lo revisaras para comprobar que lo configuras bien.
-
Saludos!
Dices que estás trabajando con el PIC16F88
Una pregunta entonces... este código:
DEFIne osc 4
DEFINE LCD_DREG PORTB ' Setea el port de datos LCD
DEFINE LCD_DBIT 0 ' Setea el bit de comienzo de datos (0 o 4) si el bus es de 4-bit
DEFINE LCD_RSREG PORTC ' Setea el port LCD Register Select
DEFINE LCD_RSBIT 4 ' Setea el bit LCD Register Select
DEFINE LCD_EREG PORTC ' Setea el port LCD Enable
DEFINE LCD_EBIT 5 ' Setea el bit LCD Enable
DEFINE LCD_BITS 4 ' Setea el tamaño del bus LCD (4 o 8 bits)
DEFINE LCD_LINES 2 ' Setea el numero de lineas en el LCD
ACD VAR WORD
MAP VAR WORD
RPM VAR WORD
TRISB = %00000000
TRISA = %00001111 ' PORTA DEL BIT 7-1 SON LALIDAS Y EL BIT 0 ENTRADA
ADCON1 = %10000010 ' RESULTADOS JUTIFICAR A LA DERECHA Y EL BIT RA0 A RA4 COMO ENTRADO ANALOGICA
ADCON0 = %01011001 ' QUEDA CONF EL CLOCK FOSC/8 el modulo de A/D Y EP PUETO RA3 IN ANALOGICA
Pause 500 ' pausa de 500 ms
loop_2: ADCON0.2 = 1 'Start Conversion
Bucle_2: pause 5
if ADCON0.2 = 1 Then bucle_2 'wait for low on bit-2 of ADCON0, conversion finished
ACD.highbyte = ADRESH 'move HIGH byte of result to ADC
ACD.lowbyte = ADRESL 'move LOW byte of result to ADC
MAP = (50*ACD)/1023*100
LCDOUT $FE,1
IF PORTD.0=1 then nolcd
LCDOUT #MAp, " mV "
nolcd: IF RPM<910 then fallas1
PAUSE 100
GOTO LOOP_2
fallas1: if MAP=0 then MAProto
IF MAP>4000 THEN MAPalto
if MAP<300 THEN MAPbajo
goto loop_2
MAPalto: lcdout $fe,1, "VOLT S MAP ALTO "
LCDOUT $fe,$C0,"ERROR CODIGO 33 "
PAUSE 100
GOTO loop_2
MAPbajo: lcdout $fe,1, "VOLT S MAP BAJO"
LCDOUT $fe,$C0,"ERROR CODIGO 34 "
PAUSE 100
GOTO loop_2
MAProto: lcdout $fe,1, "SENSOR CON DEFCT"
LCDOUT $fe,$C0,"CHEQUEAR SEN MAP"
PAUSE 100
GOTO loop_2
END
.... es para el 16F88? Porque veo por allí PORTC... y pues ese micro no posee portc.
Revisa bien eso a ver... si lo compilas para 16F877 sí te funciona porque ese sí tiene hasta porte... pero verifica bien cómo lo compilas para el 16f88.
Ok nos leemos! :mrgreen:
-
ok tienes rason por estar con el apuro y el desespero uno no ve ni analiza las cosas voy corregir el codigo otra cosa dime como hago para simularlo en proteus pq en la libreria no me aparese el 16f88
saludos y gracias
-
No te preocupes Alex, a todos nos ha pasado alguna vez.
Mira qué versión del proteus usas? Porque yo tengo la 7.2 y sí aparece el 16F88.
Ok nos leemos! :mrgreen:
-
saludos
hice los cambios en el codigo y sigue el error aqui esta de nuevo el codigo
DEFIne osc 4
DEFINE LCD_DREG PORTB ' Setea el port de datos LCD
DEFINE LCD_DBIT 0 ' Setea el bit de comienzo de datos (0 o 4) si el bus es de 4-bit
DEFINE LCD_RSREG PORTB ' Setea el port LCD Register Select
DEFINE LCD_RSBIT 6 ' Setea el bit LCD Register Select
DEFINE LCD_EREG PORTB ' Setea el port LCD Enable
DEFINE LCD_EBIT 7 ' Setea el bit LCD Enable
DEFINE LCD_BITS 4 ' Setea el tamaño del bus LCD (4 o 8 bits)
DEFINE LCD_LINES 2 ' Setea el numero de lineas en el LCD
ACD var WORD
MAP VAR WORD
RPM var word
TRISB = %00100000
TRISA = %00001111 ' PORTA DEL BIT 7-1 SON LALIDAS Y EL BIT 0 ENTRADA
ADCON1 = %10000010 ' RESULTADOS JUTIFICAR A LA DERECHA Y EL BIT RA0 A RA4 COMO ENTRADO ANALOGICA
ADCON0 = %01011001 ' QUEDA CONF EL CLOCK FOSC/8 el modulo de A/D Y EP PUETO RA3 IN ANALOGICA
Pause 500 ' pausa de 500 ms
loop_2: ADCON0.2 = 1 'Start Conversion
Bucle_2: pause 5
if ADCON0.2 = 1 Then bucle_2 'wait for low on bit-2 of ADCON0, conversion finished
ACD.highbyte = ADRESH 'move HIGH byte of result to ADC
ACD.lowbyte = ADRESL 'move LOW byte of result to ADC
MAP = (50*ACD)/1023*100
LCDOUT $FE,1
IF PORTB.5=1 then nolcd
LCDOUT #MAp, " mV "
nolcd: IF RPM<910 then fallas1
PAUSE 100
GOTO LOOP_2
fallas1: if MAP=0 then MAProto
IF MAP>4000 THEN MAPalto
if MAP<300 THEN MAPbajo
goto loop_2
MAPalto: lcdout $fe,1, "VOLT S MAP ALTO "
LCDOUT $fe,$C0,"ERROR CODIGO 33 "
PAUSE 100
GOTO loop_2
MAPbajo: lcdout $fe,1, "VOLT S MAP BAJO"
LCDOUT $fe,$C0,"ERROR CODIGO 34 "
PAUSE 100
GOTO loop_2
MAProto: lcdout $fe,1, "SENSOR CON DEFCT"
LCDOUT $fe,$C0,"CHEQUEAR SEN MAP"
PAUSE 100
GOTO loop_2
END
-
Qué versión de pbp estás usando? Yo tengo la 2.50 y me compiló perfecto tu código.
Nos leemos! :mrgreen:
-
Aquí tienes la captura de pantalla donde puedes ver la compilación:
(http://img249.imageshack.us/img249/6523/imagen4yg0.jpg)
-
saludos
estoy utizando el picbasic pro 2.46 si a ti te compilo bien entoses debo actualizarme
-
Revisa en la carpeta del PBP y ve si tienes los archivos del 16F88.
Si no los tienes seguramente es por eso que no te compila.
Ahí te los paso adjuntados por si acaso.
Ok nos leemos! :mrgreen:
-
saludos fierpic
ya resorvi el proble era que yo tenia un desastre con las carpeta del mpasmwin las ordene y listo ahora otra cosa cules seran los fuse de configuracion del pic 16f88
-
Revisa su datasheet y ahi encontraras los fuses que debes configurar
-
Buena sugerencia la de navaismo alex.
También puedes revisar con el mplab. Le das "configure>select device" y escoges el 16F88... luego "configure>configuration bits..." y ahí te salen los fuses.
Pero para estar bien seguro, la datasheet, sin duda alguna.
Ok nos leemos! :mrgreen:
-
saludos
hola firepic ahora tengo otro problema recuerdas el codigo para medir las RPM ese codigo lo probe con un 16f84 y me funciona muy bien pero al probarlo con el 16f88 se pone loco el lcd marca puros diparate voy a revisar el datasheep para ver que consigo pero si tienes algo me avisas
chaooo.
-
Saludos alex!
Si quieres coloca un mensaje en ese hilo de las rpm con el esquema eléctrico y en lo que tenga un chance lo monto en proteus a ver qué tal...
Ok nos leemos! :mrgreen:
-
SALUDOS
aqui te dejo el codigo y el circuito como mi proteus no tiene para simular el 16f88 te lo puse en el f84 tu lugo haces la simulacion en el f88
define osc 4
DEFINE LCD_DREG PORTB ' Setea el port de datos LCD
DEFINE LCD_DBIT 0 ' Setea el bit de comienzo de datos (0 o 4) si el bus es de 4-bit
DEFINE LCD_RSREG PORTB ' Setea el port LCD Register Select
DEFINE LCD_RSBIT 4 ' Setea el bit LCD Register Select
DEFINE LCD_EREG PORTB ' Setea el port LCD Enable
DEFINE LCD_EBIT 5 ' Setea el bit LCD Enable
DEFINE LCD_BITS 4 ' Setea el tamaño del bus LCD (4 o 8 bits)
DEFINE LCD_LINES 2 ' Setea el numero de lineas en el LCD
contar var WORD
RPM var WORD
TRISB = %00000000
TRISA = %00010000
PORTA=0
PORTB=0
pause 500
lcdout $FE,1
lcdout $FE,2
lcdout " HOLA ALEX "
pause 1000
lcdout $FE,1
lcdout $FE,2
lcdout " RPM CORSA "
loop: COUNT PORTA.4,500 ,contar
CONTAR = CONTAR * 2
RPM = CONTAR * 1
lcdout $FE,$C0
lcdout #RPM, " RPM "
goto loop
END
-
Y regresamos a lo mismo, son los fuses lo que deberas configurar para que se vea bien.
-
saludos disculpen la tardanza por no a verme reportado pero estado muy ocupado
no amigo no creo que sean los fuse te explico yo estoy tomando la señal directamente del sensor del corsa y la paso a un operacional 358n y de allí al pic cuando quito la señal desde el operacional el pic sigue loco y cuando lo quito directamente de la entrada del operacional que viene del sensor del corsa se estabiliza esto quiere decir que es ruido lo que me esta volviendo loco al pic la verdad loe intentado todo y nada cual quier cosa me envían
saludos ...
-
Viejo mi tiempo también es escaso.
Para poder ayudarte haciendo las pruebas en proteus, necesito el archivo de proteus, no pasado a .doc como lo montaste.
En cuanto lo cargues espero ponerme con eso si tengo un chance...
Saludos, nos leemos! :mrgreen:
-
hola pana y agradecido ante mano por tu colaboración
mi proteus es versión 6.3 y en su libreria no me trae el 16f88 por eso no lo e probado.
y de verdad no se si funcione en tu proteus que creo es de una versión mas adelantada que el mio y el tuyo si tiene para simular con el 16f88.
para darte mas pista de mi probl el sensor es inductivo y genera una onda sinusoidales pero lo que me trae de cabeza es que con f84 funciona bien y con el f88 nada que ver
espero me colabores amigo
-
No importa que sea una versión distinta de proteus, si me das el .dsn lo puedo correr perfecto igual...
Claro que le cambiaría el pic por el 16F88 a ver si funciona...
Eso sí, me tendrías que dar el archivo compilado para el 16F88.
En cuanto tengas eso postéalo y si tengo un chance lo pruebo a ver qué tal...
Saludos, nos leemos! :mrgreen:
-
saludos mi pana aqui te envio la informacion
-
saludos intente enviarlo pero no acepta los tipos de archivos
si no es molestia este es mi correo electronico " carrero_alex@yahoo.com " me envias tu correo y atraves de este medio si te los puedo enviar.
disculpa la molestia y espero tu pronta colaboracion amigo
-
Viejo es mejor que lo postees, pues así cualquiera en el foro te puede ayudar.
Lo que tienes que hacer es colocar el .dsn, el .hex y el .bas en un único archivo .rar comprimido... y así lo cargas sin problemas.
Saludos, nos leemos! :mrgreen:
-
SALUDOS pana y disculpa de nuevo
aqui te envio la informacion y gracias de nuevo..