Curso tutorial del PIC16F877

estoy utilizando lo siguiente, un tecado matricial 4x3(PUERTO B), la libreria kbd.c, una LCD 2x16(PUERTO D), y su libreria , tengo el programa bien echo, lo que pasa es que no se la forma de conectar el teclado al pic para que me muestre todo en la lcd, y ademas, le agradeceria muchisimo si me pueden revisar el programa en busca de errores, el programa es:

Código:
#include <16F877.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP,XT
#use delay(clock=4000000)
#include <lcd.c>
#include <kbd.c>
# use fast_io (D)
# use fast_io (b)

void main() {
char k;

//set_tris_d (0xff);
//set_tris_b (0x00);


lcd_init();
kbd_init();

lcd_putc("\fListo...\n");

while (TRUE) {
k=kbd_getc();
if(k!=0)
if(k=='*')

lcd_putc('\f');

else

lcd_putc(k);

}
}
tambien voy a colocar el proteus que yo hice de esta conexion, para verificar que es lo que anda mal.

SI PUEDEN POR FAVOR REVISEN MI CONEXION Y MI PROGRAMA Y AYUDENME A MEJORARLO, PERO BIEN EXPLICADO GRACIAS

Hola le heche un vistazo al programa y esta bien en el circuito tienes bien el teclado lo que esta mal es el LCD te falta conectar VSS y VEE a tierra y VDD a 5volts si nadamas vas a sacar datos al LCD podrias Poner R/W a tierra en modo escritura de datos a LCD
 
Hola la forma de configurarce correctamente es la siguiente todo esta en la hoja de datos del pic
solo tienes que fijarte que registros se afectan con la configuracion de PORTA:

'PORTA.

TRISA = 1
ANSEL = 0 'Digital I/O en PORTA.
ADCON0 =%00111100 'ADC Enable bit Deshabilitado.
CM1CON0.7 = 0 'comparador 1 OFF.
CM2CON0.7 = 0 'comparador 2 OFF.
PIE1.6 = 0 'Disables the ADC interrupt

Para hacer esto en ensamblador se utilizarian las instrucciones BSF, BCF, MOVLW, MOWF & CLRF segun el registro afectado si se modifica un BIT en especifico como en CM1CON0 o CM2CON0 o de lo contrario si es todo el registro como en ANSEL.

Todavia me quedan los puertos A 5, 6 y 7 sin funcionar. Estan en estado alto.
 
Todavia me quedan los puertos A 5, 6 y 7 sin funcionar. Estan en estado alto.

Postea tu Programa para hecharle un vistazo se me ocurre que Antes de comenzar con la rutina de inicio del programa inicializa PORTA = 0

ejemplo:

'Alias*************************************
PA5 var PORTA.5

'Inicializo Puertos***************************
PORTA = 0
PORTB = 0

'Comienzo con el Programa principal************
inicio if(PA5 == 1 ) then
PORTB.5=1

goto inicio
 
Última edición:
necropost----

No se si me contesten pero bueno;

he dado demasiadas vueltas ya no se que hacer :/ me recomendaron este pic necesito hacer lo siguiente:

A traves del pc con mi puerto serial necesito captar 8 bits y enviar 8 bits, supongo que con este pic puedo hacer que el port B y el D uno como entrada y otro como salida pero como puedo configurar el pic?, tengo que grabar algo en la pic?, como hago eso?, soy totalmente nuevo en todo esto pero no tengo tiempo para empezar de 0, necesito algo mas centrado en lo que es la comunicacion rs232 con el pic 16f877 y como capturar sus datos etc, porfa ayudenme :S
 
necropost----

No se si me contesten pero bueno;

he dado demasiadas vueltas ya no se que hacer :/ me recomendaron este pic necesito hacer lo siguiente:

