![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
||||
|
||||
|
Hola
Pues yo necesito unos cuantos robots que reemplacen a mi personal, cuando empiezo el curso. ![]() ![]() ![]() Saludos |
|
#2
|
||||
|
||||
|
Cita:
![]() ![]() ![]()
__________________
|
|
#3
|
||||
|
||||
|
Cita:
![]() ![]()
__________________
...Yo naci en esta ribera del arauca vibr@d0r Soy hermano de la espuma, de la garza, de la rosa y del sol... Viva Venezuela |
|
#4
|
||||
|
||||
|
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 ! Última edición por rretamar fecha: 13-03-2008 a las 17:28:47. |
|
#5
|
|||
|
|||
|
Hola Amigos.
(la línea PIC de Microchip, programándolos en Pascal) Suena interesante, me gustaria aprender. Un Saludo. |
|
#6
|
||||
|
||||
|
Cita:
Saludos
__________________
|
|
#7
|
||||
|
||||
|
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
![]() |
|
#8
|
||||
|
||||
|
[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] |
|
#9
|
||||
|
||||
|
Cita:
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}
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;
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;
![]() End; Última edición por rretamar fecha: 14-03-2008 a las 03:58:04. |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Factura Electrónica | aig | Varios | 13 | 10-12-2010 17:12:44 |
| factura electronica | spia | Varios | 2 | 22-02-2009 21:30:06 |
| Biblioteca Electrónica | [Gunman] | Varios | 1 | 07-02-2006 19:28:42 |
| Basura electronica | Investment | Noticias | 1 | 10-05-2005 16:40:33 |
| transacion electronica edi | davidelkata | Internet | 0 | 12-07-2003 11:52:09 |
|