Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   ASM y Microcontroladores (https://www.clubdelphi.com/foros/forumdisplay.php?f=44)
-   -   Electrónica, Microcontroladores y Delphi (https://www.clubdelphi.com/foros/showthread.php?t=54277)

MaMu 13-03-2008 02:36:41

Electrónica, Microcontroladores y Delphi
 
Bueno, es nada más para decir, que si alguien necesita ayuda con la parte de HARDWARE experimental o proyectos que involucren electrónica y microntroladores, estoy a disposición para colaborar. Soy técnico en robótica, por lo que este apartado de asembler es mi debilidad. Si necesitan diseñar circuitos, etc, no duden en consultarme.


Saludos

Caral 13-03-2008 02:43:32

Hola
Pues yo necesito unos cuantos robots que reemplacen a mi personal, cuando empiezo el curso.:D:D:D
Saludos

MaMu 13-03-2008 04:54:54

Cita:

Empezado por Caral (Mensaje 272885)
Hola
Pues yo necesito unos cuantos robots que reemplacen a mi personal, cuando empiezo el curso.:D:D:D
Saludos

Depende de la tarea que realicen, todo es automatizable, lo que no significa que sean un 100% autónomos, algunas veces requieren de la intervención humana, como en el caso tuyo, quizas un regaño al personal, :D:D:D

eduarcol 13-03-2008 05:01:01

Cita:

Empezado por mamu (Mensaje 272903)
Depende de la tarea que realicen, todo es automatizable, lo que no significa que sean un 100% autónomos, algunas veces requieren de la intervención humana, como en el caso tuyo, quizas un regaño al personal, :D:D:D

JEJEJE, has dado en el blanco, Carlos no cambia el personal por robot, luego a quien regaña?? :D:D

rretamar 13-03-2008 17:15:59

Hola.
De robótica nada, pero trabajo con microcontroladores (la línea PIC de Microchip, programándolos en Pascal) y también uso Delphi.

(Los dos chips grandes de la foto...tienen código generado con un compilador de Pascal...cada chip tiene 32 Kb de memoria para programa y 2 Kb de RAM) :)



Intento ganarme la vida en la parte de electrónica e informática industrial. Me interesa todo lo referido a control, adquisición de datos, monitoreo, automatización. Así que intentaré aportar lo que se pueda al foro y por supuesto, aprender de otros.

Saludos !

JoseFco 13-03-2008 18:35:49

Hola Amigos.

(la línea PIC de Microchip, programándolos en Pascal)

Suena interesante, me gustaria aprender.

Un Saludo.

MaMu 13-03-2008 22:14:15

Cita:

Empezado por JoseFco (Mensaje 273039)
Hola Amigos.

(la línea PIC de Microchip, programándolos en Pascal)

Suena interesante, me gustaria aprender.

Un Saludo.

El unico problema es el peso final del HEX compilado, ya que todo se pasa a HEX, lo que hacen los compiladores es traducción LINEA a LINEA, por lo que casi nunca queda optimizado el código y la redundancia de código es abundante. La ventaja es con la comodidad que se programa. Al igual que en C, es muy cómodo, pero yo prefiero el assembler, es cuestión de gusto y de costumbre, pero a veces es cuestión de espacio.

Saludos

seoane 13-03-2008 22:27:57

Desde la universidad que no programo microcontroladores. Mi proyecto de fin de carrera lo hice en ensamblador y delphi, en cuanto al hardware la pieza principal era un PIC 16876, lo echo de menos :(

MaMu 13-03-2008 22:35:08

Cita:

Empezado por seoane (Mensaje 273123)
Desde la universidad que no programo microcontroladores. Mi proyecto de fin de carrera lo hice en ensamblador y delphi, en cuanto al hardware la pieza principal era un PIC 16876, lo echo de menos :(

Tengo unos cuantos dando vueltas, y aunque algunos como 16F84 hayan sido reemplazados por el 16F628, todavia les saco el jugo, apenas me sobran dos bits de eeprom para guardar los ultimos 2 digitos del año, jeje.

El unico problema, es que estamos en ASM, faltaría el subforo Electrónica & Delphi como para no desvirtuar el asunto.

Salutes

JoseFco 13-03-2008 22:55:13

Hola mamu.

Mi comentario anterior fue una broma jejejeje es que me resulto curioso lo de programar un micro en Pascal. (la línea PIC de Microchip, programándolos en Pascal) Claro yo entendi lo que queria decir el amigo.
Yo estoy de acuerdo contigo en que algunos copiladores solo generan mas codigo de lo que en realidad hace falta.Yo entre en el mundo de los microcontroladores a principio de la decada de los 80s y aprendi de una forma poco usual (metiendo hex uno a uno) pero fue la unica forma de entenderlos en esa epoca.Luego llegaron los Dallas DS5000 con sus Dinamic Rams y fue mas facil la cosa ya me permitia programar sobre lo programado y usando otras herramientas.
Mis primeros programas eran creados en programadores universales y hex a hex, con las instruciones mcs-51 a mi lado para entender que estaba haciendo y que queria hacer en cada funcion.Eso hoy dia suena a tecnologia atrasada jajajaja y estoy de acuerdo.Pero eso me ayudo a entenderlos mejor y poder hoy dia mirando una linea de codigo "hex" o "Intelhex" saber que hace o que espera.Cuando uno domina las instruciones de un micro en particular solo hace falta un notepad y un copilador como el Tasm-51 para MS-DOS window.Creo mi programita asm lo guardo como tal llamo a tasm-51 miprogramita.asm miprogramita.hex y enter. Ya este me genera mi intelhex y a ponerlo al chip.
En microcontroladores el espacio de memoria es importante y eso se logra reduciendo al maximo el codigo.Asm es el camino para eso aunque suene tecnologia atrasada.

Un Saludo.

rretamar 13-03-2008 23:02:57

[quote=mamu;273118]a. Al igual que en C, es muy cómodo, pero yo prefiero el assembler, es cuestión de gusto y de costumbre, pero a veces es cuestión de espacio.

[quote]

rretamar 13-03-2008 23:14:26

Cita:

Empezado por mamu (Mensaje 273118)
a. Al igual que en C, es muy cómodo, pero yo prefiero el assembler, es cuestión de gusto y de costumbre, pero a veces es cuestión de espacio.

También es cuestión de tiempo y productividad. En especial si es un desarrollo muy complejo.

Por ejemplo en esa placa que mostré (es la placa principal de un equipo de balanceo) usa cálculos angulares y de tensión con punto flotante (incluyendo cálculos trigonométricos), manejo de strings ("campos de edición" numéricos y alnanuméricos en un display LCD), almacenamiento de una tabla de piezas (con sus correspondientes campos), comunicación con la PC, etc. Si no hubiera usado un lenguaje de alto nivel todavía estaría programando.

Ejemplo de un procedimiento de ingreso numérico de datos por teclado, con validación (máximo y mínimo):

Código:

// Mostrar campo de entrada de datos numéricos validado (tipo Word, 5 caracteres de largo)
//
{$ifdef Modo_programacion}
Procedure InputWord(Fila, Columna: Byte; Minimo, Maximo: Word; Var Valor: Word);
Var
  Tecla, Longitud: Byte;
  Valor_Original: Word;
Begin
  Valor_Original:=Valor;                                                  // Respaldar variable (por si se presiona Esc)
  WordToStr(Valor,Cifras);
  Trim5(Cifras);                                                          // Elimina los espacios a la izquierda
  Repeat
    Repeat
      LCD_Cmd(LCD_BLINK_CURSOR_ON);                                      // Activar cursor parpadeante
      Mostrar_Cifras(Fila, Columna);                                      // Mostrar Valor actual
      Tecla:=KeyPressed;                                                  // Esperar hasta que se pulse una Tecla
      Longitud:=StrLen(Cifras);
      If (Longitud < 5) Then                                              // No añadir más de 5 caracteres
        If (Tecla<>Borrar) And (Tecla<>Esc) And                          // Solamente agregar caracteres numéricos
          (Tecla<>ENTER) And (Tecla<>Coma) Then
              StrAppendSuf(Cifras,Tabla_Teclas[Tecla - 1]);              // Agregar dígito al final
      If (Tecla = Borrar) And (Longitud > 0) Then                        // Eliminar el último dígito
        Borrar_Ultimo_Caracter(Cifras);
      Mostrar_Cifras(Fila, Columna);                                      // Actualizar valor en pantalla
      Valor:=Str2Word(Cifras);                                          // Convertir en Valor numérico (se reemplazó la función StrToWord por un bug que presenta en la conversión)
    Until (Tecla = ENTER) Or (Tecla = ESC);
    If ((Valor < Minimo) Or (Valor > Maximo)) And (Tecla <> Esc) Then    // Valor fuera de rango. Advertir con mensaje parpadeante
      LCD_Blink(Fila + 1,'Valor fuera de rango', 0, 6);
    LCD_Cmd(LCD_CURSOR_OFF);                                              // Desactivar cursor     
  Until (Tecla=ESC) Or ((Valor >= Minimo) And (Valor <= Maximo));        // Si Valor=correcto o Tecla=Esc, salir
  If Tecla=ESC Then
    Begin
      WordToStr(Valor_Original, Cifras);
      Trim5(Cifras);
      Valor:=Valor_Original;                                // Si se presionó Esc, cancelar cambios
    End; 
  Mostrar_Cifras(Fila, Columna);                            // Visualizar Valor final
  Delay_Ms(300);                                            // Demora para que se visualice el Valor final
End;
{$endif}

Un procedimiento de cálculo:
Código:

//
// Analizar los datos capturados en vector Muestras y obtener: promedios angulares, promedios de tensión, máximos y mínimos
// Cálculo de la masa de desequilibrio actual
// Parámetros: número de Muestras -permite el promedio instantáneo a medida que se van adquiriendo los valores desde el uC secundario-
//
Procedure Analizar_Datos(Capturas: Word);
Var
  Contador: Word;
  Suma_Senos, Suma_Cosenos: Real;
Begin
  // Inicializar variables
  Ciclo.Angulo_Medio := 0;    // Promedios
  Ciclo.Valor_Medio  := 0;
  Ciclo.Delta_Valores:=0;      // Deltas
  Ciclo.Delta_Angulos:=0;
  Ciclo.Valor_Minimo:= 4095;  // Mínimos y máximos
  Ciclo.Valor_Maximo:= 0;
  Ciclo.Angulo_Minimo:= 359;
  Ciclo.Angulo_Maximo:= -359;
  //
  Suma_Senos:=0;
  Suma_Cosenos:=0;
  //
  For Contador:=1 To Capturas Do
    Begin
      // Actualizar acumulador de valores de tensión
      Ciclo.Valor_Medio  := Ciclo.Valor_Medio  + Muestras[ Contador ].Valor;
      // Actualizar mínimos y máximos de valores de tensión
      If Muestras[Contador].Valor > Ciclo.Valor_Maximo Then Ciclo.Valor_Maximo := Muestras[ Contador ].Valor;
      If Muestras[Contador].Valor < Ciclo.Valor_Minimo Then Ciclo.Valor_Minimo := Muestras[ Contador ].Valor;
      //
      // Calcular totales de senos y consenos (coordenadas x,y)
      Suma_Senos :=  Suma_Senos  + SIN( Radianes(Muestras [Contador].Angulo) );    // Obtener la suma de los senos  (coordenada y)
      Suma_Cosenos := Suma_Cosenos + COS( Radianes(Muestras [Contador].Angulo) );    // Obtener la suma de los cosenos (coordenada x)
    End;
  //
 // Obtener el ángulo medio a través del arco tangente de las coordenadas
  Ciclo.Angulo_Medio :=  Grados( ATAN2(Suma_Cosenos, Suma_Senos ) );
  If Ciclo.Angulo_Medio < 0 Then Ciclo.Angulo_Medio := Ciclo.Angulo_Medio + 360;  // Reducir ángulos "negativos"
  //
  // Reducir el ángulo a los primeros cuatro cuadrantes
  //
  Ciclo.Delta_Angulos:= Ciclo.Angulo_Maximo - Ciclo.Angulo_Minimo;
  //
  // Calcular diferencias entre máximos y mínimos para los valores de tensión
  Ciclo.Delta_Valores:= Ciclo.Valor_Maximo  - Ciclo.Valor_Minimo;
  // Promediar valores de tensión (siempre positivos o iguales a cero)
  Ciclo.Valor_Medio  := Ciclo.Valor_Medio  / Capturas;
  // Calcular porcentaje de delta T sobre T
  Ciclo.Porcentaje_DeltaT := (100 * Ciclo.Delta_Valores) / Ciclo.Valor_medio;
  // Calcular masa de desequilibrio
  Ciclo.Masa_de_desequilibrio:= Desequilibrio(Ciclo.Radio, Ciclo.Valor_medio, Ciclo.Velocidad, Configuracion.Constante_K );
  // Calcular Valor U medio ("cantidad de desbalanceo") g.mm
  Ciclo.U := Ciclo.Masa_de_desequilibrio * Ciclo.Radio;
End;

Aquí se usan los procedimientos para ingreso de datos desde teclado:

Código:

Procedure Ensayo_Automatico;
Var
  // Variables de respaldo de datos de Ciclo que se modificarán durante el ensayo
  Respaldo_Capturas: Word;
  Respaldo_Velocidad: Word;
Begin
  //
  Detener_motor;
  //
  Borrar_Pantalla;
  LCD_OutC(2,'Parametros');
  LCD_OutC(3,'del ensayo:');
  Delay_Ms(2000);
  Borrar_Pantalla;
  //
  // Permitir modificación de las variables de ensayo (Vmin, Vmax, intervalo)
  LCD_OutC(3,'ENTER: Confirmar');
  LCD_OutC(4,'ESC: No cambiar');
  //
  LCD_Out(1,1,'Vel. Min.:      rpm');
  InputWord(1, 12, 100, 1500 , Velocidad_Minima_ensayo);  // VMin: Valores permitidos: 100 a 1500 rpm
  LCD_Out(1,1,'Vel. Max.:      rpm');
  InputWord(1, 12, 100, 1500 , Velocidad_Maxima_ensayo);  // VMax: Valores permitidos: 100 a 1500 rpm
  LCD_Out(1,1,'Incremen.:      rpm');
  InputWord(1, 12, 1, 500 , Incremento_Velocidad_ensayo); // Incremento: Valores permitidos: 1 a 500 rpm
  LCD_Out(1,1,'Muestras :          ');
  InputWord(1, 12, 1, 300 , Numero_de_Capturas_Ensayo);  // Capturas: Valores permitidos: 1 a 300 rpm
  //
  Borrar_Pantalla;
  LCD_OutC(2,'Ensayo automatico');
  LCD_OutC(3,'Ciclo / Esc: Abortar');
  Direccionar_multiplexor(Salida_microcontrolador_principal);              // Direccionar salida de uC principal hacia port serie
  Usart_Write_Text('Inicio del ensayo'+#10+#13);                          // Enviar "encabezado"
  Delay_Ms(2000);
  // Respaldar variables de ciclo
  Respaldo_Capturas := Configuracion.Numero_de_capturas;                  // Respaldar número de Capturas
  Respaldo_Velocidad := Ciclo.Velocidad;                                  // Respaldar velocidad
  //
  Ciclo.Velocidad := Velocidad_Minima_Ensayo;                              // Setear velocidad minima inicial
  Configuracion.Numero_de_capturas := Numero_de_capturas_ensayo;          // Asignar número de Capturas al Valor de ensayo
  Repeat
    Arrancar_Motor(Ciclo.Velocidad, Ciclo.Sentido , Autodetencion_OFF);  // Arrancar motor
    Indicador_de_progreso;                                                // Mostrar indicador de progreso
    Realizar_Capturas;                                                    // Capturar datos
    Ciclo.Velocidad := Ciclo.Velocidad + Incremento_Velocidad_Ensayo;    // Incrementar velocidad del ensayo
  Until (Ciclo.Velocidad > Velocidad_maxima_ensayo) Or (Ultima_Tecla_Presionada = Pulsador_Ciclo) Or (Ultima_tecla_presionada = Esc); // Finalizar bucle
  // Restaurar variables de Ciclo modificadas durante el ensayo
  Configuracion.Numero_de_capturas := Respaldo_Capturas;                  // Restaurar número de Capturas
  Ciclo.Velocidad := Respaldo_Velocidad;                                  // Restaurar velocidad
  Detener_Motor;                                                          // Fin del ensayo: detener motor y Borrar pantalla
  Borrar_pantalla;
End;

Saludos ! ;)
End;

JoseFco 13-03-2008 23:48:10

Hola rretamar.

Entiendo el punto y lo complejo de la aplicacion.Veo dos microcontroladores, un 232 y algunos otros integrados en tu tableta.
Pero al final por mas complejo que lo puedas ver. Un microcontrolador es un encapsulado monolitico " no inteligente " que recorrera toda su memoria ejecutando intruciones y tomando diferentes vias de acuerdo a lo establecido en su programa y otros eventos internos y externos. Limitados a algunas manipulaciones Borleanas.Ya la parte mas profunda en las matematicas esas son para una pc y por eso la presencia del 232 en esa tableta.

Un Saludo.

rretamar 14-03-2008 02:28:44

El diseño inicial estaba basado en una Panel-PC y un microcontrolador externo, que con la ayuda de un ADC de 12 bits más un encoder, se encargaria de la adquisición de datos. Pero el cliente pidió que no se use una PC y se terminó usando dos micros, un teclado de membrana y un display LCD de texto:



En cuanto al tamaño del código generado, obviamente será más extenso un compilado que el ensamblador "a pelo", pero los microcontroladores de gama alta tienen generosas cantidades de memoria (en 64 Kb se puede meter MUCHO código en Pascal). Y hay microcontroladores con bastante más de 64 k, (a precios más que accesibles, incluso con conexión USB o ethernet) así que el espacio no es un problema.

Este tipo de proyectos los realizo estilo "open source", o sea entrego los planos (esquemas electrónicos) y el código fuente del software al cliente.

PD: Me uno a la petición de un foro "electrónica & Delphi". ¿ A quién hay que hablarle ?.

Saludetes ! :D

MaMu 14-03-2008 14:00:16

rretamar, es muy cierto lo que decis de los uC, sobre todo de los más nuevos. Yo prefiero el assembler, y apoyo mucho la programación de uC en otros lenguajes, ya que da la oportunidad de incorporar grandes mentes al mundo de los uC, exelentes programadores con escaso conocimiento de assembler.
Soy partidario que un buen programador de uC independientemente del lenguaje, debe estar familiarizado con la electrónica misma.
Podriamos hacer muchísimos tutoriales de técnicas de interface, donde se incluya la electrónica paso a paso, y su correspondiente ejemplo de control en delphi, pero no se en que espacio se ubicarían. Estoy más que convencido que unos cuantos colegas foristas empezarían a buscar "cablecitos" :D.

Saludos

rretamar 14-03-2008 17:17:51

Cita:

Empezado por JoseFco (Mensaje 273158)
Veo dos microcontroladores, un 232 y algunos otros integrados en tu tableta.

¡ Exacto ! es un MAX232. Te felicito por ser tan buen observador...no se ve lo que dice sobre el chip, pero apuesto que lo reconociste por los cuatro condensadores que tiene al lado :D .

Saludos !

JoseFco 14-03-2008 21:26:41

Hola mamu y rretamar.

Veo que les agradaria la idea de un foro de electronica.Foros de electronica en la web son los que sobran.A mi me gustaria un foro de microcontroladores orientados a trabajar con aplicasiones Delphi.Algo asi como crear programas en donde se emplearan uC y Delphi.
Eso estaria mas de acuerdo con la estructura de este foro.
Es solo una opinion.
Se puede estudiar la cosa y pues elevar la idea a San Emilio a ver si nos concede el milagrito.;)

Un Saludo.

MaMu 14-03-2008 23:06:00

Cita:

Empezado por JoseFco (Mensaje 273403)
Hola mamu y rretamar.

Veo que les agradaria la idea de un foro de electronica.Foros de electronica en la web son los que sobran.A mi me gustaria un foro de microcontroladores orientados a trabajar con aplicasiones Delphi.Algo asi como crear programas en donde se emplearan uC y Delphi.
Eso estaria mas de acuerdo con la estructura de este foro.
Es solo una opinion.
Se puede estudiar la cosa y pues elevar la idea a San Emilio a ver si nos concede el milagrito.;)

Un Saludo.

Si, la idea es que sea Electrónica & Delphi, donde se podrían tratar muchos temas relacionados a Delphi, incluyendo los uControladores.
Yo soy moderador de un foro de electrónica, pero es exclusivo de electrónica, y he tocado muchas veces el control mediante Pascal de algunas interfases.

Saludos

REHome 17-03-2008 19:57:56

Cita:

Empezado por mamu (Mensaje 273127)
Tengo unos cuantos dando vueltas, y aunque algunos como 16F84 hayan sido reemplazados por el 16F628, todavia les saco el jugo, apenas me sobran dos bits de eeprom para guardar los ultimos 2 digitos del año, jeje.

El unico problema, es que estamos en ASM, faltaría el subforo Electrónica & Delphi como para no desvirtuar el asunto.

Salutes

Hola mi muy distinguido amigo. Es sustituto del 16F84A ahora es el 16F88, antes era el 16F628A porque no estaba el 16F88. Como que en pines era muy poco, se empezó a usar el 16F876A y 16F877A. Para que lo sepan, su nuevo sustituto son el 16F886 y 16F887 que son más modernos.

Llegaron lo de gama alta y los más usados son el 18F2550 y el 18F4550

EDIT:

- Sobre la electrónica, aquí también se basa en electrónica para microcontroladores y asm. Pueden poner algo en youtube, ahora estoy practicando con los pic, ver ejemplo simple y básico.

http://es.youtube.com/watch?v=lB9TyErcVU4

- Sobre me MAX232, si no quieres que sean identificado de lejos por los 4 condensadores, hay uno que se llama MAX233 que es igual que el MAX232 con la diferencia que los condensadores son internos y que este IC cuesta más que el MAX232 junto con los 4 C.

- Sobre las imágenes de arriba, si tiene más imágenes, las pone para verlas, ya me he guardado las dos que pusiste. No se para qué usar dos pic de 40 pines habiendo uno de 80 y 100.

Un saludos.

rretamar 18-03-2008 00:30:57

Lo de los dos PICs es un error de diseño que lo pagué muy caro (en cuestión de tiempo de desarrollo). Por un lado me permitió que el uC principal delegue tareas al otro uC, eos me permitió dividir el problema en dos partes bien diferenciadas, pero por otro, tuve que implementar un rudimentario protocolo de comunicaciones entre ambos y hacer que "dialoguen entre sí").

Hoy en día no haría eso; como bien decís, usaría un uC grande "todo-en-uno" pero a veces hay que "quemarse" para aprender la lección.

Saludos !

JoseFco 18-03-2008 01:07:25

Cita:

Empezado por rretamar (Mensaje 273842)
Lo de los dos PICs es un error de diseño que lo pagué muy caro (en cuestión de tiempo de desarrollo). Por un lado me permitió que el uC principal delegue tareas al otro uC, eos me permitió dividir el problema en dos partes bien diferenciadas, pero por otro, tuve que implementar un rudimentario protocolo de comunicaciones entre ambos y hacer que "dialoguen entre sí").

Hoy en día no haría eso; como bien decís, usaría un uC grande "todo-en-uno" pero a veces hay que "quemarse" para aprender la lección.

Saludos !

Usar dos uC tiene sus ventajas ( pueden estar ejecutando al mismo tiempo por separado y cuando quieres el master detiene al esclavo por interrupcion, una vez terminada esta continuaria su rutina normal) son muchas las ventajas).
En lo personal nunca he trabajado dos uC tan serca uno del otro (en una misma placa) pero si en un mismo sistema y no existe uC alguno por muchos puertos y memoria que tenga.Lo que pueden hacer varios uC en un mismo sistema controlados por un master. Un ejemplo las alarmas de fuego por zonas.Cada zona es controlada por un uC y cuando tiene algo que compartir con el master, entonces se produce la comunicacion.Un sistema de 20 zonas por ejemplo.Tiene cada zona su uC que se esta comunicando con los distintos componentes( detectores de humo por ejemplo) y si todo marcha bien el master no tiene que enterarce de lo que pasa, pero si alguno de estos detectores de humo se va en alarma o no se comunica con el uC rutina que se hace cada unos cuantos segundos como medida de supervision, entonce si hay algo que comunicar al master.
Solo una de las tantas aplicaciones en las que un solo uC por muy potente que sea no puede hacer solito.;)