A traves del pc con mi puerto serial necesito captar 8 bits y enviar 8 bits, supongo que con este pic puedo hacer que el port B y el D uno como entrada y otro como salida pero como puedo configurar el pic?, tengo que grabar algo en la pic?, como hago eso?, soy totalmente nuevo en todo esto pero no tengo tiempo para empezar de 0, necesito algo mas centrado en lo que es la comunicacion rs232 con el pic 16f877 y como capturar sus datos etc, porfa ayudenme :S

Mira si no eres estudiante de algo afin o que tenga que ver con la electronica veo muy dificil que puedes realizar comunicacion RS232 con el pic16F877, Primero que nada tienes que empezar desde cero con los dos tutos que tengo en este post y despues planteas algo mas concreto con lo que hayas realizado.

:confused:Ademas para trabajar con RS232 tienes que tener conocimientos previos y en tu caso es irremediable empezar desde cero perdona que te lo diga asi friamente pero es la verdad.

Ahora que si quieres algo ya hecho busca en google!:rolleyes:
 
Buenas estuve trabajando pues me comi los tutoriales de punta a punta e investigue en internet, ahora tengo una duda, estoy trabajando en delphi y he probado varios componentes pero cada vez que envio algun dato al pic del proteus con el virtual serial port solo llega esto þ o algun otro codigo, sera un problema del programa en picc o del delphi?
 
Buenas estuve trabajando pues me comi los tutoriales de punta a punta e investigue en internet, ahora tengo una duda, estoy trabajando en delphi y he probado varios componentes pero cada vez que envio algun dato al pic del proteus con el virtual serial port solo llega esto þ o algun otro codigo, sera un problema del programa en picc o del delphi?


Hola que bueno, mira la verdad yo no he trabajado en delphi, yo estoy acostumbrado al ASM, CCS compiler y PBP.

El problema puede estar en Proteus si es que no estas dandole la direccion correcta y las opciones correctas al pic(al agregar el Programa al PIC), otra cosa que se me ocurre es Los Fuses o la palabra de configuracion que declaras al principio de tu programa a veces pasa que esta mal configurada o te hacen falta datos, y por eso cuando compilas tu programa y el archivo .exe que te genera la compilacion, a la hora de agregarlo al pic en proteus te queda mal.

Por ultimo puede ser el programa en Delphi y ahi lo siento pero a ese no le se jejejeje.

date una vuelta por aqui https://www.forosdeelectronica.com/f24/programas-pic-c-compiler-tutorial-21770/
 
