Transmitir el dato que recibo en ATMEGA328P

Estimados:
He avanzado bastante en el tema de los AVR, pero me estanque en mi proyecto en la seccion de comunicación serial.

LEs cuento, estoy recibiendo un dato cualquiera (por ejemplo un caracter 'A' cada 500 ms) por la puerta serial RX de mi ATMEGA 328P a 9600 bps, lo que deseo es retransmitir ese mismo dato por la puerta TX a otra velocidad por ejemplo 14400 bps.

alguna ayuda con una codigo sencillo.
se que tengo que configurar la USART a la velocidad de TX, pero no se mas.
como se guarda el dato recibido por RX en algun registro?
como leo ese dato del registro y lo transmito por TX a otra velocidad?

Ayuda por favor.:confused:
 
Si usaras el bootloader arduino seria muy muy fácil, con una librería de serial por software.
Tendrías el serial normal a una velocidad en los pines 0 1 y el serial por software en los pines que quieras a otra velocidad. Solo hay una pega que yo sepa o no supe resolver y es que el serial virtual no tiene cache así que si solo tiene que hacer lo que dices y usas el rx por hardware y el tx por software. No tendrías ningún problema de posibles pérdidas de daros si quisieras mandar mas despacio que recibieras

 
hola
Estimados:
He avanzado bastante en el tema de los AVR, pero me estanque en mi proyecto en la seccion de comunicación serial.

LEs cuento, estoy recibiendo un dato cualquiera (por ejemplo un caracter 'A' cada 500 ms) por la puerta serial RX de mi ATMEGA 328P a 9600 bps, lo que deseo es retransmitir ese mismo dato por la puerta TX a otra velocidad por ejemplo 14400 bps.

alguna ayuda con una codigo sencillo.
se que tengo que configurar la USART a la velocidad de TX, pero no se mas.
como se guarda el dato recibido por RX en algun registro?
como leo ese dato del registro y lo transmito por TX a otra velocidad?

Ayuda por favor.:confused:
Por empezar ., como tenes configurado el circuito (esquematico)​
Despues vemos el programa ., ¡¡¡ ojo aca no te valen las simulaciones !!!!., obian parte del funcionamiento​
Aunque en el simulador funcione ., en el montaje real !!! no ¡¡¡​
Si usaras el bootloader arduino seria muy muy fácil, con una librería de serial por software.
Tendrías el serial normal a una velocidad en los pines 0 1 y el serial por software en los pines que quieras a otra velocidad. Solo hay una pega que yo sepa o no supe resolver y es que el serial virtual no tiene cache así que si solo tiene que hacer lo que dices y usas el rx por hardware y el tx por software. No tendrías ningún problema de posibles pérdidas de daros si quisieras mandar mas despacio que recibieras
En el arduino ., la funcion de TX y RX .,funcionan distinto .,en el arduino tenes la interface USB​
Con el atmega solo ., no hay nada de eso ( no tiene la interfaz USB ) o chip agregado​
¿¿¿ se entiende ???
 
Última edición:
hola
Por empezar ., como tenes configurado el circuito (esquematico)​
Despues vemos el programa ., ¡¡¡ ojo aca no te valen las simulaciones !!!!., obian parte del funcionamiento​
Aunque en el simulador funcione ., en el montaje real !!! no ¡¡¡​
En el arduino ., la funcion de TX y RX .,funcionan distinto .,en el arduino tenes la interface USB​
Con el atmega solo ., no hay nada de eso ( no tiene la interfaz USB ) o chip agregado​
¿¿¿ se entiende ???
Por eso digo bootloader arduino, en ningún momento digo arduino Uno, nano ni mega...

Si quieres usar un 328p puedes usar el AVR como dices y no te puedo ayudar
O si tienes libertad para hacerlo ... Pues bootloader y ide arduino

Pd. Yo nunca he dicho USB

SE ENTIENDE??? Sino... Google

 
hola
Por empezar ., como tenes configurado el circuito (esquematico)​
Despues vemos el programa ., ¡¡¡ ojo aca no te valen las simulaciones !!!!., obian parte del funcionamiento​
Aunque en el simulador funcione ., en el montaje real !!! no ¡¡¡​
En el arduino ., la funcion de TX y RX .,funcionan distinto .,en el arduino tenes la interface USB​
Con el atmega solo ., no hay nada de eso ( no tiene la interfaz USB ) o chip agregado​
¿¿¿ se entiende ???

Hola amigo locodelafonola

El circuito es sencillo (ni siquiera existe), pero te adjunto una imagen de el.

En el Pin 2 (RX) entran caracteres ASCII (por ejemplo A,B,A,B...) a una velocidad X (por ejemplo 4800 bps), y deseo que por el pin 3 (TX) salgan esos mismos caracteres a una velocidad Y (por ejemplo 9600 bps).

necesito que me ayudes con el programa en C, por favor.

Una vez que creo un registro para guardar el dato que recibo, no se como leerlo, ni tampoco como cambiar la velocidad de TX

De antemano muchas gracias
 

Adjuntos

  • TX.jpg
    TX.jpg
    154.9 KB · Visitas: 9
Hola
Hola amigo locodelafonola

El circuito es sencillo (ni siquiera existe), pero te adjunto una imagen de el.

En el Pin 2 (RX) entran caracteres ASCII (por ejemplo A,B,A,B...) a una velocidad X (por ejemplo 4800 bps), y deseo que por el pin 3 (TX) salgan esos mismos caracteres a una velocidad Y (por ejemplo 9600 bps).

necesito que me ayudes con el programa en C, por favor.

Una vez que creo un registro para guardar el dato que recibo, no se como leerlo, ni tampoco como cambiar la velocidad de TX

De antemano muchas gracias
Bueno vamos por partes ., ok ...... pero no creo que te sea facil​
La USART 0 del atmega328p ., creo que no te va a permitir ese cambio de velocidad ., las definiciones de los registros internos se manejan a una sola velocidad (definida de antemano claro)​
Para lo que vos queres hacer ., se usan otro micros ., por ejemplo :ATMEGA162 o ATMEGA128A (por decirte algunos)​
Estos micros tiene 2 (dos) USART XX ., entonces se configuran a dos velocidades distintas​
Una seria la que recibe datos (RX) ., y otra la que envia (TX)​
Aca te pongo los link ., de unos tutos que traduje hace tiempo ., de la gente de ATMEL​
Ver el archivo adjunto 126027
Alli tenes algunos ejemplos para practicar ., tanto en las impterupciones de la USART ., como asi tambien el manejo de las USART​



Hola
Por eso digo bootloader arduino, en ningún momento digo arduino Uno, nano ni mega...

Si quieres usar un 328p puedes usar el AVR como dices y no te puedo ayudar
O si tienes libertad para hacerlo ... Pues bootloader y ide arduino

Pd. Yo nunca he dicho USB

SE ENTIENDE??? Sino... Google
Si usas el botlader de arduino., se maneja con la interfaz C++​
Al ser asi se programa como arduino ., o sea su arranque (bootlader) se configura a travez de su USB ¿¿¿¿¿ se entiende o no ???? El compilador que usa el amigo ., ya genera y le carga junto al compilado el bootlader No hace falta agregar nAda para su arranque (escompletamente distinto al arduino (cualquier tipo)​
 
Última edición:
Hola.

La idea que se comenta es usar una UART por Hardware (nativa del MCU) y una más por software, idea que apoyo. Pero ¿no está la posibilidad de cambiar la frec. de transmisión en alguno de los periféricos?, con la finalidad de manejar la misma para Tx y Rx y no meterse en estos líos.

Saludos
 
Hola
Bueno vamos por partes ., ok ...... pero no creo que te sea facil​
La USART 0 del atmega328p ., creo que no te va a permitir ese cambio de velocidad ., las definiciones de los registros internos se manejan a una sola velocidad (definida de antemano claro)​
Para lo que vos queres hacer ., se usan otro micros ., por ejemplo :ATMEGA162 o ATMEGA128A (por decirte algunos)​
Estos micros tiene 2 (dos) USART XX ., entonces se configuran a dos velocidades distintas​
Una seria la que recibe datos (RX) ., y otra la que envia (TX)​
Aca te pongo los link ., de unos tutos que traduje hace tiempo ., de la gente de ATMEL​
Ver el archivo adjunto 126027
Alli tenes algunos ejemplos para practicar ., tanto en las impterupciones de la USART ., como asi tambien el manejo de las USART​



Hola
Si usas el botlader de arduino., se maneja con la interfaz C++​
Al ser asi se programa como arduino ., o sea su arranque (bootlader) se configura a travez de su USB ¿¿¿¿¿ se entiende o no ???? El compilador que usa el amigo ., ya genera y le carga junto al compilado el bootlader No hace falta agregar nAda para su arranque (escompletamente distinto al arduino (cualquier tipo)​
De acuerdo con todo menos lo del USB. Por ejemplo el arduino UNO entre otros tiene USB. Pero para poder usar USB necesita integrar un chip que al bootloader arduino que carga el 328p le da igual. El solo entiende comunicación serie. No quieres USB ? Pues no le pongas el otro chip.

Hace tiempo hice varios arduinos sin USB siguiendo la web de txapuzas

Por cierto si el 328 solo va a hacer eso igual con un attiny que no necesita cristal ni nada...

De acuerdo en que serial por software no es lo mejor y se pueden perder cosas dependiendo de la velocidad.
Mejor otros micros con 2 serial por hardware .



 
Hola
De acuerdo con todo menos lo del USB. Por ejemplo el arduino UNO entre otros tiene USB. Pero para poder usar USB necesita integrar un chip que al bootloader arduino que carga el 328p le da igual. El solo entiende comunicación serie. No quieres USB ? Pues no le pongas el otro chip.

Hace tiempo hice varios arduinos sin USB siguiendo la web de txapuzas

Por cierto si el 328 solo va a hacer eso igual con un attiny que no necesita cristal ni nada...

De acuerdo en que serial por software no es lo mejor y se pueden perder cosas dependiendo de la velocidad.
Mejor otros micros con 2 serial por hardware .
creo que no te das cuenta que pasa .,lo que propones no esta mal ., pero estas programando en C++ ., y el programa en C ., que no es lo mismo​
Siempre pero siempre ., se usa cristal externo para las configuraciones de las USART ., reducen el margen de error y hacen la comunicaion super estable​
Eso lo dice la hoja de datos del micro , y tambien guias de aplicacion proporcionadas por el fabricante (ATMEL)​
Me parece a mi ¿¿¿¿¿ o estas confundiendo I2C o SPI ., con las USART ??? ., es la imprecion que yo tengo ., si no es asi pido disculpas​
 
Hola
Bueno vamos por partes ., ok ...... pero no creo que te sea facil​
La USART 0 del atmega328p ., creo que no te va a permitir ese cambio de velocidad ., las definiciones de los registros internos se manejan a una sola velocidad (definida de antemano claro)​
Para lo que vos queres hacer ., se usan otro micros ., por ejemplo :ATMEGA162 o ATMEGA128A (por decirte algunos)​
Estos micros tiene 2 (dos) USART XX ., entonces se configuran a dos velocidades distintas​
Una seria la que recibe datos (RX) ., y otra la que envia (TX)​
Aca te pongo los link ., de unos tutos que traduje hace tiempo ., de la gente de ATMEL​
Ver el archivo adjunto 126027
Alli tenes algunos ejemplos para practicar ., tanto en las impterupciones de la USART ., como asi tambien el manejo de las USART​

Si cambio de micro y utilizo el ATMEGA162, me podrias ayudar con el codigo en C para cambiar la velocidad.

estoy leyendo tus PDF, estan bastante educaticos
... y a todo esto Desmond, en que estas programando...WinAvr, MikroC proAvr o ..?

Programo en ATMEL Studio
 
Última edición:
hola
Si cambio de micro y utilizo el ATMEGA162, me podrias ayudar con el codigo en C para cambiar la velocidad.

estoy leyendo tus PDF, estan bastante educaticos


Programo en ATMEL Studio
Tengo atmega162-16AU ., y veo de que modo ., puedo hacerte algo ., con mi tiempo ajustado ...... mmmmmmm (no te prometo nada)​
Veremos que sale ., te subo la hoja de datos de atmega 162 ., para que veas lo de la doble USART (USART0 y USART1 )​
PD: yo tambien uso atmelstudio ., comprimi la carpeta del proyecto en un .RAR ., asi es facil ver errores
 

Adjuntos

  • ATmega162_ 8-bit--Microntroller_Datasheet.pdf
    3.7 MB · Visitas: 11
Última edición:
Atrás
Arriba