desktop

Curso de programación de PIC en PICBasic Pro

No se enojen gente, recuerden que solo lo hice como prueba para salvar la lavadora ya que la tarjeta original cuesta mucho dinero, sin insultar a nadie de changos ni nada por el estilo, del medidor de agua quite esa parte, la deje estandar en el llenado, su rutina se basa en ciclos de tipo FOR, la quise hacer con un reloj temporizado usando el TMR0 pero daba muchos errores.
 

Adjuntos

  • Lavadora PIC16F628A.rar
    21.3 KB · Visitas: 57
buenos dias , estoy trabajando con el pic 18f26k22 y necesito activar los dos módulos usart , solo he podido activar el usart1 y el usart2 he tenido complicaciones nose que esta pasando al parecer es un tema de oscilador no estoy seguro algun ejemplo estoy usando pbp 3.0 tambien tengo el 2.6
algunas indicaciones serian de gran ayuda muchas gracias.
 
Sí, en eso estoy. Estoy investigando y ya he logrado activar los dos módulos pero todavía no entiendo cómo configurar el oscilador para así lograr un cálculo exacto para el cambio de baudios.
Quiero que obedezcan a la fórmula que está en el manual, lo cual no logro conseguir, siempre hay una variación en el usart2.
¿Alguna idea?
 
En realidad es muy sencillo y prácticamente es igual que configurar el módulo USART de los PIC que nada más tienen uno.
Al ser dos módulos, cada uno tiene registros independientes y eso es lo que se debe tener en cuenta.

Terminales RS-232.jpg

Ya que veo que se te ha complicado, mejor adjunto un ejemplo. (PBP3)
Como esto es realmente muy fácil de implementar, preferí usar interrupciones.
 

Adjuntos

  • 18F26K22 2 EUSART.rar
    52.7 KB · Visitas: 29
En realidad es muy sencillo y prácticamente es igual que configurar el módulo USART de los PIC que nada más tienen uno.
Al ser dos módulos, cada uno tiene registros independientes y eso es lo que se debe tener en cuenta.

Ver el archivo adjunto 165124

Ya que veo que se te ha complicado, mejor adjunto un ejemplo. (PBP3)
Como esto es realmente muy fácil de implementar, preferí usar interrupciones.

Sí, descubrí mi error. Estaba simplemente en el fuse PS.
Quisiera preguntarle si funciona como half duplex, pues quiero comunicarme con un equipo que tiene una velocidad no estándar de 5787, desde mi PC a 9600
¿Sería factible? Gracias y saludos.
 
Sí, descubrí mi error. Estaba simplemente en el fuse PS.
Ese Fuse no existe.
Yo únicamente usé los siguientes: FOSC = HSHP, IESO = ON, WDTEN = OFF
Quisiera preguntarle si funciona como half duplex
Half Duplex y Full Duplex.
Date un tiempo para leer la hoja de datos.
quiero comunicarme con un equipo que tiene una velocidad no estándar de 5787, desde mi PC a 9600
¿Sería factible?
No se puede lograr la comunicación si las velocidades de los dispositivos son diferentes.
 
Ese Fuse no existe.
Yo únicamente usé los siguientes: FOSC = HSHP, IESO = ON, WDTEN = OFF

Half Duplex y Full Duplex.
Date un tiempo para leer la hoja de datos.

No se puede lograr la comunicación si las velocidades de los dispositivos son diferentes.


me explico quiero utilizar el pic como un conversor de baudios usando los dos modulos usart (hserin 9600 con hserot2 a 5787)de ida y (hserin2-5787 con hserot9600) de vuelta los dos modulos hacerlo un conversor rx y tx me imagino que esta manera si podria comunicarme con el equipo o me estoy equivocando es posible hacer los dos modulos uno solo. seria factible la comunicacion .
 
Buenas tardes
Sí es posible, no encuentro el problema.
he tenido problemas con la implementacion del convertidor de baudios de 9600 a 5787 la verdad he configurado los registros como me indico ,tambien los registros SPBRG1 y SPBRG2 para la taza de baudios par que no tenga mucho error. pero al probar puenteando el rx con tx para qu e me regrese la dada que envio por la pc a 9600, me regresan datos imcompletos no se que estoy haciendo mal quisas sea la programacion ,quisiera que fuera tan preciso como la usart de una pc aalgun alcance o alguna otra forma de poder cambiar a 5787 baudios en la pc seria interesante .
adjunto el programa.
 

Adjuntos

  • 18F26K22 2 EUSARTX.rar
    109.2 KB · Visitas: 13
Al probar puenteando el Rx con Tx para que me regrese la dada que envío por la PC a 9600, me regresan datos incompletos.
Para 9600 Bps @ 20 MHz, el valor de SPBRGX debe ser 130 y para 5787 Bps, de 215
Quisiera que fuera tan preciso como la USART de una PC.
La precisión que alcance el PIC será suficiente para que el programa de PC enganche.
Algún alcance o alguna otra forma de poder cambiar a 5787 baudios en la PC, sería interesante.
Necesitas un terminal que permita establecer ese baud rate.
 
Para 9600 Bps @ 20 MHz, el valor de SPBRGX debe ser 130 y para 5787 Bps, de 215

La precisión que alcance el PIC será suficiente para que el programa de PC enganche.

Necesitas un terminal que permita establecer ese baud rate.

si, la configuracion es correcta tal como usted dice ,pero de alguna manera al enviar datos esta pierde algunos ,quisas sea el programa,no se lo que sera alguna idea .el terminal que me permite establecer los baudios a 5787 desde la pc directamente ,existe o tengo que implementarlo.si existe como lo puedo conseguirlo y si tengo implementarlo como lo implemento,que copilador ,algunas pautas para hacerlo ,muchas gracias por su ayuda
 
Corrijo lo anterior. Para 9600 Bps @ 20 MHz. El valor de SPBRGX debe ser 129
Creo que me quedé pensando con el valor que pusiste en el programa que subiste.

Calculado con una aplicación mía:
SPBRG_Calc.jpg

Comprobado con otra aplicación similar:
SPBRG_Calc Mr EE-Z.jpg
¿El terminal que me permite establecer los baudios a 5787 desde la pc directamente, existe o tengo que implementarlo?
Si existe, ¿Cómo puedo conseguirlo y si tengo implementarlo, cómo lo implemento?
¿Qué copilador? ¿Algunas pautas para hacerlo?
No sé si exista, yo diseñé mi propia interfaz RS-232 que sí lo permite.
Parámetros COM de SPCTRL.jpg
El compilador usado fue Visual Studio 6 en Basic

Aquí está el enlace del proyecto:
Interfaz RS-232 PIC PC (Proyecto Completo VB6)

En esa entrega no se tiene esa opción, pero si sabes programar en Visual Basic, fácilmente podrás modificar el proyecto y añadir las funciones o características que requieras.
Y si no tienes conocimientos de ese tipo de programación, aquí adjunto la versión más actual. (Incluyo el calculador de SPBRG)
 

Adjuntos

  • Serial Port Control y SPBRG Calculator.rar
    283.8 KB · Visitas: 35
Corrijo lo anterior. Para 9600 Bps @ 20 MHz. El valor de SPBRGX debe ser 129
Creo que me quedé pensando con el valor que pusiste en el programa que subiste.

Calculado con una aplicación mía:
Ver el archivo adjunto 165765

Comprobado con otra aplicación similar:
Ver el archivo adjunto 165766

No sé si exista, yo diseñé mi propia interfaz RS-232 que sí lo permite.
Ver el archivo adjunto 165767
El compilador usado fue Visual Studio 6 en Basic

Aquí está el enlace del proyecto:
Interfaz RS-232 PIC PC (Proyecto Completo VB6)

En esa entrega no se tiene esa opción, pero si sabes programar en Visual Basic, fácilmente podrás modificar el proyecto y añadir las funciones o características que requieras.
Y si no tienes conocimientos de ese tipo de programación, aquí adjunto la versión más actual. (Incluyo el calculador de SPBRG)

lo que necesito es codigo fuente de la version mas actual para poder registrar otros baudios y de alguna forma guiarme ,gracias
 
En la versión que subí se puede establecer cualquier baud rate entre 110 y 256000 Bps.
En "Baud rate" debes seleccionar "Otro" para que puedas ingresarlo en donde dice "Otro Baud rate".
Otro Baud rate.jpg
 
En la versión que subí se puede establecer cualquier baud rate entre 110 y 256000 Bps.
En "Baud rate" debes seleccionar "Otro" para que puedas ingresarlo en donde dice "Otro Baud rate".
Ver el archivo adjunto 165783
si eso si, solo que queria la fuente de esta version actualizada o alguna rutina referente para poder implementarlo e incluirlo en mi sofware que estoy trabando para controlar desde mi pc a 5787 o cualquier otro baudaje.
 
Desde la primer versión está la rutina en donde se agregan los Bps.

Código:
With cmbBauds ' Agregar los BPS al ComboBox cmbBauds
    .AddItem "110"
    .AddItem "300"
    .AddItem "600"
    .AddItem "1200"
    .AddItem "2400"
    .AddItem "4800"
    .AddItem "9600"
    .AddItem "14400"
    .AddItem "19200"
    .AddItem "28800"
    .AddItem "38400"
    .AddItem "56000"
    .AddItem "128000"
    .AddItem "256000"
    .ListIndex = 6 ' Por default en 9600 Baudios
End With
En la última versión nada más se agregó algo muy sencillo.

Código:
Private Sub cmbBauds_Click()
    If cmbBauds.Text = "Otro" Then
        txtBaudRate.Enabled = True
        OtherBaudrate = 1
    Else
        txtBaudRate.Enabled = False
        OtherBaudrate = 0
    End If
End Sub
En la rutina Click de cmdOK:

Código:
Private Sub cmdOK_Click()
    ' Seleccionar el modo de conexión serial.
    If cmbBauds.Text = "Otro" Then
        OtherBaudrate = 1
        Bauds = Val(txtBaudRate.Text)
       
        If Bauds = 0 Then
            MsgBox "Debe proporcionar un valor para el Baudrate.", vbInformation, "Error en el Baudrate"
            txtBaudRate.SetFocus
            Exit Sub
        ElseIf Bauds < 110 Then
            MsgBox "El Baudrate no puede ser inferior a 110 Baudios.", vbExclamation, "Error en el Baudrate"
            txtBaudRate.SetFocus
            Exit Sub
        ElseIf Bauds > 256000 Then
            MsgBox "El Baudrate no puede ser superior a 256000 Baudios.", vbExclamation, "Error en el Baudrate"
            txtBaudRate.SetFocus
            Exit Sub
        End If
    Else
        Bauds = Trim(cmbBauds.Text)
        OtherBaudrate = 0
    End If
En la rutina ReadConfig:

Código:
    OtherBaudrate = CByte(GetSetting(App.CompanyName, App.Title, "USER_BAUDRATE", 1))
    txtBaudRate.Text = GetSetting(App.CompanyName, App.Title, "USER_BAUDS", "5000")
En la rutina WriteConfig:

Código:
    If OtherBaudrate = 1 Then
        SaveSetting App.CompanyName, App.Title, "USER_BAUDS", txtBaudRate.Text
    Else
        SaveSetting App.CompanyName, App.Title, "BAUDS", cmbBauds.Text
    End If
Y la variable OtherBaudrate es del tipo Byte, pero también puede ser Boolean.
 
Desde la primer versión está la rutina en donde se agregan los Bps.

Código:
With cmbBauds ' Agregar los BPS al ComboBox cmbBauds
    .AddItem "110"
    .AddItem "300"
    .AddItem "600"
    .AddItem "1200"
    .AddItem "2400"
    .AddItem "4800"
    .AddItem "9600"
    .AddItem "14400"
    .AddItem "19200"
    .AddItem "28800"
    .AddItem "38400"
    .AddItem "56000"
    .AddItem "128000"
    .AddItem "256000"
    .ListIndex = 6 ' Por default en 9600 Baudios
End With
En la última versión nada más se agregó algo muy sencillo.

Código:
Private Sub cmbBauds_Click()
    If cmbBauds.Text = "Otro" Then
        txtBaudRate.Enabled = True
        OtherBaudrate = 1
    Else
        txtBaudRate.Enabled = False
        OtherBaudrate = 0
    End If
End Sub
En la rutina Click de cmdOK:

Código:
Private Sub cmdOK_Click()
    ' Seleccionar el modo de conexión serial.
    If cmbBauds.Text = "Otro" Then
        OtherBaudrate = 1
        Bauds = Val(txtBaudRate.Text)
      
        If Bauds = 0 Then
            MsgBox "Debe proporcionar un valor para el Baudrate.", vbInformation, "Error en el Baudrate"
            txtBaudRate.SetFocus
            Exit Sub
        ElseIf Bauds < 110 Then
            MsgBox "El Baudrate no puede ser inferior a 110 Baudios.", vbExclamation, "Error en el Baudrate"
            txtBaudRate.SetFocus
            Exit Sub
        ElseIf Bauds > 256000 Then
            MsgBox "El Baudrate no puede ser superior a 256000 Baudios.", vbExclamation, "Error en el Baudrate"
            txtBaudRate.SetFocus
            Exit Sub
        End If
    Else
        Bauds = Trim(cmbBauds.Text)
        OtherBaudrate = 0
    End If
En la rutina ReadConfig:

Código:
    OtherBaudrate = CByte(GetSetting(App.CompanyName, App.Title, "USER_BAUDRATE", 1))
    txtBaudRate.Text = GetSetting(App.CompanyName, App.Title, "USER_BAUDS", "5000")
En la rutina WriteConfig:

Código:
    If OtherBaudrate = 1 Then
        SaveSetting App.CompanyName, App.Title, "USER_BAUDS", txtBaudRate.Text
    Else
        SaveSetting App.CompanyName, App.Title, "BAUDS", cmbBauds.Text
    End If
Y la variable OtherBaudrate es del tipo Byte, pero también puede ser Boolean.

EXELENTE,tengo una duda estoy probando comunicacion desde mi pc al equipo que quiero gobernar un equipo que tiene el siguiente formato de trabajo
Sin título.png

es posible establecer comunicacion desde mi pc con tu terminal al equipo, ps estoy enviando comandos ascci pero en realidad no obtengo respuesta,tu terminal permite enviar estos comandos sin modificarlos o como haria para establecer comunicacion alguna idea .
 
Sí, es el protocolo o norma estándar RS-232.
Lo que debes tener en cuenta es lo que se menciona: 8 data bits (least significant bit transmitted first)
O sea que el bit menos significativo debe ser enviado primero.
 
Atrás
Arriba