Última edición:
que tal sangre azteca
mira tngo este problema estoy en un seminario de titulacion
el tema de PICs la esta dando el profesor Begovivh
y estamos haciendo praticas con el pic 16f877A, estamos en grupos de 3 y ahora me toco realizar la practica, la vdd no tengo nada de tiempo ya q trabajo todo el dia se q no es excusa pero asi es esto =(, vi q el profesor te dio clases, y tal vz t dejo la misma practica q t adjunto, y seria genial si pudieras mandarme la pract si es q la tienes, t lo agradeceria
salu2


link de la pract

https://269912565273241702-a-180274...akb2WFHFYjewV_krhxsi2GLq17UUZe&attredirects=0
 
Última edición:
(n)En mi opinion seria mejor mandarle un mensaje privado no crees ademas en el foro se plantean dudas, opiniones se te ayuda en base a lo que hayas hecho o avanzado en tu trabajo no se pasan las tareas no es un Kinder.

Tu tarea del Profesor era muy facil demasiado a mi parecer para un curso de titulacion con una 1/2 hora de teoria y dos de programacion la tienes lista, esto siempre y cuando sepas un poco de PICs y su programacion.

Ojala te sirva de algo el tutorial.

PD: para todo hay formas y medios de pedir las cosas.:unsure:
 
Hola soy nuevo en este foro soy estudiante y en mi clase de microcontroladores estamos analizando los convertidores analogico digital del pic 16f877a y tengo algunos problemas porque mi compilador pic c me marca error en una instruccion para definir que solo lea el AN 0 (A0)
porfavor ayudenme les dejo mi programa a ver si pudieran ayudarme les agradeceria mucho.

lo estoy usando para realizar un termometro digital en una lcd 16 x 2 con un sensor lm35

//termometro digital en lcd by pako

#include "math.h"
#fuses XT, NOWDT
#include "lcd.c"

void main( )
{
float tr,tv,temp,y,y1;
int16 valor;
lcd_init( );
set_tris_a(0xFF);
set_tris_d(0x00);
setup_port_a();
setup_adc(ADC_CLOCK_INTERNAL);
setup_adc_channel(0);
delay_ms(30);
do
{
valor=READ_ADC( );
tv=5*valor/1024;
tr=tv*(10000*(5-tv));
y=log(tv/2000);
y1=(1/298.5)+(y*(1/4050));
temp=1/y1;
temp=temp-273.5;
lcd_gotoxy(2,1);
printf(lcd_putc,"T=%4.2f",temp); //4 enteros 2 decimales
}while(1);
}

marca uun error en la instruccion
// setup_adc_channel(0);
 
Última edición:
Hola mira esto es lo que puede estar ocurriendo te esta faltando esta instruccion:

setup_adc_ports(AN0); /* Usar entrada analógica AN0 */

Para especificar que usaras Bit 0 de PORTA como entrada analogica.


Por que estas que siguen si las tienes:

setup_adc(ADC_CLOCK_INTERNAL); /* Usar reloj interno para el ADC */
set_adc_channel(0); /* Usar canal 0 del ADC */

O tambien puede ser (set) en lugar de (setup) en la instruccion setup_adc_channel(0); de tu programa.

Lo cheque asi a la rapida ojala te sirva.:D
 
Última edición:
saludos colegas, tambien me anoto al foro......... hace tiempo hice unos cursos de microcontroladores, aunque estoy un poco oxidado por falta de tiempo, pero creo k si cada uno de nosotro aportamos este foro va a tener buena calidad y eso es lo k hay k lograr............

una nota para lo k se estan iniciando en este interesante mundo y tienen poco conosimiento de electronica o cualquier razon k no kieran o puedan contruir su grabador de pic, pueden integrar el mplab al proteus, asi pueden ir simulando su circuito y probandolo sin tener k hacer invertir $$$$$$ y pueden probar con numerosos pic y no limitarse a k no puedo hacer eso por k no puedo conseguirlo.......................

les dejo un manual para k puedan integrar el mplab en su proteus.......... se cuidan colegas hasta la proxima y espero buenos aportes para el foro.......

excelente aporte...:aplauso:
 
Hola a todos quisiera aprender a programas bien este tipo de pics ya que necesito hacer un sensor de nivel y estoy un poco colgado espero que alguien pueda colocaborarme muchas gracias
 
Hola snakewater, la verdad esta muy padre tu propuesta. Mira yo he avanzado mucho en esto de los pics en especial el 16f877a, estoy haciendo un proyecto algo considerable y bueno mi pregunta es si sabes como comunicar al pic con la PC via serial?? usando visual basic 6 he estado leyendo pero como que no me convence me seria mejor teniendo un ejemplo, algo mas practico. Lo que estoy realizando se puede resumir en lo siguiente.

Comunicacion pic/pic/PC/RF/I2C(Maestro-esclavo). Espero tu respuesta y si te interesa pues subo mi informacion los programas en los pics estan en ensamblador...:unsure:
 
Nesesito orientacion para realizar un proyecto con el pic16f877 y un display lcd , se trata de un contador , incremento, decremento. indicándole con 2 botones cuando tiene q incrementar o decrementar el pulso me lo proporciona un encoder de un motor a pasos, abusando un poco seria posible un diagrama de conexion y el programa de ensamblador o basic?

agradecería mucho la ayuda

saludos
 
Hola snakewater, la verdad esta muy padre tu propuesta. Mira yo he avanzado mucho en esto de los pics en especial el 16f877a, estoy haciendo un proyecto algo considerable y bueno mi pregunta es si sabes como comunicar al pic con la PC via serial?? usando visual basic 6 he estado leyendo pero como que no me convence me seria mejor teniendo un ejemplo, algo mas practico. Lo que estoy realizando se puede resumir en lo siguiente.

Comunicacion pic/pic/PC/RF/I2C(Maestro-esclavo). Espero tu respuesta y si te interesa pues subo mi informacion los programas en los pics estan en ensamblador...:unsure:



:apreton:HOLA mira en cuanto a serial solo lo he usado para muestrear datos del PC enviados al Pic, ademas el serial como que cada vez se maneja menos en los pics cada vez se usa mas el usb, ahora si que lo de hoy es el PUERTO USB con PICS y para eso hay una herramienta muy padre se llama EasyHID es un programa que te crea el enlace entre el Pic y el Driver USB generando archivos PBP y Vb.

El archivo PBP tu lo puedes modificar para ver que entradas o salidas utilizar y agregar rutinas ademas el archivo en visual basic lo abres y puedes modificar el proyecto agregando botones, etiquetas, contadores y demas que se te ocurra para comunicar con el PIC.

Ademas PBP es un lenguaje muy amigable lo aprendes intuitivamente claro sabiendo ASM o C

Por serial hay unos tutos que estan exelentes del colega de aqui del foro: META para RS232

NOTA: te recomiendo que si quieres compartir tus archivos o que te ayuden en tu proyecto crea un Post diciendo tus avances y explicando en que tienes problemas para ayudarte asi toda la info queda en un mismo POST.

Nesesito orientacion para realizar un proyecto con el pic16f877 y un display lcd , se trata de un contador , incremento, decremento. indicándole con 2 botones cuando tiene q incrementar o decrementar el pulso me lo proporciona un encoder de un motor a pasos, abusando un poco seria posible un diagrama de conexion y el programa de ensamblador o basic?

agradecería mucho la ayuda

saludos

Hola asi rapido te cuento que en el Libro:

Microcontroladores PIC "Diseño practico de aplicaciones 1era parte" PIC12F508,PIC16F84A
Mac Graw hill 4 ed., jose maria angulo, ariza etxebarria ruiz.

en la Pagina 413 que seria el 4 TALLER de practicas esta lo que buscas en ASM
el codigo esta hecho para el 16F84A pero no hay problema en cambiarlo al 877 solo hay que fijarce la correspondencia de los registros.

El programa que viene ahi hace lo siguiente: sobre 8 leds conectados PORTB se visualizara el binario el numero de pulsos aplicados por RA0 y RA1 determina si la cuenta es ascendente o descendente.

Como veras es la mitad del Programa que necesitas, en tu caso quitarias la parte en que los manda en forma binaria al PORTB para agregar la rutina del LCD y ahi en PORTB conectarias el LCD en modo de 8 bits u 4 bits.

Te adjunto imagenes para la configuracion del LCD la pata RW se pone a GND si solo se van enviar datos al LCD

Mira aqui estan los LINKS para los tutos que te mencione de RS232 muy buenos

https://www.forosdeelectronica.com/...ie-rs232-pic16f84a-controlado-visual-c-17414/

https://www.forosdeelectronica.com/f24/manual-prueba-vc-vb-sobre-rs232-18631/

;) Ojala les sirva la info y mi opinion! saludos
 

Adjuntos

  • LCD descripcion de pines.jpg
    LCD descripcion de pines.jpg
    38.3 KB · Visitas: 15
  • Configuracion General LCD 16x2.jpg
    Configuracion General LCD 16x2.jpg
    91.1 KB · Visitas: 27
Última edición:
Muchas gracias snakewather he logrado la mayor parte de mi proyecto. Ya tengo la comunicacion RF, la comunicacion serial y el protocolo I2C; ya solo me faltan detallitos cuando lo termine te lo presento para contribuir a esta guia del 16F877A....;)
 
Atrás
Arriba