# PLC con LD-MICRO



## KOX (Ago 28, 2009)

Hola a todos, soy Javier soy nuevo en el foro al igual que en la programacion, mi proble es que tengo que controlar un proceso de llenado de botellas y lo tengo pensado hacer con el programa Ld-micro, es este programa contienen las aplicaciones del microcontrolador 16F876 como el camvertidor A/D y modulo de PWM mi problema es que necesito usarlos pero no puedo configurarlos, tambien pretendo introducir una pantalla lcd.

Si alguien lo a utilizado y me podria ayudar se lo agradeceria.

Les dejo el link donde lo encontre el programa:

Torres Electrónico  LDmicro: Lógica Ladder para PIC y AVR

Un saludo a todos.


----------



## rednaxela (Ago 28, 2009)

Como así que no los puedes utilizar?, mira ésta página allí hay información (inglés) no es que sea la última versión pero tiene buenos datos, por ahí hay un tutorial y várias versiones de descargar de ld micro(español).

PD: Que es lo que no puedes utilizar o no puedes ejecutar el programa?


----------



## KOX (Sep 1, 2009)

Gracias por la pagina ya la visite, tiene varios ejemplos. Lo que no puedo configurar es el modulo PWM.

Saludos


----------



## rednaxela (Sep 1, 2009)

Mira, de rapidez hice esto pero no estoy seguro si funciona(no estoy en casa), simulalo en proteus y comentas que paso, es algo muy sencillo no se si es lo que  buscas.


----------



## KOX (Sep 15, 2009)

Gracias por tu aporte, lo simule y si funciona, pero tengo una duda: en MOV le das valor a la fuente de 50 para que sirve.

Un saludo y una disculpa por tardar en contestar.


----------



## rednaxela (Sep 15, 2009)

Ese "50" es el ciclo útil --> 50%


----------



## Kacike07 (May 2, 2010)

hola amigos ud me pueden ayudar a programa run pic 16f628 con un display lcd atraves del ldmicro por favor

de antemano muchas gracias


----------



## mastro235 (Oct 12, 2010)

Buenas, necesito saber si alguien de uds tiene alguna rutina con ldmicro y max232 para comunicarme con el puerto serie de mi pc, desde ya muchas gracias.


----------



## joselandia (Ago 8, 2012)

hola amigos!!.. un favor, alguien me podia mostrar un ejemplo de como programar en el ldmicro un lcd de 16x2 y de cualquier parametro para que muestre el valor de una entrada analogica?..por favor..


----------



## etp94 (Ago 30, 2014)

Buen día, recién conocí y me registre a este foro porque encontre la base de lo que buscaba en un Post de su comunidad, es por eso que decidí registrarme y consultar a la comunidad mi siguiente duda, la cual es acerca del programa LD-Micro, dicho programa lo he empezado a usar desde la semana pasada por una materia de Fundamentos de PLC\'s que me encuentro cursando. Hasta ahorita en mi parecer el programa es muy sencillo y tiene buenos alcances, al menos los suficientes para explorar la programación en escalera, mas sin embargo aún encuentro fallas en mi programación ya que por el momento desconozco como se implementan correctamente las herramientas del programa.

Lo que intento hacer en el program LD-micro con un PIC 16F877 es lo siguiente:

1.- Hacer una lectura ADC (Listo)
2.- Hacer una comparación para evaluar si mi ADC esta sobre el nivel medio del rango que da el ADC (No listo)
3.- Hacer una comparación para evaluar si mi ADC esta bajo el nivel medio del rango que da el ADC (No listo)
4.- Al cumplir los casos 2 o 3 se dará una salida PWM del 100% o 50% respectivamente con una frecuencia de 1kHz (Listo)

Como ven el problema esta en que no se usar los comparadores, el potenciometro que utilizo del PROTEUS me da una variación de voltaje en su salida de 0V a 5V, en el LD micro es así como le he encontrado una posible solución:

                                                                     Adc
1--------------------------------------------(READ ADC)----
2----[Adc >]---------------------------------{PWM :=  }----
      [ 2   ]                                                {100 MOV}
