Autor Tema: problema para empezar con PIC16F887  (Leído 7136 veces)

0 Usuarios y 1 Visitante están viendo este tema.

marco_recargado

  • Visitante
problema para empezar con PIC16F887
« en: 10 de Enero de 2008, 15:58:16 »
Estoy empezando a programar el PIC16F887, mi primer programa consiste en recibir datos por puerto B y trasladarlos al puerto A. El problema esta en que habilito las resistencias de pullups sin embargo en las terminales  RB7 , RB6 y RB3 no se activan pues estos pines siempre marcan 0, para resolver el problema les pongo las resistencias de pullups fisicamente, con lo cual los pines RB7 y RB6 me arrojan los resultados esperados, sin embargo el pin RB3 no, al principio pense que se debia al puerto al que mando los datos pero no es asi puesto que despues pase los datos del puerto b al puerto c y al puerto d y el resultado es el mismo el pin 3 de cada puerto no conmuta aunque yo tenga en mi entrada de RB3 nivel bajo o alto,  dejo mi programa esperando que alguien me pueda ayudar, de antemano gracias.



#include <16F887.h>
#use delay(clock=8000000)
#fuses NOWDT,NOPUT,NOPROTECT,NOMCLR,INTRC_IO,NOBROWNOUT,LVP,NOPROTECT,NOCPD,NOIESO,NOFCMEN,NODEBUG

#byte portb=0x06
#byte porta=0x05
#byte portc=0x07
#byte portd=0x08
#byte porte=0x09

#use fast_io(A)
#use fast_io(B)
#use fast_io(c)
#use fast_io(d)
#use fast_io(e)


void main()
{       
setup_oscillator(OSC_8MHZ|OSC_INTRC);       // configura el oscilador interno con 8MHZ
DISABLE_INTERRUPTS(global);
DISABLE_INTERRUPTS(INT_AD);
DISABLE_INTERRUPTS(INT_RB3);

setup_adc_ports( NO_ANALOGS );
SETUP_ADC(adc_off);
SETUP_CCP1(CCP_OFF);
SETUP_CCP2(CCP_OFF);
SETUP_TIMER_2(T2_DISABLED);
SETUP_TIMER_1(T1_DISABLED);
set_tris_b(0b11111111);
set_tris_a(0b00000000);
set_tris_c(0b00000000);
set_tris_d(0b00000000);
set_tris_e(0b00000000);

porta=0;
portc=0;
portd=0;
porte=0;
PORT_B_PULLUPS(pin_b0);
PORT_B_PULLUPS(pin_b1);
PORT_B_PULLUPS(pin_b2);
PORT_B_PULLUPS(pin_b3);
PORT_B_PULLUPS(pin_b4);
PORT_B_PULLUPS(pin_b5);
PORT_B_PULLUPS(pin_b6);
PORT_B_PULLUPS(pin_b7);


while (true)

{
porta=portb;
portc=portb;
portd=portb;
} /// fin de bucle while
} /// fin de funcion principal main

Desconectado QIQE

  • PIC18
  • ****
  • Mensajes: 335
Re: problema para empezar con PIC16F887
« Respuesta #1 en: 10 de Enero de 2008, 16:56:57 »
Hola, en la linea #fuses cambia LVP por NOLVP, esto es la programacion a bajo voltage por el puerto B, en ocasiones esto puede darte problemas, no tiene que ser por eso.

Y todos los pullups se pueden activar de una PORT_B_PULLUPS(true);

Prueba y nos cuentas cositas
Muchas gracias por vuestro tiempo.

Saludos desde valencia!!!

marco_recargado

  • Visitante
Re: problema para empezar con PIC16F887
« Respuesta #2 en: 10 de Enero de 2008, 17:28:44 »
Gracias QIQE por tu respuesta, ya cambie la linea de fuses por NOLVP,  y con respecto a port_b_pullups(true), solo habilita la resistencia de pullup del pin b0, por eso mismo habilite pin por pin, y aun asi tengo el mismo problema las entradas RB6,RB7 y RB3 no se habilitan lasresistencias de pullup, la unica caracteristica que veo que comparten es que esos tres pines son los de programacion de bajo voltaje

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: problema para empezar con PIC16F887
« Respuesta #3 en: 10 de Enero de 2008, 21:17:44 »
No estoy seguro pero puedes probar con:
port_b_pullups(0b11111111);


salu2 x)

marco_recargado

  • Visitante
Re: problema para empezar con PIC16F887
« Respuesta #4 en: 15 de Enero de 2008, 13:32:51 »
pues lo probe asi pero no ha dado resultado, en un foro italiano me decian que antes que nada habia que checar el oscilador interno   algo asi como  while(OSC_STATE_STABLE==4)
no lo entiendo pero al menos el puertob ya sirve como entrada, pero las resistencias de pullups todavia no estan habilitadas

Desconectado lau.meca

  • PIC10
  • *
  • Mensajes: 1
Re: problema para empezar con PIC16F887
« Respuesta #5 en: 01 de Mayo de 2010, 16:29:31 »
El principal problema con los pullups de este pic es que no se activan en "bloque" -como se podía hacer en el 877-, sino  individualmente. Además para que puedan ser activados, el registro OPTION debe estar desactivado (toda esta información está en el datasheet de la microchip).

Simplemente tienes q agregar unas 4 líneas de código más

#BYTE WPUB= 0X95 // declaras los registros
#BYTE OPTION_REG = 0X81

OPTION_REG = 0; //en el MAIN desactivas el registro OPTION
WPUB= 0B11111111;// y seleccionas los pullups q vas a utilizar

se supone que con esto debe funcionar, sin embargo YO todavía tengo problemas simulando en Proteus un programa que utiliza estos pullups y en este momento no te sabría decir si las fallas son de código o de compilación... o incluso si se relacionan con los pullups.

En fin espero que te sirviera de algo.... aunque apostaría que solucionaste este problema hace años jaja