Autor Tema: lectura-escritura de ibutton  (Leído 44462 veces)

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

Desconectado homfly

  • PIC12
  • **
  • Mensajes: 77
Re: lectura-escritura de ibutton
« Respuesta #45 en: 03 de Enero de 2007, 21:05:59 »
GRACIAS TIO¡¡, lo he entendido todo, menos if (tabla[j][k]!=buffer[6-k]) esto. El buffer[6-k] porque es asi?Explicamelo que quiero aprender. Hemos estao 3 personas, 2 de ellas que saben c....y no lo sacabamos. Estabamos mas o menos encaminaos comparando con iguales y tal, pero...el buffer[6-k] ma matao¡¡¡

Ya se que tengo que practicar mas, he hecho 2 programas solo, el de ic2 y este. no se puede construir la casa por el tejado, pero...he aprendido bastante. Seguramente vendre otro dia con mas dudas, pero a ver si termino los examenes y tengo tiempo de ponerme mas en fondo con esto.

Y gracias. Quiero cambiar unas cosillas, de asignar a cada vector un nombre para sacarlo por pantalla y ponerle las librerias LCD, que ya se hacerlo.

POr cierto duende_azul, porque tu esquema es mas simple que el que me dio ascii con transistores que ya he pedido y todo por internet, y ahora en la simulacion el tuyo con 2 resistencias funciona y el otro no??

muchas gracias¡¡

Desconectado Duende_Azul

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 908
Re: lectura-escritura de ibutton
« Respuesta #46 en: 03 de Enero de 2007, 21:32:38 »
el detalle esta en que el programa de ejemplo TOUCH.C  guarda los bytes del serial del IButton al contrario de como los pusiste tu en la tabla, entonces lo que tienes que hacer es comparar el elemento 0 de tu tabla con el elemento 6 del codigo del ibuttom; a medida que k se incrementa, el indice de Buffer disminuye.

Con respecto a lo del otro esquema, pues yo soy de los que piensan ¿para que poner 2 cables si con uno basta?  :D , no he probado el otro esquema pero viendolo por encima se ve que el codigo del ejemplo que estas usando no va a funcionar pues en dicho esquema se requieren dos lineas de datos.
« Última modificación: 03 de Enero de 2007, 21:41:40 por Duende_Azul »

Desconectado homfly

  • PIC12
  • **
  • Mensajes: 77
Re: lectura-escritura de ibutton
« Respuesta #47 en: 03 de Enero de 2007, 21:38:41 »
mira que hasta pense en eso, pero como lo mostraba por pantalla bien, pues digo, la comparacion ya esta puesta del sentido correcto. Pero claro, en el if de la comparacion comparaba el primer byte del vector de la tabla con el ultimo.  asi en la vida son iguales. Y lo que has hecho tu es empezar la comparacion del buffer por el final. Vale, lo demas si lo tengo todo entendido. Mañana me pondre a depurar si se puede depurar y a dejarlo medio presentable.

Muchas gracias¡¡

Y lo del circuito?porque puede ser que el tuyo que es mucho mas simple funcione y el otro que viene de la pagina de dallas como esquema de read (lectura), no sirva??

buenas noches¡¡
« Última modificación: 03 de Enero de 2007, 21:40:23 por homfly »

Desconectado Duende_Azul

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 908
Re: lectura-escritura de ibutton
« Respuesta #48 en: 03 de Enero de 2007, 21:44:20 »
Que yo sepa, la gracia del bus one-wire es justamente esa; usar solo una linea para comunicacion...