3----[Adc >]---------------------------------{PWM :=  }----
      [ 2     ]                                                {50 MOV }
                                                                      PWM
4--------------------------------------------{PWM 1.00 kHz}-    

-----[END]-------------------------------------------------- 

Al simular en el isis el programa me genera una señal PWM que no satisface mis expectativas.
Agradecería mucho una respuesta. Les dejo un archivo rar del programa:


----------



## torres.electronico (Ago 30, 2014)

No habia visto nunca este topico y lo mas gracioso, es que cita una pagina antigua mia donde arrancaba a promocionar este sistema que en su moomento era novedoso para todos los que querian aprender automatizacion con un PLC homemade de bajo coste... Bueno, te comento que me ganaste de mano por que no termine de armar el otro topico donde toco justamente una parte a LDmicro, pero vamos a tratar de resolverlo aqui, y cuando termine el otro topico, anexare este mismo topico como una especie de TIP...
Te dejo un ejemplo sencillo donde almacenamos el dato de la lectura del ADC en la variable "Aspeedvar", y luego, hacemos una comparacion y con ella generar una salida PWM variable.
No es muy complejo el programa, asi que podras facilmente anexar las otras lineas a este mismo para genmerar tus dos PWM que querias...saludos


```
LDmicro export text
for 'Microchip PIC16F877 40-PDIP', 8.000000 MHz crystal, 10.0 ms cycle time


LADDER DIAGRAM:

   ||                                                   ||
   ||                                      Aspeedvar    ||
 1 ||-------------------------------------{READ ADC}----||
   ||                                                   ||
   ||                                                   ||
   ||                                                   ||
   ||                                                   ||
   || [Aspeedvar >=]    [Aspeedvar <]   {duty  :=    }  ||
 2 ||-[ 250        ]----[ 300       ]---{ 25      MOV}--||
   ||                                                   ||
   ||                                                   ||
   ||                                                   ||
   ||                                                   ||
   || [Aspeedvar >=]    [Aspeedvar <]   {duty  :=    }  ||
 3 ||-[ 500        ]----[ 550       ]---{ 50      MOV}--||
   ||                                                   ||
   || [Aspeedvar >=]    [Aspeedvar <]   {duty  :=    }  ||
   ||-[ 750        ]----[ 800       ]---{ 75      MOV}--||
   ||                                                   ||
   ||                                                   ||
   ||                                                   ||
   ||                                                   ||
   || [Aspeedvar >=]                    {duty  :=    }  ||
 4 ||-[ 1023       ]--------------------{ 100     MOV}--||
   ||                                                   ||
   ||                                                   ||
   ||                                                   ||
   ||                                                   ||
   ||                                        duty       ||
 5 ||-----------------------------------{PWM 1.00 kHz}--||
   ||                                                   ||
   ||                                                   ||
   ||                                                   ||
   ||------[END]----------------------------------------||
   ||                                                   ||
   ||                                                   ||


E/S ASIGNACIÓN:

  Nombre                     | Tipo               | Pata
 ----------------------------+--------------------+------
  Aspeedvar                  | entrada adc        | 2
  duty                       | salida PWM         | 16
```


----------



## etp94 (Ago 30, 2014)

Muchas gracias ahora entiendo que mi ADC va de 0 a 1024 y que mi PWM va de 0 a 255  ,  Una pregunta: si quiero igualar mis valores de ADC con los del PWM puedo realizar una división de mi lectura entre 4 con la instrucción de dividir?


----------



## torres.electronico (Ago 31, 2014)

no podrias pasar de word a un solo byte con la division, ya que es una division de 16 bits... En ese caso, lo que podes hacer es pasarlo a dos bytes... Antes de que me olvide, vamos a corregir algo... no va de 0 a 1024... va de 0 a 1023 (el cero se cuenta )


----------



## etp94 (Ago 31, 2014)

Muchas gracias por la corrección, word es un tipo de longitud no?  , debo estudiar más esa parte jaja la desconozco, creo que esto se debe a que programo PIC's en MikroC y hasta ahorita no he necesitado entender tanto de registros, recomienda que aprenda ensamblador?, si es así sabrá de algun software con el que se programe ensamblador o como se hace? , habrá alguna fuente o libro que recomiendes?

