Recursos del PIC. Uso de la memoria EEPROM interna del PIC

Cualquier cosa relacionado con la programación de Microcontroladores PIC en C utilizando el compilador CCS.

Recursos del PIC. Uso de la memoria EEPROM interna del PIC

Notapor rafaelo90 » Mar Oct 13, 2009 5:27 am

hola que tal buenas tardes :D :mrgreen: aqui poniendo el codigo que le habia comentado a biblioman e echo uso de la memoria EEPROM interna del pic y me gustaria empezar uno que guardara una clave introducida mediante un telcado y activara un rele en caso de ser cierta bueno esos son mis humildes aportaciones me estoy hiniciando en esto pero me gusta mucho este tema de los microcontroladores bueno espero sirva de algo la aportacion y juntos aprender mas bueno me despido tambie tengo el archivo en proteus por si interesa

:evil:

#include <16f877a.h>

#use delay(clock=4000000)

#fuses XT,NOWDT,NOPUT,NOPROTECT,NOLVP

#include <lcd.c>

#include <stdlib.h>

#use fast_io(a)

#byte port_a=0x05

#use fast_io(b)

#byte port_b=0x06

#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)



void encender1(void)

{

output_bit(PIN_A0,1);

printf("LED ENCENDIDO\r");



}



void encender2(void)

{

output_a(0x06);

printf("LEDS ENCENDIDOS\r");



}



void run_func(char posc_memory)

{

switch(posc_memory)

{

case 0:



encender2();

break;



case 1:



encender1();

break;



}

}



void main()

{

char posc_memory=0;

char volume[];



char mensaje1[]="prende un led";

char mensaje2[]="prende dos leds";



write_eeprom(posc_memory,mensaje1);

posc_memory++;

write_eeprom(posc_memory,mensaje2);

posc_memory=0;



lcd_init();

set_tris_b(0xFF);

set_tris_a(0x00);



for(;;)

{

if(input(PIN_B0)==1)

{

volume=read_EEPROM(posc_memory);

printf(lcd_putc,"\f");

printf(lcd_putc,"%s",volume);

printf(lcd_putc,"\b");

lcd_gotoxy(1,1);

printf("%s\r",volume);

delay_ms(500);

posc_memory++;

}



if(input(PIN_B1)==1)

{

run_func(posc_memory);



}

if(posc_memory>1)

{

posc_memory=0;

}

}

}
rafaelo90
 
Mensajes: 1
Registrado: Mar Oct 13, 2009 5:06 am

Re: Recursos del PIC. Uso de la memoria EEPROM interna del PIC

Notapor biblioman » Mar Oct 13, 2009 4:31 pm

Hola rafaelo90 me parece muy interesante tu ejemplo sobre el uso de la memoria EEPROM PIC, te animo a que sigas avanzando en el tema, y si quieres compartir con nosotros tus avances pues bien venidos serán. En cuanto al archivo en Proteus seguro que a todos los que visitan este humilde foro le interesa, sería de agradecer que lo subieras.

Bueno, un saludo y gracias por tú aportación.
Avatar de Usuario
biblioman
 
Mensajes: 220
Registrado: Vie Mar 20, 2009 4:58 pm

Re: Recursos del PIC. Uso de la memoria EEPROM interna del PIC

Notapor biblioman » Dom Dic 06, 2009 10:29 am

Hola a todos. Aquí tenéis el esquema en Proteus de un nuevo ejemplo del uso de la memoria EEPROM del PIC,
como siempre espero vuestros comentarios constructivos al respecto.

Un saludo.
No tiene los permisos requeridos para ver los archivos adjuntos a este mensaje.
Avatar de Usuario
biblioman
 
Mensajes: 220
Registrado: Vie Mar 20, 2009 4:58 pm

Re: Recursos del PIC. Uso de la memoria EEPROM interna del PIC

Notapor QuijotescoXp » Mar Dic 08, 2009 8:18 pm

Desde mi punto de vista, de entre todos los recurso que poseen los microcontroladores, este es uno de los que mas interesa conocer.

Gracias por el aporte, sencillo y claro como siempre.

Saludos.
Existen 10 tipos de personas. Los que saben binario y los que no.
Avatar de Usuario
QuijotescoXp
 
Mensajes: 33
Registrado: Sab Sep 19, 2009 10:46 pm

Re: Recursos del PIC. Uso de la memoria EEPROM interna del PIC

Notapor inyelber » Jue Dic 31, 2009 9:47 pm

hola amigos estoy nuevo en el foro!
bueno estoy aca xq tengo una duda de como guardar una clave en la memoria interna del pic.
el pic que estoy usando es el 16f877
tengo conectado un teclado a una sola patilla del pic a travez de un covertidor analogico digital. en este caso RA0.
aca les dejo el esquematico para que tengan una idea de lo que necesito!
aca solo veo en la lcd las teclas que pulso!
ahora necesito guardar una clave en la memoria y compararla con los datos del teclado.

si alguien me puede ayudar se los agradeceria! saludos !
como estoy nuevo en este foro no se si los mesajes me lleguen a mi correo o tengo que revisar el foro a menudo! de todas formas les dejo mi correo inyelber@hotmail.com
No tiene los permisos requeridos para ver los archivos adjuntos a este mensaje.
inyelber
 
Mensajes: 22
Registrado: Dom Nov 15, 2009 9:49 pm

Re: Recursos del PIC. Uso de la memoria EEPROM interna del PIC

Notapor biblioman » Sab Ene 02, 2010 10:39 am

Hola inyelber.
inyelber escribió:estoy aca xq tengo una duda de como guardar una clave en la memoria interna del pic.
el pic que estoy usando es el 16f877

Si te has leído el artículo habrás visto que para escribir datos en la EEPROM interna del pic está la función:

write_eeprom (address, value) --> que escribe un dato (entero de 8 bit) en la dirección especificada en address.

En el ejemplo solo se utiliza la dirección 00 de la memoria, si tú clave tiene más de un carácter lógicamente tendrás que
utilizar tantas posiciones de memoria como caracteres quieras guardar.

También existe la directiva:

#rom address = {list} --> para escribir una lista de valores en la EEPROM

Por ejemplo:

#rom 0x2100={6,7,8,9,5}; //Escribirá los valores 6,7,8,9,5 en las posiciones de memoria 01,02,03,04 y 05 de la EEPROM interna del pic16f877.

inyelber escribió:tengo conectado un teclado a una sola patilla del pic a travez de un covertidor analogico digital. en este caso RA0.


Como has utilizado el convertidor analógico digital para detectar la tecla pulsada no podrás utilizar la interrupción en RB0 ni en RB4-RB7, por lo que tendrás que utilizar un bucle infinito para saber cuando se ha pulsado una tecla.

inyelber escribió:como estoy nuevo en este foro no se si los mesajes me lleguen a mi correo o tengo que revisar el foro a menudo!


Este es un foro para aprender a programar PIC en C, compartimos nuestros ejemplos y se intentan mejorar entre todos. No se da soporte de ayuda a ningún correo en particular, ya preguntaste eso en tú último post y te conteste aquí

Si sigues teniendo duda de como comparar los valores de la tecla pulsada con los guardados en la EEPROM, adjunta el código fuente con lo que tienes hecho, junto con el DNS de Proteus y entre todos intentaremos mejorarlo.

Un saludo
Avatar de Usuario
biblioman
 
Mensajes: 220
Registrado: Vie Mar 20, 2009 4:58 pm

Re: Recursos del PIC. Uso de la memoria EEPROM interna del PIC

Notapor inyelber » Sab Ene 02, 2010 4:48 pm

#include <16f877.h>
#device ADC=10
#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT
#use delay(clock=4000000)
#use standard_io(b)
#include <lcd.c>


float valor=0;// es una variable de 32bits

void adc(){ // creo una funcion llamada ADC

// Lectura del canal 0
set_adc_channel(0);
delay_ms(1);
valor=read_adc();
delay_ms(1); //para que se estabilice
}


void main(){
lcd_init();
setup_adc(ADC_CLOCK_INTERNAL); //configura el converso
setup_adc_ports(RA0_analog); //entrada 0 como analogica

do{
int x;
adc();// llamo a la funcion ADC

if ((valor >710)&(valor<720))
{lcd_putc("1");
delay_ms(400);}

if ((valor >438)&(valor<445)){
lcd_putc("2");
delay_ms(400);}


if ((valor >320)&(valor<330)){
lcd_putc("3");
delay_ms(400);}


if ((valor >648)&(valor<655)){
lcd_putc("4");
delay_ms(400);}


if ((valor >410)&(valor<420)){
lcd_putc("5");
delay_ms(400);}


if ((valor >310)&(valor<316)){
lcd_putc("6");
delay_ms(400);}


if ((valor >610)&(valor<620)){
lcd_putc("7");
delay_ms(400);}


if ((valor >390)&(valor<405)){
lcd_putc("8");
delay_ms(400);}


if ((valor >300)&(valor<307)){
lcd_putc("9");
delay_ms(400);}


if ((valor >570)&(valor<580)){
lcd_putc("\n");
delay_ms(400);}


if ((valor >290)&(valor<296)){
lcd_init();
delay_ms(400);}


if ((valor >380)&(valor<385)){
lcd_putc("0");
delay_ms(400);}

}while(true);
}

con este programa veo las teclas pulsadas en el teclado! he visto algo por ahy en donde usan el #rom 0x2100 pero de verdad no he visto un ejemplo para mas o menos guiarme! pero bueno si me pueden hechar una ayuda seria bueno.

el circuito aca se los voy a adjuntar.
No tiene los permisos requeridos para ver los archivos adjuntos a este mensaje.
inyelber
 
Mensajes: 22
Registrado: Dom Nov 15, 2009 9:49 pm

Re: Recursos del PIC. Uso de la memoria EEPROM interna del PIC

Notapor inyelber » Sab Ene 02, 2010 5:05 pm

te cuento que intente hacerlo a travez de la libreria <kbd.c> y <lcd.c> pero compilaba y nada. no hacia nada en proteus!
entonces opte por esta via que es la del adc.
es buena xq no usas muchos pines.
aunque deberia de funcionar con la libreria kbd pero bueno despues que solucione esto ire con lo otro.
inyelber
 
Mensajes: 22
Registrado: Dom Nov 15, 2009 9:49 pm

Re: Recursos del PIC. Uso de la memoria EEPROM interna del PIC

Notapor inyelber » Sab Ene 02, 2010 10:04 pm

el pic que estaba usando para esta aplicacion era el 16f876
bueno ya logre solucionar el problemita que tenia con el teclado! era un problema con la libreria <lcd.c>
cuando colocaba lcd.c y kbd. c me daba un error con la lcd!
#include <16f876.h>
#use delay(clock=4000000)
#include <lcd420.c>
#include <kbd.c>

añadi como se ve aca la <lcd420.c>!
se acabo el problema pero no me leia las teclas del teclado!

aca solo modifique los valores de la libreria del kbd y listo!
/////////////////////////////////////////////////////
#if defined use_portb_kbd /
#byte kbd = 6 // on to port B (at address 6) /
#else /
#byte kbd = 6 // on to port D (at address 8) /
///////////////////////////////////////////////////
coloque los dos valores en 6 ya que por defecto viene= "b=6 y el d=8"


y aca solo coloque el primero en d y el otro en b
////////////////////////////////////////
#if defined use_portb_kbd
#define set_tris_kbd(x) set_tris_d(x)
#else
#define set_tris_kbd(x) set_tris_b(x)
#endif
////////////////////////////////////////////////////////
los valores en rojo son los que modifique! y bueno ya me esta funcionando bien!
inyelber
 
Mensajes: 22
Registrado: Dom Nov 15, 2009 9:49 pm

Re: Recursos del PIC. Uso de la memoria EEPROM interna del PIC

Notapor biblioman » Dom Ene 03, 2010 1:50 am

Hola inyelber. Me parece que te estas liando, el código que has puesto al principio el del PIC 16f877 lo veo correcto y te debería de funcionar sin problemas (si no lo hace en Proteus puede ser por la simulación del teclado), en estos casos lo mejor es que te construyas tú el teclado con pulsadores y veas los valores de tensión que obtienes con la pulsación de cada tecla.

No hay que añadir ninguna librería kbd para controlar el teclado, ya lo estas haciendo por medio de las sentencias if que tienes dentro del bucle do--while.

Incluye en un archivo comprimido (.zip ó .rar) los siguientes archivos: el .hex resultado de la compilación de tú programa, el .c y el archivo .DSN del esquema de Proteus y lo adjuntas, así podré ver exactamente lo que has hecho.

Un saludo
Avatar de Usuario
biblioman
 
Mensajes: 220
Registrado: Vie Mar 20, 2009 4:58 pm

Siguiente

Volver a Programación PIC en C con CCS

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado

cron