Desconectado ascii

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 131
Re: lectura-escritura de ibutton
« Respuesta #49 en: 04 de Enero de 2007, 16:26:13 »
 :( Al tratar de simular el crto. con una resistencia a VCC en el proteus 6.9 sp4 me marca un error como el que se ve en la foto....duende azul sabes a que se debe eso???

 

Desconectado homfly

  • PIC12
  • **
  • Mensajes: 77
Re: lectura-escritura de ibutton
« Respuesta #50 en: 04 de Enero de 2007, 16:53:24 »
pon que se vea el esquema, que lo tapa el mensaje, a ver lo que tienes puesto. Yo al final uso el esquema de duendeazul que es mucho mas corto.aunque ya tengo pedidos los dichosos transistores, porque tu esquema ascii, no me furula.

Ya tengo hecho la lcd, los leds, un zumbador de aviso le puesto, y me falta el rele, que casi lo termino. pero pongo el pin donde esta el rele en alta dentro de la condicion de OK, y no salen 5V, ni de cerca.Salen 0v. Asi no se excita ni.... Alomejor es que en casa de los reles, se usa de otra forma. Yo he usado este esquema para el rele

http://www.todopic.com.ar/foros/index.php?topic=10992.msg61583#msg61583

Desconectado homfly

  • PIC12
  • **
  • Mensajes: 77
Re: lectura-escritura de ibutton
« Respuesta #51 en: 04 de Enero de 2007, 21:00:21 »
ya lo tengo casi terminado. Simplemente me he empeñado en que tenga los ibuttons personalizados, es decir, un ibutton mi padre, otro mi madre otro yo...etc y segun quien los use y entre en el control de acceso salga un mensaje en pantalla, bienvenido jose, antonio...etc.


aqui tengo el programa y en negrita lo que he añadido para esto, que nose donde puede fallar. Ya es simple curiosidad, porque el programa va de escandalo. ya que nos ponemos lo hacemos perfecto para exposicion:

lo he hecho por comparacion de cadenas: cadena vuelca y buffer que es el vector nº ibutton que leo. Si hay alguna otra forma...
Poco a poco ya voy aprendiendo algo de C:

#include <16f876.h>                          // Definiciones del PIC 16F876A
#include <stdlib.h>
#include <string.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT  // Los Fuses de siempre
#use delay(clock=4000000)                     // Oscilador a 4 Mhz
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)// RS232 Estándar
#define use_portb_lcd TRUE         //definir portb lcd
#use fixed_io(a_outputs=PIN_a0,PIN_a1)
#include <lcd.c>                  //libreria manejo lcd
#include <touch3.c>



void main() {
   char buffer[8];
   int j,k,iguales=0,i,z;


   char vuelca[6];
   char tabla[4][6]={{0x00,0x00,0x10,0x12,0x79,0x00},             //Para cambiar nº ibutton acceso
                     {0x00,0x00,0x10,0x14,0xB1,0x3D},
                     {0x00,0x00,0xFF,0xFF,0xFF,0xFA},              // J Y VECTOR-Hay 4 cambios de J //
                     {0x00,0x00,0xFF,0xFF,0xFF,0xFB}};
while (true)
{
    lcd_init();
    printf(lcd_putc,"    Esperando
    ibutton...\r\n");
    delay_ms(650);                                      //DUDA CON ESTE TIEMPO

    while(!touch_present()) ;                           //El ibutton esta en el lector
           delay_ms(200);

     if(touch_present()) {
         touch_write_byte(0x33);                         //Escribo en la posicion 0x33 el nº serie
         for(i=0;i<8;++i)
         buffer=touch_read_byte();                    //leo el nº de serie
                                                         // for(i=6;i!=0;i--)
                                                         // para visualizar su nº de serie// printf("%2X",buffer);
                                                         //printf("\r\n");
                                                         //delay_ms(100);
                                                         //printf("%2X%2X%2X%2X%2X%2X\r\n",tabla[0][0],tabla[0][1],tabla[0][2],tabla[0][3],tabla[0][4],tabla[0][5]);
                                                         //delay_ms                  (200);
                          }


            i=0;                                       //inicializo vectores
            j=0;
               while (j<4){                     //   J   //
               for(k=0;k<6;k++){                         //se mueve a lo largo de cada vector
                   if (tabla[j][k]!=buffer[6-k])         //Comparamos vectores-tabla inicio con buffer final-k, dandole
                                                         //...la vuelta, xk vector buffer empieza x el final. Si son distintos...
                     {
                   iguales=1;
                   j++;                                  //paso al siguiente vector y...
                   i=0;                                  //inicializo vector buffer
                   break;
                     }
                        else{
                          iguales=0;                      //si son iguales...
                          i++;                            //incremento vector buffer
                          if (i==6) j=4;              //   J  //  Hasta que llega al maximo el vector y la tabla
                           }
                                    }
                  }




lcd_init();                                                    //inicializo de nuevo la lcd

if(iguales==0){                                                //si iguales=0 entonces se cumple, OK¡


   set_tris_a(0xFE);                                           //porta como salida, pin_A0, PIN_A1
   disable_interrupts(GLOBAL);                                 //todas las interrupciones desactivadas

            //ibutton correcto Mensaje-led verde-1beep //

       printf(lcd_putc,"   Bienvenido\r\n");
       delay_ms(100);

z=0; for(k=6;k>0;--k){vuelca[z]=tabla[0][k];z++;}
if(strcmp(buffer,vuelca )==0) printf(lcd_putc,"Hola jose");
else{z=0; for(k=6;k>0;--k){vuelca[z]=tabla[1][k];z++;}}
if(strcmp(buffer,vuelca )==0) printf(lcd_putc,"Hola Lola");
else{z=0; for (k=6;k>0;--k){vuelca[z]=tabla[2][k];z++;}}
if(strcmp(buffer,vuelca )==0) printf(lcd_putc,"Hola Padre de Jose");
else{z=0; for(k=6;k>0;--k){vuelca[z]=tabla[3][k];z++;}}
if(strcmp(buffer,vuelca )==0) printf(lcd_putc,"Hola madre de Jose");



          output_high(PIN_A0);                                  //led on
          output_high(PIN_B3);                                  //activa buzzer 2 veces(beep)
          delay_ms(450);                                        //tiempo de escucha del beep
          output_low(PIN_B3);                                   // buffer off
          delay_ms(5000);
          output_low(PIN_A0);                                   // Led off

    }

      else{
         printf(lcd_putc,"Acceso Denegado\r\n");

         //Secuencia de luces y sonidos//

         output_high(PIN_a1);                               //led on
         output_high(PIN_B3);                               //activa buzzer 2 veces(beep)
         delay_ms(150);                                     //tiempo de escucha del beep
         output_low(PIN_a1);                                //led off
         output_low(PIN_B3);                                //buffer off
         delay_ms(150);
         output_high(PIN_a1);
         output_high(PIN_B3);
         delay_ms(150);
         output_low(PIN_a1);
         output_low(PIN_B3);
         delay_ms(150);
         output_high(PIN_a1);
         output_high(PIN_B3);
         delay_ms(150);
         output_low(PIN_a1);
         output_low(PIN_B3);
         delay_ms(150);
         output_high(PIN_a1);
         delay_ms(4000);
         }


   }
}


Desconectado ascii

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 131
Re: lectura-escritura de ibutton
« Respuesta #52 en: 04 de Enero de 2007, 23:01:25 »
Muy bien homfly el esquema que trate de simular es el esquema que planteo duende azul, el mio que plantie de los transistores nunca lo probe en simulacion, lo probe directo a la placa. Lo de los ibutton puedes mandar a pedir unos samples en la pagina de maxim, lo que si el conector donde se pone el ibuton no lo encontre como sample. :D

Desconectado Duende_Azul

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 908
Re: lectura-escritura de ibutton
« Respuesta #53 en: 05 de Enero de 2007, 01:40:20 »
ascii, ese error me salió hace tiempo y creo que reinstalando el proteus se arregló, la verdad no recuerdo bien como fue la cosa.
Por cierto, Maxim me envió como sample el zócalo para la lectura de los ibutton asi que revisa bien  :)

Desconectado Duende_Azul

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 908
Re: lectura-escritura de ibutton
« Respuesta #54 en: 05 de Enero de 2007, 01:44:14 »
homfly, lo que tienes que hacer es tomar el valor de j  cuando se haga una comparacion exitosa, asi sabes con cual de los 4 codigos almacenados coincidio el ibutton leido, por supuesto, tendras que colocar el valor de J a otra variable antes de hacer j=4:


           j=0;
               while (j<4){                     //   J   //
               for(k=0;k<6;k++){                         //se mueve a lo largo de cada vector
                   if (tabla[j][k]!=buffer[6-k])         //Comparamos vectores-tabla inicio con buffer final-k, dandole
                                                         //...la vuelta, xk vector buffer empieza x el final. Si son distintos...
                     {
                   iguales=1;
                   j++;                                  //paso al siguiente vector y...
                   i=0;                                  //inicializo vector buffer
                   break;
                     }
                        else{
                          iguales=0;                      //si son iguales...
                          i++;                            //incremento vector buffer
                           if (i==6){
                              quien=j;     <------------Te dice con cual vector coincidio el ibutton     
                               j=4; }             //   J  //  Hace J = a 4 para salir del bucle
                           }
                                    }
                  }


luego segun el orden (eso lo sabras tu)  haces por ejemplo:

        switch (quien){

        case 1 : mensaje="Hola papa mio de mi";
                    Break;
        case 2 : mensaje="Hola Yo mismo";
                    Break;

        Default:mensaje="No te conozco";
                   Break;
        }

        printf(lcd_putc,mensaje);   (no estoy seguro si la sintaxis del printf es correcta pero algo asi es  :lol: )
« Última modificación: 05 de Enero de 2007, 01:55:17 por Duende_Azul »

