Programacion de PIC16F877 a PIC16F877A

Podrian ayudarme con esto:

Tengo un programa para el PIC16F877 y este corre perfectamente bien, pero cuando este programa lo grabo en el PIC16F877A no corre. al parecer solo cambian algunos voltajes... alguien que tenga mas experiencia en esto me podria ayudar?

Muchas Gracias y saludos a todos.

Vicpower
 
hola solo cambia las directivas del prosesador a 16f877a si tienes solo el .hex con el programa picdisam106 obtienes el codigo en ensamblador y con el mplab creas el proyecto y cambias prosesador con el que trabajas tanto en el codigo como en el mplab colocas 16f877a y compilas generando de nuevo tu codigo .hex
 

Adjuntos

  • picdisasm106_196.zip
    193.5 KB · Visitas: 190
Hola...........
Tengo un problema en una linea del programa que en el que estoy trabajando desde MPLAB
para un pic16f877a.......................... Y es que ne cesito complementar el puerto B y luego intercambiar su nebbles
comf portb,0
swap w,0
cuando hago el estimulo desde el mplab y al simular niega el puerto y lo guarda en w, pero al ejecutar swap w se queda en ceros en vez de cambiar los nebbles
Me pregunto que puede ser
 
hola V. Avellaneda J tienes que utilizar un registro complementario
;***** VARIABLES
CBLOCK 0x20
acum_A ; variable momentánea
ENDC
cuerpo del programa
movf portb,w
movwf acum_A
comf acum_A,f
swapf acum_A,f
movf acum_A,w
movwf portb
 
Hola yo de nuevo
He estado camellando con el conversor AD del micro y tengo dudas sobre la justificacion del resultado (Regs ADRESL , H y el ADFM) y sobre los tiempos de addquisicion, puesto el registro de trabajo solo tiene 8 bits....................... Con mi implementacion solo puedo llegar a 255 ademas este toma una señal fija y el resultado varia en las unidades.
Me pregunto como se podria depurar................
Gracias
 
Hola Avellaneda en este tutorial hay información sobre eso si sigue teniendo dudas publícalas miramos si te podemos colaborar .
El justificado de la conversión es la disposición de los datos en los registros luego de terminar la conversión ya que el adc de esta gama de micros es de 10 bit y cada registro tiene 8 bits se necesitan 2 registros ADRESL, ADRESH la escogencia de esto se hace por medio del bit ADFM que se encuentra en el registro ADCON1.
ADFM: Selecciona el formato del resultado de la conversión A/D
ADFM =1 => Pone en el registro ARDESH los seis bit de mayor peso a “0” (alineación a la derecha). Parte alta de la conversión en ceros “xxxxxxxx-xx000000” el valor máximo es 1023.

ADFM =0 => pone los 6 bit de menor peso del registro ADRESL a “0” (alineación a la
Izquierda). Parte baja de la conversión en ceros “000000xx-xxxxxxxx” el valor máximo es 255 utilizando solo el registro ADRESH y descartando ADRESL y 65535 utilizando ambos registros.

http://lc.fie.umich.mx/~ifranco/DATASHEET/uC/Manual_PIC16F87X.pdf

la parte del tiempo de adquisicon la consigues aqui
http://www.ate.uniovi.es/fernando/Doc2004/SED/Presentaciones/Modulo _AD.pdf
espero le sirva
 
Hola yo de nuevo
Me preparo para un proyecto y a mi sub grupo le concierne comunicacion serial de un o dos pics con un Pc para control y visualizacion remota de un lazo cerrado un poco complejo.................
Bien me gustaria que me colaborara con algo de información previa y me ayuadara a resolver las dudas en el camino
Gracias
 
tengo un problema parecido al de vicpower..
el programa funciona correctamente, lo quemo y todo dice ok... pero cuando lo monto en el cto no me funciona..... monte un cto sencillo de encender y apagar un led para verificar si el problema era el cto o la programacion....
uso el pickit2 con cristal de 4mhz con el 16f877a
gracias por su colaboracion
 
