Autor Tema: Como hacer una USART por software en ccs c sin usar la directiva #use RS232??  (Leído 7049 veces)

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

Desconectado Mando31

  • PIC10
  • *
  • Mensajes: 32
Hola compañeros foreros, pues mi inquietud y problema es como poder generar una usart por software sin usar la gran ayuda del ccs como es la directuva #use RS232, sino que generarla toda por programación usando el protocolo NRZ-L.  :mrgreen:

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Como hacer una USART por software en ccs c sin usar la directiva #use RS232??
« Respuesta #1 en: 12 de Septiembre de 2009, 07:21:50 »
No lo se, pero si lo que intentas es complicarte la vida, podrias agregarle Modbus, por ejemplo... :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Como hacer una USART por software en ccs c sin usar la directiva #use RS232?
« Respuesta #2 en: 12 de Septiembre de 2009, 10:51:28 »
Hola.

De poderse, se puede, claro está. Puedes usar la función output_bit(), con la función shift_left() para hacerlo. Lo que si debes tener en cuenta son los tiempos, para calculo del BaudRate y esas cosas.

Saludos
El papel lo aguanta todo

Desconectado Mando31

  • PIC10
  • *
  • Mensajes: 32
Re: Como hacer una USART por software en ccs c sin usar la directiva #use RS232??
« Respuesta #3 en: 12 de Septiembre de 2009, 21:48:09 »
Hola MLO__ teno claro que debo de sacar los calculos para el BaudReate y todo eso  :P, podrias explicarm un poquito lo del shift_left() como se maneja un ejemplo, gracias.

Y MGLSOFT no es que quiera complicarme la vida yo sino es más culpa de mi profesor que es el que nos pidio investigaramos sobre como hacer esto y después para poder hacerlo, inclusive el nos dijo que consultaramos en los foros y como soy miembro de este grandioso foro pues decidi exponer mi duda aqui en donde hay grandes en el tema de los PIC.

Por todo Muchas Gracias.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Como hacer una USART por software en ccs c sin usar la directiva #use RS232?
« Respuesta #4 en: 12 de Septiembre de 2009, 21:57:18 »
output_bit()

Citar
Outputs the specified value (0 or 1) to the specified I/O pin.  The method  of  setting  the  direction register   is  determined  by  the  last  #USE *_IO  directive.

shift_left()

Citar
Shifts a bit into an array or structure.  The address may be an array identifier or an address to a structure (such as &data).   Bit 0 of the lowest byte in RAM is treated as the LSB.

Supongamos que definimos como pin de salida a algun pin, al que llamaremos DATA y que tenemos una variable de 8 bits VAR la cual vamos a sacar bit a bit por el pin DATA:

Código: C#
  1. for(i=0;i<8;i++)
  2.  output_bit(DATA, shift_left(&VAR,1,0));

Saludos

El papel lo aguanta todo

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Como hacer una USART por software en ccs c sin usar la directiva #use RS232??
« Respuesta #5 en: 13 de Septiembre de 2009, 06:13:02 »
Tambien puedes hacer rutinas en assembler dentro de C, donde deberas hacer los retardos en assembler.
Eso le gustara a tu profesor, se relamen cuando le mencionas el assembler... :mrgreen: :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado fr4n

  • PIC12
  • **
  • Mensajes: 53
Re: Como hacer una USART por software en ccs c sin usar la directiva #use RS232?
« Respuesta #6 en: 27 de Abril de 2011, 07:10:52 »
output_bit()

Citar
Outputs the specified value (0 or 1) to the specified I/O pin.  The method  of  setting  the  direction register   is  determined  by  the  last  #USE *_IO  directive.

shift_left()

Citar
Shifts a bit into an array or structure.  The address may be an array identifier or an address to a structure (such as &data).   Bit 0 of the lowest byte in RAM is treated as the LSB.

Supongamos que definimos como pin de salida a algun pin, al que llamaremos DATA y que tenemos una variable de 8 bits VAR la cual vamos a sacar bit a bit por el pin DATA:

Código: C#
  1. for(i=0;i<8;i++)
  2.  output_bit(DATA, shift_left(&VAR,1,0));

Saludos



¿Y como se hace para calcular el baudrate y para marcarle los tiempos a esa instrucción? ¿meterlo dentro de una rutina de interrupción de algun timer cada X segundos?
¿o existe alguna forma más sencilla?

Gracias. Saludos.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Como hacer una USART por software en ccs c sin usar la directiva #use RS232??
« Respuesta #7 en: 27 de Abril de 2011, 10:56:08 »
Con la calculadora se puede hacer 1/baudrate y se tiene el periodo de cada bit. Con eso ya se puede utilizar delay_xs(....)


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado fr4n

  • PIC12
  • **
  • Mensajes: 53
Re: Como hacer una USART por software en ccs c sin usar la directiva #use RS232??
« Respuesta #8 en: 27 de Abril de 2011, 12:39:25 »
Con la calculadora se puede hacer 1/baudrate y se tiene el periodo de cada bit. Con eso ya se puede utilizar delay_xs(....)


Saludos!

Gracias por responder!

Si mi PIC trabaja a 48Mhz y quiero enviar 500K bits cada segundo... ¿como sería la formula? No influye que esté trabajando a 48Mhz?

Saludos!

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Como hacer una USART por software en ccs c sin usar la directiva #use RS232??
« Respuesta #9 en: 27 de Abril de 2011, 12:51:49 »
Ufff... A 500000 tienes que tener en cuenta cuanto demora cada instrucción en C, y a partir de ello agregarle la demora necesaria para que cada bit sea colocado o leido cada 2us (1/500k) .

Puede que las instrucciones de C demoren mucho y lo mejor sea incrustar código en asm.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado fr4n

  • PIC12
  • **
  • Mensajes: 53
Re: Como hacer una USART por software en ccs c sin usar la directiva #use RS232??
« Respuesta #10 en: 27 de Abril de 2011, 18:44:31 »
Ufff... A 500000 tienes que tener en cuenta cuanto demora cada instrucción en C, y a partir de ello agregarle la demora necesaria para que cada bit sea colocado o leido cada 2us (1/500k) .

Puede que las instrucciones de C demoren mucho y lo mejor sea incrustar código en asm.


Saludos!

de asm no tengo mucha idea :S
¿Como quedaria más o menos?

Gracias.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Como hacer una USART por software en ccs c sin usar la directiva #use RS232??
« Respuesta #11 en: 27 de Abril de 2011, 20:27:25 »
Ufff... A 500000 tienes que tener en cuenta cuanto demora cada instrucción en C, y a partir de ello agregarle la demora necesaria para que cada bit sea colocado o leido cada 2us (1/500k) .

Puede que las instrucciones de C demoren mucho y lo mejor sea incrustar código en asm.


Saludos!

de asm no tengo mucha idea :S
¿Como quedaria más o menos?

Gracias.

Busca información el foro, hay bastante sobre el tema. Ya sea sobre assembler y assembler en CCS.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado fr4n

  • PIC12
  • **
  • Mensajes: 53
Re: Como hacer una USART por software en ccs c sin usar la directiva #use RS232??
« Respuesta #12 en: 28 de Abril de 2011, 06:09:58 »
Todo mi programa es en C usando el ccs, puedo incrustar solo esa parte del codigo en asm y que todo compile sin problemas?

Saludos.

Desconectado jukinch

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 608
Re: Como hacer una USART por software en ccs c sin usar la directiva #use RS232??
« Respuesta #13 en: 28 de Abril de 2011, 09:36:17 »
hola fr4n:
        si podés hacerlo. Sólo debes encerrar el código en asm entre la siguiente sintaxis:

#ASM



#ENDASM

       Saludos.
               Jukinch



"Este par de instrucciones permite que utilicemos un bloque de instrucciones en assembler dentro de nuestro código CCS. El siguiente es un ejemplo de uso tomado de la ayuda del CCS:

int find_parity (int data)    {
 int count;
 #ASM
 movlw   0x8
 movwf   count
 movlw   0
 loop:
  xorwf   data,w
  rrf     data,f
  decfsz  count,f
 goto    loop
 movlw   1
 awdwf   count,f
 movwf   _return_
 #ENDASM
}


La variable predefinida _RETURN_ puede utilzarse para transferir un valor desde el código ASM a CCS.

Si en lugar de #ASM utilizamos #ASM ASIS, CCS no intentará efectuar cambios de bancos de memória automaticos para las variables que no pueden ser accedidas desde el banco actual. El codigo assembler es utilizado "as-is" ("como es").


fuente: http://www.ucontrol.com.ar/wiki/index.php?title=CCS_-_Directivas_para_el_compilador#.23ASM_.2F_.23ENDASM
"Divide las dificultades que examinas en tantas partes como sea posible para su mejor solución." -René Descartes

Desconectado fr4n

  • PIC12
  • **
  • Mensajes: 53
Re: Como hacer una USART por software en ccs c sin usar la directiva #use RS232??
« Respuesta #14 en: 28 de Abril de 2011, 10:28:52 »
Muchas gracias!  ;-)

Ahora solo tengo que aprender como hacer el codigo en asm para que me envie los datos de una variable (por ejemplo byte o long) a un pin determinado del pic a razon de 500 kbits por segundo...
« Última modificación: 28 de Abril de 2011, 10:31:09 por fr4n »


 

anything