Desconectado ascii

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 131
Re: lectura-escritura de ibutton
« Respuesta #55 en: 05 de Enero de 2007, 03:59:44 »
Gracias duende voy a reinstalar el programa, otra cosa que nombre tiene la serie para el zocalo que te enviaron??? :-/,..saludos

Desconectado homfly

  • PIC12
  • **
  • Mensajes: 77
Re: lectura-escritura de ibutton
« Respuesta #56 en: 05 de Enero de 2007, 06:47:33 »
oks duende azul, le voy a exar un vistazo

Ascii, vamos a ver. De los ibutton hay muchos samples. Yo he pedido el mas simple que hay que es el ds1990a F5 solo de identificacion.

Los F5 son mas grandes que los F3(es una etiqueta que le ponen ellos).Eso teines que tenerlo en cuenta para pedir el lector que tambien hay de F5 y de F3, oks?

Aqui estan todos los ibutton, que claro esta, de todos no te dan, y menos de los de humedad,temperatura....
http://www.maxim-ic.com/products/ibutton/products/ibuttons.cfm
Estos son los lectores:
http://www.maxim-ic.com/products/ibutton/products/readers_probes_ports.cfm. Yo pedi el primero que hay
Estos son los llaveritos:
http://www.maxim-ic.com/products/ibutton/products/mounts.cfm
de estos yo pedi el ds9093a que sirve para los f5 (AB  es azul, AR es rojo...)

Para pedir te vas arriba ala pestaña de Buy.Bajas un poco y le das a BUY ON LINE. Te saldran arriba otras pestañas dale a sample cart (todo esto tienes que estar registrado claro). y abajo vas buscando las referencias:

ibutton:ds1990a (F3 o F5, yo tengo F5)  y le das a sample now
LECTOR:ds9092+
llaveritos:ds9093a  (Te pides 2 de cada color si quieres)

Cuando los tengas todos, a sample cart otra vez y le pones las cantidades que quieras...
Luego ala hora de pedir mucho ojo, teines que ponerle en anual usage: <1000 y al pedirlo ponle que eres ingeniero de diseño o cosas asi (escribeselo en ingles)

Yo lectores tengo ya 4 creo, e ibutton 14, uno de ellos de 1024Kb de memoria que ya me hara falta cuando aprenda a escrbir en ellos. Ami me mandan los samples de 2 en 2 siempre, hasta que se cansen de mi y me manden a tomar por saco.

Espero que te haya servido aunque la mayoria seguro que lo sabias¡¡ Ya que estaba he hecho un pequeño manual para la gente que venga de atras y quiera usarlo.


Hasta luego

Desconectado ascii

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 131
Re: lectura-escritura de ibutton
« Respuesta #57 en: 05 de Enero de 2007, 13:40:59 »
gracia homfly yo ya habia pedido unos samples pero solo los ibutton DS1990A-F5.  :D

Desconectado ascii

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 131
Re: lectura-escritura de ibutton
« Respuesta #58 en: 05 de Enero de 2007, 13:44:51 »
Hace un tiempo cuando trabaje con los ibutton compre el lector que bruto no ??   :D

Desconectado homfly

  • PIC12
  • **
  • Mensajes: 77
Re: lectura-escritura de ibutton
« Respuesta #59 en: 05 de Enero de 2007, 15:10:04 »
duende, ya he mirado lo que me mandaste y tenia esa idea, pero pense q era mas largo. Hacerco con case... Lo que pasa que la salida la que me mandaste no funciona. Es decir, el vector j q son los ibutton son 4, es decir, case 0, case1,2,3. Con la condicion de YES que se abra la puerta estan correctas, cada ibutton con su nombre y OK. Pero cuando la contraseña no es correcta aparece el mensaje del case 0 siempre y no el mensaje de ERROR.

switch (quien){

        case 0 : printf(lcd_putc,"Bienvenido
        JOSE");

                    Break;
        case 1 :printf(lcd_putc,"Bienvenido
        Pepe");

                    Break;
        case 2 : printf(lcd_putc,"Bienvenido
        Lola");

                    Break;
        case 3 : printf(lcd_putc,"Bienvenido
        Dolores");

                    Break;

        default: printf(lcd_putc,"error");    // Esta debe de ser el mensaje cuando no es correcto. El led rojo de ERROR si me sale, lo unico que falla es el mensaje en pantalla que no sale error sino que pone BIENVENIDO JOSE, a pesar de que la contraseña no es la correcta, me explico? Cuando la contraseña es correcta, todo perfecto. Alomejor me falta un } o cambiar el  default. Lo mirare y mañana os cuento.
        break;


 

anything