De nuevo le agradezco la ayuda.

Por cierto no se si estas preguntas sean adecuadas para el Post ya que deja a un lado LD-Micro, disculpe es la primera vez que utilizo un foro.


----------



## torres.electronico (Ago 31, 2014)

word es el formato que le damos a la variable... Este formato, es la  resolucion del dato que almacenamos, y hay varios tipos de  almacenamiento de variables (bit-byte-word-long)...
vamos a mezclar un poco las cosas par que puedas entender la parte del DAC de 10 bits que trabaja LDmicro...
Tomando el ejemplo citado anteriormente, y ya sabiendo que estamos trabajando en 10 bits,la configuracion interna del micro dice:

ADCON1 = %00001110  ;configuración de las funciones de los pines de los puertos del A/D
_*significa:*_
*Bit 7:* 1 es justificación a la izquierda.
*Bit 6-4:* no se usan.
*Bit 3-0:* solo un canal analógico, V de referencia + es VDD y V de referencia – es VSS.

 Ahora vamos a la practica; Tomemos como ejemplo  el ADC de los micros de la series 16F873/76/77 que se puede trabajar en 8  o 10 bits. 
El valor leído por el puerto analogico debe ser  multiplicado por la resolución para obtener el valor analógico que se  está capturando.
Por ejemplo:

*Valor Analogico= ADCIN x ADC_resolución*

donde

*ADC_resolucion= Vref/2numbits*
_*Vref/1024*_ _(en caso de ser 10bits - 0 a 1023)_ 
_*Vref/256*_ _(en caso de ser 8 bits - 0 a 255)_ 

tomando como ejemplo una referencia de 4,88v , mas simplificado seria algo asi

*ADC_resolucion=* 4,88/1024 = 0,004765625 osea 4,7mV

o  sea, si el sensor trabaja de 0 a 5V (4,88V), cada paso ira de 4,7 en  4,7 milivoltios. Si deseas hacer la inversa, un regla de tres te ayudara  facilmente a saber cualquier incognita...

Por ejemplo _*Vref =  0,004765625 * 1024 = 4,88V*_

Para aplicarlo en un proyecto, ya tenemos los datos mas relevantes... Vref y ADC_resolucion, entonces la operacion seria:

ADCIN 0, LECTURAadc 
TEMP1 = 488 * LECTURAadc  ; (4,88v * LECTURAadc)

En breve, veo de armarte un ejemplo completo en el otro topico...ahi anoche ya arranque a subir un tutorial sobre el manejo y programacion...saludos


----------



## Mushito (Mar 23, 2015)

Ya monté mi hardware en PCB con el PIC16F628 7 entradas digitales y 4 salidas a reles, un puerto RS232...pero no se como testear el puerto serial.
¿alguien tiene un ejemplo simple como la de enviar un caracter cuando una entrada digital este activa?


----------



## torres.electronico (Mar 23, 2015)

Arranquemos por lo principal. ¿Qué PCB tenes o qué pines estás usando?

http://cq.cx/ladder-forum.pl?action=viewthread&parent=4218

Aclaro... RS-232 sólo lo probé con el 16F876/7


----------



## Mushito (Mar 24, 2015)

los mismos que carga por defecto el LDmicro (al seleccionar el PIC16F628 carga por defecto los pines TX-pin8 y RX-pin7 en la asigancion de pines)


----------



## torres.electronico (Mar 24, 2015)

No señor 
Te pregunte por el hardware, por que necesitas acondicionar la transmiion... (max232)


----------



## dinoelectro (Mar 24, 2015)

KOX dijo:


> Hola a todos, soy Javier soy nuevo en el foro al igual que en la programacion, mi proble es que tengo que controlar un proceso de llenado de botellas y lo tengo pensado hacer con el programa Ld-micro, es este programa contienen las aplicaciones del microcontrolador 16F876 como el camvertidor A/D y modulo de PWM mi problema es que necesito usarlos pero no puedo configurarlos, tambien pretendo introducir una pantalla lcd.
> 
> Si alguien lo a utilizado y me podria ayudar se lo agradeceria.
> 
> ...



