miércoles, 26 de diciembre de 2018

¿USART Ó UART?

¿Alguna vez ha usado el término UART solo para que otro ingeniero corrija que no es un UART sino un USART? En ciertas circunstancias, la intercambiabilidad de estos términos puede ser apropiada, pero en muchos casos es un error. Examinemos lo que son un USART y un UART, y discutamos las principales diferencias.
La mayoría de los ingenieros integrados están familiarizados con un UART: un receptor / transmisor asíncrono universal. Es un periférico de microcontrolador que convierte los bytes de datos entrantes y salientes en un flujo de bits en serie. Un bit de inicio inicia el flujo de bits en serie y un bit de parada (o dos) completa la palabra de datos. Un UART también tiene la opción de agregar un bit de paridad al flujo para ayudar a detectar si se produce un error de bit durante la transmisión. La Figura 1 muestra un ejemplo estándar de lo que un ingeniero esperaría ver a partir de los datos transmitidos a través de un UART.

FIGURA1-UART
Un USART, un receptor / transmisor sincrónico / asíncrono universal, es un periférico con microcontrolador que convierte los bytes de datos entrantes y salientes en un flujo de bits en serie. Hmm La definición de un USART es idéntica a la de un UART, pero con "síncrono" agregado al término. Seguramente hay algunas diferencias más significativas? De lo contrario, un USART sería conocido como un UART.


Bueno, hay diferencias, importantes. La primera diferencia entre un USART y un UART es la forma en que se pueden sincronizar los datos en serie. Un UART genera su reloj de datos internamente al microcontrolador y sincroniza ese reloj con el flujo de datos utilizando la transición de bit de inicio. No hay una señal de reloj entrante asociada con los datos, por lo que para recibir correctamente el flujo de datos, el receptor debe saber de antemano cuál debe ser la velocidad en baudios.

Un USART, por otro lado, puede configurarse para ejecutarse en modo síncrono. En este modo, el periférico emisor generará un reloj que el periférico receptor puede recuperar del flujo de datos sin conocer la velocidad en baudios antes de tiempo. Alternativamente, el enlace utilizará una línea completamente separada para transportar la señal del reloj. El uso del reloj externo permite que la velocidad de datos del USART sea mucho más alta que la de un UART estándar, alcanzando velocidades de hasta 4 Mbps.

La segunda diferencia importante entre un USART y un UART es la cantidad de protocolos que puede admitir el periférico. Un UART es simple y solo ofrece algunas opciones desde su formato base, como el número de bits de parada y paridad par o impar. Un USART es más complejo y puede generar datos en una forma correspondiente a muchos protocolos estándar diferentes, como IrDA, LIN, tarjeta inteligente, habilitación de controlador para RS-485
interfaces, y Modbus, por nombrar algunos. Un USART también tiene las mismas capacidades asíncronas que un UART, es decir, un USART puede generar el mismo tipo de datos en serie como se ve en la Figura 1.

FIGURA2-USART-<--->UART

Los periféricos USART y UART tienen capacidades definitivamente diferentes y pueden ser útiles en diferentes situaciones, por lo que un desarrollador puede encontrar ambos periféricos a bordo de un microcontrolador estándar. Por ejemplo, tome un microcontrolador orientado a un diseño de bajo consumo, como la familia STM32. Las piezas STM32 tienen un periférico en el chip USART y UART. El USART está destinado a realizar toda la comunicación en serie de "levantamiento pesado" durante períodos de "alto" consumo de energía. Sin embargo, cuando el microcontrolador está dormido y en un modo de bajo consumo, el periférico UART puede manejar comunicaciones de baja velocidad a la vez que ofrece una huella de energía reducida.

¿Son USARTs y UARTs iguales? Técnicamente la respuesta es no. Un USART generalmente tiene más capacidades que un UART estándar y la capacidad de generar datos sincronizados permite que el USART funcione a velocidades de transmisión mucho más allá de las capacidades de un UART. Sin embargo, un USART abarca las capacidades de un UART, y en muchas aplicaciones, a pesar de tener el poder de un USART, los desarrolladores las usan como UART simples, ignorando o evitando la capacidad de generación de reloj síncrono de estos poderosos periféricos. No es de extrañar que tantas personas utilicen los términos como si fueran sinónimos.

OPCIONES PARA TENER MAS DE DE UART EN UN MICROCONTROLADOR:

  • Si estas acostumbrado a usar microcontroladores PIC y tienes la necesidad de tener mas de un bloque UART puedes hacer con dos pines un bloque UART VIRTUAL como se aprecia en este video. El inconveniente es que cuando son software serial no esta disponible la interrupcion por hardware. 
  • 0tra posibilidad es multiplexar el puerto, por ejemplo con un dsPIC,PIC,AVR.
  • Puedes simular un puerto serial extra por un pin de interrupcion externa.
  • Usat PiC C Compiler para poder crear por software mas puertos seriales.
  • El PIC24FJ o el PIC18F67K40 que tienen mas de un puerto UART.