Un saludo y ese trabajo que muestras en la placa con tus dos uC es una obra de arte.

REHome 18-03-2008 10:52:57

Lo que dije arriba de usar un μC de 80 pines o 100 lo dije porque dos pic al lado me parecía raro, pudiendo poner uno.

Si están mucho más separado ya se entiende.

Eso si, es un reto hacer funcionar dos pic juntos. Lo entendería mejor si usara un pic para funciones y el otro para avisos de LED y LCD, cosas así.

Bueno, ya están los PIC32 que dicen ser muy buenos, ahora a 80MHz, antes 72Mhz, ya no se venden.

PD: Si tienes má imágenes de tus proyecto sea cual sea, lo pones por aquí para verlo, me llaman la atención estas cosas.

PD2: Por cierto, ¿qué cursos has hecho para hacer esos proyectos de calidad profesional?

rretamar 18-03-2008 12:16:40

En ese desarrollo la idea fue dividir las tareas principales en dos microcontroladores, a saber:

uC #1: encargado de tomar muestras de tensión desde un ADC, analizar esos datos, y al mismo tiempo la posición angular de un rotor a través de un encoder incremental. También mide la velocidad de giro del rotor.

uC #2: hace la "glue-logic", esto es: manejo de teclado, display LCD, acceso al RTC (reloj/calendario, a través de un chip externo), lectura de pulsadores adicionales, comunicación con la PC, impresión de etiquetas en una impresora de puntos LX300+, comnicación con una tercera placa que se encarga (mediante un set de 15 comandos) de controladr un variador de velocidad, rutina de auto-ensayo para calibración y obviamente recibe e interpreta los datos provenientes del primer uC.

