Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

28/05/2012 #1


Código en C funciona en Proteus pero no en protoboard
Hola a todos, mi problema es el siguiente: Hice un pequeño programa mediante el lenguaje c que emula el funcionamiento de un codificador cíclico, el compilador que usé fue el de CCS y cuando lo simulo con Proteus funciona perfecto. Pero cuando programo el pic (16f887), este hace que salgan puros 1s lógicos, por lo que todos los leds por donde debería salir la palabra código se prenden, lo cuál es incorrecto ya que dependiendo la palabra codificada estos se prenden o apagan.

El código es el siguiente:

#include <16f887.h>
#fuses INTRC_IO, NOWDT, NOPUT, BROWNOUT, NOMCLR, NOLVP
#use delay(clock=8000000)

signed int u[5] = {0,0,0,0,0};
signed int n = 15, k = 5, i, buffer = 0;
signed int c[15] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};

void main(){

setup_oscillator(OSC_8MHZ|OSC_INTRC);

set_tris_A(0b00011111);
set_tris_B(0b00000000);
set_tris_C(0b00000000);

delay_ms(250);

u[0] = input(PIN_A0);
u[1] = input(PIN_A1);
u[2] = input(PIN_A2);
u[3] = input(PIN_A3);
u[4] = input(PIN_A4);

delay_ms(250);

for(i=0;i<k;i++){
c[10+i] = u[i];
}

for(i=k-1;i>=0;i--){

buffer = c[9] ^ u[i];
c[9] = c[8];
c[8] = c[7] ^ buffer;
c[7] = c[6];
c[6] = c[5];
c[5] = c[4] ^ buffer;
c[4] = c[3] ^ buffer;
c[3] = c[2];
c[2] = c[1] ^ buffer;
c[1] = c[0] ^ buffer;
c[0] = buffer;
}

delay_ms(500);

output_bit(PIN_A5,c[0]);
output_bit(PIN_A6,c[1]);
output_bit(PIN_A7,c[2]);
output_bit(PIN_B0,c[3]);
output_bit(PIN_B1,c[4]);
output_bit(PIN_B2,c[5]);
output_bit(PIN_B3,c[6]);
output_bit(PIN_B4,c[7]);
output_bit(PIN_B5,c[8]);
output_bit(PIN_B6,c[9]);
output_bit(PIN_B7,c[10]);
output_bit(PIN_C0,c[11]);
output_bit(PIN_C1,c[12]);
output_bit(PIN_C2,c[13]);
output_bit(PIN_C3,c[14]);

}

Muchas gracias por la ayuda.
28/05/2012 #2
Moderador

Avatar de D@rkbytes

licuadolala dijo: Ver Mensaje
Hola a todos, mi problema es el siguiente: Hice un pequeño programa mediante el lenguaje c que emula el funcionamiento de un codificador cíclico, el compilador que usé fue el de CCS y cuando lo simulo con Proteus funciona perfecto. Pero cuando programo el pic (16f887), este hace que salgan puros 1s lógicos, por lo que todos los leds por donde debería salir la palabra código se prenden, lo cuál es incorrecto ya que dependiendo la palabra codificada estos se prenden o apagan.

El código es el siguiente:

void main(){

setup_oscillator(OSC_8MHZ|OSC_INTRC);
ANSEL = ANSELH = 0; // <-- Puerto A y Puerto B como digitales
set_tris_A(0b00011111);
set_tris_B(0b00000000);
set_tris_C(0b00000000);

Muchas gracias por la ayuda.
Saludos licuadolala
Yo no programo los PIC en C, pero veo que a tu código le falta configurar los puertos A y B como digitales.
Agrega las declaraciones que puse en azul y con eso te debe funcionar.

Suerte.
28/05/2012 #3

Avatar de Moyano Jonathan

En CCS la configuración de puertos es media engorrosa. Tenés 2 opciones:

1 - Eliminar de tu programa:

Código:
set_tris_A(0b00011111);
set_tris_B(0b00000000);
set_tris_C(0b00000000);
Con lo cuál CCS, automáticamente, configurará los puertos antes de que los uses en una sentencia del tipo
Código:
output_bit
o
Código:
input
Aclaro que esta forma consume más memoria RAM y ROM por que tiene que generar una configuración de puerto cada vez que querés acceder a ellos, tanto sea como entrada o como salida.

2 - Usar #use FAST_IO en tu programa en conjunto con set_tris_x para configurar los puertos de forma manual y consumir menos RAM.

Ambas opciones se encuentran en la ayuda del compilador.

Saludos !
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.