ATmega324PB
Comumente sólo se usa 1 puerto uart, pero en aplicaciones mas grandes se necesita mas bloques según sea la necesidad. Este avr tiene hasta 3 bloques USART que se pueden configurar como UART.
Bloques del Atmega 324PB
Como podemos ver este micro nos ofrece mas de un bloque USART y lo mejor de todo que es un micro de 8 bits. Aquí anexo el link de descarga del datasheet del micro .

APLICACIONES:
  •  Lo que se puede hacer es usar el puerto en RS232 para comunicación serie con el PC y el otro puerto lo compartir entre un RS485 (recolectaba información wireles de los esclavos) y un RS232 que transmitía Alarmas a celulares.
  • Conección con HMI Industriales por el puerto RS485.

domingo, 2 de diciembre de 2018

Retardos-Método1

1 Lazo
Un Lazo
Un Lazo



Ecuación caracteristica del número de ciclos con 1 lazo


5N, N= valor de r17.
Ejemplo:
Si tomamos el ejemplo de N=3, el compilador,  nos muestra que realizo 19 ciclos de conteo
Cyclos realizados por el complilador
pero tomo en cuenta el valor de la instrucción ret que utuliza 4 ciclos , entonces si restamos estos 4 ciclos nos da los 15 ciclos calculados.

conteo

Si N=255, se tendrá un valor máximo de 1275 ciclos. para mas ciclos se necesita mas de 1 lazo.
2 Lazos

Dos lazos anidados

Dos lazos anidados

Ecuación caracteristica del número de ciclos con 2 lazo
5NM+3N, N= valor de r18, M= Valor de r17.

Ejemplo:
Si tomamos el ejemplo de N=2,M=3, reemplazando en la formula 5NM+3N = 36, el compilador,  nos muestra que realizo 41 ciclos de conteo.
Cyclos realizados por el complilador

pero tomó en cuenta el valor de la instrucción ret que utuliza 4 ciclos y la instrucción ldi r18,2 , entonces si restamos estos 4 ciclos y 1 ciclo de la instrucción ldi, nos da los 36 ciclos calculados.

Conteo

3 Lazos

Tres Lazos


Ecuación caracteristica del número de ciclos con 3 lazo

Ejemplo:
Si tomamos el ejemplo de N=2,M=3,P=4  reemplazando en la formula 3N+3NM+5NMP = 144, el compilador,  nos muestra que realizo 148 ciclos de conteo.
Cyclos realizados por el complilador
pero tomó en cuenta el valor de la instrucción ret que utuliza 4 ciclos ,entonces si restamos estos 4 ciclos  nos da los 36 ciclos calculados.


Conteo

4 Lazos
Ecuación caracteristica del número de ciclos con 4 lazo

Ejemplo:
Si tomamos el ejemplo de N=2,M=3,P=4 ,Q=5 reemplazando en la formula 3N+3NM+3NMP+5NMPQ = 696 ciclos , sin embargo el compilador,  nos muestra que realizo 701 ciclos de conteo.
4 lazos

Cyclos realizados por el complilador
pero el compilador suma los 4 ciclos de la instrucción ret y de la primera instrucción ldi r16,2(1 cyclo) ,entonces si restamos estos 5 ciclos nos da los 696 ciclos calculados.
Conteo
Ejemplo:
si se desea hallar la cantidad máxima de ciclos obtenidos en 4 lasoz, entoncen  N=255,M=255,P=255 ,Q=255 reemplazando en la formula 3N+3NM+3NMP+5NMPQ no dará 21 191 193 090 ciclos , 

Máximo valor de ciclos con 4 lazos

si se utiliza un cristal de 1Mhz-->(1/1Mhz)*CM= 21 191 193 090 us= 21 191,193 seg

Retardos-Método2

1 lazo
Un Lazo

Un Lazo

Ecuación caracteristica del número de ciclos con 1 lazo
Ejemplo:
Si N=20  reemplazamos en 3N= 60  Cyclos.

Cyclos realizados por el complilador

 El compilador nos da un total de 64 cyclos ya que esta considerando la instrucción ret(4 cyclos)

conteo
2 lazos
Dos Lazos anidados 

Dos Lazos anidados


Ecuación caracteristica del número de ciclos con 2 lazos
Ejemplo:
Si N=2,M=3 reemplazamos en 3N+3NM= 24 Cyclos.
Cyclos realizados por el complilador
El compilador nos da un total de 29 cyclos ya que esta considerando la instrucción ret(4 cyclos) y el de la primera instrucción ldi r16,2.

conteo


3 lazos
Ecuación caracteristica del conteo de ciclos con 3 lazos

Ejemplo:
Si N=2,M=4,P=5 reemplazamos en 3N+3NM+3NMP= 150 Cyclos.
Cyclos realizados por el complilador
 El compilador nos da un total de 154 cyclos ya que esta considerando la instrucción ret(4 cyclos).

conteo

4 lazos
Ecuación caracteristica del número de ciclos con 4 lazos

Ejemplo:
Si N=2,M=5,P=8,Q=10 reemplazamos en 3N+3NM+3NMP+3NMPQ= 2676 Cyclos.

Cyclos realizados por el complilador
 El compliador nos da un total de 154 cyclos ya que esta considerando la instrucción ret(4 cyclos).

conteo
Una forma sencilla para realizar retardos  se encuentra en la web link

viernes, 23 de noviembre de 2018

SRAM (SFRs ,GPRs y INTERNAL DATA SRAM)

Los datos de memoria RAM están compuestos por tres partes, las cuales son:
  • GPRs(General Purpose Registers)
Pueden usarse 6 de los 32 registros como tres punteros de registro de direcciones indirectos(de 16-bits) para el direccionamiento del espacio de datos(memoria de datos RAM), proporcionando cálculos de dirección eficaces. También se usa uno de los tres punteros de dirección para observar una tabla de constantes. Estos registros son los registros X,Y y Z.
  • SFRs(Special Function Registers-PORTS I/O)

El espacio  de memoria I/O contiene 64 direcciones para la configuración de funciones periféricas de la CPU como los registros de control, Temporizadores/Contadores, convertidores A/D y otras funciones.

Los registros de I/O deben ser accedidos con su dirección del espacio I/O y no considerando si dirección absoluta.

Cuando se menciona direccion de espacio (I/O) se refiere a las direcciones de los registros I/O que empiezan en $00 y acaban en $3F, cualquiera de los 64 registros SFRs(TWBR-SREG) pueden ser accedidos y se llevados a GPRs(R0-R31) utilizando la instrucción "IN".


SFRs(Registros de Funciones especiales)

Aunque las direcciones de memoria  $20-$5F están reservadas para los registros I/O(SFRs) nosotros podemos acceder a ellas como ubicaciones de I/O con direcciones que empiezan en $00.

De acuerdo con la figura(Resumen de Ram) los Registros I/O también pueden ser referidos como cualquier localidad de SRAM de propósito general, utilizando instrucciones de carga (LD) o almacenamiento (ST), con direcciones en el rango de 0x20 a 0x5F. 

Tratar a los Registros de Propósito General o a los Registros I/O como SRAM de propósito general no es conveniente, porque las instrucciones de acceso a memoria se ejecutan en 2 ciclos de reloj.

Los registros de I/O deben ser aceedidos con su dirección del espacio(I/O) ,no considerando su dirección absoluta.
Dirección absoluta-Dirección de registros dentro de los registros I/O.

Lista de SFRs completos-parte1

Lista de SFRs completos-parte2

Para la lectura de un dirección de un registro SFRs se puede usar la instrucción "IN", teniedo en cuenta que esta instrucción NO usa las drecciones absolutas, usa las direcciones de los registros I/O.
  • INTERNAL DATA SRAM
1K byter de memoria interna puede ser accedida desde la dirección $0060  hasta la dirección $045F son registros que se usan para propositos generales.
Memoria Interna SRAM
RESUMEN DE RAM
La memoria RAM está compuesto por 32 registros generales(GPRs),64 registros de funciones especiales(SFRs) y memoria SRAM(puede variar según el microcontrolador ,algunos son de 1k , 2 k,etc), ejemplo:
En la siguiente figura se muestra la memoria RAM de un Atmega32, que tiene 085F=2143, dirección de [0-->0x85F], aquí está incluido [32 registros GPRs(Dirección 0-->1F)+64 registros SFRs(Dirección 20-->5F)+ Memoria SRAM de 2k=2048(Dirección 60-->85F)].

Según lo dicho anteriormente se concluye que si en la hoja de datos del AVR te dice que la memoria SRAM es de 2Kbytes no considera a (GPRs y SFRs).
Resumen de RAM-Atmega32


Data Memory-Atmega328P-Atmega88
  • Algunos AVR tienen 160 registros de I/O extendidos por ejemplo el Atmega 328P, Atmega88, Atmega168, Atmega 8U2/16U2/32U2 entre otros, aquí se encuentran registros como EIMSK,EICRA(registros de interrupción externa) entre otros .En estos casos la memoria SRAM empieza desde  0x0100 hasta RAMEND(depende del microcontrolador la dirección varia).
  • Pero en el caso de los atmega 32 no tienen estos registros E/S extendidos por ello la memoria SRAM interna empieza desde 60 hex hasta RAMEND(085F).


jueves, 22 de noviembre de 2018

Uso de la instrucción "LDS" y "STS"

LDS(Load Direct from SRAM(data Space)
Se carga Rd con el contenido de lo que está en la dirección K.
Carga Directa del espacio de datos hacia Rd.

Instrucción

Ejemplo

------------------------------------------------------------------------------------------------------------------------------------------------------
;Agregar el contenido de la ubicación de memoria 0x300 hacia la ubicación de memoria 0x302.
------------------------------------------------------------------------------------------------------------------------------------------------------
Código





Importante

Los datos que puedo copiar a través de sus direcciones puede ser cualquier datos de la  SRAM( registros SFRs(I/O registers), SRAM interna o incluso datos de GPRs). es decir hay tres opciones de uso de LDS:
  • Opción1: de SRAM interna a GPRs
      • LDS R20, 0x300,se sabe que direcciones[0x0060,.....,0x045F] le corresponde a datos de SRAM interna.
  • Opción2: de I/O registers a GPRs
      • LDS R20, 0x20 ,se sabe que direcciones[0x0020,.....,0x005F] le corresponden a registros SFRs[TWBR,......,SREG]
  • Opción3: de GPRs a GPRs
      • LDS R20,0x1; R20=R1, se sabe que direcciones [0,.....,1F]  le corresponden a registros de datos [R0,......,R31]
Las direcciones variaran según el microcontrolador AVR que se use, pero la manera de utilizar LDS es la misma.
Haremos mención a la última opción de uso de la LDS:

LDS R20,0x1 ; instrucción copiará el contenido de la ubicación1 (en hexadecimal) dentro de R20, Como sabemos la ubicación o dirección 1 es la memoria de datos es parte de GPRs y la dirección le corresponde a R1, así la instrucción copia R1 a R20.

STS(Store Direct to SRAM)

Almacenamiento Directo hacia el SRAM(espacio de datos)
Guarda un valor en una ubicación de memoria.
Store Rr a ubicación de memoria k.
Instrucción===> STS dirección donde se va a almacenar, el valor a almacenar.
Instrucción
Ejemplo
---------------------------------------------------------------------------------------------------------------------
; cuando el pinb,0 =0 se guarda en la dirección 0x0200 el valor de 0x55
;cuando el pinb,0=1 se guarda el la dirección 0x0200 el valor de 0x10
---------------------------------------------------------------------------------------------------------------------
Guarda el dato 0x55

Guarda el dato 0x10


Diagrama de flujo

Memory

USO DE STS PARA CARGAR REGISTROS DENTRO DE  GPRS

Como podemos ver en la gráfica los registros GPRS forman parte de las primeras direcciones de la memoria de datos.  
Memoria de datos
sus direcciones son:
R0<-0x0000  -  R1<-0x0001  -  R2<-0x0002  -  R3<-0x0003  -  R4<-0x0004
R5<-0x0005  -  R6<-0x0006  -  R7<-0x0007  -  R8<-0x0008  -  R9<-0x0009
R10<-0x000A  -  R11<-0x000B  -  R12<-0x000C  -  R13<-0x000D  -  R14<-0x000E
R15<-0x000F  -  R16<-0x0010  -  R17<-0x0011  -  R18<-0x0012  -  R19<-0x0013  R20<-0x0014  -  R21<-0x0015  -  R22<-0x0016  -  R23<-0x0017  -  R24<-0x0018  R25<-0x0019  -  R26<-0x001A  -  R27<-0x001B  -  R28<-0x001C  -  R29<-0x001D
R30<-0x001E  -  R31<-0x001F

EJEMPLO:
Deseamos guardar en R17 el valor del registro R16. Como sabemos R17 esta en la dirección 0x0011 y R16 se encuentra en la dirección 0x0010.

                                                                                                   Código

                                                                                  Debug

Detalles a tomar en cuenta al usar estos comandos(LDS y STS):
  1. Para ejecutar el comando LDS o STS el CPU utiliza 2 ciclos de maquina.
  2. LDS y STS son instrucciones que ocupan mas código en memoria de programa ya que por ejemplo para pasar datos a una dirección determinada, primero debemos cargar el dato a un registro GPRs y luego recién cargamos a alguna dirección de memoria SRAM.
  3. Trabajar con direcciones y no con nombres es poco tedioso al trabajar.
  4. Las instrucciones LDS y STS no están disponibles en algunos AVRs y eso debemos tener en cuenta si se desea utilizar.



Uso del firmware original de la grabadora USBasp AVR en MX-USBASP (clon chino)

Te vendieron un USBisp pensado que es un USBasp?? Hace 2 meses compré un "USBasp" fui a probarlo y no funcionó....pensé me estafar...