# Caracterísitcas del 12F629



## Jorf (Oct 20, 2006)

Recién estoy empezando con esto de los PICs y no comprendo muy bien algunas cosas, mi pregunta es: Es reprogramable el PIC en cuestion? Donde veo este dato en el Datasheet del mismo?


----------



## jokingo (Oct 20, 2006)

Por lo que pone aqui si, http://ww1.microchip.com/downloads/en/devicedoc/41190c.pdf . Es iam que utiliza memoria FLASH.

Hay 4 tipos de memoria:

- PROM: solo se pueden programar una vez y no hay manera de hacerlo otra vez.
- EPROM: Una vez programada se puede borrar la memoria utilizando una maquina que utiliza unas hondas con una frecuencia especifica para borrarlas.
- EEPROM: Estas se pueden borrar facilmente con un programador atraves de impulsos electricos, son las que se utilizan habitualmente. Y son muy utilizadas para descodificar digital+.
- FLASH: Estan tambien se pueden borrar facilmente con cualquier ordenador que tenga una ranura USB ( logicamente el aparato tiene que tener un macho USB )

Espero que te haya servido de ayuda.


----------



## Jorf (Oct 20, 2006)

Con un programador tipo JDM tendré problemas? Se podrá borrar o solo tiene que ser USB?

La idea es compilar esto, pero no se como pasarlo a .asm ya que lo tengo en solo texto.


