sábado, 12 de septiembre de 2009

Pruebas casi finales, aun falta ensamblar!!

Ya casi esta listo!, bueno, ya dandole toques finales para que sea funcional mi prueba con Gambas, después de unos meses de estar trabajando con esto, pues la verdad ha sido bien satisfactorio, el ver que ya esta mas vivo el programa.

El código, se ha quedado como se muestra, solo que hemos hecho un pequeño trucaje al servo que mostre en fotos anteriores, puesto que se transporto el potenciometro del servo que lleva interno, a una parte externa, de estar forma se hizo, debido a que el mecanismo de gusano sinfin + corona, exigia dos cosas:

  • El servo pudiera dar vueltas completas y varías, debido a la relacion que hay entre los engranajes
  • El posicionamiento del eje deberia ser exacto, con respecto a la horizontal que forma con la base.
Esto se puede ver claramente en la siguiente imagen

Lamentablemente, la corona que va con el gusano sin fin, al estar hecha de aluminio, y soportar una gran fuerza, pues, los dientes sufrieron los estragos, desgastandose, me comenta, Ruben, que sería mejor que dichos engranes fueran hechos de bronce, espero que consigamos una pieza pronto

El codigo fuente, hasta el momento, es el que presente en post anteriores, y el programa lo deje trabajando un buen de horas solo conectado con la tarjeta de control de servomotores y funciona de forma muy adecuada, detalles aun hay muchos, sin embargo, prodria decir, ¡Ya casí esta listo!


Falta el video donde se ve como se mueve el servo con el slider del GUI desarrollado, en este momento esta de subida.

Codigo Fuente para control de servos por RS232 Gambas



  • Responder citando
  • Editar/Borrar este mensaje



Re: GAMBAS Almenos es basic- Puerto Serie - PIC16F628A

Mensaje maigke el Lun 7 Sep 2009 - 19:39

Esta es la Parte de la comunicacion

Código:

' Gambas class file

'Variables Globales

PUBLIC flag1 AS Boolean = FALSE
PUBLIC flag2 AS Boolean = FALSE
PUBLIC fTermine AS Boolean = FALSE ' bandera para indicar que ya acabo de mover un servo

'Variables para posicionamiento
PUBLIC S1Pos1 AS Integer PUBLIC S2Pos1 AS Integer PUBLIC S3Pos1 AS Integer PUBLIC S4Pos1 AS Integer
PUBLIC S5Pos1 AS Integer
PUBLIC S1Pos2 AS Integer PUBLIC S2Pos2 AS Integer PUBLIC S3Pos2 AS Integer PUBLIC S4Pos2 AS Integer
PUBLIC S5Pos2 AS Integer

'Variables para HOME
PUBLIC s1 AS Integer PUBLIC s2 AS Integer PUBLIC s3 AS Integer PUBLIC s4 AS Integer PUBLIC s5 AS Integer
PUBLIC vini1 AS Integer PUBLIC vfin1 AS Integer PUBLIC vini2 AS Integer PUBLIC vfin2 AS Integer PUBLIC vini3 AS Integer
PUBLIC vfin3 AS Integer PUBLIC vini4 AS Integer PUBLIC vfin4 AS Integer PUBLIC vini5 AS Integer PUBLIC vfin5 AS Integer
PUBLIC tempo AS Integer

PUBLIC SUB Form_Close()
IF ttyUSB.Status = Net.Active THEN CLOSE ttyUSB
END


'***************************Seccion para la comunicacion del puerto serial
'Esta parte es bastante modificable

PUBLIC SUB Check_Status()
ChkDSR.Value = ttyUSB.DSR
ChkDTR.Value = ttyUSB.DTR
ChkCTS.Value = ttyUSB.CTS
ChkRTS.Value = ttyUSB.RTS
ChkDCD.Value = ttyUSB.DCD
ChkRNG.Value = ttyUSB.RNG
END

PUBLIC SUB Form_Open()
cmdVelocidad.Index = cmdVelocidad.Find("115200") 'Lo que sigue no es valido separa las lineas indicadas por ';'
vini1 = 0; vfin1 = 0; vini2 = 0; vfin2 = 0; vini3 = 0; vfin3 = 0; vini4 = 0; vfin4 = 0; vini5 = 0; vfin5 = 0; sldS1.Value = 250
sldS2.Value = 250; sldS3.Value = 250; sldS4.Value = 250; sldS5.Value = 250
END

PUBLIC SUB Button1_Click()
ME.Close
END

PUBLIC SUB cmdAbreCierra_Click()
IF ttyUSB.Status = Net.Active THEN
CLOSE ttyUSB
cmdAbreCierra.Text = "Abre"
ELSE
'Linea de parametros
ttyUSB.PortName = txtPortText.Text
ttyUSB.Speed = cmdVelocidad.Text
ttyUSB.Parity = cmbParidad.Index
ttyUSB.DataBits = cmbDataBits.Text
ttyUSB.FlowControl = cmbControlFlujo.Index
ttyUSB.StopBits = cmbBitParo.Text
ttyUSB.Open()
Check_Status()
TextArea1.Text = "Puerto Abierto : " & ttyUSB.PortName & " Ajustes : " &
ttyUSB.Speed & " , " & ttyUSB.Parity & " , " & ttyUSB.DataBits & " , " &
ttyUSB.StopBits & " , " & Chr(13) & Chr(10)
cmdAbreCierra.Text = "Cierra"
ENDIF
END

'Funcion para leer puerto serial RS232
PUBLIC SUB ttyUSB_Read()
DIM s AS String
IF TabStrip1.Text = "Configuracion" THEN
READ #ttyUSB, s, Lof(ttyUSB)
TextArea1.Text = TextArea1.Text & s
ELSE IF TabStrip1.Text = "Servo 1" THEN
READ #ttyUSB, s, Lof(ttyUSB)
TextArea2.Text = TextArea2.Text & s
ELSE IF TabStrip1.text = "Servo 2" THEN
READ #ttyUSB, s, Lof(ttyUSB)
TextArea3.Text = TextArea3.Text & s
ELSE IF TabStrip1.Text = "Servo 3" THEN
READ #ttyUSB, s, Lof(ttyUSB)
TextArea4.Text = TextArea4.text & s
ELSE IF TabStrip1.Text = "Servo 4" THEN
READ #ttyusb, s, Lof(ttyUSB)
TextArea5.Text = TextArea5.text & s
ELSE IF TabStrip1.Text = "Servo 5" THEN
READ #ttyUSB, s, Lof(ttyUSB)
TextArea6.Text = TextArea6.Text & s
ENDIF
END

PUBLIC SUB ttyUSB_RNGChange(ival AS Boolean)
ChkRNG.Value = ival
END

PUBLIC SUB ttyUSB_DTRChange(ival AS Boolean)
ChkDTR.Value = ival
END

PUBLIC SUB ttyUSB_DSRChange(ival AS Boolean)
ChkDSR.Value = ival
END

PUBLIC SUB ttyUSB_CTSChange(ival AS Boolean)
ChkCTS.Value = ival
END

PUBLIC SUB ttyUSB_DCDChange(ival AS Boolean)
ChkDCD.Value = ival
END

PUBLIC SUB ttyUSB_RTSChange(ival AS Boolean)
ChkRTS.Value = ival
END

PUBLIC SUB ChkDTR_Click()
ttyUSB.DTR = ChkDTR.Value
Check_Status
END

PUBLIC SUB ChkRTS_Click()
ttyUSB.RTS = ChkRTS.Value
Check_Status
END

PUBLIC SUB cmbControlFlujo_Click()
ttyUSB.FlowControl = cmbControlFlujo.Index
END
Esta parte es la que envia los datos a los seis servos upps, ¿de cuál fumé? si son solo 5 Laughing

Código:

'************************************************************************************************
PUBLIC SUB cmdAtras_Click()
IF ttyUSB.Status = Net.Inactive THEN
Message("Primero abre el Puerto")
ELSE
PRINT #ttyUSB, "a"
ToolButton2.Background = &FF0000&
ToolButton2.Text = "A"
WAIT 0.3 'Este retardo es para el parpadeo, entre colores, pero no tiene mucho caso
ToolButton2.BackColor = &00FF00&
ToolButton2.Text = ""
ENDIF
END

PUBLIC SUB cmdAdelante_Click()
IF ttyUSB.Status = Net.Inactive THEN
Message("Primero abre el puerto")
ELSE
PRINT #ttyUSB, "11"
ToolButton1.Background = &FF0000&
ToolButton1.Text = "1"
WAIT 0.3
ToolButton1.Background = &00FF00&
ToolButton1.text = ""
ENDIF
END
'**************************************************************************
'Control del primer servo
'Para el envio de datos, fue probada la tarjeta con varios valores
'en el tiempo medido por osciloscopio, cuando la tarjeta es reiniciada
'con escala de 0.5ms por division, el tiempo en alto esta establecido a 1500ms
'tomado este valor como referencia, el slider y el spinbox, tienen el valor de
'250 de forma inicial, ya fueron medidos los tiempos de forma repetida, para
'verificar la presición del numero de datos enviados a la tarjeta.
PUBLIC SUB spnboxS1_Change()
DIM maximo AS Integer
DIM i AS Integer
sldS1.Value = spnboxS1.Value
vfin1 = spnboxS1.Value
tempo = 0
tempo = Abs(vfin1 - vini1)
'TextArea2.Text = "Vini1=" & vini1 & " Vfin1= " & vfin1 & " ciclo= " & tempo
'wait 1
IF (vfin1 - vini1) < 0 THEN
IF ttyUSB.Status = Net.Active THEN
maximo = tempo
FOR i = 1 TO maximo
PRINT #ttyUSB, "AAA"
ToolButton2.Background = &FF0000&
ToolButton2.Text = "A"
WAIT 0.1 'Este retardo es importante, ya que la tarjeta no responde muy rápido
ToolButton2.BackColor = &00FF00&
ToolButton2.Text = ""
NEXT
maximo = 0
ELSE
ENDIF
ELSE
IF ttyUSB.Status = Net.Active THEN
maximo = tempo
FOR i = 1 TO maximo
PRINT #ttyUSB, "111"
ToolButton1.Background = &FF0000&
ToolButton1.Text = "1"
WAIT 0.1
ToolButton1.Background = &00FF00&
ToolButton1.text = ""
NEXT
maximo = 0
ELSE
ENDIF
ENDIF
vini1 = vfin1
tempo = 0
fTermine = TRUE
END
'**********************************************************************************
PUBLIC SUB sldS1_Change()
DIM maximo AS Integer
DIM i AS Integer
spnboxS1.Value = sldS1.Value
vfin1 = spnboxS1.Value
tempo = 0
tempo = Abs(vfin1 - vini1)
'TextArea2.Text = "Vini1=" & vini1 & " Vfin1= " & vfin1 & " ciclo= " & tempo
'WAIT 1
IF (vfin1 - vini1) < 0 THEN
IF ttyUSB.Status = Net.Active THEN
maximo = tempo
FOR i = 1 TO maximo
PRINT #ttyUSB, "A"
ToolButton2.Background = &FF0000&
ToolButton2.Text = "A"
WAIT 0.1
ToolButton2.BackColor = &00FF00&
ToolButton2.Text = ""
NEXT
maximo = 0
ELSE
ENDIF
ELSE
IF ttyUSB.Status = Net.Active THEN
maximo = tempo
FOR i = 1 TO maximo
PRINT #ttyUSB, "1"
ToolButton1.Background = &FF0000&
ToolButton1.Text = "1"
WAIT 0.1
ToolButton1.Background = &00FF00&
ToolButton1.text = ""
NEXT
maximo = 0
ELSE
ENDIF
ENDIF
vini1 = vfin1
tempo = 0
fTermine = TRUE
END
'***********************************************************************************
'Control del segundo servo
PUBLIC SUB spnboxS2_Change()
DIM maximo AS Integer
DIM i AS Integer
sldS2.Value = spnboxS2.Value
vfin2 = spnboxS2.Value
tempo = 0
tempo = Abs(vfin2 - vini2)
'Usese solo en caso de que olvide el cable de comicacion como a mi me paso :(
'TextArea3.Text = "Vini2=" & vini2 & " Vfin2= " & vfin2 & " ciclo= " & tempo
' WAIT 1
IF (vfin2 - vini2) < 0 THEN
IF ttyUSB.Status = Net.Active THEN
maximo = tempo
FOR i = 1 TO maximo
PRINT #ttyUSB, "B"
ToolButton3.Background = &FF0000&
ToolButton3.Text = "B"
WAIT 0.1 'Este retardo es importante, ya que la tarjeta no responde muy rápido
ToolButton4.BackColor = &00FF00&
ToolButton4.Text = ""
NEXT
maximo = 0
ELSE
ENDIF
ELSE
IF ttyUSB.Status = Net.Active THEN
maximo = tempo
FOR i = 1 TO maximo
PRINT #ttyUSB, "2"
ToolButton1.Background = &FF0000&
ToolButton1.Text = "2"
WAIT 0.1
ToolButton1.Background = &00FF00&
ToolButton1.text = ""
NEXT
maximo = 0
ELSE
ENDIF
ENDIF
vini2 = vfin2
tempo = 0
END
'**********************************************************************************
PUBLIC SUB sldS2_Change()
DIM maximo AS Integer
DIM i AS Integer
spnboxS2.Value = sldS2.Value
vfin2 = spnboxS2.Value
tempo = 0
tempo = Abs(vfin2 - vini2)
IF (vfin2 - vini2) < 0 THEN
IF ttyUSB.Status = Net.Active THEN
maximo = tempo
FOR i = 1 TO maximo
PRINT #ttyUSB, "B"
ToolButton2.Background = &FF0000&
ToolButton2.Text = "B"
WAIT 0.1
ToolButton2.BackColor = &00FF00&
ToolButton2.Text = ""
NEXT
maximo = 0
ELSE
ENDIF
ELSE
IF ttyUSB.Status = Net.Active THEN
maximo = tempo
FOR i = 1 TO maximo
PRINT #ttyUSB, "1"
ToolButton2.Background = &FF0000&
ToolButton2.Text = "1"
WAIT 0.1
ToolButton2.Background = &00FF00&
ToolButton2.text = ""
NEXT
maximo = 0
ELSE
ENDIF
ENDIF
vini2 = vfin2
tempo = 0
fTermine = TRUE
END
'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'Control del tercer servo
PUBLIC SUB spnboxS3_Change()
DIM maximo AS Integer
DIM i AS Integer
sldS3.value = spnboxS3.Value
vfin3 = spnboxS3.Value
tempo = 0
tempo = Abs(vfin3 - vini3)
IF (vfin3 - vini3) < 0 THEN
IF ttyUSB.Status = Net.Active THEN
maximo = tempo
FOR i = 1 TO maximo
PRINT #ttyUSB, "C"
ToolButton5.BackColor = &FF0000&
ToolButton5.Text = "C"
WAIT 0.1
ToolButton5.BackColor = &00FF00&
ToolButton5.Text = ""
NEXT
maximo = 0
ELSE
END IF
ELSE
IF ttyUSB.Status = Net.Active THEN
maximo = tempo
FOR i = 1 TO maximo
PRINT #ttyUSB, "3"
ToolButton6.BackColor = &FF0000&
ToolButton6.Text = "3"
WAIT 0.1
ToolButton6.BackColor = &00FF00&
ToolButton6.Text = ""
NEXT
maximo = 0
ENDIF
END IF
vini3 = vfin3
tempo = 0
fTermine = TRUE
END

PUBLIC SUB sldS3_Change()
DIM maximo AS Integer
DIM i AS Integer
spnboxS3.value = sldS3.Value
vfin3 = sldS3.Value
tempo = 0
tempo = Abs(vfin3 - vini3)
IF (vfin3 - vini3) < 0 THEN
IF ttyUSB.Status = Net.Active THEN
maximo = tempo
FOR i = 1 TO maximo
PRINT #ttyUSB, "C"
ToolButton5.BackColor = &FF0000&
ToolButton5.Text = "C"
WAIT 0.1
ToolButton5.BackColor = &00FF00&
ToolButton5.Text = ""
NEXT
maximo = 0
ELSE
END IF
ELSE
IF ttyUSB.Status = Net.Active THEN
maximo = tempo
FOR i = 1 TO maximo
PRINT #ttyUSB, "3"
ToolButton6.BackColor = &FF0000&
ToolButton6.Text = "3"
WAIT 0.1
ToolButton6.BackColor = &00FF00&
ToolButton6.Text = ""
NEXT
maximo = 0
ENDIF
END IF
vini3 = vfin3
tempo = 0
fTermine = TRUE
END
'***********************************************************************************************************
'Control del 4to servo
PUBLIC SUB spnboxS4_Change()
DIM maximo AS Integer
DIM i AS Integer
sldS4.value = spnboxS4.Value
vfin4 = spnboxS4.Value
tempo = 0
tempo = Abs(vfin4 - vini4)
IF (vfin4 - vini4) < 0 THEN
IF ttyUSB.Status = Net.Active THEN
maximo = tempo
FOR i = 1 TO maximo
PRINT #ttyUSB, "D"
ToolButton7.BackColor = &FF0000&
ToolButton7.Text = "D"
WAIT 0.1
ToolButton7.BackColor = &00FF00&
ToolButton7.Text = ""
NEXT
maximo = 0
ELSE
END IF
ELSE
IF ttyUSB.Status = Net.Active THEN
maximo = tempo
FOR i = 1 TO maximo
PRINT #ttyUSB, "4"
ToolButton8.BackColor = &FF0000&
ToolButton8.Text = "4"
WAIT 0.1
ToolButton8.BackColor = &00FF00&
ToolButton8.Text = ""
NEXT
maximo = 0
ENDIF
END IF
vini4 = vfin4
tempo = 0
fTermine = TRUE
END

PUBLIC SUB sldS4_Change()
DIM maximo AS Integer
DIM i AS Integer
spnboxS4.value = sldS4.Value
vfin4 = sldS4.Value
tempo = 0
tempo = Abs(vfin4 - vini4)
IF (vfin4 - vini4) < 0 THEN
IF ttyUSB.Status = Net.Active THEN
maximo = tempo
FOR i = 1 TO maximo
PRINT #ttyUSB, "D"
ToolButton7.BackColor = &FF0000&
ToolButton7.Text = "D"
WAIT 0.1
ToolButton7.BackColor = &00FF00&
ToolButton7.Text = ""
NEXT
maximo = 0
ELSE
END IF
ELSE
IF ttyUSB.Status = Net.Active THEN
maximo = tempo
FOR i = 1 TO maximo
PRINT #ttyUSB, "4"
ToolButton8.BackColor = &FF0000&
ToolButton8.Text = "4"
WAIT 0.1
ToolButton8.BackColor = &00FF00&
ToolButton8.Text = ""
NEXT
maximo = 0
ENDIF
END IF
vini4 = vfin4
tempo = 0
fTermine = TRUE
END
'***********************************************************************************************************
'control Servo 5
PUBLIC SUB spnboxS5_Change()
DIM maximo AS Integer
DIM i AS Integer
sldS5.value = spnboxS5.Value
vfin5 = spnboxS5.Value
tempo = 0
tempo = Abs(vfin5 - vini5)
IF (vfin5 - vini5) < 0 THEN
IF ttyUSB.Status = Net.Active THEN
maximo = tempo
FOR i = 1 TO maximo
PRINT #ttyUSB, "E"
ToolButton9.BackColor = &FF0000&
ToolButton9.Text = "E"
WAIT 0.1
ToolButton9.BackColor = &00FF00&
ToolButton9.Text = ""
NEXT
maximo = 0
ELSE
END IF
ELSE
IF ttyUSB.Status = Net.Active THEN
maximo = tempo
FOR i = 1 TO maximo
PRINT #ttyUSB, "5"
ToolButton10.BackColor = &FF0000&
ToolButton10.Text = "5"
WAIT 0.1
ToolButton10.BackColor = &00FF00&
ToolButton10.Text = ""
NEXT
maximo = 0
ENDIF
END IF
vini5 = vfin5
tempo = 0
fTermine = TRUE
END

PUBLIC SUB sldS5_Change()
DIM maximo AS Integer
DIM i AS Integer
spnboxS5.value = sldS5.Value
vfin5 = sldS5.Value
tempo = 0
tempo = Abs(vfin5 - vini5)
IF (vfin5 - vini5) < 0 THEN
IF ttyUSB.Status = Net.Active THEN
maximo = tempo
FOR i = 1 TO maximo
PRINT #ttyUSB, "E"
ToolButton9.BackColor = &FF0000&
ToolButton9.Text = "E"
WAIT 0.1
ToolButton9.BackColor = &00FF00&
ToolButton9.Text = ""
NEXT
maximo = 0
ELSE
END IF
ELSE
IF ttyUSB.Status = Net.Active THEN
maximo = tempo
FOR i = 1 TO maximo
PRINT #ttyUSB, "5"
ToolButton10.BackColor = &FF0000&
ToolButton10.Text = "5"
WAIT 0.1
ToolButton10.BackColor = &00FF00&
ToolButton10.Text = ""
NEXT
maximo = 0
ENDIF
END IF
vini5 = vfin5
tempo = 0
fTermine = TRUE
END
'***********************************************************************************************************
La última parte del código borra los textareas y manda a posicionar al servo, aqui hay una parte importante con un ciclo while - wend, y tiene mucho que ver la bandera que puse en cada seccion de movimiento de servos, ya que sin esta bandera no se saldría de dicho ciclo. Very Happy

Código:

'Area de borrados de textAreas, cada text area solo contendra la info necesaria para su propio servo
PUBLIC SUB cmdBorrar_Click()
TextArea2.Text = ""
END

PUBLIC SUB Button2_Click()
TextArea3.Text = ""
END

PUBLIC SUB Button3_Click()
TextArea4.Text = ""
END

PUBLIC SUB Button4_Click()
TextArea5.Text = ""
END

PUBLIC SUB Button5_Click()
TextArea6.Text = ""
END

'Rutina de grabar las posiciones de los servos

PUBLIC SUB cmdGrabar_Click()
IF flag1 = FALSE AND flag2 = FALSE THEN
cmdGrabar.Text = "Grabar"
S1Pos1 = spnboxS1.Value
S2Pos1 = spnboxS2.Value
S3Pos1 = spnboxS3.Value
S4Pos1 = spnboxS4.Value
S5Pos1 = spnboxS5.Value
flag1 = TRUE
ELSE IF flag1 = TRUE AND flag2 = FALSE THEN
S1Pos2 = spnboxS1.Value
S2Pos2 = spnboxS2.Value
S3Pos2 = spnboxS3.Value
S4Pos2 = spnboxS4.Value
S5Pos2 = spnboxS5.Value
flag2 = TRUE
ELSE
Message.Error("Solo dos posiciones")
cmdGrabar.Text = "Borra"
S1Pos1 = 0
S1Pos2 = 0
S2Pos1 = 0
S2Pos2 = 0
S3Pos1 = 0
S3Pos2 = 0
S4Pos1 = 0
S4Pos2 = 0
S5Pos1 = 0
S5Pos2 = 0
flag1 = FALSE
flag2 = FALSE
END IF
END

PUBLIC SUB cmdHome_Click()
s1 = spnboxS1.Value
s2 = spnboxS2.Value
s3 = spnboxS3.Value
s4 = spnboxS4.Value
s5 = spnboxS5.Value
TextArea1.text = "Home ha sido selecionado con las siguientes
posiciones " & s1 & " " & s2 & " " & s3 & " "
& s4 & " " & s5
'TabStrip1.Action =
END

PUBLIC SUB ToolButton11_Click()
'Ir a home
'Colocamos una bandera que se llama fTermine que nos indica si un ciclo de envio de datos ya termino
' ahora preguntamos si los valores del spinbox y del valor dado como home son iguales
' esto pasa si un eje no lo mueves desde un inicio, en caso de ser cierto, pues entonces
' no hace nada, ya que si no se pone el if por alguna razon entra en un bucle infinito
' si los valores actuales del spinbox y de la pos de home no son iguales,
' mandamos a modificar ahora el valor del spinbox, enviando los correspondientes
' a través del puerto serial
fTermine = FALSE
IF (spnboxS1.Value <> s1) THEN
spnboxS1.Value = s1
WHILE fTermine = FALSE
WEND
END IF
fTermine = FALSE
IF (spnboxS2.Value <> s2) THEN
spnboxS2.Value = s2
WHILE fTermine = FALSE
WEND
END IF
fTermine = FALSE
IF (spnboxS3.Value <> s3) THEN
spnboxS3.Value = s3
WHILE fTermine = FALSE
WEND
END IF
fTermine = FALSE
IF (spnboxS4.Value <> s4) THEN
spnboxS4.Value = s4
WHILE fTermine = FALSE
WEND
END IF
fTermine = FALSE
IF (spnboxS5.Value <> s5) THEN
spnboxS5.Value = s5
WHILE fTermine = FALSE
WEND
END IF
'Ir a la posicion 1
'Ir a la posicion 2
'Regresar a home
END

Gambas primeras pruebas con el nuevo software

Hola a todos!!, bueno aqui estoy dando avances del proyecto que llevamos Twisted Evil , bueno pues he seguido trabajando con GAMBAS con el Puerto serial y con un adaptador USB-RS232, el cual en el post anterior mencione que me funcionaba muy bien!!, bueno, pues les comento que el anterior interfaz tuve que abandonarla ya que no me gusto mucho y se revolvio todo el codigo Sad , sin embargo decidi comenzar casi desde cero con la interfaz, pero basandome en los códigos anteriores que puse al inicio de este hilo y de los ejemplos que he estado haciendo.

Bueno ahora en lugar de un solo panel colocamos un panelStrip que son las solapas o pestañas, para que en cada una de ellas estuviera el control de un servomotor, controlando el ancho del pulso por medio del envio de caracteres ascii, a través de un spinbox y de un slider, pero ahora ya mas separado, con un textArea, donde se puede visualizar la respuesta del micro, unos botones que puse como indicadores LEDs ( bueno simulandolos cyclops ) y pues por el momento un grabado de posicionado home.

Ya medimos los anchos de pulsos con un oscilosocipio y la variacion que tiene es muy aceptable, digamos unos 20us de variacion de ancho de pulso, pero como estos servo, van a unos engranajes un tanto grandes, esta variacion no me perjudica mucho, bueno esta respuesta es empirica aun, luego nos meteremos con los numeritos What a Face

Lo que aun nos falta, es que grabe mas posiciones, que sea mas raṕido, bueno eso por el momento no creo que sea posible debido al
formato de datos que acepta el micro, luego lo reprogramamos, que este mas bonita la GUI, mmmm y bueno las sugerencias que me hagan favor de hacerme. Smile

Una disculpa de antemano si no coloco imagenes, pero aqui esta retringido el servicio de internet y todo lo que es multimedia, no pasa, si alguien me sugiere el uso de TOR y privoxy se lo agradezco, pero realmente no quiero romper las politicas ya que me dejarian sin servicio al localizarme, ademas de que seria facil ya que sus servidores Linux esta bien configgurados.

Las imagenes las colacaré al rato cuando esté en casa. Les coloco de mientras el código

Rolling Eyes Me dice que el post es muy largo!!!

domingo, 6 de septiembre de 2009

Un nuevo elemento al softwa libre :D

Hola a todos de nuevo, bueno aunque ya tiene tiempo que lo sabia, pues hasta hoy me he animado postear esto, y es que ahora mi vida a cambiado mucho, pues tengo a mi lado a una mujer muy amorosa, bella y además muy sincera, y que además será la madre de el bebé que ya viene en camino :D, esto de ser padre, hace tiempo que lo ansiaba, pero las ocupaciones y el trabajo no me habian dejado el tiempo como para meditarlo, hasta apenas hace unos dos meses, y pues ambos nos animamos, espero que este proyecto de vida que estoy iniciando hace poco, sea muy próspero y que todo nos salga maravillosamente.