Esta es la placa controladora de variador de velocidad, también basada en un PIC y con código generado por el compilador de Pascal:



En cuanto a cursos...mi formación al respecto es completamente autodidacta, ya que no tengo estudios "formales" en electrónica (soy técnico electromecánico y analista de sistemas...nada que ver...) y además de la práctica en sí, todo lo adquirí (y lo sigo haciendo) por medio de biblografía. Libros, libros y más libros (pdf y papel). :D

Lindo ladrillo me salió...

Saludos !

REHome 18-03-2008 14:42:49

Muchas gracias por responder mucho y la nueva imagen, otra foto guardada en mi PC.

Pues tienes mucho talento, también soy autodidacta y estoy aprendiendo con un libro en ASM puro y duro, le estoy cogiendo el gustillo aunque admito que es más complicado que en C.

¿Cómo hace esa placa PCB perfecta? Es decir, el color verde así y los símbolos blancos. Parece hecha de fábrica.

¿Sabes alguna Web que te explique cómo se hace la PCB en verde? Lo que he encontrado por www.google.com la verdad no son de calidad como la tuya ni tampoco verde.

Si has hecho toda esta placa tu sólo, vales más de lo que crees.

La verdad es que has hecho un buen trabajo.

EDIT:
Cómo se llaman estas cosas señalada en color aquí abajo para comprarlas. Lo he manejado en prácticas de empresas pero no recuerdo sus nombres, tampoco el alicate especial para los conectores.



