TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: Marttyn en 31 de Octubre de 2011, 16:55:24

Título: Cada PIC con un ID unico?
Publicado por: Marttyn en 31 de Octubre de 2011, 16:55:24
Hola!
Estoy planteandome un proyecto en el que necesito que MUCHOS microcontroladores tengan el mismo codigo, pero que cada uno tenga un ID unico.
Tiene el MPLAB en conjunto con el PICKIT3 alguna funcion para hacer esto?

No puedo guardar la ID en una constante ni en la EEPROM ya que sino tendria que ir cambiando manualmente el ID cada vez que programo.

Salu2
Título: Re: Cada PIC con un ID unico?
Publicado por: soymoe en 31 de Octubre de 2011, 17:04:31
una solucion es agregarle un ds1820 a cada PIC y usar el id del ds1820 para identificar el equipo
Título: Re: Cada PIC con un ID unico?
Publicado por: manwenwe en 31 de Octubre de 2011, 17:05:16
Todos los PIC tienen un espacio en la memoria de configuración destinada a guardar una ID: se conocen cómo "ID Locations". Pe.: en PIC16 tienes 4 "palabras".

Lo que desconozco es si MPLAB tiene alguna herramienta para programar estas posiciones de forma correlativa

1 saludo.
Título: Re: Cada PIC con un ID unico?
Publicado por: Marttyn en 31 de Octubre de 2011, 17:15:56
una solucion es agregarle un ds1820 a cada PIC y usar el id del ds1820 para identificar el equipo

Un DS1820 no es un termometro digital? Bueno en caso de que tenga un ID interno, me parece una solucion un poco cara para agregar un ID al PIC... en Farnell cuesta casi 7€ c/u!

Manwenwe, creo haber visto lo que cuentas en algun datasheet, pero en que posicion de memoria se encuentra eso? El codigo es accesible desde el "programa run"
Título: Re: Cada PIC con un ID unico?
Publicado por: manwenwe en 31 de Octubre de 2011, 17:23:18
Ummm primero disculparme: no estoy seguro de si estas posiciones existen para PICs de 16bit y 32bit. Para los de 8 seguro!!!

Para PIC16 y PIC18 las tienes de la 0x2000 a la 0x2003 (memoria de configuración). Puedes acceder a ellas desde el compilador por medio de funciones preecompiladas: al igual que puedes escribir la palabra de configuación desde el compilador...

Lo siento: es que hace años que no toco el tema.... Si crees que te es de utilidad te busco cómo hacerlo. Por cierto: ¿qué familia de micro sería? y ¿en qué lerguaje está tu firmware?

 
Título: Re: Cada PIC con un ID unico?
Publicado por: MGLSOFT en 31 de Octubre de 2011, 18:10:29
Creo que esto es lo que buscas:
El software Winpic800 junto con el GTP+ (seguramente con los otros que soporta debe poder hacerlo también) puede asignar un ID automático o por secuencia según uno inicial que puedes elegir, ademas de poder dar vuelta los nibbles del ID, etcétera.

Aquí una imagen de la configuración del programa para hacerlo de uno de esos modos:

(http://img502.imageshack.us/img502/1981/autoidwinpic800.jpg)

Seguramente las herramientas de Microchip deben poder hacerlo.
Los ICDs de CCS también lo soportan...
Título: Re: Cada PIC con un ID unico?
Publicado por: Marttyn en 01 de Noviembre de 2011, 00:43:30
Desde MPLAB lo veo poco alentador:
(http://i299.photobucket.com/albums/mm317/Marttyn/Electronica/0da818f4.jpg)

Por lo visto se puede poner un ID manualmente, pero solo es accesible desde el PC cuando entra en modo programacion. Algun pic de gama superior (no se cual, pero con mas de las 35 instrucciones basicas) puede acceder a este ID desde el programa en ejecucion.
Voy a ver si desde el IDE del CCS hay alguna opcion, aunque no se si podre programar con el Pickit3 desde ahi.
Sino tal vez pueda crear algun programita con VB que modifique aleatoriamente el valor de una constante del HEX cada 10 segundos, y asi cuando haga la fabricacion (100 uds tal vez) cada vez que programe el id sera diferente pero el codigo sera el mismo. El checksum me dara problemas?
Título: Re: Cada PIC con un ID unico?
Publicado por: Nocturno en 01 de Noviembre de 2011, 02:43:54
Yo no me complicaría la vida y lo haría como dice Marcos.
Título: Re: Cada PIC con un ID unico?
Publicado por: MGLSOFT en 01 de Noviembre de 2011, 08:14:13
El IDE de CCS solo soporta al ICD2 y al ICD3 de Microchip, el Pickit no es soportado, lo lamento.
Título: Re: Cada PIC con un ID unico?
Publicado por: manwenwe en 01 de Noviembre de 2011, 09:43:25
Perdón: lo que dije no era a través de funciones precompiladas sino directivas de preprocesador.

Marttyn, échale un vistazo a la sección 4.37:

http://ww1.microchip.com/downloads/en/devicedoc/33014j.pdf

1 saludo.
Título: Re: Cada PIC con un ID unico?
Publicado por: Marttyn en 01 de Noviembre de 2011, 12:16:01
Perdón: lo que dije no era a través de funciones precompiladas sino directivas de preprocesador.

Marttyn, échale un vistazo a la sección 4.37:

http://ww1.microchip.com/downloads/en/devicedoc/33014j.pdf

1 saludo.

Genial amigo!
Por un lado es la confirmacion que necesitaba, aunque por otro es la informacion que no queria oir...  :oops:
A todos los PICs se les puede grabar un ID durante la programacion, pero solo los PIC18 y en adelante supongo pueden leer ese ID durante la ejecucion.
Tendre que guardarlo en el pic como constante en la rom o la eeprom manualmente uno a uno :(
Título: Re: Cada PIC con un ID unico?
Publicado por: manwenwe en 01 de Noviembre de 2011, 12:23:32
No pongo la mano en el fuego pero yo te diría que no pudes leer esa ID en ejecución: sólo mediante ICSP.

Si necesitar leearla yo me decantaría com dices por EEPROM o FLASH. Si grabas en flash, siempre que tu micro sea de los "nuevos" y te deje leer en ejecución, ten en cuenta que grabas "bloques" por lo que es probable que sacrifiques algunos bytes...

saludos
Título: Re: Cada PIC con un ID unico?
Publicado por: manwenwe en 01 de Noviembre de 2011, 12:30:24
Si te fijas en los datasheet de los micros en los que puedes acceder a la flash en ejecución verás que:

The Flash program memory is readable, writable and
erasable during normal operation over the entire VDD
range.


No es lo mismo "program memory" que "config memory" aq las dos sean parte de la flash. Las "ID locations" están dentro de la "config memory"....

saludos!
Título: Re: Cada PIC con un ID unico?
Publicado por: MerLiNz en 01 de Noviembre de 2011, 12:50:30
siempre puedes usar la User ID Memory, esta se programa tanto por ICSP como por software.

Son 8bytes en la direccion 0x20000 de la memoria. Para acceder a ellos debes hacerlo como una lectura de ROM, y para la escritura  como una escritura flash. Creo que activando el bit CFGS se podria escribir, pero no estoy muy seguro, esto es aplicable a los pic18 no se si los 16, 24... funcionan igual.
Título: Re: Cada PIC con un ID unico?
Publicado por: AcoranTf en 01 de Noviembre de 2011, 18:48:41
No se si estare en lo cierto al pensar que lo que quieres es que en un grupo de micros interconectados y ejecutando el mismo codigo, cada uno sepa cuando alguno de los demas "desea" enviarle algo a el y solo a el. Si es asi, creo que no necesitas complicarte tanto la vida, simplemente memoriza un identificador en la eeprom distinto para cada uno y en la inicializacion lo lees y lo copias a una variable, despues bastara una rutina de interrupcion que lea los datos del "bus" de comunicaciones y tenga en cuenta dicha variable para saber cuando el dato es para el.
Si no es esto lo que quieres disculpa, pero no entiendo la finalidad de ese ID.

Saludos.
Título: Re: Cada PIC con un ID unico?
Publicado por: MGLSOFT en 01 de Noviembre de 2011, 19:03:05
Si el Id es para identificarlo en una red, te recomiendo el uso de dipswitchs para configurarlo o un metodo que permita cambiarlo en la eeprom en modo run, como podría ser un teclado y display.
Título: Re: Cada PIC con un ID unico?
Publicado por: Marttyn en 01 de Noviembre de 2011, 20:23:17
Estoy haciendo algo similar al sistema de apertura con mando a distancia de los garajes de los edificios modernos.
Estos tienen un receptor central y cada persona que tenga una plaza de garaje tiene un mando a distancia. En los antiguos mandos a distancia tenias un DIP switch, pero en los nuevos no es necesario. Cada mando tiene un ID unico, y en la centralita hay que "dar de alta" cada mando. Es decir, tiene una base de datos con los IDs que son los validos y que podran abrir la puerta. Asi como se pueden dar de alta tambien se pueden dar de baja los mandos que se extravien, se roben etc.

Quitando el DIP switch pretendo abaratar costes, reducir el tamaño y simplificar el funcionamiento para el usuario final.
Título: Re: Cada PIC con un ID unico?
Publicado por: Marttyn en 01 de Noviembre de 2011, 21:29:14
Pensando un poco, si pongo a correr el timer1 al iniciar el programa, la primera vez que se pulse el boton comprueba si en la EEPROM hay una direccion guardada, si no la hay lee el timer y guarda el valor en la EEPROM. Asi ya tendria una ID para este emisor. Tendria 65536 IDs diferentes :)
Título: Re: Cada PIC con un ID unico?
Publicado por: MGLSOFT en 01 de Noviembre de 2011, 21:31:32
El Pickit3 no lo tiene, pero si lo tiene el Pickit2... :mrgreen:
Título: Re: Cada PIC con un ID unico?
Publicado por: Nocturno en 02 de Noviembre de 2011, 02:02:58
Pensando un poco, si pongo a correr el timer1 al iniciar el programa, la primera vez que se pulse el boton comprueba si en la EEPROM hay una direccion guardada, si no la hay lee el timer y guarda el valor en la EEPROM. Asi ya tendria una ID para este emisor. Tendria 65536 IDs diferentes :)

Pero no tendrías garantía de que el nº seleccionado no estuviera ocupado por otro circuito.
Título: Re: Cada PIC con un ID unico?
Publicado por: Marttyn en 02 de Noviembre de 2011, 08:06:34
El Pickit3 no lo tiene, pero si lo tiene el Pickit2... :mrgreen:

Que cosa?

Noc, lo que estoy desarrollando es un producto en el que cada persona que lo compre tendra un recepor, y uno o varios mandos, pero nunca mas de tres o cuatro. Cada receptor respondera a los mandos que se hayan sincronizado, y el ID "unico" no hace falta que sea demasiado unico, es solo para evitar que otra persona con el mismo mando no pueda activar su receptor, o al menos que sea muy improbable, partiendo de la base de que ya es muy improbable que haya dos personas muy proximas y con el mismo aparato.
Título: Re: Cada PIC con un ID unico?
Publicado por: MGLSOFT en 02 de Noviembre de 2011, 08:11:27
Me refiero al grabado de ID desde el software de programación, no que no vi que tenga es un incrementador automático, como tiene el winpic800 y el software de CCS.
Título: Re: Cada PIC con un ID unico?
Publicado por: Marttyn en 02 de Noviembre de 2011, 08:19:40
:(
Gracias Marcos!
Título: Re: Cada PIC con un ID unico?
Publicado por: MerLiNz en 02 de Noviembre de 2011, 11:31:38
para esto lo que tienes que hacer es pensarlo bien, si va a un numero determinado de personas, o lo venderas para cualquiera que lo desee. Ademas de tener cuidado con la seguridad, porque si pones los numeros consecutivos siempre puede venir un listillo y averiguar el codigo para abrir el garaje del vecino cuando no este...

Lo primero que puedes pensar es, en tener una base de datos con todos los codigos (si es para una comunidad o algo), poner numeros aleatorios con int16 minimo, ahora bien, el proceso de codificado llave->receptor lo puedes hacer de distintas formas, o bien una vez programado lo asignas manualmente, o bien que el receptor tenga algun procedimiento para el codificado, y que el receptor le envie al mando el codigo de ese receptor, el mando guarda ese codigo, y ya se puede usar, asi los mandos seran universales, y los receptores tendran un codigo fijo.
Ahora bien si se pierde un mando, o algo asi tenemos el problema que se podria seguir abriendo con el mando perdido, para esto tendrias que cambiar el codigo en el receptor, y codificar los nuevos mandos para que cojan el nuevo codigo del receptor.

Para guardarlo te recomiendo la eeprom, es facil usarla, asi para cambiar el codigo no sera muy complicado el procedimiento. Si lo haces en la flash es mas complicado la modificacion de este dato.

Título: Re: Cada PIC con un ID unico?
Publicado por: Marttyn en 02 de Noviembre de 2011, 15:13:01
Muchas gracias por los consejos!
Mi sistema no es para nada tan importante como abrir la puerta de un garaje. Ademas hasta ahora he vendido 50 utilizando una pareja de encoder/decoder con dipswitch, y quiero cambiar el diseño pero no creo que vaya a vender mas de otros 200.
El tema de la seguridad no me preocupa demasiado, con una ID de 8 bits tengo suficiente. Que haya dos mandos con el mismo ID es poco probable, y mas sabiendo las unidades que voy a vender.
Título: Re: Cada PIC con un ID unico?
Publicado por: diguito_69 en 02 de Noviembre de 2011, 15:34:37
Podrías grabarlos a todos con el mismo id en la eeprom, por ejemplo 0xFF y al inicio del programa comprobar el id, si es igual a 0xFF que se quede esperando un id por rs232 por ejemplo y grabarlo en la eeprom. Si el id es distinto de 0xFF, que funcione normalmente. Espero haberme expresado bien.
Título: Re: Cada PIC con un ID unico?
Publicado por: Tisco en 02 de Noviembre de 2011, 16:02:17
Podrías grabarlos a todos con el mismo id en la eeprom, por ejemplo 0xFF y al inicio del programa comprobar el id, si es igual a 0xFF que se quede esperando un id por rs232 por ejemplo y grabarlo en la eeprom. Si el id es distinto de 0xFF, que funcione normalmente. Espero haberme expresado bien.
Me parece una buena idea esa.

Otra forma (aunque no tan económica) es emplear algún chip que tenga un ID único, hay muchos, pero que yo haya empleado sólo estos dos tipos:
DS1990R (http://www.maxim-ic.com/datasheet/index.mvp/id/4787)
DS1990A (http://www.maxim-ic.com/datasheet/index.mvp/id/2829)
MAC Address Chips (http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2542&param=en538878) Estos son bastante económicos.

Un saludo!

EDITO:
Este no lo he usado pero también parece una buena opción DS2411 (http://www.maxim-ic.com/datasheet/index.mvp/id/3711)
Título: Re: Cada PIC con un ID unico?
Publicado por: Marttyn en 21 de Mayo de 2012, 15:27:55
Deje este proyecto un poco apartado, pero vengo a retomarlo :)

Me refiero al grabado de ID desde el software de programación, no que no vi que tenga es un incrementador automático, como tiene el winpic800 y el software de CCS.

Tengo el Pickit 2 y el 3, pero sigo sin saber si puedo grabar un ID unico o no. Dices que el Pickit 2 lo permite?

Podrías grabarlos a todos con el mismo id en la eeprom, por ejemplo 0xFF y al inicio del programa comprobar el id, si es igual a 0xFF que se quede esperando un id por rs232 por ejemplo y grabarlo en la eeprom. Si el id es distinto de 0xFF, que funcione normalmente.

Creo que algo asi puede ir muy bien, pero requiere conectarlo al PC y tener un PIN del pic para recepcion UART.
Estuve pensadolo y cuando inicie el programa haga una comprobacion de si tiene ID, si no lo tiene espera una pulsacion de un pulsador y en ese momento lee el timer1 y el valor que salga sera el ID. Una vez que tenga ID nunca mas entrara en esta parte del programa.

Aunque si el PicKit 2 me permitiera hacerlo me evito todo esto! :)
Título: Re: Cada PIC con un ID unico?
Publicado por: tannke en 22 de Mayo de 2012, 05:11:47
lee el timer1 y el valor que salga sera el ID

Esto lo veo como jugar a la lotería, alomejor tienes suerte y no se repite nunca el número, o la tienes muy mala y te salen unos cuantos con el mismo nº.

Un saludo.
Título: Re: Cada PIC con un ID unico?
Publicado por: Marttyn en 22 de Mayo de 2012, 07:03:00
Esto lo veo como jugar a la lotería, alomejor tienes suerte y no se repite nunca el número, o la tienes muy mala y te salen unos cuantos con el mismo nº.

Como digo, no vendere ni tantos productos ni la seguridad es tan importante. Se utilizará para activar musica e iluminacion inalambricamente en espectaculos unipersonales.
Si piensas en la probabilidad de que haya dos espectaculos simultaneamente, y a menos de 100mts, y le sumas la probabilidad de que ambos usen el mismo sistema inalambrico de control, y a ello lo multiplicas por 6561 (8 bits trinarios), que serian las posibles ID del mando, sale una probabilidad entre MUUUUUCHO de que te activen involuntariamente algo.
Creo que efectivamente es mas probable que te toque la loteria :P
Título: Re:Cada PIC con un ID unico?
Publicado por: Marttyn en 15 de Febrero de 2016, 17:14:25
Si, esto es muy antiguo, pero me acorde por casualidad del tema y queria comentar la solucion por la que opte y que funciona muy bien.
Como decia en un post anterior, uso el Timer1 para generar un ID aleatorio. Ademas se genera automaticamente la primera vez que se enciende el dispositivo y solo tengo que incluir un par de lineas el inicio del programa. Se ejecutara la primera vez y nunca mas.

Desde el momento en que se alimenta el PIC, el Timer1 (y todos sus timers) empiezan a incrementar, a la velocidad que tenga configurado. No importa si hay una interrupcion activada, el timer corre igualmente. Cuando se desborda vuelve a comenzar desde 0.

Si nuestro dispositivo tiene un interruptor de encendido y un pulsador, la primera vez que se presione el pulsador se lee el valor del Timer1 y se almacena en la EEPROM. YA TENEMOS ID!

El problema es cuando no tenemos interruptor de encendido, y el circuito funciona mientras tengamos el boton presionado, como es el caso de un mando a distancia. En este caso el proceder previamente descrito no funcionaria. Pero si funcionaria grabar el valor del Timer1 en el momento que se suelta el pulsador. Aunque en el momento que se suelta el pulsador nos quedamos sin alimentacion, nuestro PIC ya no podra grabar en la EEPROM, por lo que habria que poner un condensador que nos de unos milisegundos mas de "vida" para permitirle al PIC detectar que se solto el pulsador, leer el timer y grabar en EEPROM. Quizas en el momento que se detecta que se suelta el pulsador se puede poner al PIC a correr a la velocidad mas baja de su oscilador interno para que consuma menos.

El sistema con un interruptor funciona, y funciona de maravilla. El otro no lo he probado, pero deberia ir igual de bien.

Esto lo cuento por que recuerdo hace mucho un post de como generar un numero realmente aleatorio, y se hablaba de un pin ADC al aire, captando interferencias, y otras soluciones similares.
Esta solucion del Timer me parece muy directa y realmente aleatoria, siempre que intervenga el usuario presionando un boton (aunque podria ser algun otro tipo de interaccion).

Si le sirve a alguien bien, y sino, pues me sirve a mi para escribir algo en el foro que llevo desaparecido mucho tiempo  :mrgreen:

Salu2
Título: Re:Cada PIC con un ID unico?
Publicado por: manwenwe en 15 de Febrero de 2016, 17:56:11
Las EEPROM UID son bastante baratas. Aún así entiendo que haya gente que prefiera utilizar otras técnicas. Eso solucionaría si Microchip empezase a fabricar chips con UID como tienen casi todos los de la competencia (si algún modelo ya lo lleva por favor corregidme).

Saludos!
Título: Re:Cada PIC con un ID unico?
Publicado por: PalitroqueZ en 15 de Febrero de 2016, 18:12:13
según tengo entendido el ID es número que viene con el pic y es de solo lectura,

en el caso de los 18Fxx5x se encuentra a partir de la dirección 3FFFFEh y se accede en tiempo de programación.

Título: Re:Cada PIC con un ID unico?
Publicado por: KILLERJC en 15 de Febrero de 2016, 18:29:58
según tengo entendido el ID es número que viene con el pic y es de solo lectura,

en el caso de los 18Fxx5x se encuentra a partir de la dirección 3FFFFEh y se accede en tiempo de programación.

Es distinto ID el que hablan.
El ID que vos decis es para identificar que parte es... me refiero a que PIC es..
Mientras que el ID que ellos hablan es un ID que viene unico para cada micro. Algunos creo que permiten que se grabe el ID de cada uno. De esa forma identificar cada micro en particular y no su familia.
Título: Re:Cada PIC con un ID unico?
Publicado por: PalitroqueZ en 15 de Febrero de 2016, 18:43:51
según tengo entendido el ID es número que viene con el pic y es de solo lectura,

en el caso de los 18Fxx5x se encuentra a partir de la dirección 3FFFFEh y se accede en tiempo de programación.

Es distinto ID el que hablan.
El ID que vos decis es para identificar que parte es... me refiero a que PIC es..
Mientras que el ID que ellos hablan es un ID que viene unico para cada micro. Algunos creo que permiten que se grabe el ID de cada uno. De esa forma identificar cada micro en particular y no su familia.

OK :)
Título: Re:Cada PIC con un ID unico?
Publicado por: Marttyn en 16 de Febrero de 2016, 11:06:01
Usar un chip externo me parece exagerado. No por el precio, sino por que es un componente mas cuando con lo que tienes hay suficiente.
No sabia que la competencia tuviese esto ya ontegrado. Me parece muy util y bastante logico. A ver cuando microchip se pone al dia con esto.
Título: Re:Cada PIC con un ID unico?
Publicado por: KILLERJC en 16 de Febrero de 2016, 13:37:20
Usar un chip externo me parece exagerado. No por el precio, sino por que es un componente mas cuando con lo que tienes hay suficiente.
No sabia que la competencia tuviese esto ya integrado. Me parece muy util y bastante logico. A ver cuando microchip se pone al dia con esto.

Por ejemplo en el Cortex-M4F que poseo de TI, tiene 4 registros para esto:

Register 182: Unique ID 0 (UNIQUEID0), offset 0xF20
Register 183: Unique ID 1 (UNIQUEID1), offset 0xF24
Register 184: Unique ID 2 (UNIQUEID2), offset 0xF28
Register 185: Unique ID 3 (UNIQUEID3), offset 0xF2C
These registers contain a unique 128-bit identifier that cannot be modified by the user. This value
is unique to each individual die but is not a random value. This unique device identifier can be used
to initiate secure boot processes or as a serial number for USB or other end applications.

Si no mal recuerdo ST tambien posee con sus ARM lo que no recuerdo si es modificable o no.. Es decir que uno pueda grabar el propio.
Título: Re:Cada PIC con un ID unico?
Publicado por: BrunoF en 16 de Febrero de 2016, 13:37:57
Siempre podés hacerte un programita que modifique en el .hex los valores donde guardes tu ID (sea FLASH, EEPROM, etc).
Título: Re:Cada PIC con un ID unico?
Publicado por: DominusDRR en 16 de Febrero de 2016, 16:15:53
FYI:

Citar
Unique ID
Pre-Programmed, Unique 32-bit Microchip defined Serial Number.

http://www.microchip.com/design-centers/memory/serial-eeprom/getting-started/with-mac-address-chips (http://www.microchip.com/design-centers/memory/serial-eeprom/getting-started/with-mac-address-chips)

http://www.microchip.com/ParamChartSearch/chart.aspx?branchID=7046&mid=&lang=en&utm_source=MicroSolutions&utm_medium=&utm_term=&utm_content=MPD&utm_campaign=Unique+ID+EEPROM+Ad (http://www.microchip.com/ParamChartSearch/chart.aspx?branchID=7046&mid=&lang=en&utm_source=MicroSolutions&utm_medium=&utm_term=&utm_content=MPD&utm_campaign=Unique+ID+EEPROM+Ad)


(http://www.microchip.com/_images/memory/Unique-ID-Chipsv200.png)

http://www.eetimes.com/document.asp?doc_id=1316162 (http://www.eetimes.com/document.asp?doc_id=1316162)
Título: Re:Cada PIC con un ID unico?
Publicado por: KILLERJC en 16 de Febrero de 2016, 16:38:20
No es por que microchip no lo tenga, el problema es que no se lo incorpora a sus microcontroladores.