Hola estoy armando un proyecto que mide magnitudes de fisicas, uso el timer del PIC16F77A, me costo mucho trabajo hacer mi proyecto q consta de un teclado matricial y una pantalla LCD 20x2; el programa lo elabore en lenguaje C usando el PCWHD complier CCS v.4.104; y para grabar el pic uso el WINPIC800 v. 3.64H; antes de hacer mi proyecto en fisico, decidi grabar programas simples como encender y apagar leds, controlar y mostrar mi nombre en LCD, sin embargo el programa grabado en el pIC no corre, he verificado mediante el WINPIC800 y el programa esta en el Micro, sin embargo en la practica el led solo queda encendido y en el lcd solo enciende y no pasa nada mas, verifique voltaje y todo bien, cambie de cristal el cual uso de 4 MHz XT, y nada use otoros micros el PIC16F84A y hize los programas de parapadeo de led y nada solo encienden los led y no hace nada mas; la configuracion del WINPIC800 para grabar el pic es la siguiente como se ve en la imagen
win800.png




Hola estoy armando un proyecto que mide magnitudes de fisicas, uso el timer del PIC16F77A, me costo mucho trabajo hacer mi proyecto q consta de un teclado matricial y una pantalla LCD 20x2; el programa lo elabore en lenguaje C usando el PCWHD complier CCS v.4.104; y para grabar el pic uso el WINPIC800 v. 3.64H; antes de hacer mi proyecto en fisico, decidi grabar programas simples como encender y apagar leds, controlar y mostrar mi nombre en LCD, sin embargo el programa grabado en el pIC no corre, he verificado mediante el WINPIC800 y el programa esta en el Micro, sin embargo en la practica el led solo queda encendido y en el lcd solo enciende y no pasa nada mas, verifique voltaje y todo bien, cambie de cristal el cual uso de 4 MHz XT, y nada use otoros micros el PIC16F84A y hize los programas de parapadeo de led y nada solo encienden los led y no hace nada mas; la configuracion del WINPIC800 para grabar el pic es la siguiente como se ve en la imagen adjunta
 

Adjuntos

  • win800.png
    win800.png
    52.8 KB · Visitas: 12
  • IMG00830.jpg
    IMG00830.jpg
    103.6 KB · Visitas: 8
  • IMG00829.jpg
    IMG00829.jpg
    104.8 KB · Visitas: 7
Última edición:
Bueno, estoy 4 meses en esto de los microcontroladores, he aprendido a programarlos y simularlos en proteus, y recien comenze a la parte de grabacion y montaje de PICs, con respecto, a la conexion de las patillas 31 y 32, pues ya las habia conectado antes y es la misma situacion es como si el micro no tuviese programa, sin embargo al hacerle la prueba de lectura en la PC pues el programa esta ahi, adjunto fotos para q vean cuando conecto las patillas 31 y 32, ocurre la misma situacion el led enciende y no apaga y a veces no enciende, tengo q mover los condensadores del oscilador para q encienda. probare nuevamente cambiando por nuevos cristales, quizas los dos q tengo ya esten dañados.

el codigo para el LCD es:
#include <16F877A.h>
#use delay(clock=4000000)
#fuses HS,NOWDT,NOPUT,NOLVP,NOBROWNOUT,NOWRT,NOPROTECT
#include <lcd.c>

int i;

void main(void)
{
lcd_init();
while (1)
{
lcd_gotoxy(5,2);
lcd_putc("----TEST----");
delay_ms(3000);
}
}


--------------------------------------------------------------

para encender varios leds es:


#include <16F84A.h>

#use delay(clock=4000000)

#fuses HS,NOWDT,NOPUT,NOPROTECT

#byte port_b=0x06

int contador;