Saludos.

rretamar 18-03-2008 17:41:47

Hola.
Respondo por partes:

La placa se hace con un software (un CAD) para diseño de circuitos impresos. Hay varios, libres y privativos: Protel, Eagle, Kicad, Orcad, etc.

Esos CAD te generan un archivo que lo envias a una empresa que se encarga de hacer el circuito impreso. Estos procesos se hacen con máquinas automáticas y por ende estas empresas te piden un mínimo de dos o tres placas para encargar (a más placas, el coste se abarata). Hay métodos para hacer circuitos impresos "caseros" pero ni se acercan a la terminación de uno hecho a máquina, además de que el diseño que podés hacer así es muy limitado (nada de máscara antisoldante, ni estañado, ni perforaciones metalizadas, ni serigrafía del lado de los componentes, ni nada...).

La parte de la placa que posteaste muestra una bornera de tres contactos (flecha roja) y los cables intertados en la misma tienen terminales TIF en los extremos. Estos terminales se consiguen (vienen en bolsas de 100, en diferentes diámetros) en las tiendas de electricidad, y las borneras para soldar en circuito impreso las compras en tiendas de electrónica. Además de un mejor acabado (cubren el extremo de la vaina plástica de los cables) , permiten un mejor contacto ya que la presión de los contactos de la bornera sobre el conductor es más uniforme. Cuando el equipo/máquina se pone "en producción", luego de uno o dos meses de funcionar les doy un reajuste a las borneras con un destornillador.


Terminal TIF similar al de la foto (tercero y cuarto, primera fila, de izq. a derecha).

Hay que pedir URGENTE si se puede crear un foro de "Delphi & Pascal y electrónica".

Saludos ! ;)

REHome 18-03-2008 18:40:57

Gracias amigo.

¿Y la empresa de hacer placas cómo se llama, dónde está o su web?

Has dicho Protel, ahora se llama Altium Designer y me parece el mejor para hacer PCB.

Lo de pedir como mínimo placas que son 3, ¿Cuánto puede costar? Sobre todo si es el tamaño de un grabador de pic TE 20x? Aproximadamente 10x20 cm.

Por cierto, ¿cómo se llaman esos alicates especiales para trabar las borneras en los cables?

Tenía intención de comprar una fresadora como esta que se muestra abajo pero economicamente no puedo.



Deja ver si encuentro uno más barata. Si por casualidad alguien encuentra una fresadora de PCB a un precio razonable, nos avisa por aquí.

Fuente:
http://www.elektor.es/extra/profiler...t.264487.lynkx

Vídeo:
http://mx.youtube.com/watch?v=vkmoy1YdZIA

rretamar 19-03-2008 17:26:25

En cuanto al costo de las placas, deberías consultar a empresas de tu país. Yo vivo en Argentina, así que esa información no te servirá de mucho (para no decir DE NADA). ;)

Saludos !

MaMu 19-03-2008 17:32:46

Cita:

Empezado por rretamar (Mensaje 273890)
En ese desarrollo la idea fue dividir las tareas principales en dos microcontroladores, a saber:

uC #1: encargado de tomar muestras de tensión desde un ADC, analizar esos datos, y al mismo tiempo la posición angular de un rotor a través de un encoder incremental. También mide la velocidad de giro del rotor.

uC #2: hace la "glue-logic", esto es: manejo de teclado, display LCD, acceso al RTC (reloj/calendario, a través de un chip externo), lectura de pulsadores adicionales, comunicación con la PC, impresión de etiquetas en una impresora de puntos LX300+, comnicación con una tercera placa que se encarga (mediante un set de 15 comandos) de controladr un variador de velocidad, rutina de auto-ensayo para calibración y obviamente recibe e interpreta los datos provenientes del primer uC.

Esta es la placa controladora de variador de velocidad, también basada en un PIC y con código generado por el compilador de Pascal:



En cuanto a cursos...mi formación al respecto es completamente autodidacta, ya que no tengo estudios "formales" en electrónica (soy técnico electromecánico y analista de sistemas...nada que ver...) y además de la práctica en sí, todo lo adquirí (y lo sigo haciendo) por medio de biblografía. Libros, libros y más libros (pdf y papel). :D

Lindo ladrillo me salió...

Saludos !

Veo esas resistencias de metalfilm y me imagino una super rampa (A/D-D/A)!!!!!!! El IC de color blanco, me suena a un cuadruple optoacoplador, como los de Telefunken. Como reloj externo que usaron un DS en tiempo real?
Linda plaqueta, Jeje

Saludos

rretamar 19-03-2008 17:59:21

Cita:

Empezado por mamu (Mensaje 274146)
Veo esas resistencias de metalfilm y me imagino una super rampa (A/D-D/A)!!!!!!! El IC de color blanco, me suena a un cuadruple optoacoplador, como los de Telefunken.

Hola.

Desentrañando el misterio de la plaqueta:

Efectivamente, se trata de un DAC de 16 bits implementado con una red R-2R basada en resistencias al 1%. Es algo aparatoso pero cumple su cometido (puedo controlar la velocidad de giro con una resolución de 1 rpm). El problema es que no disponía en el mercado de un DAC de suficiente resolución (al menos 10 bits) y como me suele suceder a veces, hay que diseñar al revés: se estudian los requerimientos y luego se hace la implementación según lo que se consiga en el mercado. Se que hay chips dedicados que hacen lo mismo y de forma mucho más simple, pero en este país no los comercializan.

De esa forma tengo una salida analógica lineal que me permite controlar el variador de velocidad en forma muy exacta. El optoacoplador blanco (cuáduple) se encarga de controlar las entradas digitales. Todo muy "artesanal", pero ya está hecho...y funciona !.

Para los curiosos, este es el esquema de la famosa :p plaqueta oscura: http://www.hrservicios.com.ar/Convertidor_DA.pdf.zip

Saludos !

REHome 19-03-2008 18:58:24

Muy buena aportaciones.

Por si le pica la curiosidad a alguien, me ha llegado un LCD hoy mismo en 3 días, a ver si lo manejo.

Mientras tanto, estaba antes mismo con la barra de led.

http://es.youtube.com/watch?v=00IpV2dPV1U

mario2000 28-03-2008 22:32:17

Hola rehome, me uno a este hilo. Soy muy bueno programando PIC's en varios lenguajes empezando por asm. Ultimamente me he dedicado a MikroC for PIC.

LEs cuento que me di cuenta que es importante conoser los tres lenguajes basicos de programacion de alto nivel en microcontroladores C Basic y Pascal.

El lenguaje C lo recomiendo mucho, por que debido a su gran difucion todos los micros en diferentes marcas tienen compiladores en C. Por ejemplo Freescale semiconductors los antiguos motorolas tienen un compilador c gratuito asta 16k mas que suficiente para aplicaciones avansadas.

El compilador CCS es lo mejor de lo mejor pero asi tambien es muy caro, pero altamente eficiente. Es por eso que este compilador es considerado de de desarrollo o de uso empresarial. Los compiladores de Mikroelectronica son muy buenos pero poco eficientes.

La eficiencia de un compilador para microcontrolador es un factor muy importante a tener en cuenta dados los escasos recursos en los micros como es la memoria de programa y la memoria ram de datos.

Una novedad ahora es el compilador Mikroc For 8051 con una interfas muy interesante. Todabia me falta probarla bien para decidir si es bueno pero si no para eso tenemos el Keil C51 un compilador del estilo ccs muy bueno y famoso para la linea 8051.

PAra los AVR tenemos muchos de mikroelectronica a exepcion del Mikro C For AVR :mad:

Con los avr y los 8051 somos mas afortunados ya que cuentan con compiladores libres en lengueje C aunque un poco complicados como el SDCC para 8051 y el WINAVR que se integra perfectamente con AVR Studio.

Unos compilador muy bueno y economicos son el CodeVision avr y el RKIT.

Bueno y muchos mas la mayoria utilizan el C por lo cual el lenguaje C es la mejor opcion si uno quiere programar muchas clases de microcontroladores.

Ademas el C es un lenguaje mucho mas sercano al ASM que es lo mas eficiente en generacion de codigo.

Un saludo a todos y mi mensage es que no solo existen los PIC pero por algo se comienza. :D

REHome 29-03-2008 02:57:06

Hola amigo.

Bueno, el otro día en otros foros hablamos de CCS no puedes ejecutar todas las instrucciones del PIC sobre todo si es nuevo, a veces hay que esperar un año, para ello puedes meter ASM por medio de C como parte del código. No se si es verdad, ya que sólo uso ASM con MPLAB.

¿Y MPLAB no incluye C para los PIC? He leído que si, pero pagando. PArace que los C todos son de pagos y los gratuitos dejan mucho que desear. Al menos en ASM hago lo que me da la gana.

MaMu 29-03-2008 03:44:08

Cita:

Empezado por REHome (Mensaje 276143)
Hola amigo.

Bueno, el otro día en otros foros hablamos de CCS no puedes ejecutar todas las instrucciones del PIC sobre todo si es nuevo, a veces hay que esperar un año, para ello puedes meter ASM por medio de C como parte del código. No se si es verdad, ya que sólo uso ASM con MPLAB.

¿Y MPLAB no incluye C para los PIC? He leído que si, pero pagando. PArace que los C todos son de pagos y los gratuitos dejan mucho que desear. Al menos en ASM hago lo que me da la gana.

Yo uso MPLAB, y si se puede usar C, pero con algunas inclusiones de código, es decir, hacer un include no se puede, pero meter alguna que otra funcion si se puede, ojo, hablando de la version gratuita, la que yo uso.

Saludos

mario2000 29-03-2008 18:26:28

Hola rehome te aclaro que los microcontroladores sobre todo los pic tienen un numero fijo de instrucciones y solo varia de familia a familia.
Los pic cuentan con varias familias entre ellas los PIC16xx los cuales tienen un numero de 35 instrucciones fijas las cuales no varian de modelo a modelo lo que si cambia son los perifericos que maneja.
Hacerca del asm algunos compiladores como el ccs cuentan con seudoinstrucciones asm que el compilador las reinterpreta como asm. Pero eso si todo buen compilador debe permitir la inclucion de codigo asm incluso el ccs y el mikroc. Aunque las comandos del mplab no los interpreta como la instruccion banksel entre otras. Es decir que se puede y un buen programador de Microcodigo debe saber utilisar asm dentro de su codigo ya sea C Basic o Pascal.
¿Por que el asm? muchas veses por que el compilador no nos da todas las obciones o cuando nesesitamos hacer mas eficiente nuestro codigo.
hasta luego:cool:

Dedalo 13-04-2008 00:00:18

Hola. Lo primero un saludo a todos los foreros. No conocia la existencia de este foro y ha sido para mi una agradable sorpresa.

Y despues del saludo os cuento. Yo llevo trabajando con microcontroladores desde que salió el i8748 a finales de los 80, siempre en assembler, y tengo unos cuantos proyectos funcionando por ahi. Nunca he programado uC en lenguajes de alto nivel porque no me fio de que la programacion sea tan eficiente como la que yo puedo hacer en assembler, es mas, para el 16F84 me hice mi propio entorno integrado (editor de texto/compilador/grabador flash) todo en uno. Pena que no me funciona en XP y tengo que recurrir a una maquina que tengo con W98 para hacerlo funcionar.

JoseFco 13-04-2008 00:19:11

Hola Delano.

El 8748 no lo conosco, pero si trabaje el 87C51 que era un 8051 pero con uv (ultra violeta) window para borrarlo. Ufff llovio mucho desde entonces jejejeje.
Yo desde que entre en el mundo de los uC en el 1986 solo trabajo los 8051 y sus parientes Dallas, Atmel,etc.
Y estoy de acuerdo en que nada como un codigo asm, reduces el peso del file y evitas las repeticiones de subrutinas.

Un Saludo.

MaMu 13-04-2008 02:55:04

Cita:

Empezado por Dedalo (Mensaje 279619)
Hola. Lo primero un saludo a todos los foreros. No conocia la existencia de este foro y ha sido para mi una agradable sorpresa.

Y despues del saludo os cuento. Yo llevo trabajando con microcontroladores desde que salió el i8748 a finales de los 80, siempre en assembler, y tengo unos cuantos proyectos funcionando por ahi. Nunca he programado uC en lenguajes de alto nivel porque no me fio de que la programacion sea tan eficiente como la que yo puedo hacer en assembler, es mas, para el 16F84 me hice mi propio entorno integrado (editor de texto/compilador/grabador flash) todo en uno. Pena que no me funciona en XP y tengo que recurrir a una maquina que tengo con W98 para hacerlo funcionar.

No se la causa de porque no te funciona en XP, pero asumo que debe ser por los Privilegios de acceso a las instrucciones de lectura/escritura de los puertos. De ser esta la causa, es solucionable, simplemente empleando un driver (en una dll, o en un OCX, como la THWinterface).

Saludos y ánimos, cada vez somos más los uControleros :D

Dedalo 13-04-2008 19:55:24

Efectivamente, no funciona la parte de E/S a los ports, y por otra grave imposibilidad, los tiempos de los pulsos de grabacion son del orden de uSeg, y eso lo hacía programando el oscilador del altavoz y esperando el fin de tiempo en un bucle hasta aparecer la bandera de IRQ del chip, pero con los problemas de E/S se multiplica el problema. Estoy trabajando en ello.

Dedalo 13-04-2008 20:00:31

Cita:

Empezado por JoseFco (Mensaje 279624)
Hola Delano.

El 8748 no lo conosco, pero si trabaje el 87C51 que era un 8051 pero con uv (ultra violeta) window para borrarlo. Ufff llovio mucho desde entonces jejejeje.
Yo desde que entre en el mundo de los uC en el 1986 solo trabajo los 8051 y sus parientes Dallas, Atmel,etc.
Y estoy de acuerdo en que nada como un codigo asm, reduces el peso del file y evitas las repeticiones de subrutinas.

Un Saludo.

El 8748 es el mismo que el 8048 (el que llevaban los teclados del IBM PC en 1980) pero con ventana de borrado UV. lo mas comodo que habia entes de llegar la flash.era de aquitectura harward, con mapa de datos y de programa independientes, tres ports de 8 bits, entradas testeables directas por soft, varios niveles de IRQ y un temporizador. vamos, casi lo que ahora se hace con un PIC.

JoseFco 13-04-2008 20:23:11

Hola Delano.

En el 1980 salio el 8051 con EEProm y el 87C51 con uVProm.A mediados de los 80 la Dallas saco el DS5000 con memoria Volatil y bateria para retener la memoria.esto permitia programar sobre lo programado sin tener que borrar todo el chip.Se podia programar un byte o todos si querias.
El DS5000 me ayudo mucho a practicar codigo asm para los 8051 por la rapides en cambiar algo y rodarlo de inmediato.

Un Saludo.


La franja horaria es GMT +2. Ahora son las 15:14:17.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi