TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: homfly en 08 de Diciembre de 2006, 15:35:14
-
Hola, kiero hacer un control de acceso con ibutton, y kisiera q me proporcionarais toda la informacion q sepais o tengais respecto a lectura del nº de serie para luego procesarlo o de escritura en caso de tener ibutton eeprom.
gracias
-
¿por favor que? :?
-
como???
-
Hola, aqui tienes una nota de aplicacion de maxim :mrgreen:
http://www.maxim-ic.com/appnotes.cfm/appnote_number/2420
es lo unico que tengo por aqui....
Suerte!
Norberto
-
gracias, pero a eso ya le e exao un vistazo¡¡¡ buscare mas a ver
-
Si vas a usar el CCS, pues mirate el ejemplo EX_TOUCH.C, alli hacen la lectura del serial de un IButton, con el DS1990 del proteus funciona bello y la libreria (touch.c) tambien incluye las rutinas para leer y escribir en la eeprom.
Saludos.
-
ok, pues voy a buscarlo, a ver que tal. aunque yo solo quiero leer el serial, porque escribir en el no puedo porque es solo de ID.
gracias de todas formas, si alguien mas tiene algo(esquema para el control de acceso...nuevas ideas de diseño originales,etc...se agradece
-
Hola
Eso lo he visto yo funcionando a unos chicos de la universidad de granada
La verdad es que me da la sensacion de que es un sistema poco robusto para un control de accesos habiendo otro tipo de tecnologías
Saludos desde Granada
-
Esos chicos de granada son amigos mios, y de ahi he sacado la idea. isharp, eres de granada???
Y a k otro tipo de tecnologias, de uso personal t refieres para hacer un control de acceso q no sea ibutton, ni tarjetas, ni teclado???
-
Los sistemas biometricos, por ejemplo leer la huella dactilar.
-
ya, pero eso sale muxo mas caro q un control de acceso con ibutton. Lo habia pensao, pero ibutton, entre q pides samples y eso t sale tirado de precio. Los lectores de huellas cuestan mucho. Y yo lo quiero para uso personal , no es para una empresa ni nada. Lo de los ibutton lo hago como practica voluntaria a una asignatura de mi carrera
-
Son caros y mas dificiles de programar. EL Ibutton es bien interesante por el bus que utiliza, yo ya logre leer el serial con el ejemplo que te mensione anteriormente, ahora solo me falta escribir en su memoria interna.
-
yo lo hare con ibutton. Tambien estuve viendo el ejemplo, aunque pone que usa 3 pic??o es que tu coges el que quieras. yo solo quiero leer. Y el esquema de donde las sacado?
cuanto cuesta lo de la huella dactilar, economico¡¡
/////////////////////////////////////////////////////////////////////////
//// EX_TOUCH.C ////
//// ////
//// This program interfaces a Dallas DS1991 touch memory device. ////
//// It will display the family code and ID of any device that ////
//// "touch"es pin B0. ////
//// ////
//// Configure the CCS prototype card as follows: ////
//// Connect pin B0 through a 4.7K resistor to +5V ////
//// Connect the touch device to GND and then "Touch" to pin B0 ////
//// ////
//// Jumpers: ////
//// PCB pin A2 to RS232 RX, pin A3 to RS232 TX ////
//// PCM,PCH pin C7 to RS232 RX, pin C6 to RS232 TX ////
//// ////
//// This example will work with the PCB, PCM and PCH compilers. ////
//// The following conditional compilation lines are used to ////
//// include a valid device for each compiler. Change the device, ////
//// clock and RS232 pins for your hardware if needed. ////
/////////////////////////////////////////////////////////////////////////
//// (C) Copyright 1996,2003 Custom Computer Services ////
//// This source code may only be used by licensed users of the CCS ////
//// C compiler. This source code may only be distributed to other ////
//// licensed users of the CCS C compiler. No other use, ////
//// reproduction or distribution is permitted without written ////
//// permission. Derivative programs created using this software ////
//// in object code form are not restricted in any way. ////
/////////////////////////////////////////////////////////////////////////
ESTO NO LO ENTIENDO, IF DEFINE PCB INCLUDE 16C56, Y LUEGO EL PCM USA OTRO y para PCH OTRO. NO se cual tengo que usar¡¡
#if defined(__PCB__)
#include <16C56.h>
#fuses HS,NOWDT,NOPROTECT
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_A3, rcv=PIN_A2)
#elif defined(__PCM__)
#include <16F877.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
#elif defined(__PCH__)
#include <18F452.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
#endif
#include <touch.c>
void main() {
BYTE buffer[8];
BYTE i;
printf("\r\nWaiting for a touch device...\r\n");
while (TRUE) {
while(!touch_present()) ;
delay_ms(200);
if(touch_present()) {
touch_write_byte(0x33);
for(i=0;i<8;++i)
buffer=touch_read_byte();
printf("Family: %2X ID: ",buffer[0]);
for(i=6;i!=0;--i)
printf("%2X",buffer);
printf("\r\n");
delay_ms(1000);
}
}
}
-
No es que se use tres pic's, las instruciones #if son para el compilador, y se traducen de la siguiente manera:
En caso de que el programador defina el pic a usar el #include <16C56.h> pues se configura de la siguiente manera:
#fuses HS,NOWDT,NOPROTECT
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_A3, rcv=PIN_A2)
o en caso de que se defina el pic #include <16F877.h> pues se configura de lamanera que está establecida, en total, hay tres configuraciones para tres pic's diferentes.
Suerte!!! ;)
-
algo de eso entendi cuando lo vi, pero como no lo habia visto antes nunca, por eso he preguntado. Pero bueno, todo eso se puede quitar y poner un solo include, del pic que tu quieras usar con las propiedades que tu quieras y yasta, el cuerpo, es el mismo, para leer el nº de serie,no? Con lo demas se lee el nº de serie del ibutton?:-s
En esta pagina he visto algunos esquemas de lectura y/o escritura
http://pdfserv.maxim-ic.com/en/an/app74.pdf, pero nose cual coger
la figura 9 por ejemplo, la veo demasiado sencilla, que me decis
-
Claro, tú puedes poner el pic que quieras y su configuración correspondiente, el programa que has puesto es para el dispositivo DS1991, que lee el contenido de la memoria DS1991.
Suerte!!! ;)
-
ahora tengo que ver el datasheet y ver si para el ds1991 sirve tambien para el ds1990 que es el que tengo yo o seguramente tenga que cambiar algo.
Gracias
-
El compilador va a seleccionar la configuracion dependiendo del compilador seleccionado; asi pues si compilas con el PCB (micros de 12Bits) pues compila para 16C56; si seleccionas PCM (Micros de 14 bits) pues compila para 16F877 etc...
EL esquema que use en proteus consta de un pic 16F877a con una resistencia de 4,7K de B0 a Vcc y al pin de datos del Ibutton y un "virtual terminal" en en los pines Rx-Tx del micro
-
Imagen....
-
Por cierto, el esquema anterior lo monte fisicamente y lo probe usando un IButton DS1986 - F3 y funciono perfectamente.
-
bueno, la resistencia que tu dices de 4,7k, hay pone 10k, m imagino q esta mal. Y el hiperterminal, es cuestion luego de ponerle una lcd o lo que se quiera. Y tu usaste ese mismo esquema??sin añadirle nada mas funciona?Seria cuestion de ponerle un transformador 220-12v si lo usas con corriente alterna, pero el pic, ya no necesita mas nada?Es que un amigo mio tiene un control de acceso con ibutton y tienen muchas mas cosas el circuito, entonces por eso pregunto. Que tampoco veo que sea tan complejo, es solo leer y sacar por pantalla, pero nose...
La libreria del ibutton DS1990 de donde las sacado? Y el programa entonces tu usaste el ex_touch de la carpeta examples,no?aunque ese sea para el ds1991, pero he mirado el datasheet y es lo mismo que el ds1990A#f5 que es el que tengo yo.
Yo aqui pido samples hasta que se cansen de mi. Tengo 6 y otros 2 con 1024kb de memoria, ya le dare uso, y lectores unos 4.
-
EL ejemplo dice 4,7K pero con 10K funciona en la simulacion y en la vida real :)
El programa que use es el ejemplo compilado tal cual sin cambiar nada de nada e imagino que por compatibilidad (no he leido el datasheet en profundidad) el codigo de identificacion del Ibutton debe encontrarse en la misma posición de memoria en todos los ibutton.
-
y el simbolo para proteus del ibutton, donde las sacado? Y otra cosa, al programa habra que añadirle una tabla con el nº de serie de los ibutton que uno quiere que se acceda,no? Sino vale cualquier ibutton. Habria que añadirle la funcion que quiero que desempeñe, en mi caso, activar un rele, pero dependiendo si el nº de serie coincide con el que yo he programado o no, y eso en el programa no lo veoo soy tonto, que es otra posibilidad porque estoy comenzando con esto de los pics.
Yo si he mirado el data sheet y si sirve estos 2 ibutton y otros cuantos mas que estan en la tabla
-
EL Ibutton esta en el proteus 6.9 y lo que dices es cierto, debes tener una lista con los numeros de los Ibutton autorizados, si colocas un Ibutton en el lector y su numero está en dicha lista, pues accede sino lo rechazas.
-
En la implementación del hardware, uno especifica la dirección de cada elemento, y para acceder a él, tendremos que escribir en el bus su dirección.
Con respecto al resistor de 10k o 4k7, e slo mismo, son valores típicos de resistores de pull-up.
Suerte!!! ;)
-
oks¡¡, ahora me pondre a implementarlo, aver como queda. ya me pasaré por aqui. Tu lo has implementado duende_azul?y lo has puesto para que se pueda programar externamente??o cada vez que quieras añadir un ibutton, sacas el pic del circuito y lo vuelves a programar?? Y por ultimo, el ibutton, Vcc va alimentado con 12V? o con 5?
-
EL ibutton yo lo conecte a 5V con la resistencia de 10K.
Lo unico que hice fue leer el codigo del ibutton, aun me falta escribir en su memoria, de momento no tengo ninguna aplicacion entre manos para ese dispositivo.
-
entonces le metiste un regulador, 7805.yo la alimentacion ya la tengo a 12v.
Yo pedi 2 ibutton con memoria de 1024kb y me los mandaron., ya le dare utilidad, aver si se aprende a escribir
-
Siempre uso un 7805 para alimentar el pic y de ahi mismo tomo la del Ibutton.
-
Basicamente el circuito funciona mas o menos asi:
El PIC envía un pulso de reset de aproximadamente 480 us el cual es detectado por el iButton el cual envía hacia el PIC un pulso de presencia. Luego que el PIC detecta este pulso de presencia se envía la instrucción 33h a la ROM del iButton para que comience a enviar su código en forma serial, el iButton comienza enviando el Byte en Hexadecimal que corresponde a la familia del producto, posteriormente transmite los 6 bytes correspondientes al numero serial de 48 bits que identifica al iButton y el ultimo Byte en transmitirse es el correspondiente al CRC.
La interfaz la adjunte a continuacion.
-
Los 48-bits son los que te hacen falta para identificar cada dispositivo, y con ese dato crear la tabla. Aunque con los primeros 8-bits, que son del código de la familia, puedes hacer ya la primera selección del producto.
Suerte!!! ;)
-
Una cosa que no nombre es que mediante la interfaz que adjunte puedes separar la parte rx y tx logrando hacer entre comillas mas facil la parte de programacion que utilizando una resistencia push up.
-
por cierto, estoy viendo el datasheet y el esquema es un poco diferente. lo pongo aki. xk el que ha puesto ascii no lo encuentro y varia ligeramente
Cual uso, el de ascii o este???
gracias
-
El que subi esta 100% probado :mrgreen:
-
y otra cosa, donde compraste los componentes?Porque los mosfet y los diodos esos he preguntado en 2 tiendas de electronica en granada y ni los conocian. por internet hay samples o alguna tienda, por madrid??, a ver si me lo compra mi hermana
Q=2N7000
D=1N5232
-
Para el diodo 1N5232 (http://es.farnell.com/jsp/search2/browse.jsp?N=500017&Ntk=gensearch_001&Ntt=1N5232&Ntx=&_requestid=739256)
Para el transistor 2N7000 (http://es.farnell.com/jsp/search2/browse.jsp?N=500017&Ntk=gensearch_001&Ntt=2N7000&Ntx=&_requestid=739713)
La búsqueda está en farnell (http://es.farnell.com/jsp/home/homepage.jsp;jsessionid=LDYEUKQRL1E15QFIAEWUNZQ)
PD: Quizás en otras tiendas, los encuentres más baratos.
Suerte!!! ;)
-
ya lo busque, pero uno de ellos no es de farnell porque no queda y:
El producto 4607144 se enviará directamente desde Newark InOne en EEUU, será entregado en 3 días laborables y tendrá un cargo adicional de 30 €. Si no desea este servicio, introduzca SERVICIO ESTÁNDAR NIO en "Comentarios Pedido" y el material se le entregará en 10 días laborables.
Gastarme 30E...manda cojones y lo de servicio estandar nio no lo encuentro.Nose si dandole a enviar ya acepto el envio y m meten los 30E. Voy a esperarme a ver si alguien mas me dice donde comprarlo
-
Pues para eso está amidata (http://www.amidata.es/cgi-bin/bv/rswww/home.do?returningUser=N&cacheID=esie)
Diodo, no está el 1N5232, pero puedes usar alguno que se le parezca (http://www.amidata.es/cgi-bin/bv/rswww/searchBrowseAction.do?obs=sObs&name=SiteStandard&No=0&N=0&Ntk=I18NAll&Ntt=1N5&Nty=1&D=1N5&Ntx=mode%20matchpartial&Dx=mode%20matchpartial&callingPage=/jsp/search/noResults.jsp&BV_SessionID=@@@@1126663835.1167434611@@@@&BV_EngineID=cccdaddjkhdgedecefeceeldgondhgg.0&cacheID=esie&Nr=avl:es)
Transistor 2N7000 (http://www.amidata.es/cgi-bin/bv/rswww/searchBrowseAction.do?obs=sObs&name=SiteStandard&No=0&N=0&Ntk=I18NAll&Ntt=2N7000&Nty=1&D=2N7000&Ntx=mode%20matchpartial&Dx=mode%20matchpartial&callingPage=/jsp/homePage/homePage.jsp&BV_SessionID=@@@@1126663835.1167434611@@@@&BV_EngineID=cccdaddjkhdgedecefeceeldgondhgg.0&cacheID=esie&Nr=avl:es)
Y en la red, hay varias empresas de componeentes electrónicas españolas que te pueden suministrar.
Suerte!!! ;)
-
Ahi estamos mal yo soy de chile :D
-
De los 2 esquemas que tenia, el de duende_azul va perfecto en simulacion y es muy simple creo yo. y luego esta el otro que es de la pagina de ibutton-dallas con transistores 2n7000 y diodo zener que me pone waiting...pero no pone nº de serie, porque es?A pesar de que este segundo es mas completo, claro esta, va mas lento. deberian de funcionar los 2 igual, porque le meto el mismo programa, solo cambia el circuito y deberia funcionar igual. en el 2º sale mensaje, pero no sale leido el nº de serie¡¡¡
Y otra duda, los ibutton al programa habra que meterle los nº de serie tal cual estan 000010B1C4145A, asi viene en el ibutton fisico, pues ese nº habra que meter en el programa,no???ya esta en hexadecimal y los 48bits.
-
El número de serie debe ser el que esté en cada i-buttons, sino no tendrá efecto.
Suerte!!! ;)
-
Aqui pongo el codigo, aver los fallos que encontrais. el nº de serie y el primer vector de la matriz coinciden y deberia de salir un YES, pero siempre sale yes¡¡ cambio el nº de serie de la simulacion para que salga NO¡ y tambien sale YES. me estan ayudando 3 personas mas y nada, que no sabemos donde falla:
#include <16f876.h> // Definiciones del PIC 16F876A
#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
#include <touch.c>
void main() {
char buffer[8];
int j,k,iguales=0,i;
char tabla[4][6]={{0x00,0x00,0x87,0x65,0x43,0x21},{0x00,0x00,0xEF,0xFF,0xFF,0xFA},{0x00,0x00,0xDF,0xFF,0xFF,0xFA},{0x00,0x00,0xCF,0xFF,0xFF,0xFA}};
printf("\r\nibutton...\r\n");
while (TRUE) {
while(!touch_present()) ;
delay_ms(200);
if(touch_present()) {
touch_write_byte(0x33);
for(i=0;i<8;++i)
buffer=touch_read_byte();
for(i=6;i!=0;i--)
printf("%2X",buffer);
printf("\r\n");
delay_ms(100);
printf("%2X%2X%2X%2X%2X%2X\r",tabla[0][0],tabla[0][1],tabla[0][2],tabla[0][3],tabla[0][4],tabla[0][5]);
delay_ms(200);
i=0;
for(j=0;j<4;j++)
{ for(k=0;k<6;k++){
if (tabla[j][k]==buffer){iguales=0; i++;}
else {iguales=1; i++;}}}
if(iguales==0){
printf("\r\nYES");
delay_ms(200);
}
else
printf("\r\nNO\r\n");
}
}
}
-
Homfly no has probado con el esquema que monte yo :mrgreen:???
-
ascii, el k mando duende_zul con 2 resistecnias solo en el virtual terminal si me sale los prinft, aunque el programa aun no me funciona porque comparo tabla con vector buffer y siemre dice que son distintos. Y probe el mismo programa con el esquema que me diste y no funciona, nose porque. me aparece el mensaje: waiting....pero no me imprime en pantalla el nº de serie. me va el circuito sencillo y ese que me pusiste no, y uso el mismo programa, y uno me imprime al menos los printf, pero el tuyo ascii, solo el primer printf y yasta.
-
#include <16f876.h> // Definiciones del PIC 16F876A
#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
#include <touch.c>
void main() {
char buffer[8];
int j,k,iguales=0,i;
char tabla[4][6]={{0x00,0x00,0x87,0x65,0x43,0x21},
{0x00,0x00,0xEF,0xFF,0xFF,0xFA},
{0x00,0x00,0xDF,0xFF,0xFF,0xFA},
{0x00,0x00,0xCF,0xFF,0xFF,0xFA}};
printf("\r\nibutton...\r\n");
// while (TRUE) {
while(!touch_present()) ;
delay_ms(200);
if(touch_present()) {
touch_write_byte(0x33);
for(i=0;i<8;++i)
buffer[i]=touch_read_byte();
for(i=6;i!=0;i--)
printf("%2X",buffer[i]);
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;
j=0;
while (j<4){
for(k=0;k<6;k++){
if (tabla[j][k]!=buffer[6-k]){
iguales=1;
j++;
i=0;
break;
}
else{
iguales=0;
i++;
If (i==6) j=4;
}
}
}
if(iguales==0){
printf("YES\r\n");
delay_ms(200);
}
else
printf("NO\r\n");
}
// }
Hice unos cambios y al parecer funciona bien. Esta medio chapucero pues lo hice a la carrera :lol: .
Ahora estudialo y trata de entender su funcionamiento y prectica mas la sintaxis del C :)
-
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¡¡
-
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.
-
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¡¡
-
Que yo sepa, la gracia del bus one-wire es justamente esa; usar solo una linea para comunicacion...
-
:( 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???
-
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
-
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);
}
}
}
-
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
-
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 :)
-
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: )
-
Gracias duende voy a reinstalar el programa, otra cosa que nombre tiene la serie para el zocalo que te enviaron??? :-/,..saludos
-
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
-
gracia homfly yo ya habia pedido unos samples pero solo los ibutton DS1990A-F5. :D
-
Hace un tiempo cuando trabaje con los ibutton compre el lector que bruto no ?? :D
-
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;
-
Ok, lo que pasa es que cuando no se detecta ningun ibutton correcto se sale del bucle While (j<4) con j=0, lo que tendrias que hacer es agregar un valor a "quien" distinto de 0,1,2 o 3 en la parte siguiente:
iguales=1;
j++; //paso al siguiente vector y...
i=0; //inicializo vector buffer
Quien=10; <-------- Indicara que no hay ibutton valido y sera leido por el Default en el switch(quien)
break;
-
Cambie el valor de J por si era eso, pero no caí en darle valor a "quien". Gracias duende. Eres un maquina. He aprendido bastante contigo. Me queda solo activar el puerto del rele que tengo que buscar como porque no es igual que los leds, y pasarlo todo a pcb (con p-cad que lo controlo muy bien) y cuando lo tenga terminado lo pongo por aqui si alguien lo quiere o que me lo pida.
Gracias
-
Reinstale el programa y sigue el mismo problema aqui dejo la foto del circuito que implemente.
-
El tx teines q poner en el Rx del pic, y el rx en el tx del pic. Ademas si el ibutton las puesto en el pin B1, debes de cambiar la libreria touch.c y poner el pin B1, en vez del B0 que creo que trae. Y tambien si cogiste mi programa, cambia el pic #include <16f628.h> que creo que usas tu.No se porque fallara.Le metes bien el programa?Y lo pones a 4mHz?
-
No si el programa no lo hice en c lo hice en pbp. :mrgreen:
-
Aqui dejo el archivo a ver si les funciona la verdad que a mi no ahi caso, homfly puedes subir tu archivo de proteus :) de verdad te lo agradeceria mucho.
-
ascii revisaste tus mensajes privados? :?
-
El problema ya lo solucione :lol: , gracias duende resulta que hace unos minutos atras revise el pv :D...saludos
-
Al fin como dije anteriormente era problema de libreria y por fin mi programa funciono :mrgreen:, el programa lo hice en pbp :-), Aqui dejo una imagen de la visualizacion, la verdad que no se por que ahi algunos ceros en hex que no me muestra :?, pero el programa ya esta probado 8), y nuevamente te doy las gracias duende por la ayuda :mrgreen:
-
para eso estamos :)
-
ascii te mandado el enlace con las librerias que pediste. No he podido conectarme antes porque estoy liado con los estudios, asi que no se cuando me mandaste el mensaje. Espero que te haya servido.
Adios
-
Hola a todos estoy interesado en este tema por lo que voy a pedir unos samples a MAXIM, pero antes de nada me gustaria saber el metodo de transporte que utilizan (para saber que direccion pongo por que si pongo la mia y viene por agencia de transportes no dan con mi casa si en veinte años) y sobre todo si realmente son gratuitos. Vivo en España. Un saludo y gracias
-
te lo mandan ellos por corro ordinario, en un sobre de espumita de esa. Y si son gratis. yo tengo 14 ya y no he pagado nada¡¡
-
Muchas gracias por la respuesta
-
Muy Interesante todo lo que han logrado, felicidades :P
-
hola. Tengo un problema con mi circuito de ibutton.
Va todo casi bien. El problema es que el 80% de las veces, si es correcto abre, si es incorrecto no abre, pero hay veces, que nose si es que no lee bien el nº de serie, que no lo hace bien y si es correcto, me dice que no lo es y se enciende la luz roja. He leido por ahí que puede ser problema de la resistencia del PULL UP. Yo le tengo puesta 10K, pero he leido en el datasheet que puede ser hasta de 5K, y ejemplos que pone 2,2 o 4,7k. Entonces quiero saber si eso puede ser el fallo. Porque el proteus me lo simula bien, y no se si es problema del programa mio o de eso. Porque es raro que a veces lo haga bien y unas pocas mal. Porque podría ser???
Gracias, y en que caso de que el problema sea el programa, ya lo pondria por aqui, por si la comparacion está mal hecha.
-
le he cambiado la resistencia de pullup del lector de ibutton de 10k a 3,3k y sigue mal. me da fallos cuando quiere, el 20% de las veces hace lo contrario, abre cuando no y no abre cuando si. Alguien me ayuda?
-
Hola amigos,
ESTOY INTENTANDO COPIAR O LEER Y ESCRIBIR UNA DS1991 O DS1992.
PODEIS PASARME LOS ESQUEMAS Y EL PROGRAMA QUE NECESITO PARA PODER REALIZARLO.
GRACIAS DE ANTEMANO.
SALUDOS
-
HOLA VEO QUE ESTE TEMA ESTA MUERTO :(
ALGUNO TIENE IDEA COMO ESCRIBIR EN LA IBUTTON O LEER LA INFORMACION GRABADA
SALUDOS
-
HOLA VEO QUE ESTE TEMA ESTA MUERTO :(
ALGUNO TIENE IDEA COMO ESCRIBIR EN LA IBUTTON O LEER LA INFORMACION GRABADA
SALUDOS
Yo tambien estoy buscando informacion para leer las paginas internas de los ibuttons?? con la libreria es suficiente o hay que hacer otra cosa?
-
hola a todos
alguen sabe como conectar un ibutton ds1920??
o su programa en CCS
gracias
-
hola a todos
alguen sabe como conectar un ibutton ds1920??
o su programa en CCS
gracias
Hola pues yo tenia un problema similar pero tenia una DS1992 y empece a buscar en los foros sin embargo no me di cuenta que en la carpeta DRIVER de CCS estaba la libreria para su hermana mayor la DS1993 (que es la misma cosa) y solucione el problema.
estaba leyendo la libreria y es muy facil de manejar! utiliza como base para tu DS1920 la libreria TOUCH.c le envias el comando por ejemplo para leer la ROM 33h y luego esperar lectura de la ibutton, lo mismo ocurre cuando vas a leer otro espacio de la ibutton en tu caso de temperatura!
No se te olvide enviar antes el pulso de presencia y rectificar que la ibutton este conectada!
-
gracias fidodido18
ya see como leer la temperatura en un ds1920
la libreria TOUCH.C simplifica bastante las cosas
Pero tu sabes como leer o escribir en estos ibuttons???
desde la memoria scratchpad
-
aaa wenoo ya resolvi mi problema
para conversion de temperatura del ibutton DS1920 se debe usar los siguientes comandos
obiamente usando la libreria TOUCH.C
touch_present() ;
delay_ms(200);
touch_write_byte(0xCC);
touch_write_byte(0x44);
output_high(Pin_B0);
delay_ms(750);
touch_present() ;
delay_ms(200);
touch_write_byte(0xCC);
touch_write_byte(0xBE);
for(u=0;u<8;++u) {
temperatura=touch_read_byte();
}
con una resitencia Pullup por lo menos de 1,8k o mas chica.
weno eso saludos
-
gracias fidodido18
ya see como leer la temperatura en un ds1920
la libreria TOUCH.C simplifica bastante las cosas
Pero tu sabes como leer o escribir en estos ibuttons???
desde la memoria scratchpad
hola te recomiendo que veas también la libreria ds1993.c ahí te dice como leer-escribir la ibutton desde la scratchpad.
y tu código lo cambiaría un poco
while(!touch_present()) ;//Mientras no este conectada la ibutton se queda esperando
if(touch_present()){// Si la ibutton esta conectada haga el código que sigue
touch_write_byte(0xCC);// No se para que haces esto!! si no recoges datos... :shock:
touch_write_byte(0x44);
output_high(Pin_B0);
delay_ms(750);}
if(touch_present()){// Si la ibutton esta conectada haga el código que sigue
delay_ms(200);
touch_write_byte(0xCC);
touch_write_byte(0xBE);
for(u=0;u<8;++u) {
temperatura=touch_read_byte();
}
}
la resistencia de pullup que utilizo es de 4.7 K (recomendada por el datasheet)
-
QUISIERA SABER DONDE PUEDO COMPRAR LOS IBUTTON EN COLOMBIA. ALGUIEN ME PUEDE AYUDAR???
-
QUISIERA SABER DONDE PUEDO COMPRAR LOS IBUTTON EN COLOMBIA. ALGUIEN ME PUEDE AYUDAR???
Lo mejor es encargarlas de USA y que te lleguen por allcourrier, es lo mejor! Sobre todo lo fácil, practico y económico que sale.