void main()
{

set_tris_b(0);

port_b=0;

while (true)

{
contador=0xff;
port_b=contador;

delay_ms(1000);

contador=0x00;
port_b=contador;

delay_ms(1000);

}
}



_______________________________

Espero me puedan ayudar de por que no puedo llevar a la practica mis programas... gracias
 

Adjuntos

  • 2.png
    2.png
    7.4 KB · Visitas: 11
  • 3.png
    3.png
    8.5 KB · Visitas: 10
  • 4.png
    4.png
    8.8 KB · Visitas: 9
  • 5.jpg
    5.jpg
    20 KB · Visitas: 11
  • IMG00779.jpg
    IMG00779.jpg
    35.7 KB · Visitas: 11
  • IMG00796.jpg
    IMG00796.jpg
    23.4 KB · Visitas: 10
  • IMG00797.jpg
    IMG00797.jpg
    23.1 KB · Visitas: 10
  • IMG00814.jpg
    IMG00814.jpg
    28.5 KB · Visitas: 11
  • IMG00815.jpg
    IMG00815.jpg
    23.9 KB · Visitas: 9
  • IMG00816.jpg
    IMG00816.jpg
    23 KB · Visitas: 9
  • IMG00835.jpg
    IMG00835.jpg
    22.4 KB · Visitas: 10
  • IMG00838.jpg
    IMG00838.jpg
    13.6 KB · Visitas: 9
A los que me respondieron, gracias, logre hacer los grabados y mis circuitos ya funcionan, el error fue que yo usaba un oscilador XT y en mi programa lo hacia con HS, modifique ello y los programas funcionaron bien... saludos...
 
Última edición por un moderador:
He completado un proyecto donde uso un LCD un Keypad y PIC16F877A y sensores, antes de armar el proyecto arme unos circuitos de practicas para obtener practica en montaje real de PIC asi que hice el de encender y apagar un led, funciono sin problemas, arme el de encender y apagar leds varios en secuencia y orden aleatorio y me funciono si problemas y ahora estoy queriendo probar con el LCD y me he quemado una pantalla de 20x2... les detallo el programa en CCS y les pongo unas imagenes y me digan que hago mal

Programa:

Código:
#include <16f877A.h>
#fuses XT, NOWDT
#fuses NOLVP
#fuses NOPROTECT
#use delay(clock=4000000)
#include <lcd.c>
#define LCD_DB4 PIN_D4 
#define LCD_DB5 PIN_D5 
#define LCD_DB6 PIN_D6 
#define LCD_DB7 PIN_D7 
#define LCD_E PIN_D0 
#define LCD_RS PIN_D1 
#define LCD_RW PIN_D2 

void main()
{
lcd_init();
printf(lcd_putc, "HOLA MUNDO");
}
las conexiones al LCD son las siguientes

(1) Vss --- Tierra
(2) Vdd --- 5 V
(3) Vee --- Potenciómetro o a Tierra
(4) DB4 --- RD1
(5) DB5 --- RD2
(6) DB6 --- RD0
(7 - 10) DB7 - DB10 no conectadas
(11) DB11 --- RD4
(12) DB12 --- RD5
(13) DB13 --- RD6
(14) DB14 --- RD7
(15) Anodo --- + 5V
(16) Catodo --- Tierra

Les adjunto las imágenes de Proteus y de las pruebas físicas...

Si alguien tiene experiencia grabando por favor digame que esta mal en mi ensamblado

Como observan en la simulación en proteus corre bien

mas imágenes he colgado aquí
[URL="https://www.forosdeelectronica.com/f24/pic16f877a-lcd-montaje-real-funciona-75904/"]PIC16F877A y LCD en montaje Real no funciona
[/URL]
 

Adjuntos

  • IMG00890.jpg
    IMG00890.jpg
    90.6 KB · Visitas: 8
  • IMG00888.jpg
    IMG00888.jpg
    94 KB · Visitas: 5
Última edición por un moderador:
Atrás
Arriba