```
; name : JP6293E
; author : Jose Pino
; date : 10/06/03

; Microcontroller: 12f675 Speed: 4 Mhz Internal RC

delay 200 miliseconds
Set Comparator Mode 7


variable byte f = 00000000b ; Output data
variable byte s ; Temporal variable
variable byte o ; message number.

procedure salida( s as byte ) is
gpio = s
delay 500 us
gpio = 00000000b
delay 200 us
end procedure

procedure disp ( f as byte ) is
if f = "0" then f = "O"
if f = "A" then
salida(0011_0110)
salida(0000_0101)
salida(0000_0101)
salida(0011_0110)
end if
if f = "B" then
salida(0011_0111)
salida(0010_0101)
salida(0010_0101)
salida(0001_0010)
end if
if f = "C" then
salida(0001_0110)
salida(0010_0001)
salida(0010_0001)
salida(0010_0001)
end if
if f = "D" then
salida(0011_0111)
salida(0010_0001)
salida(0010_0001)
salida(0001_0110)
end if
if f = "E" then
salida(0011_0111)
salida(0010_0101)
salida(0010_0101)
salida(0010_0001)
end if
if f = "F" then
salida(0011_0111)
salida(0000_0101)
salida(0000_0101)
salida(0000_0001)
end if
if f = "G" then
salida(0001_0110)
salida(0010_0001)
salida(0010_0101)
salida(0011_0101)
end if
if f = "H" then
salida(0011_0111)
salida(0000_0100)
salida(0000_0100)
salida(0011_0111)
end if
if f = "I" then
salida(0010_0001)
salida(0011_0111)
salida(0010_0001)
end if
if f = "J" then
salida(0001_0000)
salida(0010_0000)
salida(0010_0000)
salida(0001_0111)
end if
if f = "K" then
salida(0011_0111)
salida(0000_0100)
salida(0001_0010)
salida(0010_0001)
end if
if f = "L" then
salida(0011_0111)
salida(0010_0000)
salida(0010_0000)
salida(0010_0000)
end if
if f = "M" then
salida(0011_0111)
salida(0000_0010)
salida(0000_0100)
salida(0000_0010)
salida(0011_1111)
end if
if f = "N" then
salida(0011_0111)
salida(0000_0010)
salida(0000_0100)
salida(0001_0000)
salida(0011_0111)
end if
if f = "O" then
salida(0001_0110)
salida(0010_0001)
salida(0010_0001)
salida(0001_0110)
end if
if f = "P" then
salida(0011_0111)
salida(0000_0101)
salida(0000_0101)
salida(0000_0010)
end if
if f = "Q" then
salida(0001_0110)
salida(0010_0001)
salida(0011_0001)
salida(0011_0110)
end if
if f = "R" then
salida(0011_0111)
salida(0000_0101)
salida(0000_0101)
salida(0011_0010)
end if
if f = "S" then
salida(0010_0010)
salida(0010_0101)
salida(0010_0101)
salida(0001_0001)
end if
if f = "T" then
salida(0000_0001)
salida(0011_0111)
salida(0000_0001)
end if
if f = "U" then
salida(0001_0111)
salida(0010_0000)
salida(0010_0000)
salida(0001_0111)
end if
if f = "V" then
salida(0000_0111)
salida(0001_0000)
salida(0010_0000)
salida(0001_0000)
salida(0000_0111)
end if
if f = "W" then
salida(0011_0111)
salida(0001_0000)
salida(0000_0100)
salida(0001_0000)
salida(0011_0111)
end if
if f = "X" then
salida(0010_0001)
salida(0001_0010)
salida(0000_0100)
salida(0001_0010)
salida(0010_0001)
end if
if f = "Y" then
salida(0000_0001)
salida(0000_0010)
salida(0011_0100)
salida(0000_0010)
salida(0000_0001)
end if
if f = "Z" then
salida(0011_0001)
salida(0010_0101)
salida(0010_0101)
salida(0010_0011)
end if
if f = "1" then
salida(0010_0001)
salida(0011_0111)
salida(0010_0000)
end if
if f = "h" then ; 'h' lowercase = Hearth character
salida(0000_0010)
salida(0000_0111)
salida(0001_0111)
salida(0011_0110)
salida(0001_0111)
salida(0000_0111)
salida(0000_0010)
end if
if f = "!" then
salida(0000_0000)
salida(0010_0111)
salida(0000_0000)
end if
if f = "'" then
salida(0000_0011)
end if
if f = "." then
salida(0010_0000)
end if
if f = "o" then ; 'o' Lowecase
salida(0001_0000)
salida(0010_0100)
salida(0010_0100)
salida(0001_0000)
end if
if f = " " then ; space character.
delay 4 miliseconds
end if
delay 1 milisecond
end procedure

; main program
gpio = all output

if o = 0 then
; Display "BE HAPPY "
o = o + 1
forever loop
disp("B")
disp("E")
disp(" ")
disp("H")
disp("A")
disp("P")
disp("P")
disp("Y")
disp(" ")
disp(" ")
disp(" ")
end loop
end if
if o = 1 then
; Display "BRAVO "
o = o + 1
forever loop
disp("B")
disp("R")
disp("A")
disp("V")
disp("O")
disp(" ")
disp(" ")
disp(" ")
end loop
end if
if o = 2 then
; Display "GO TEAM GO! "
o = o + 1
forever loop
disp("G")
disp("O")
disp(" ")
disp("T")
disp("E")
disp("A")
disp("M")
disp(" ")
disp(" ")
end loop
end if
if o = 3 then
; Display "GOOD BYE "
o = o + 1
forever loop
disp("G")
disp("O")
disp("O")
disp("D")
disp(" ")
disp("B")
disp("Y")
disp("E")
disp(" ")
disp(" ")
end loop
end if
if o = 4 then
; Display "HAPPY BIRTHDAY "
o = o + 1
forever loop
disp("H")
disp("A")
disp("P")
disp("P")
disp("Y")
disp(" ")
disp("B")
disp("I")
disp("R")
disp("T")
disp("H")
disp("D")
disp("A")
disp("Y")
disp(" ")
disp(" ")
end loop
end if
if o = 5 then
; Display "HAPPY NEW YEAR "
o = o + 1
forever loop
disp("H")
disp("A")
disp("P")
disp("P")
disp("Y")
disp(" ")
disp("N")
disp("E")
disp("W")
disp(" ")
disp("Y")
disp("E")
disp("A")
disp("R")
disp(" ")
disp(" ")
end loop
end if
if o = 6 then
; Display "HELP ME "
o = o + 1
forever loop
disp("H")
disp("E")
disp("L")
disp("P")
disp(" ")
disp("M")
disp("E")
disp(" ")
disp(" ")
end loop
end if
if o = 7 then
; Display "I h YOU "
o = o + 1
forever loop
disp("I")
disp(" ")
disp("h")
disp(" ")
disp("Y")
disp("O")
disp("U")
disp(" ")
disp(" ")
disp(" ")
end loop
end if
if o = 8 then
; Display "I h AMERICA "
o = o + 1
forever loop
disp("I")
disp(" ")
disp("h")
disp(" ")
disp("A")
disp("M")
disp("E")
disp("R")
disp("I")
disp("C")
disp("A")
disp(" ")
disp(" ")
end loop
end if
if o = 9 then
; Display "LET'S PARTY! "
o = o + 1
forever loop
disp("L")
disp("E")
disp("T")
disp("'")
disp("S")
disp(" ")
disp("P")
disp("A")
disp("R")
disp("T")
disp("Y")
disp("!")
disp(" ")
disp(" ")
end loop
end if
if o = 10 then
; Display "MERRY X'MAS "
o = o + 1
forever loop
disp("M")
disp("E")
disp("R")
disp("R")
disp("Y")
disp(" ")
disp("X")
disp("'")
disp("M")
disp("A")
disp("S")
disp(" ")
disp(" ")
end loop
end if
if o = 11 then
; Display "SCORE! "
o = o + 1
forever loop
disp("S")
disp("C")
disp("O")
disp("R")
disp("E")
disp("!")
disp(" ")
disp(" ")
end loop
end if
if o = 12 then
; Display "SMILE "
o = o + 1
forever loop
disp("S")
disp("M")
disp("I")
disp("L")
disp("E")
disp(" ")
disp(" ")
end loop
end if
if o = 13 then
; Display "TRICK OR TREAT "
o = o + 1
forever loop
disp("T")
disp("R")
disp("I")
disp("C")
disp("K")
disp(" ")
disp("O")
disp("R")
disp(" ")
disp("T")
disp("R")
disp("E")
disp("A")
disp("T")
disp(" ")
disp(" ")
end loop
end if
if o = 14 then
; Display "HURRA! "
o = o + 1
forever loop
disp("H")
disp("U")
disp("R")
disp("R")
disp("A")
disp("!")
disp(" ")
disp(" ")
end loop
end if

o = 0
salida(0000_0000)
sleep microcontroller ; sleep command
nop ; No operation
```




Muchas gracias por tu ayuda, ahora estoy armando el programador.


----------



## jokingo (Oct 21, 2006)

Para grabarlo necesitaras algun grabador como este:

_Buscar en Mercadolibre: MLA-20560605-_JM_

Pero ese cuesta cerca de 40€, igual encuentras uno mas barato... busca grabador 12F629 en google y a ver que te sale.

Puedes probar con este PicStart Plus, con este otro IC-PORG 1.05C. En este enlace de esta misma pagina hablan sobre el mismo PIC que el tuyo:

https://www.forosdeelectronica.com/about5663.html

Creo que los enlaces y explicaciones te pueden ser de gran ayuda.

respecto al lenguaje de programacion utilizado no se cual es ( C++, Visual...), pero lo que te puedo asegurar es que no es ensamblador, que es el que normalmente se utiliza para programar los PIC. Por lo que te tendras que bajar un compilador que entienda ese lenguaje. Esto preguntalo en esta misma pagina en interfases y programacion, a ver si te pueden ayudar.


----------



## Jorf (Oct 21, 2006)

Gracias! A leer!!!


----------



## psicodelico (Oct 21, 2006)

Ches!!, ya que estan hablando del 12f629, no pueden tirar data de como migrar codigo escrito para el 12c508,
ya catze que primero que nada hay que desabilitar los comparadores...
la memoria ahora empieza en 20h ...
que mas hay?
gracias.


----------



## jokingo (Oct 22, 2006)

psicodelico dijo:
			
		

> Ches!!, ya que estan hablando del 12f629, no pueden tirar data de como migrar codigo escrito para el 12c508,
> ya catze que primero que nada hay que desabilitar los comparadores...
> la memoria ahora empieza en 20h ...
> que mas hay?
> gracias.



Jo tio, no te lo tomes a mal, pero es que no entiendo nada de lo que quieres decir.


----------



## psicodelico (Oct 22, 2006)

Vale, en castellano que todos entendamos..., lo que quiero hacer es migrar un código fuente que está escrito para el PIC 12C508, imagino que retocándolo, se podrá hacer que compile y corra en un PIC 12F629, hago esto porque ya tuve la mala experiencia de no poder grabar el 12C508, y claro al fallar en su grabación lo inutilice. Compre otro 12C508, y otra vez lo mismo... buscando por ahí encontré que los PIC que son *"OTP"* _(One-Time-Programmable)_, usan otro tipo de grabador, Yo me arme el que está en "pablin", 
http://www.pablin.com.ar/electron/circuito/mc/ppp2/index.htm
Y con él grabe exitosamente el 16F84.
Más allá de eso, prefiero el 12F629, porque tiene más ROM/RAM, comparadores, es FLASH _(regrabable)_ y otras cosas mas, por lo tanto se puede experimentar con él hasta atinarle, entre tantos fallos.
El código en cuestión está en:
http://www.hpcalc.org/hp48/docs/misc/rs232-ir.zip
Es un archivo PDF, extraje el código, para poder dárselo al compilador de MicroChip
En el documento se explica que es un circuito montado alrededor del 12C508 que hace de codificador/decodificador IRDA, para usar en la calculadora HP48, hago esto porque por aquí es imposible conseguir el MCP2120 _(o algo semejante, HSDL7000... )_
Lo más fácil sería comprar un 12F508, y cargarlo con el código objeto disponible en la página en cuestión, pero tampoco se encuentra eso en estas tiendas de electrónica, únicamente hay 12F629
En eso de retocar el código fuente, lo primero que veo como diferencia es que la RAM ahora está empezando en 0x20, también hay que agregar un par de instrucciones para desactivar los comparadores, ¿se entiende ahora?


----------



## psicodelico (Oct 26, 2006)

Jorf, si te sirve de dato, con ese programador de "Pablin" (puerto paralelo), grabé exitosamente el 12F629, imagino que a Vos también te funcionará, y por cierto, claro que es reprogramable...


----------



## Jorf (Oct 26, 2006)

Gracias! Estoy haciendo lo mismo ahora con un 16F84


----------



## cesartm (Nov 20, 2008)

Voy a empesar dicienendo que quiero hacer nuevamente el POV de Jose Pino, que funciono a la primera tal cual dio el diagrama con dos pilas AA, pero ahora lo instale en un pequeno motor donde tome el power supply (hasta ahi todo bien sin el circuito), despues un 7805 para que saliera 5V(con el circuito,  para que alimentara el 12f629 es donde quiero que me digan lo que quieran, yo se que la cague pero no se donde? en el programador no es ya que lo hice ya hace 8 meses, el data sheet me dice todo con respecto al micro pero mi idea esta mal, agradesco mucho.


----------



## Meta (Nov 21, 2008)

Jorf dijo:
			
		

> Gracias! Estoy haciendo lo mismo ahora con un 16F84



Hola Jorf:

Muy bueno para empezar, tal que hasta hicieron un libro sobre él como www.pic16f84a.org

Un cordial saludo.


----------



## Vegetal Digital (May 26, 2009)

La ICD2 puede grabar el 12f629?


----------



## Quino29 (Ene 19, 2011)

Jorf dijo:


> Recién estoy empezando con esto de los PICs y no comprendo muy bien algunas cosas, mi pregunta es: Es reprogramable el PIC en cuestion? Donde veo este dato en el Datasheet del mismo?



Los PIC's con memorias FLASH se puede reprogramar


----------



## chapin (Ene 22, 2011)

una pregunta que compilador es el que utiliza el programa de Jose Pino ?


----------



## ilcapo (May 19, 2011)

Hola por lo que yo tengo entendido el pic 12F629 es "OTP" (One-Time-Programmable), tampoco intente regrabarlo a ver si se podia, alguien probó regrabarlo ??? saludos!


----------



## chapin (May 20, 2011)

12f629 es tipo flash, osea reprogramable, lo que tienes que tener cuidado es no perder el valor de calibracion de el calibrador interno.


----------