sábado, 5 de septiembre de 2009

El 555 elimina la necesidad de un microcontrolador para el control de un Driver de Led de potencia

Leyendo mi email, me encontre con la nota de que muchas veces dedicamos tiempo a programar un micro y usamos sus recursos para realizar temporizaciones, sin embargo, el autor de este artículo, nos propone, usar un tempirizador 555 para generar una señal de reloj, en lugar de un microcontrolador y a la vez sugiere que usemos de mejor forma los recursos que incluye el micro. Es una buena nota espero le den lectura :D

http://www.edn.com/article/CA6685964.html?nid=4736&rid=16052552
(link en ingles)

martes, 1 de septiembre de 2009

Nueva prueba de comunicacion serial con GAMBAS

Hola a todos de nuevo!

Bien, pues el dia de hoy y despues de varios infructuosos intentos de hacer la comunicacion con la aplicacion que estoy desarrollando, me puse a pensar un poquito Laughing

Me volví a fijar en el archivo que viene de ejemplo en GAMBAS 2, y pues ya que me cayo el 20, decidi, de nuevo emplear todas las opciones de la conexion por el puerto serial, y bueno ahora usando la interfaz usb-serie, que por cierto para linux no requiere de algún tipo en partícular de driver.

basado en esto y analizando mas a conciencia el código de ejemplo vi los siguientes aspectos

1. Existe una funcion para abrir el puerto (Demasiado obvio, pero por esto mismo me equivoque en el anterior), no unicamente se pasan los paramtros, sino que tambien, se hace necesario un chequeo de estado pasando a unos indicadores chkbox los valores de algunos valores importantes de la comunicacion serial como son Ring, DCD, CTS, etc. en este caso, si todo va bien, al hacer el chequeo, unicamente se marcarán DTR, RTS (Data Terminal Ready - Request to Send) Que nos indican que la terminal de datos esta lista para funcionar y que ademas esta en petición para enviar datos
Fuente: http://www.beyondlogic.org/serial/serial.htm

2. Una parte de asignación de cambio de valores booleanos a los chkbox de los pines del RS232

3. La implementación de la función de lectura, usando el comando READ a través de un flujo (stream) que viene del objeto instanciado hacia el Puerto Serial. y almacenandolo en una cadena llamada s.

4. El envio de datos, es la parte que personalizamos, para poder enviar datos, primero debemos verificar que se encuentre activo el puerto serie, esto se hace usando el siguiente comando

IF ttyUSB.Status = Net.Inactive THEN

posterior a esto puede colocar una ventana de mensaje o algún otro tipo de dato; en el ELSE usted podrá colocar el envio de los datos, para nosotros fué más facil el pensar en trabajarlo con un PRINT a través de flujo (stream) #ttyUSB, quedando de esta forma

PRINT #ttyUSB, "a" 'Esto envia el caracter ascii de la letra 'a' por el puerto serial, siempre y cuando este abierto dicho puerto.

para el envio de los datos use, dos commmandButton, que envian únicamente una letra por cada clic, y un slider con un spinbox, como lo hice en el programa anterior, pero ademas, coloque, dos toolbutton, que ya se que no son para eso pero los use como indicadores cyclops cambiando de color cuando un dato ha sido enviado.

Tuve problema primero, pues al enviar cantidades pequeñas de datos, es decir, unas 3 letrs, todo trabajaba a la perfección, el problema se sucitó, cuanod enviaba mas de 10 elementos, y pues esto se moría, y bueno como se arreglo mas o menos el asunto, espero en verdad encontrar una mejor solución.

Colocando un wait 0.1 que genera un retardo de 100ms, tiempo suficiente para que enie el dato y le de chance a nuestro programa que responda de forma adecuada, de hecho así lo hizo!!!

les dejo el código fuente que hemos realizado

Código:

' Gambas class file
'Midiendo con el Osciloscopio, el ancho de pulso de la tarjeta mide 1500us
'si con en programa, suponemos que por cada caracter que envie al micro, un servo tendrá un
'movimiento de un grado, parece que este dato es totalmente erroneo, a pesar de que los
'calculos esten bien realizados.

'Para iniciar el programa solo manda caracteres, pero creo que estos incluyen muchos
'CR & LF en los cuales el micro al recibirlos se ataranta.
'como recibi muchos datos y tambien los envia, es impresindible que solo
'envie una señal cuando yano reciba datos, pero como asegurarnos que ha recibido
'el correcto numero de pulsos, que no sea a traves del uso del printf
' y/o de alguna incorrecta inicializacion de otro dispositivo
' el uso de wait, realmente ha hecho que el programa sea muy lento

'Variables Globales

PUBLIC vini1 AS Integer
PUBLIC vfin1 AS Integer

PUBLIC tempo AS Integer




PUBLIC SUB Form_Close()
IF ttyUSB.Status = Net.Active THEN CLOSE ttyUSB
END


'***************************Seccion para la comunicacion del puerto serial
'Esta parte es bastante modificable

PUBLIC SUB Check_Status()

ChkDSR.Value = ttyUSB.DSR
ChkDTR.Value = ttyUSB.DTR
ChkCTS.Value = ttyUSB.CTS
ChkRTS.Value = ttyUSB.RTS
ChkDCD.Value = ttyUSB.DCD
ChkRNG.Value = ttyUSB.RNG


END

PUBLIC SUB Form_Open()
cmdVelocidad.Index = cmdVelocidad.Find("115200")
vini1 = 0
vfin1 = 0
sldS1.Value = 90
END



PUBLIC SUB Button1_Click()

ME.Close

END



PUBLIC SUB cmdAbreCierra_Click()

IF ttyUSB.Status = Net.Active THEN
CLOSE ttyUSB
cmdAbreCierra.Text = "Abre"
ELSE
'Linea de parametros
ttyUSB.PortName = txtPortText.Text
ttyUSB.Speed = cmdVelocidad.Text
ttyUSB.Parity = cmbParidad.Index
ttyUSB.DataBits = cmbDataBits.Text
ttyUSB.FlowControl = cmbControlFlujo.Index
ttyUSB.StopBits = cmbBitParo.Text

ttyUSB.Open()
Check_Status()
TextArea1.Text = "Puerto Abierto : " & ttyUSB.PortName & " Ajustes : " &
ttyUSB.Speed & " , " & ttyUSB.Parity & " , " & ttyUSB.DataBits & " , " &
ttyUSB.StopBits & " , " & Chr(13) & Chr(10)
cmdAbreCierra.Text = "Cierra"
ENDIF
END

PUBLIC SUB ttyUSB_Read()
DIM s AS String


IF TabStrip1.Text = "Configuracion" THEN
READ #ttyUSB, s, Lof(ttyUSB)
TextArea1.Text = TextArea1.Text & s
ELSE IF TabStrip1.Text = "Servo 1" THEN
READ #ttyUSB, s, Lof(ttyUSB)
TextArea2.Text = TextArea2.Text & s
ENDIF
END


PUBLIC SUB ttyUSB_RNGChange(ival AS Boolean)

ChkRNG.Value = ival

END

PUBLIC SUB ttyUSB_DTRChange(ival AS Boolean)

ChkDTR.Value = ival

END

PUBLIC SUB ttyUSB_DSRChange(ival AS Boolean)

ChkDSR.Value = ival

END

PUBLIC SUB ttyUSB_CTSChange(ival AS Boolean)

ChkCTS.Value = ival

END

PUBLIC SUB ttyUSB_DCDChange(ival AS Boolean)

ChkDCD.Value = ival

END

PUBLIC SUB ttyUSB_RTSChange(ival AS Boolean)

ChkRTS.Value = ival

END

PUBLIC SUB ChkDTR_Click()

ttyUSB.DTR = ChkDTR.Value
Check_Status

END

PUBLIC SUB ChkRTS_Click()

ttyUSB.RTS = ChkRTS.Value
Check_Status

END

PUBLIC SUB cmbControlFlujo_Click()

ttyUSB.FlowControl = cmbControlFlujo.Index

END



'************************************************************************************************
'Esta parte corresponde a los controles que se encuentran en el tab SERVO 1
'Los primeros son dos botones con dos toolbuttons que sirven como leds indicadores
'La segunda parte corresponde a un spinbox y aun slider

PUBLIC SUB cmdAtras_Click()

IF ttyUSB.Status = Net.Inactive THEN
Message("Primero abre el Puerto, NO JODAS")
ELSE
PRINT #ttyUSB, "a"
ToolButton2.Background = &FF0000&
ToolButton2.Text = "A"
WAIT 0.3 'Este retardo es para el parpadeo, entre colores, pero no tiene mucho caso
ToolButton2.BackColor = &00FF00&
ToolButton2.Text = ""
ENDIF
END

PUBLIC SUB cmdAdelante_Click()

IF ttyUSB.Status = Net.Inactive THEN
Message("Primero abre el puerto NO JODAS")
ELSE
PRINT #ttyUSB, "11"
ToolButton1.Background = &FF0000&
ToolButton1.Text = "1"
WAIT 0.3
ToolButton1.Background = &00FF00&
ToolButton1.text = ""
ENDIF
END
'**************************************************************************
PUBLIC SUB spnboxS1_Change()
DIM maximo AS Integer
DIM i AS Integer

sldS1.Value = spnboxS1.Value
vfin1 = spnboxS1.Value
tempo = 0

tempo = Abs(vfin1 - vini1)

IF (vfin1 - vini1) < 0 THEN
IF ttyUSB.Status = Net.Active THEN
maximo = tempo
FOR i = 1 TO maximo
PRINT #ttyUSB, "AAA"
ToolButton2.Background = &FF0000&
ToolButton2.Text = "A"
WAIT 0.1 'Este retardo es importante, ya que la tarjeta no responde muy rápido

ToolButton2.BackColor = &00FF00&
ToolButton2.Text = ""
NEXT
maximo = 0
ELSE
Message.Info("NO JODAS A")
ENDIF

ELSE
IF ttyUSB.Status = Net.Active THEN
maximo = tempo
FOR i = 1 TO maximo
PRINT #ttyUSB, "111"
ToolButton1.Background = &FF0000&
ToolButton1.Text = "1"
WAIT 0.1
ToolButton1.Background = &00FF00&
ToolButton1.text = ""
NEXT
maximo = 0
ELSE
Message.info("NO JODAS 1")
ENDIF
ENDIF
vini1 = vfin1

END
'**********************************************************************************
PUBLIC SUB sldS1_Change()
DIM maximo AS Integer
DIM i AS Integer

spnboxS1.Value = sldS1.Value
vfin1 = spnboxS1.Value
tempo = 0

tempo = Abs(vfin1 - vini1)

IF (vfin1 - vini1) < 0 THEN
IF ttyUSB.Status = Net.Active THEN
maximo = tempo
FOR i = 1 TO maximo
PRINT #ttyUSB, "AAA"
ToolButton2.Background = &FF0000&
ToolButton2.Text = "A"
WAIT 0.3
ToolButton2.BackColor = &00FF00&
ToolButton2.Text = ""
NEXT
maximo = 0
ELSE
Message.Info("NO JODAS A")
ENDIF

ELSE
IF ttyUSB.Status = Net.Active THEN
maximo = tempo
FOR i = 1 TO maximo
PRINT #ttyUSB, "111"
ToolButton1.Background = &FF0000&
ToolButton1.Text = "1"
WAIT 0.3
ToolButton1.Background = &00FF00&
ToolButton1.text = ""
NEXT
maximo = 0
ELSE
Message.info("NO JODAS 1")
ENDIF
ENDIF
vini1 = vfin1


END

PUBLIC SUB cmdBorrar_Click()

TextArea2.Text = ""

END

PUBLIC SUB cmdColor_Click()

cmdColor.text = "Rojo"
FMain.BackColor = &H00FF0000&

END








Lo mas padre de todo esto es que si funciona aunque lento pero funciona.

Prueba de Interfaz USB-RS232 Linux + minicom

Hola a todos!!, despues de como 20 días sin avance, y bueno por fin podre mas o menos seguir adelante con esto !!!

Espero que no hayan pensado que deje abandonado pero bueno, poe el momento y asi como que de rápido, por fin consegui una interfaz serial usb, y eso es lo que estaba deteniendo mucho.

acabo de probar mi tarjeta controladora de servos con la interfaz usb-rs232 y minicom, que es una aplicacion muy padre de comunicacion serial para linux en linea de comandos., para que podamos usar la interfaz haremos lo siguiente.

conectar nuestro cable
abrir una terminal
teclear el siguiente comando $dmesg y esperar que nos diga algo como esto
[ 2106.356084] usb 3-1: new full speed USB device using uhci_hcd and address 3
[ 2106.521639] usb 3-1: configuration #1 chosen from 1 choice
[ 2106.525273] pl2303 3-1:1.0: pl2303 converter detected
[ 2106.545611] usb 3-1: pl2303 converter now attached to ttyUSB0

En este caso la interfaz es reconocida por ubuntu de forma automática como ttyUSB0, ahora solo toca configura el minicom.

para esto tecleamos

minicom -s
+-----------------------------------------------------------------------+
| A - Dispositivo Serial : /dev/ttyUSB0 |
| B - Localización del Archivo de Bloqueo : /var/lock |
| C - Programa de Acceso : |
| D - Programa de Salida : |
| E - Bps/Paridad/Bits : 115200 8N1

Al terminar si estamos en una lap, conviene guardar la configuracion,
así que al salir, pues a guardar como

| Salvar configuración como dfl |<--- Esta!!
| Salvar configuración como.. |
| Salir |

y pues a comunicarse!!.
+--------------------------------------
boxpic> 1
> S_1 +
1
> S_1 +
2
> S_2 +
2
> S_2 +
3
> S_3 +
3
> S_3 +
4
> S_4 +
4
> S_4 +
5
> S_5 +
+-----------------------------------------

La verdad el programa del microcontrolador no tiene muchos printf
ya que estos se acaban la memoria, entonces, mejos solo uso los necesarios

El unico detalle que hasta el momento le veo es el siguiente.
cuando cierro el minicom, automáticamente se desconecta la interfaz USB-RS

y entonces tengo sacar el cable y conectarlo de nuevo. espero, que en el
siguiente post, pues ya tenga mas avances!

Por cierto hoy no coloco imagenes por que ando de prisas, hoy, voy a la casa
de mi novia, y pues voy por ella!! cheers cheers cheers

martes, 25 de agosto de 2009

Linux

Bueno despues de recetarme algunos videos en el youtube, mientras platicaba con una amiga que por cierto dice que le gusta dormir, pero leo que mintio en ese aspecto, sino no habria de estar escribiendo unas notas ni estudiando, jojojoj es broma es una buena amiga y compañera del sistema, bueno pues mientras conversaba veia tambien unos videos que me parecieron muy buenos, espero les agraden.





lunes, 24 de agosto de 2009

Zoyatlcoponi, palma que florece

El trabajo de un grupo de mujeres artesanas de Huatlatauca, estado de Puebla, México.

Kakiwin Tutunaku

Centro ecoturístico que promueve la cultura Totonaca, abierto a toda clase de grupos que quieran participar de esta experiencia. Llame para reservar y disfrutar de la gastronomía indígena, música, danza regional y de la amabilidad de las mujeres totonacas

Mujeres bordadoras y tejedoras

El trabajo de un grupo de mujeres artesanas de Chachahuantla, estado de Puebla, México.

Xochimiahuetl - Flor que florece

La flor que florece es un reportaje sobre mujeres organizadas de la Sierra del estado de Puebla, ellas fabrican y venden sus productos, sin embargo, sus productos no se desplazan tan fácilmente,vean que tan bueno es el trabajo de las mujeres poblanas

Tamachij - chihualt, hecho a mano

Esta vez, presento una serie de videos donde se ven las artesanias que hacen las mujeres que se organizan en grupos comunitarios, cada una de ellas hacen un trabajo que está de más, decir que es excelente, sin embargo mal pagado, los videos me los recomendo mi hermana, son muy interesantes, veanlos.

drawtiming | Get drawtiming at SourceForge.net


Este post es de un programa en Linux que sirve para documentar tus circuitos a través de diagramas de tiempo, que son creados en un archivo gif.

Es realmente sencillo usarlo, ya que su sintaxis es facil de aprender :D, para quienes tienen GNU/Debian o alguna derivada en mi caso Ubuntu, pues unicamente usen

#apt-get install drawtiming

para ubuntu
$sudo apt-get install drawtiming

ya que este instaldo, crea una carpeta y en tu editor de textos planos favorito, crea un archivo txt que describa el funcionamiento de tu circuito.

para correr el programa, abre una consola ubicandola en la carpeta donde este tu archivo txt, y teclea el siguiente comando.

$drawtiming --output salida.gif entrada.txt

Puedes cambiarles los nombres :D como tu gustes.

Saludos!!

drawtiming | Get drawtiming at SourceForge.net

Shared via AddThis

sábado, 22 de agosto de 2009

Por fin me organizare mas

Bueno espero que esto no sea una llamarada de petate, como se dice en la jerga publica!!. pues la razon de mi anterior comentario es por lo siguiente, ya que soy una persona muy olvidadiza, pues tengo que generalmente anotar todo lo que hago, pues bueno y como ando en estas ondas de software libre, pues me puse a averiguar de que forma podria estar mas o menos al dia en mis actividades.

Bueno pues aunque tengo evolucion como calendario, como que no me gusta mucho, ademas de que presento el problemita de que no siempre tengo la lap encendida, pues bien primero que nada me puse a buscar un buen calendario y leyendo por la red me encontre que a la mayoria de las personas les gusta thunderbird de mozilla, sin embargo como que no me llama mucho la atención, así que me puse a indagar un poco mas y encontre Sunbird, un producto símil al anterior que pertenece incluso a la Mozilla, entonces lo revise y esta muy agradeble. lo pueden revisar en esta pagina

http://www.mozilla.org/projects/calendar/sunbird/screenshot.html

para instalar .- mike@nasty$ sudo apt-get install sunbird

Sin embargo como les comentaba, pues no siempre trae uno la lap prendida, y pues muchos de como yo supongo, su bateria no sirve!, y pues necesita alimentacion externa y bien eso es todo un rollo; entonces pues el celular tambien es una buena herramienta como recordatorio, pero es muy incomodo estar tecleando todo el tiempo en el para poner tus citas.

Al igual buscando en la red, me encontre con el siguiente link

http://www.esubuntu.com/sonyericsson_desde_linux_ubuntu

Ya que mi cel es un sony, w310i, pues me parecio perfecto y baje la aplicacion llamada wammu, que me sincroniza muy bien mi celular, y me deja organizar de una forma muy rapida mi cel y toda la info que tengo en el, pues ahora con esta aplicacion puedo estar trabajando mi cel con Wammu y mis citas en la lap con Sunbird.

Pero esto de trabajar con dos calendarios no es como que muy adecuado, así que lo mejor de esto es que puedo exportar los calendarios entre ambos programas y son muy compatibles!!!

Wammu <----> Sunbird
solo que el formato a exportar debe ser el ics en ambos casos, y eso te dará muy buenos resultados, asi, en caso no tener a la mano el cel, pero tengo la lap abierta, actualizo micalendario en Sunbird, y posteriormente cuando no use la lap, solo sincronizo el calendario con wammu, y en caso de no tener la lap, pues uso el celular, y cuando use la lap por mucho tiempo como el dia de hoy, unicamente sincronizo mi Sunbird con el cel y asi tendré mi informacion mas o menos al día.

Algo importante, cuando inicias Wammu por primera vez, yo opte por una autodeteccion, ya que no soy ducho en esto de los celulares, y pues me detecto muy bien el celular indicandole que estoy en una conexion USB, posteriormente, cuando ya me detecto el celular, me pide a que velocidad se piensa comunicar, ahi, muestra las velocidades de comunicacion, como si se tratase de un simple cable serial :D y bueno yo escogi la velocidad de 19600bps, que me parecio la mas adecuada, aunque tiene velocidades superiores, no quise abusar en esta prueba.

Ahora ya puedo usar mi cel no unicamente como memoria, sino tambien puedo controlar mi cel desde ubuntu.

Detalles
SO Ubuntu 9.04
RAM 2GB
dd 160GB
uP Intel Core2 duo T4300
instalar wammu
mike@nasty$ sudo apt-get install wammu

miércoles, 19 de agosto de 2009

El secreto de shamir

Bien pues este post lo lei en Blog Hacktivista, y pues me resulto muy interesante la forma en como un password es dividido en partes, para la seguridad del mismo y siempre y cuando este pass sea muy complejo y se te olvide. Lee el post esta muy interesante

El Secreto De Shamir. - Blog Hacktivista

Por cierto una amiga que es ing en sistemas, me comento sobre la navegacion anonima, sin embargo ya no le he visto conectada, supongo que le cacharon haciendo el tunel, pero no corrio riesgo su chamba por lo que se sigue trabajando bien (y).

Bueno me comento de privoxy y de pidgin que es lo que usaba en windows, ahora estoy por probar tor bajo ubuntu 9.04, alguien se anima. Aquí esta el vínculo para verificarlo.

Tor en Juanty

tomado del blog rm -rf / :D

Curso de aprendizaje basado en competencias ITST


Bueno aqui les presento unas fotos de nuestro curso de aprendizaje basado en compentencias desde el 17 al 20 de agosto de 2009. Arriba nuestra muy amable compañera de desarrollo académico de Libres, quién nos impartió el curso.






martes, 18 de agosto de 2009

Un poco aburrido

Bueno estas notas es solo para comentar que hoy estoy un poco aburrido y cansado pues hoy encontre unos módulos para un control cnc piratas :s

Esta situación, pues no me favorece en nada ya que la tarjeta de potencia de motores a pasos de un torno cnc pequeño, sigue sin funcionar,....

que poca!

viernes, 14 de agosto de 2009

PDF a RTF

Con esto de la web 2.0 y sus cosas, podemos visualizar este blog, pero no solo nos ofrece servicios de comunicación, sino también nos ofrece múltiples servicios. Uno de ellos la siguiente página nos ofrece de forma gratuita el subir un archivo pdf, que no este encriptado ni protegido por contraseña (hasta el momento esos son los que he probado) para convertirlos a un formato editable, como lo es Formato de Texto Enriquecido, comunmente llamado RTF, que podrás abrir y editar en tu procesador de textos favorito, como Word de Microsoft o Writer de Open Office.

Les dejo el link
PDF2Word Online: Convert PDF to Word for Free

Shared via AddThis

jueves, 13 de agosto de 2009

Por fin le entendi a lo del toolchain de piklab para integracion con sdcc








Por fin!

Mensaje maigke el Sáb 8 Ago 2009 - 8:32

Bueno despues de dejar esto de la integracion de piklab con el pickit2 y sdcc que tengo en casa Very Happy, pues ya despues de releer un buen Idea y bien debido a que soy lenton, pues ya comprendí!!

Lo unico que hize despues de volver sobre mis pasos, y encontrarme con los mismos problemas de hace un tiempo, decidí, reiniciar todo de nuevo. y lo único que agregue en Proyecto- Oopciones de Proyecto -- Toolchain --- Linker -- Camiarlo a personalizado, afortunadamente me quedaba con las opciones por defecto, bueno pues me coloque sobre la línea de texto y agregue la línea

libc18f.lib

y presione el boton de Add.

esto me dio el siguiente resultado!

sdcc -mpic16 -p18f2550 -V --debug -I/home/mike/PIC/reloj_test/ -c reloj.c
+ "/usr/bin/sdcpp" -nostdinc -Wall -std=c99 -I"/home/mike/PIC/reloj_test/" -Dpic18f2550 -D__18f2550 -DSTACK_MODEL_SMALL -obj-ext=.o -DSDCC_MODEL_SMALL -DSDCC=280 -DSDCC_REVISION=5117 -DSDCC_pic16 -D__pic16 -I"/usr/bin/../share/sdcc/include/pic16" -I"/usr/share/sdcc/include/pic16" -I"/home/mike/PIC/reloj_test/" "reloj.c"
sdcc -mpic16 -p18f2550 -V --debug -Wl-c -Wl-m -I/home/mike/PIC/reloj_test/ -oreloj.hex reloj.o libc18f.lib
using default linker script "/usr/share/gputils/lkr/18f2550.lkr"
+ "/usr/bin/gplink" -I"/usr/bin/../share/sdcc/lib/pic16" -I"/usr/share/sdcc/lib/pic16" -c -m -w -r -o reloj.hex reloj.o crt0i.o libc18f.lib pic18f2550.lib libsdcc.lib
*** Éxito ***
Parsing COFF file: /home/mike/PIC/reloj_test/reloj.cof
Device name: "18F2550"

Otro error que habia cometido, es que en la parte izquierda en la barra de proyecto, agregue el codigo objeto generado cuando unicamente compile el archivo, en este caso se llama reloj.o.

Muchas gracias espero que a alguien mas le sea de ayuda

sunny

Ahora seguiremos con las lecturas de los demas post para el echar a andar el pickit2 en piklab

***************************************************************************************************************
Gracias a todos ya he podido hechar a andar mi programador pickit2 con piklab!!
programando en sdcc, bueno pues que sucedia, no tenia los devs del la libreria libusb, por eso mismo tenia problemas para instalar el pk2cmd
Hecho eso, de acuerdo a Risanti http://pic-linux.foroactivo.net/piklab-f3/pickit-2-firmware-1x-en-piklab-t87.htm?highlight=piklab , tenia que solo hacer un
$sudo make install, y bueno de cualquier forma modifique las variables de ambiente en el .bashrc, aunque creo que esta demas.
al igual, como indica Risanti,
Risanti escribió:Hola a todos..

Lo siguiente es cambiar el firmware del pickit 2 para lo cual podemos descargar las distintas versiones desde
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1960

además con el comando pk2cmd -d PK2V012000.hex 'actualizamos firmware tiene que ser 1.20
En piklab configuramos el programador FIRMWARE PICKIT 2 1.X .....comprobamos la conexion que este correcto.. y listo


Aunque
la he probado con algunos pic funciona bien.. no se si sera un problema
de la version 1.20 del pickit pero no puedo programar pic 16F88. pero
otros los pogramos sin problemas...

Para programar 16F88 estoy usando pickit con version 2.32 conjuntamente con pikdev http://pic-linux.foroactivo.net/otros-f19/pickit-2-trabajando-pikdev-v-110-t86.htm#199



Atte.
Risanti

Mis resultados obtenidos ya por el piklab fueron estos

Conectando Firmware PICkit2 1.x en Puerto USB con el dispositivo 18F2550...
Versión de firmware es 1.20.0
set Vdd = 5 V and Vpp = 12 V
Establecer destino auto alimentado: false
Target Vdd = 4.99519 V
Target Vpp = 11.924 V
Conectado.
Enter normal mode
Already in requested mode.
Id leída: 18F2550 (rev. 5)
Programando memoria de dispositivo...
protected: code=false data=false
Borrando dispositivo
Escribir memoria: Memoria de código
start=0x000000 nbWords=0x004000 total=0x004000 force=false varOffset=false varSize=false
Verificar memoria: Memoria de código
start=0x000000 nbWords=0x004000 total=0x004000 force=false varOffset=false varSize=false
Escribir memoria: Datos EEPROM
Verificar memoria: Datos EEPROM
Escribir memoria: User IDs
Verificar memoria: User IDs
Escribir memoria: Bits de configuración
Verificar memoria: Bits de configuración
Programación exitosa.

maigke
Participante
Participante

Cantidad de envíos: 24
Fecha de inscripción: 12/04/2009
Edad: 31
Localización: Mexico


Volver arriba