LDMicro es un lenguaje muy limitado  lejos de facilitar las cosas las complica.. existen lenguajes de programación de alto nivel fáciles de aprender como C o BASIC tu proyecto se desarrollaría con poquísimas líneas de código. .. 

Lenguajes como LDMICRO FLOWCODE PARSIC NIPLE son malos y no vale la pena dedicarse mucho a ellos.. créeme


----------



## torres.electronico (Mar 24, 2015)

dinoelectro dijo:


> LDMicro es un lenguaje muy limitado  lejos de  facilitar las cosas las complica.. existen lenguajes de programación de  alto nivel fáciles de aprender como C o BASIC tu proyecto se  desarrollaría con poquísimas líneas de código. ..
> 
> Lenguajes como LDMICRO FLOWCODE PARSIC NIPLE son malos y no vale la pena dedicarse mucho a ellos.. créeme


Hola, Dino. No te confundas. 

[OFF-TOPIC] ON
Quizás en el arenero entre amigos y conocidos. ¿Te parece?
Más que nada te lo comento por que hay personas que tienen experiencia en automatización y no en Programación de microcontroladores.

Así que respetemos el hilo del tema. "LDmicro, o sea, lenguaje Ladder en microcontroladores. ¿Si?
[OFF-TOPIC] OFF

Volvamos al tema inicial.


----------



## Mushito (Mar 25, 2015)

Estimado torres.electronico:
Tu siempre fuiste de mucha ayuda en los foros. Asi es mi PLC tiene acondicionamiento de señales en la parte de entradas esta optoacoplado y la salida es a reles, ya hice pruebas con programas cencillos y la parte digital funciona perfectamente. Para la parte de comunicacion con el exterior estoy usando los pines de transmision serial RS232 con el max 232 y para recibir la transmision estoy usando mi laptop con un conversor RS232 a USB, la direccion del puerto esta ok, los datos de transmision bps, paridad, etc esta bien configurado, mi problema es ¿como hacer un programita bien simple que cuando una entrada digital este en "1" logico, envie el carcter "A" (por ejemplo) y lo reciba en el hiperterminal de windosXP


----------



## pandacba (Mar 25, 2015)

dinoelectro dijo:


> LDMicro es un lenguaje muy limitado  lejos de facilitar las cosas las complica.. existen lenguajes de programación de alto nivel fáciles de aprender como C o BASIC tu proyecto se desarrollaría con poquísimas líneas de código. ..
> 
> Lenguajes como LDMICRO FLOWCODE PARSIC NIPLE son malos y no vale la pena dedicarse mucho a ellos.. créeme



La programación de mircroprocesadores es una cosa y los PLC es una cosa muy específica y los lenguajes lader estan orientados a ellos precisamente, y decir que complica es un error conceptual...
Por ejemplo en un PLC hacer un retardo a la conección es mucho más sencillo, más bien un lenguaje lader es un lenguajde de alto nivel, que permite programar el dispositivo con mucha mayor rapidez que un microprocesador..... porque precisamente utilza ordenes especificas porque su aplicación es especifica, que es el campo de la automación que es un mundo muy diferente.
Si lo tuyo son los micros bárbaro, no menosprecise un mundo donde es reevidente que jamás has incursionado, donde los tiempos de respuesta para dar soluciones son muy breves...
Si fuera  como tu dices no existirian los PLC, tan importante es su aplicación que ha llevado a que existan los llamado microplc como el Logo! de Siemens, el Zelio, Telemecanique, el Milleniun II de Crouzet, los Allen Bradley y un montón más que se programan en lader
Se venden por miles, porque en el tiempo que vos escribis las primeras funciones en lader tenes echa una aplicación, ya que no requiere compilar ni nada de eso, se pueden programar en la PC o en el dispositivo mismo.

Hace lo siguiente y comprobalo, entra a la pàgina de siemens, hay muchos ejemplos, trata de llevaros a cabo con tu lenguaje habitual, si lo haras pero en cuanto tiempo?
Con la ventaja que una vez programado sin cambiar nada en el progrma se pueden modificar sus parámetros...... y sin conectarte a una PC


----------



## dinoelectro (Mar 25, 2015)

pandacba dijo:


> La programación de mircroprocesadores es una cosa y los PLC es una cosa muy específica y los lenguajes lader estan orientados a ellos precisamente, y decir que complica es un error conceptual...
> Por ejemplo en un PLC hacer un retardo a la conección es mucho más sencillo, más bien un lenguaje lader es un lenguajde de alto nivel, que permite programar el dispositivo con mucha mayor rapidez que un microprocesador..... porque precisamente utilza ordenes especificas porque su aplicación es especifica, que es el campo de la automación que es un mundo muy diferente.
> Si lo tuyo son los micros bárbaro, no menosprecise un mundo donde es reevidente que jamás has incursionado, donde los tiempos de respuesta para dar soluciones son muy breves...
> Si fuera  como tu dices no existirian los PLC, tan importante es su aplicación que ha llevado a que existan los llamado microplc como el Logo! de Siemens, el Zelio, Telemecanique, el Milleniun II de Crouzet, los Allen Bradley y un montón más que se programan en lader
> ...



LADDER es un lenguaje pensado para programadores sin experiencia para que puedan desarrollar aplicaciones sencillas; A medida que las aplicaciones van tomando complejidad, se presentan algoritmos sumamente dificiles para que puedas dar solucion mediante este tipo de lenguajes. Es por ello que la mayoria de fabricantes de PLC de GAMA ALTA incorporan lenguajes de texto estructurado como BASIC,  PASCAL o C. 

Teniendo herramientas tan poderosas para programar microcontroladores, considero una incensatez utilizar el LADDER.





torres.electronico dijo:


> Hola, Dino. No te confundas.
> 
> [OFF-TOPIC] ON
> Quizás en el arenero entre amigos y conocidos. ¿Te parece?
> ...



Entiendo torres-electronico, Yo solo estaba haciendo un parentesis al tema y sin animo de ofender a nadie  de echo me disculpo; por haberme salido del tema


----------



## pandacba (Mar 27, 2015)

Para los que les interese el tema les dejo donde obtener el progama actualizado
http://www.cq.cx/ladder.pl#dl


----------



## torres.electronico (Mar 27, 2015)

Mushito dijo:


> Estimado torres.electronico:
> Tu siempre fuiste de mucha ayuda en los foros. Asi es mi PLC tiene acondicionamiento de señales en la parte de entradas esta optoacoplado y la salida es a reles, ya hice pruebas con programas cencillos y la parte digital funciona perfectamente. Para la parte de comunicacion con el exterior estoy usando los pines de transmision serial RS232 con el max 232 y para recibir la transmision estoy usando mi laptop con un conversor RS232 a USB, la direccion del puerto esta ok, los datos de transmision bps, paridad, etc esta bien configurado, mi problema es ¿como hacer un programita bien simple que cuando una entrada digital este en "1" logico, envie el carcter "A" (por ejemplo) y lo reciba en el hiperterminal de windosXP



Ok. Ahora si te entiendo.
Mira, ando sin PC, pero si tenes paciencia, en un par de días ya voy a estar con PC y te hago un ejemplo cortito.
Es un poco engorroso, pero con un ejemplo lo vas a entender a la perfección.

Saludos.


----------



## Saint_ (Mar 28, 2015)

Hola Mushito, asumiendo que tienes el harware totalmente funcional este un ejemplo básico para trasmitir un carácter por el puerto serie.
Por otro lado, si vas a jugar, experimentar, dedicarte, etc., a este programa (LDmicro) te sugiero que uses un PIC de mayor capacidad de memoria ya que LDmicro no hace una buena optimizacion de código por lo cual ocupa mas espacio en la memoria comparado con otros lenguajes de programación.
Un saludo.


----------



## Mushito (Mar 31, 2015)

Gracias por la ayuda, estimado torreselectronico.
Gracias por la sugerencia y el ejemplo de transmisión, estimado Saint_.

Para empezar, estoy pretendiendo probar y perfeccionar un micro PLC de pocas ventajas y con el PIC16F628 bastan y sobran.
Luego desarrollaré un hardware para el PIC16F877A y luego con COM virtual y un PIC18F2550, pero estoy avanzando de a poco.


----------

