Autor Tema: 16F628 y MAX232 - Tortura para un novato  (Leído 8037 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
16F628 y MAX232 - Tortura para un novato
« en: 06 de Noviembre de 2005, 14:25:00 »
Para un novato como yo en PBP intentar comunicar mi PC con el 16F628 a través de un MAX232 se etá convirtiendo en una verdadera tortura. Mi 628 permanece sordo y mudo pese a todos mis intentos de hablar con él.


¿Puede alguno de ustedes, amables Picmaniacos, revisar mi código y decirme qué estoy haciendo rematadamente mal?

La última versión del programa que le estoy grabando es exactamente:

"****************************************************************
"*  Name    : RS232
"*  Notes   : Si recibe algo hace parpadear PORTB.0
"****************************************************************

@ DEVICE PIC16F628,INTRC_OSC_NOCLKOUT,WDT_OFF,PWRT_ON,MCLR_ON,BOD_OFF,CPD_OFF,PROTECT_OFF

Include "modedefs.bas"

" Set receive register to receiver enabled
DEFINE HSER_RCSTA 90h
" Set transmit register to transmitter enabled
DEFINE HSER_TXSTA 24h
" Set baud rate
DEFINE HSER_BAUD 9600
" Clear Error auto
DEFINE HSER_CLROERR 1

RCIF VAR PIR1.5        " Receive  interrupt flag (1=full , 0=empty)
FERR VAR RCSTA.2     " Framing error bit
OERR VAR RCSTA.1     " Overrun error bit
       
"** Variable definition *****************************************

SerialData var byte
i var byte
       
"** Hardware initialisation *************************************
       
Inicio:
    pause 500      " safe start-up delay

    SerialData = 0      

    Gosub Alive : Pause 500
    Gosub Alive : Pause 500
   
Main:
    if RCIF = 1 then
       HSERIN [SerialData]
    endif

    if Serialdata <> 0 then " incomming data?
       Gosub Alive
    endif
    goto main

Alive:
    for i = 1 to 3
        High PORTB.0 : Pause 100 : Low PORTB.0 : Pause 100
    next i
   
    return

End
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
RE: 16F628 y MAX232 - Tortura para un novato
« Respuesta #1 en: 06 de Noviembre de 2005, 14:41:00 »
Hola:

No he trabajado con el hardware usart, pero la comunicacion por software va realmente bien....!

Dos preguntas:

1.- Es necesario que trabajes con el hardware USART...?
2.- En que aplicacion estas recibiendo los datos seriales...?

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
RE: 16F628 y MAX232 - Tortura para un novato
« Respuesta #2 en: 06 de Noviembre de 2005, 15:06:00 »
Amigo LordLafebre:

Muchas gracias por contestar.

> 1.- Es necesario que trabajes con el hardware USART...?

El 16F628A dispone de USART y me pareció una buena opción hacer uso de ella.  Además la rutina de comunicaciones con el PC debe ser insertada, cuando funcione, dentro de otro programa mas amplio que realiza otras funciones pero que me deja libres RB1 y RB2, de hecho son los únicos pines que me quedan libres y son precisamente los que están conectados como TX y RX a la USART, asi qué ...

> 2.- En que aplicacion estas recibiendo los datos seriales...?

Lo he intentado con el Hyperterminal de Window$ y con el "Serial Comunication Window" del MicroCode Studio Plus.

(Nota Los puertos serie de mi PC funcionan correctamente porque los he conectado entre ellos con un cable cruzado y se han hecho eco el uno al otro perfectamente a 8N1 sin control de Hardware)

¡Ah! Para compilar el código fuente anterior utilizo PicBasic Pro 2.45

Sigo perplejo ante mi incapacidad para hablar con el PIC ...Llorica
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
RE: 16F628 y MAX232 - Tortura para un novato
« Respuesta #3 en: 06 de Noviembre de 2005, 15:32:00 »
Hola:

Mira, puedes utilizar cualquier pin del micro para enviar los datos y recibir, pero esto por software, puedes tambien enviar por el rx y tx sin hacer las declaraciones del hardware... es decir algo como esto:

serout PORTB.2,N9600,["Hola"]

tambien incluye la libreria "modedefs.bas" en donde los parametros estan bien marcados, el primero es el pin por donde quieres enviar el dato, el segundo la velocidad y el tercero el valor a enviar, puedes intentar con esto, y me comentas cualquier cosa, ok?

Suerte........!!!!! Sonrisa Gigante

Desconectado Artifox

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 455
    • Quadbot
RE: 16F628 y MAX232 - Tortura para un novato
« Respuesta #4 en: 06 de Noviembre de 2005, 17:16:00 »
Hola, yo he hecho comunicacion serial utilizando el Hardware de un PIC, Lo unico es que no uso el HSERIN, sino para recibir siempre uso interrupciones... Ademas, las interrupciones los manejo por asembler... jeje

Codigo:
DEFINE INTHAND Int_Vector           " Handler de Interrupcion
asm
Int_Vector
    movwf   wsave                   ; Guardamos el registro W
    movf    STATUS,W
    clrf    STATUS                  ; Guardamos el registro STATUS
    movwf   ssave
    movf    PCLATH,W                ; Guardamos el registro PCLATH
    movwf   psave
    clrf    PCLATH
endasm            ; Código de interrupción
    PIR1.5=0                     ; Borramos el flag de interrupcion
    Dato= RCREG                      ; Guardamos el dato entrante en la variable Dato
    Send=1
Asm            ; Fin de Interrupcion
    clrf    STATUS
    movf    psave,W
    movwf   PCLATH                  ; Restauramos el registro PCLATH
    movf    ssave,W
    movwf   STATUS                  ; Restauramos el registro STATUS
    swapf   wsave,F
    swapf   wsave,W                 ; Restauramos el registro W
    retfie
endasm"****************************************************************
Inicio:
    TRISC=%10000000                 " Configuramos el Puerto C RS232
    SPBRG=12                        " Vtx=19200 baudios; Xtal=4Mhz,
    RCSTA = %10010000               " Enable serial port and continuous receive
    TXSTA = %00100100               " Enable transmit and asynchronous mode,8bits,Tx on
    TXREG=0: RCREG=0             " aclarar buffers del port serial
    PIE1=%00100000
    PIR1=%00010000
    INTCON=%11000000:    send=0
Loop:    IF send=0 then loop
 PORTB=DATO
TxRS232:IF PIR1.4 = 0 Then TxRS232
TXREG = DATO
goto loop
end
 


Ese es parte de un codigo que siempre uso... Espero te sirva y dale una revisada porque creo que le faltan algunos pequeños detalles.

Un abrazo...Rebotado
Video Quadbot
Saludos desde mi querido Perú.
Si realmente queremos que el mundo cambie debemos empezar por nosotros mismos... ;)

Desconectado jorgeansuini

  • PIC18
  • ****
  • Mensajes: 340
RE: 16F628 y MAX232 - Tortura para un novato
« Respuesta #5 en: 07 de Noviembre de 2005, 11:05:00 »
Hola:

Un comentario:por lo que veo al principio del código ,no estas usando oscilador a cristal .Yo no he hecho la prueba de usar este esquema porque no lo aconsejan,sino que definitivamente te aconsejan para comunicaciones 232 tener un oscilador a cristal.-

Saludos
Jorge

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
RE: 16F628 y MAX232 - Tortura para un novato
« Respuesta #6 en: 07 de Noviembre de 2005, 14:02:00 »
Hola Jorge:

>  ...sino que definitivamente te aconsejan para comunicaciones 232 tener un oscilador a cristal

En un principio usé un cuarzo de 6 Mhz que es el que trae mi placa de desarrollo y le calculé el SPBRG correspondiente ya que no aparecía en las tablas del Datasheet del 16F628, después compré y monte un cristal de 3.579545 Mhz que sí aparecía y tampoco me funcionó, leí entonces que todos los ejemplos del manual del PicBasic Pro venían suponiendo un cristal de 4 Mhz así que no lo dudé y monté un cristal de dicha frecuencia con el mismo y nefasto resultado. Por último decidí usar el oscilador interno del 16F628 que oscila a 4 Mhz tambíen .... ¿O nó? Ardiendo

Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
RE: 16F628 y MAX232 - Tortura para un novato
« Respuesta #7 en: 07 de Noviembre de 2005, 14:05:00 »
Hola:

RedPic intentastye hacer lo que te comente o lo que te dijo artifox?

sigues con problemas...?

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
RE: 16F628 y MAX232 - Tortura para un novato
« Respuesta #8 en: 08 de Noviembre de 2005, 13:51:00 »
Amigo LordLafebre:

>RedPic intentastye hacer lo que te comente o lo que te dijo artifox?
> sigues con problemas...?

Desafortunadamente de Lunes a Viernes tengo complicado el poder dedicar siquiera algunos minutos a mis PIC"s. Este proximo fin de semana tengo previsto montar un único y solo 16F628 con su correspondiente cristal de 4.00 Mhz y su alimentación adecuada. Conectar solamente los pines RB1 y RB2 a un Max232 y ... a probar todas vuestras sugerencias ... os tendré informado. loco
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
RE: 16F628 y MAX232 - Tortura para un novato
« Respuesta #9 en: 08 de Noviembre de 2005, 16:41:00 »
Hola:

Pues no se para que quieras o cual es tu aplicacion pero yo he trabajado con la comunicacion serie por software que te proporciona PBP (SERIN y SEROUT) y hasta ahora no me quejo... si no te llega a funcionar, el fin de semana estoy siempre por estos lares....! Sonrisa Gigante

Desconectado RGL

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 634
RE: 16F628 y MAX232 - Tortura para un novato
« Respuesta #10 en: 12 de Noviembre de 2005, 14:24:00 »
Tu código jamas puede funcionar como está hecho.

Tu miras la bandera, pero cuando se produce la bandera ejecutas el comando y el carácter ya ha pasado. El byte que activa el flag del puerto serie de recepción lo tienes almacenado en un registro.

Yo te pongo aquí un ejemplo  de melabs con usart  del micro.



" Read and write hardware USART

B1      var     byte

" Initialize USART
        TRISC = %10111111       " Set TX (PortC.6) to out, rest in
        SPBRG = 25              " Set baud rate to 2400
        RCSTA = %10010000       " Enable serial port and continuous receive
        TXSTA = %00100000       " Enable transmit and asynchronous mode


" Echo received characters in infinite loop
loop:   Gosub charin            " Get a character from serial input, if any
        If B1 = 0 Then loop     " No character yet

        Gosub charout           " Send character to serial output
        Goto loop               " Do it forever


" Subroutine to get a character from USART receiver
charin: B1 = 0                  " Preset to no character received

        If PIR1.5 = 1 Then      " If receive flag then...
                B1 = RCREG      " ...get received character to B1
        Endif

ciret:  Return                  " Go back to caller


" Subroutine to send a character to USART transmitter
charout: If PIR1.4 = 0 Then charout     " Wait for transmit register empty

        TXREG = B1              " Send character to transmit register

        Return                  " Go back to caller


Espero que esto pueda ayudarte. Hay otros modos. Te aconsejo que mires en el siguiente link

http://www.melabs.com/resources/samples.htm

Saludos,
Ricky

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
RE: 16F628 y MAX232 - Tortura para un novato
« Respuesta #11 en: 07 de Diciembre de 2005, 07:34:00 »
Navidad

¡Todo funcionando a las mil maravillas!

Le he colocado un Xtal de 4Mhz, sus dos correspondientes codensatrices de 22nF y .... Se ha puesto a comunicar como un loco. Manda y recibe bytes como si llevase toda la vida haciendolo.

Gracias LordLefebre y todos los demás amigos que me habeis ayudado.

Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: 16F628 y MAX232 - Tortura para un novato
« Respuesta #12 en: 21 de Abril de 2006, 15:13:54 »
(Disgresión nostálgica)

Este fué mi primer mensaje a este genial Foro Todopic, realizado el mismo día en que me inscribí en él.
Por él y en él conocí la existencia de LordLafebre y otros amigos .... ahhhh qué tiempos aquellos.  :-)

Nota: Y el PHP me dice al intentar postear en este mismo hilo ....

Advertencia: no se han publicado mensajes en este tema por aproximadamente 120 días.
A menos que estés seguro que realmente deseas responder, por favor considera mejor crear un nuevo tema
.

Ja, ja, ja ... pero si es esto lo que quiero hacer ... para dar las GRACIAS a TODOS USTEDES por EXISTIR ...  :D  :D  :D

« Última modificación: 21 de Abril de 2006, 15:15:40 por RedPic »
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
Re: 16F628 y MAX232 - Tortura para un novato
« Respuesta #13 en: 21 de Abril de 2006, 16:30:14 »
Hola:

jeje el maestro del C visitando nuevamente el humilde subforo de VB  :mrgreen:

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: 16F628 y MAX232 - Tortura para un novato
« Respuesta #14 en: 12 de Junio de 2007, 08:59:29 »
De vez en cuando me gusta venir por aquí.

Este fue el primer hilo, y el primer post, que puse en Todopic. El año pasado puse un post y este año vuelvo a hacer lo mismo.

Amigo Gio, fíjate que hasta escribiendo programas en Basic escribí Main: ja ja ja  :D :D :D

De nuevo ¡¡¡ Gracias a Todos Ustedes por Existir !!!
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania