Autor Tema: Ejemplitos en C para 16F648A  (Leído 609442 veces)

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

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
RE: Ejemplitos en C para 16F648A
« Respuesta #210 en: 27 de Enero de 2006, 06:36:00 »
Desde este enlace os podeis descargar los fichers necesarios para el programa:lectura/escritura interna de la eeprom interna del pic mediante interrupcion serial

PD:Decir, que la semana que viene pondre la revision de la escritura/lectura de la eeprom externa 24LC256, es igual que este pero para la eeprom externa


Suerte!!! :wink:
« Última modificación: 25 de Mayo de 2006, 11:21:16 por vszener »
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
RE: Ejemplitos en C para 16F648A
« Respuesta #211 en: 31 de Enero de 2006, 04:59:00 »
Buenass!!!lo prometido es deuda! aqui esta el programa que gestiona la lectura/escritura de una eeprom externa, concretamente la 24LC256:

////////////////////////////////////////////////////////////////////////////////////
//                     VsZeNeR"06      
//                     23/Enero/06
//
//   Programa:   RS232 Y PIC
//   Version:   1.0 REVISION del programa 48
//
//   Dispositivo: PIC 16F648A         Compilador:    CCS vs3.242
//   Entorno IDE: MPLAB IDE v7.30      Simulador:    Proteus 6.7sp3
//
//   Notas: Se interacciona el PC con el PIC mediante RS232 para el tratamiento de la memoria
//         eeprom externa 24LC256,se muestra por v.terminal un menu:
//               · 0 -> Muestra nuevamente el menu
//               · 1 -> LLena la eeprom a 0xFF
//               · 2 -> Lee la eeprom en modo hex
//               · 3 -> Escribe en la eeprom
//               · 4 -> Lee la eeprom en modo texto(ASCII)
//         Todas las acciones se realizan mediante la interrupcion del puerto serial.
//         Al comienzo del programa, realizar el paso 1. en caso de empezar a escribir
//         en la eeprom!. Decir que las funciones gethex1() y gethex() estan sacadas
//         de la libreria incluida en CCS, input.c, estan puestas en el programa
//         por la pequeña modificacion en la funcion gethex1() que, en este caso, solo
//         permite el paso de digitos comprendidos entre 0-f o 0-F. Tener en cuenta
//         que los datos a introducir deben ser en hexadecimal, por ejmeplo, en el
//         caso de almacenar en la letra "a" minuscula en la posicion 0x00 de la eeprom
//         24LC256, habra que realizar los siguientes pasos:
//               1. Pulsamos 3 para escribir en la eeprom interna
//            2. Ponemos la direccion 00 (esta en hexadecimal!)
//            3. Damos el valor en hex de la letra a=61
//            4. Leemos la memoria para ver que se almacenado correctamente(pulsando 2)
//
//   Conexiones:      A0 -> SCK eeprom 24LC256
//               A1 -> SDA eeprom 24LC256
//               B2 -> TxD
//               B1 -> RxD                
//////////////////////////////////////////////////////////////////////////////////
#include <16f648a.h>                     //pic a utilizar          
#fuses XT,NOWDT,NOPROTECT,PUT,NOLVP,NOBROWNOUT   //ordenes para el programador
#fuses RC_IO                           //reloj interno
#use delay (clock=4000000)                  //Fosc=4Mhz
#use rs232(baud=9600, xmit=PIN_b2, rcv=PIN_b1)   //manejo del RS232
#define EEPROM_SDA  PIN_A1                  //pines para...
#define EEPROM_SCL  PIN_A0                  //...manejo de eeprom 24LC256
#include <24256.c>                        //libreria eeprom 24LC256

///DECLARACION DE VARIABLES GLOBALES
boolean menu=1,opcion=1;      //si menu=0 se muestra el menu de inicio...
                        //...si opcion=1 estamos en modo direccion
                        //      opcion=0 estamos en modo dato

///DECLARACION DE FUNCIONES
BYTE gethex1( );      //verifica que esta dentro del rango y muestra por pantalla
BYTE gethex( );      //devuelve el numero en hex
///LLAMADA FUNCION INTERRUPCION
#int_rda
void rs232( )
{
   BYTE i=0,j=0,value;            //definicion...
   EEPROM_ADDRESS address;
   char digito;               //...variables
   
   disable_interrupts(global);      //apago interrupcion
   
   digito=getc( );               //almaceno dato serial(rs232) en digito
   
   puts("
****************************************************" );   
   
   switch(digito){
      case "0":      menu=!menu;                  //muestra menu
                  break;
      case "1":      printf("LLenando buffer..." );   //llena memoria 0xff
                     for(i=0; i<16;i++){                    
                           for(j=0; j<16;j++)
                              write_ext_eeprom(i*16+j,0xff);
                           }
                     puts(" Buffer completado!" );
                     break;
         case "2":      puts("Realizando Lectura...
" );   //opcion que realiza la lectura modo hex
                    puts("00  01  02  03  04  05  06  07  08  09  0A 0B  0C  0D 0E 0F" );
                     puts("==============================================" );
                     for(i=0;i<16;i++) {          
                        for(j=0;j<16;j++) {
                            printf("%2x ",read_ext_eeprom(i*16 +j) );
                        }
                        printf("|| %3x0
",i );                  
                     }
                     puts("
Lectura finalizada!"Giño;
                     break;
         case "3":      printf("
Direccion a cambiar: " );   //opcion que realiza la escritura
                   address = gethex( );                  //le damos la direccion
                   printf("
Nuevo valor: " );
                   opcion=0;                        //modo datos
                   value = gethex( );                  //le damos el dato a escribir
                   opcion=1;                        //modo direcciones
                   printf("
Realizando escritura..." );
                   write_ext_eeprom(address,value);         //escribe en la eeprom
                   printf(" Escritura finalizada!
" );
                     break;
         case "4":      puts("Realizando Lectura...
" );   //opcion que realiza la lectura modo texto
                    puts("00  01  02  03  04  05  06  07  08  09  0A 0B  0C  0D 0E 0F" );
                     puts("==============================================" );
                     for(i=0;i<16;i++) {          
                        for(j=0;j<16;j++) {
                            printf("%c ",read_ext_eeprom(i*16 +j) );
                        }
                        printf("|| %3x0
",i );                  
                     }
                     puts("
Lectura finalizada!" );
                     break;
         default:      puts("Opcion incorrecta, para ver Menu pulse 0    VsZeNeR"06" );   
      }
    puts("****************************************************
"Giño;
    enable_interrupts(global);      //activamos de nuevo la interrupcion serial rs-232
}

void main(void)
{
   setup_oscillator(OSC_4MHZ);      //reloj interno de 4MHz
     enable_interrupts(int_rda);      //activo interrupcion serial rs-232
      enable_interrupts(global);      //habilito la interrupcion
      
      init_ext_eeprom( );
         
   do{            //bucle...
      puts("Lectura/Escritura de EEPROM 24LC256    VsZeNeR"06
" );      //menu...   
      puts("==============================================
" );
      puts("Seleccione opcion:
" );
      puts("¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨" );
      puts("   0->Ver opciones" );
      puts("   1->LLenar buffer" );
      puts("   2->Lectura modo HEX" );
      puts("   3->Escritura EEPROM" );
      puts("   4->Lectura modo TEXTO" );                           //...principal
      menu=1;                     //muestra menu solamente una vez
      while(menu==1){ }            //espera tecla pulsada por teclado(rs-232)
   }while(TRUE);   //...infinito
}
///FUNCION QUE SELECCIONA DIGITO CORRESPONDIENTE
BYTE gethex1( ) {
    char digit;
   
   do{                  //espera hasta tener un dato correcto
       digit = getc();
       if(opcion==0)      //si estamos introduciendo un dato no hace falta las restricciones
          break;
    }while((digit<"0" || digit>"9") && (digit<"A" || digit>"F") && (digit<"a" || digit>"f" ));

   putc(digit);            //muestra por pantalla el dato introducido

   if(digit<="9" )         //se ha introducido un numero
     return(digit-"0" );
   else                  //se ha introducido una letra
     return((toupper(digit)-"A" )+10);
}
///FUNCION QUE DEVUELVE EL NUMERO HEXADECIMAL
BYTE gethex() {
   int lo,hi;

   hi = gethex1();      //parte alta
   lo = gethex1( );      //parte baja
   if(lo==0xdd)
     return(hi);
   else
     return( hi*16+lo );
}

Bueno, pues aqui esta!

Suerte!!!Giño
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
RE: Ejemplitos en C para 16F648A
« Respuesta #212 en: 31 de Enero de 2006, 05:08:00 »
Desde el siguiente enlace os podeis descargar lo necesario para el programa anterior: Interrupcion RS232. Escritura/lectura eeprom 24LC256


Suerte!!! :wink:
« Última modificación: 25 de Mayo de 2006, 11:22:11 por vszener »
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado copertun

  • PIC10
  • *
  • Mensajes: 12
RE: Ejemplitos en C para 16F648A
« Respuesta #213 en: 02 de Febrero de 2006, 14:30:00 »
Wenas, lo primero de todo queria felicitar a vszener por el excelente trabajo q esta haciendo, estoy empezando ahora a mirar los ejemplos y la verdad se entienden muy bien y parece bastante sencillo porgramar en c un pic supongo q el hecho de q yo ya sabia c antes de llegar aqui ayudara a entender las cosas, pero resulta q a la hora de ponerme a escribir los programas pues no sabia donde escribirlos, finalmente ya encontre un manual y he logrado escribir los programas pero he aqui mi problema q la version demo no posee el header file del 16f648a, asi q si alguno de vosotros me lo pudiera mandar aqui a eos_es@yahoo.es o decirme donde lo puedo conseguir se lo agradeceria.

Un saludo.

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
RE: Ejemplitos en C para 16F648A
« Respuesta #214 en: 05 de Febrero de 2006, 10:59:00 »
GRACIAS copertun!!!ya te mande un e-mail!

Decir que en herramientas se ha incorporado la direccion a programas en vb6 utiles para los programas de este post!

Suerte!!!Giño
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
RE: Ejemplitos en C para 16F648A
« Respuesta #215 en: 05 de Febrero de 2006, 11:05:00 »
Buenasss!!!bien, el sigiente programa es simplemente manejar el dispositivo SAA1064 de Philips, el cual sirve para manejar display"s de 7segmentos mediante bus I2C, tanto para la libreria del dispositivo para CCS como para PROTEUS lo podeis encontrar en el siguiente post:
Libreria: SAA1064 (CCS)
El SAA1064 es util para ahorrar pines del pic(ya que solamente usa 2 para manejo del I2C), dicho dispositivo puede actuar tanto en modo dinamico(manejando un total de 4 display"s multiplexados), como en modo estatico(solamente 2 display"s), puede controlar la iluminosidad, parpadeo,...mirar el enlace anterior donde esta el data sheet!, bueno el ejemplo es manejar el SAA1064 en modo dinamico:
////////////////////////////////////////////////////////////////////////////////////
//                     VsZeNeR"06      
//                     29/Enero/06
//
//   Programa:   Manejo del dispositivo SAA1064 en modo DINAMICO
//   Version:   0.0
//
//   Dispositivo: PIC 16F648A         Compilador:    CCS vs3.242
//   Entorno IDE: MPLAB IDE v7.30      Simulador:    Proteus 6.7sp3
//
//   Notas: Este programa muestra pos cuatro display"s de 7seg mensajes de texto, para
//         ello usamos el dispositivo SAA1064 de bus I2C.
//
//         Conexiones:      A0 -> SDA saa1064            
//                     A1 -> SCL saa1064   
//////////////////////////////////////////////////////////////////////////////////

#include <16f648a.h>               //pic a utilizar          
#fuses XT,NOWDT,NOPROTECT,PUT,NOLVP      //ordenes para el programador
#fuses INTRC                     //oscilador interno
#use delay (clock=4000000)            //Fosc=4Mhz
#define SAA1064_DINAMICO            //trabajar en modo dinamico el saa1064
#define SAA1064_SCL PIN_A1            //definicion de pines...
#define SAA1064_SDA PIN_A0            //...de manejo del saa1064
#include <vs_saa1064.c>               //libreria saa1064

///PROGRAMA
void main(void)
{
   setup_oscillator(OSC_4MHZ);   //configuracion del oscilador interno a 4MHz
   
   saa1064_init();            //inicializo saa1064
   
   do{         //bucle...
      ///MANIPULAMOS SAA1064 CON DIVERSAS CONFIGURACIONES
      saa1064_conf(0b00010001);         //3mA & NO parpadeo & Dinamico
      saa1064_putc(0x76,0x3F,0x38,0x77);   //HOLA
      delay_ms(1500);
      
      saa1064_conf(0b00100011);         //6mA & parpadeo 1&3 & Dinamico
      saa1064_putc(0x71,0x5C,0x50,0x5C);   //Foro
      delay_ms(1500);
      
      saa1064_conf(0b01000101);         //12mA & parpadeo 2&4 & Dinamico
      saa1064_putc(0x78,0x5C,0x5E,0x5C);   //todo
      delay_ms(1500);
      
      saa1064_conf(0b00110111);         //9mA & parpadeo TODO & Dinamico
      saa1064_putc(0x73,0x30,0x39,0x86);   //PIC!
      delay_ms(1500);
      
      saa1064_conf(0b01110001);         //21mA & NO parpadeo & Dinamico
      saa1064_putc(0x5B,0x3F,0x3F,0x7D);   //2006
      delay_ms(1500);
      
      ///MANIPULAMOS SAA1064 A CONFIGURACION FIJA -> CAMBIAMOS SOLAMENTE DIGITO DESEADO
      saa1064_conf(0b01110001);         //21mA & NO parpadeo & Dinamico ->Configuracion fija!
      saa1064_putc(0x76,0x3F,0x38,0x77);   //HOLA -> texto donde trabajar!
      delay_ms(1500);
      
      saa1064_subaddress(1,0xFF);         //Pongo en el 1º digito el caracter 8.
      delay_ms(1500);
      saa1064_putc(0x76,0x3F,0x38,0x77);   //reset -> HOLA
      
      saa1064_subaddress(2,0xFF);         //Pongo en el 2º digito el caracter 8.
      delay_ms(1500);
      saa1064_putc(0x76,0x3F,0x38,0x77);   //reset -> HOLA
   
      saa1064_subaddress(3,0xFF);         //Pongo en el 3º digito el caracter 8.
      delay_ms(1500);
      saa1064_putc(0x76,0x3F,0x38,0x77);   //reset -> HOLA
      
      saa1064_subaddress(4,0xFF);         //Pongo en el 4º digito el caracter 8.
      delay_ms(1500);
      saa1064_putc(0x76,0x3F,0x38,0x77);   //reset -> HOLA
      
   }while(TRUE);   //...infinito
   }

Este programa simplemente es para mostrar como manejar la libreria vs_saa1064.c para el manejo del dispositivo! si teneis alguna duda del programa o la libreria, ya sabeis!


Suerte!!! :wink:
« Última modificación: 25 de Abril de 2006, 19:12:25 por vszener »
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
RE: Ejemplitos en C para 16F648A
« Respuesta #216 en: 05 de Febrero de 2006, 11:09:00 »
Aqui os podeis descargar los archivos del programa anterior: SAA1064 en modo DINAMICO


Suerte!!! :wink:
« Última modificación: 25 de Mayo de 2006, 11:23:28 por vszener »
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado monopic

  • PIC10
  • *
  • Mensajes: 25
RE: Ejemplitos en C para 16F648A
« Respuesta #217 en: 08 de Febrero de 2006, 13:56:00 »
hola v zener te acuerdas de mi bueno pues pense en dejar en espera lo de la lcd 2x16 lo de que la queria volver grafica ,, bueno pues me compre una lcd grafica y me funciona muy bien utilizando la libreria glcd de picc ,, bueno solo queria preguntarte si sabes utilizar el programa que convierte imagenes en vectores de datos para visualizarlos en la lcd,, ese es mi unico problema y como seria la forma de escribirlo en picc para que pinte los pixeles... todo esto seria de gran ayuda para luego explicar a todos en el foro como utilizar la libreria glcd que ademas me simula perfecto en proteus .. gracias de antemano .....

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
RE: Ejemplitos en C para 16F648A
« Respuesta #218 en: 09 de Febrero de 2006, 03:55:00 »
Buenass!!!ke tal monopic!ummmm supongo que habra programas que te den matrices de puntos correspondiente a una imagen...una vez, hace tiempo ya, en MATLAB, hacia eso, le dabas una imagen y te devolvia la matriz, pero de momento no he trabajado con matrices graficas, haber si la semana que viene que tengo "minis vacaciones" le meto mano y te cuento haber que tal, pero creo recordar, que en PROTEUS, hay un ejemplo o varios de matrices graficas, miratelos haber como lo hacen, yo me pondre al lio la semana que viene!

Suerte!!!Giño
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
RE: Ejemplitos en C para 16F648A
« Respuesta #219 en: 09 de Febrero de 2006, 03:59:00 »
Holaaa!!!Bueno, trabajando un poco mas con la libreria del SAA1064, el siguiente ejemplo quiere mostrar como trabajar con las funciones de dicha libreria para modo ESTATICO, es decir, simplemente manejaremos dos display"s de 7 segmentos, aqui el programa:

////////////////////////////////////////////////////////////////////////////////////
//                     VsZeNeR"06      
//                     29/Enero/06
//
//   Programa:   Manejo del dispositivo SAA1064 en modo ESTATICO
//   Version:   0.0
//
//   Dispositivo: PIC 16F648A         Compilador:    CCS vs3.242
//   Entorno IDE: MPLAB IDE v7.30      Simulador:    Proteus 6.7sp3
//
//   Notas: Este programa muestra por dos display"s de 7seg numeros, para
//         ello usamos el dispositivo SAA1064 de bus I2C.
//
//         Conexiones:      A0 -> SDA saa1064            
//                     A1 -> SCL saa1064   
//////////////////////////////////////////////////////////////////////////////////

#include <16f648a.h>               //pic a utilizar          
#fuses XT,NOWDT,NOPROTECT,PUT,NOLVP      //ordenes para el programador
#fuses INTRC                     //oscilador interno
#use delay (clock=4000000)            //Fosc=4Mhz
#define SAA1064_SCL PIN_A1            //definicion de pines...
#define SAA1064_SDA PIN_A0            //...de manejo del saa1064
#include <vs_saa1064.c>               //libreria saa1064

///PROGRAMA
void main(void)
{
   setup_oscillator(OSC_4MHZ);      //configuracion del oscilador interno a 4MHz
   
   saa1064_init( );               //inicializo saa1064
   
   do{         //bucle...
      ///MANIPULAMOS SAA1064 CON DIVERSAS CONFIGURACIONES
      saa1064_conf(0b00010000);   //3mA & NO parpadeo & Estatico
      saa1064_putc(0x66,0x3F);   //40
      delay_ms(1500);
      
      saa1064_conf(0b00100010);   //6mA & parpadeo & Estatico
      saa1064_putc(0x4F,0x06);   //31
      delay_ms(1500);
      
      saa1064_conf(0b01000100);   //12mA & parpadeo & Estatico
      saa1064_putc(0x5B,0x5B);   //22
      delay_ms(1500);
      
      saa1064_conf(0b00110110);   //9mA & parpadeo & Estatico
      saa1064_putc(0x06,0x4F);   //13
      delay_ms(1500);
      
      saa1064_conf(0b01110000);   //21mA & NO parpadeo & Estatico
      saa1064_putc(0x3F,0x66);   //04
      delay_ms(1500);
      
      ///MANIPULAMOS SAA1064 CON CONFIGURACION FIJA -> CAMBIAMOS SOLO UN DIGITO
      saa1064_conf(0b00010000);   //3mA & NO parpadeo & Estatico -> configuracion fija!
      saa1064_putc(0x3F,0x3F);   //00 -> texto donde trabajar!
      delay_ms(1500);
      
      saa1064_subaddress(1,0xff);   //cambio el 1º digito por 8 ->08
      delay_ms(1500);
      saa1064_putc(0x3F,0x3F);   //restauro -> 00
      
      saa1064_subaddress(2,0xff);   //cambio el 2º digito por 8 ->80
      delay_ms(1500);
      
   }while(TRUE);   //...infinito
}


Pues ya esta explicada la libreria del dispositivo SAA1064 con los dos programitas, tanto para modo dinamico como pa modo estatico...

Hasta otra!!!Giño
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
RE: Ejemplitos en C para 16F648A
« Respuesta #220 en: 09 de Febrero de 2006, 04:01:00 »
Buenass!!! os podeis descargar el programa anterior: SAA1064 modo ESTATICO


Suerte!!! :wink:
« Última modificación: 25 de Mayo de 2006, 11:24:15 por vszener »
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado copertun

  • PIC10
  • *
  • Mensajes: 12
RE: Ejemplitos en C para 16F648A
« Respuesta #221 en: 18 de Febrero de 2006, 17:50:00 »
Wenas, como va eso amigos?, os queria comentar un trabajito en el q toy pensando, consiste en medir la temperatura con el ds1620 basandome en el ejemplo de vszener y despues mediante una salida del pic controlar un calefactor, algo no muy dificil yo creo, epro al ver el ejemplo de vszener me han surgido unas dudas q os paso a comentar.

No pillo bien pq hay q enviar estos bytes para mostrar el simbolo de grado {0b00000110,0b00001001,0b00000110}.

Luego a la hora de leer la temperatura a mi lo q me gustaria seria poderla enviarla a unos displays, asi q lo q habia pensado era leera y escribirla en la eeprom del pic y despues mandarla a los displays, pero no se me ocurre como almacenar de forma temporal el dato de la lectura para poder mandarlo despues a la eeprom.

Weno pos muchas gracias a todos, y dar las gracias a vszener por los excelentes ejemplos, y weno felicitarte tb q me he fijado y hoy 02-19-06 haces un añito q perteneces a esta comunidad jejej, asi q felicidades maestro.


Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
RE: Ejemplitos en C para 16F648A
« Respuesta #222 en: 19 de Febrero de 2006, 06:41:00 »
Buenas!!!Haber por partes:
Con respecto a lo del simbolo del grado, pues es faicil, se mandan esos datos a la cgram de la lcd para crear el simbolo del grado (este ºGiño ya que el chip de la lcd no lo tiene incluido, aunque el amigo nocturno en un post escribio esto:
Codigo:

Si es una LCD compatible con Hitachi HD44780 tendrás que enviarle el ASCII 224 (decimal) para que muestre ese símbolo


De las dos formas se puede mostrar el simbolo del grado en la lcd, pero vamos si tu lo vas a mostrar en 7seg no te hace falta eso....

Lo de almacenar de forma temporal la temperatura no se bien a lo que te refieres, si te refieres a leerla y guardarla en la eeprom interna del pic es sencillo, simplemente guardala, el ejemplito 51 dice como guardar y leer en la eeprom interna del pic, ahora bien si antes de guardarla en la eeprom la quieres mantener en algun otro lado, pues simplemente en la variable que hayas declarado estara almacenada su valor.

GRACIAS!!!es verdad que ya tengo un añin aqui!jeje


Suerte!!!Giño
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado copertun

  • PIC10
  • *
  • Mensajes: 12
RE: Ejemplitos en C para 16F648A
« Respuesta #223 en: 19 de Febrero de 2006, 09:52:00 »
Gracias por responder vszener y ademas tan rapido, he estado mirando otra vez los ejemplos de leer de la eeprom y parece facil simplemente tendria q ahce run codigo como este no?

int temp, LAST_VOLUME; //variable donde guardo la temperatura

temp = read_ds1620(0xAA) //y ya tengo en la variable temp la temperatura
write_eeprom(LAST_VOLUME,temp);

Y ahora en la variable temp tendria un dato hex que tendra segun el datasheet del ds1620 9 bits, y ahora mi pregunta es como puedo convertir esos 9 bits a decimal y enviarlos a los displays?. Tambien se me ha ocurrido poner en una tabla los diferentes posibles valores q voy a leer y con sucesivos if poner en los displays la temperatura y asi no tener q convertirlos a decimal, es decir si yo leo el valor $19 pues mando a los displays el valro 25, y asi con todas las posibles temperaturas que pueda obtener que tampoco creo q sean muchas.

Y muchas gracias de nuevo vszener.





Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
RE: Ejemplitos en C para 16F648A
« Respuesta #224 en: 01 de Marzo de 2006, 17:10:00 »
Buenas!!!!ando algo perdido pero bueno....siempre regreso a casa!jeje haber, amigo copertun, respecto a la eeprom exactamente como dice el ejemplo y el trozo de programa que has posteado lo indica, es correcto, respecto al dato, si como bien dices es en hexadecimal asi que para representarlo en display de 7 seg deberas pasarlo a decimal, la forma de pasarlo pues facil, una funcion que pase de hex a decimal, puedes hacerla mediante tabla, declaras una tabla con todos los valores posibles y ya esta(aunque bueno esta opcion aunque es rapida consume mas memoria...), la otra pues realizar la funcion correspondiente, pasas el dato a binario y de binario a decimal y listo para representarse en el display de 7seg!


Suerte!!!Giño
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte


 

anything