Como fazer interface serial ADC0831 com microcontrolador AVR (ATmega16) – (Parte 27/46)

Cómo hacer una interfaz serial ADC0831 con el microcontrolador AVR (ATmega16) – (Parte 27/46)

ADC es un dispositivo electrónico que convierte señales analógicas en números digitales proporcionales a la magnitud del voltaje. Los chips ADC como ADC0804, ADC0809, etc. proporcionan salida digital de 8 bits. El dispositivo controlador necesita ocho pines para recibir los datos de 8 bits (para obtener más detalles sobre el ADC, consulte Uso del ADC integrado del AVR). Algunas aplicaciones necesitan ADC de mayor resolución (salida de datos digitales de 10 bits o más) para la precisión de los datos.
El uso de ADC paralelos es una opción para tales aplicaciones. Sin embargo, el uso de ADC paralelo aumentará el tamaño del hardware, ya que un ADC paralelo de 10 bits tendrá 10 líneas de salida. Además, es posible que necesite utilizar un controlador con una mayor cantidad de pines. La otra opción es utilizar un ADC en serie, que requiere menos pines. Dado que los datos se transmiten en serie, la velocidad de transferencia de datos del ADC en serie es baja en comparación con el ADC en paralelo. Pueden servir como una muy buena alternativa en aplicaciones donde la velocidad de transferencia de datos no es un punto crítico. Este artículo explora la interfaz del serial ADC0831 con ATmega16.

El ADC0831 es un ADC serie de un solo canal de 8 pines que proporciona salida de datos de 8 bits. La entrada puede ser de tipo unipolar o diferencial. Usando la opción de entrada diferencial, se puede realizar la conversión A/D para dos niveles de voltaje diferentes. La función de cada pin se describe en la siguiente tabla:

Nome do pino e funções de serialADC0831

Fig. 2: Nombre del pin y funciones del serialADC0831
1. (Selección de chip) : para iniciar la conversión, se proporciona un valor de mayor a menor .
2. V in (+) (Entrada analógica positiva ): se aplica voltaje positivo a este pin. El rango de entrada para esto es de 0 a 5 voltios.
3. V in (-) (entrada analógica negativa) : se aplica voltaje negativo a este pin.
4. GND (Tierra) : este pin está conectado a la tierra del circuito.
5. Referencia V (voltaje de referencia) : este pin se utiliza para definir el rango de voltaje de entrada del ADC.
6. CLK (reloj) : el pulso del reloj se suministra al pin CLK para sincronización.
7. DO (salida de datos) : este pin es un pin de salida de ADC, los datos de salida en serie están disponibles en este pin.
8. Vcc (fuente de alimentación) : está conectado a la fuente de alimentación de +5 voltios.
Cómo funciona el ADC en serie:
Diagrama de blocos do ADC serial trabalhando com AVR
Fig. 3: Diagrama de bloques del ADC en serie que funciona con AVR
El diagrama anterior muestra un sistema en el que el dispositivo ADC recibe datos analógicos del transductor. El controlador se utiliza para controlar el ADC IC y procesar los datos digitales convertidos. La señal analógica se proporciona en el pin V en (+). En modo diferencial, el voltaje en el pin V in (+) debe ser mayor que V in (-); de lo contrario, el ADC no generará los datos de salida. La conversión de datos se inicia dando un pulso de alto a bajo en el pin CS. En el primer ciclo de reloj, el ADC envía el bit '0' al controlador, lo que muestra que los siguientes bits son bits de datos. Primero se envía el MSB de los datos convertidos. El diagrama de sincronización del ADC0831 se muestra a continuación.
Diagrama de temporização do ADC0831 para comunicação serial em AVR
Fig. 4: Diagrama de tiempos ADC0831 para comunicación en serie en el AVR
Propósito: Convertir el voltaje de salida analógico de la resistencia variable en señales digitales usando ADC0831 y mostrarlo en la pantalla LCD.
Descripción del circuito:
La conexión de ADC0831 con ATmega16 se muestra en el diagrama del circuito. La salida de resistencia variable está conectada al pin V in (+) y V in (-) está conectado a tierra. Los pines CS, CLK y DO del ADC están conectados al microcontrolador.
Pasos de programación:
1. Envíe un pulso alto-bajo al pin CS para inicializar la conversión.
2. Supervise el estado del bit D0 hasta que baje.
3. Enviar un pulso de reloj.
4. Reciba bits de datos del pin DO del ADC 0831.
5. Almacene los bits de datos en una variable mediante operación bit a bit.
6. Cuando se reciba el byte de datos del ADC serie, muéstrelo en la pantalla LCD.

Código fuente del proyecto

###


 // Programa para interfaz serie ADC 0831 con microcontrolador AVR (ATMEGA 16)
#incluir #incluir #incluir #definir DO PD2 #definir CLK PD1 #definir CS PD0 #definir puerto lcd PUERTO #definir jajaja PB0 #definir rw PB1 #definir en PB2 vacío lcd_init (vacío); void lcdcmd (carácter sin firmar); void lcddata (carácter sin firmar); void adc_conversion (carácter sin firmar); vacío twi_init; carácter sin firmar adc_read; int principal { datos de caracteres sin firmar (12) = "SALIDA ADC:"; int i=0; bits de caracteres sin signo = 0; DDRA=0xFF; DDRB=0x07; DDRD=~_BV(DO); //El pin DO es el pin de entrada y el resto de los pines son los pines de salida DDRC=0xFF; PUERTO=0x07; lcd_init; mientras(datos(i)!='�') { datos lcd(datos(i)); _delay_ms(5); yo++; } mientras(1) { PUERTO =(1< // el pulso de alto a bajo se suministra al pin CS _delay_ms(1); PUERTO&=~(1< _delay_ms(1); while(PIND & _BV(DO)) // espera hasta recibir el bit 0 { PUERTO =(1< _delay_ms(1); PUERTO&=~(1< _delay_ms(1); } PUERTO =(1< // se suministra un pulso de reloj _delay_ms(1); PUERTO&=~(1< _delay_ms(1); para(l=0;l<8;l++) { PUERTO =(1< // datos recibidos cuando el pulso es alto _delay_ms(1); bits=bits<<1; //"bits" es una variable para almacenar datos. La operación de desplazamiento a la izquierda se realiza para dejar espacio para el siguiente bit. si(bit_is_set(PIND,DO)) //si se recibe 1 bits = 1; // los bits se incrementan en 1 PUERTO&=~(1< //pulso bajo _delay_ms(1); } adc_conversion(bits); // } } /* esta función está escrita para convertir valores enteros a su valor ASCII correspondiente*/ void adc_conversion (carácter sin firmar adc_out) { sin firmar int adc_out1; int i=0; posición del carácter = 0xC2; para(i=0;i<=2;i++) { adc_out1=adc_out%10; adc_out=adc_out/10; lcdcmd(posición); lcddata(48+adc_out1); posición--; } } lcd_init vacío // función para inicializar la pantalla LCD { lcdcmd(0x38); lcdcmd(0x0C); lcdcmd(0x01); lcdcmd(0x06); lcdcmd(0x80); } void lcdcmd (char cmdout sin firmar) { puerto lcd=cmdout; PORTAB=(0< _delay_ms(10); PORTAB=(0< } void lcddata (genera datos de caracteres sin firmar) { lcdport=salida de datos; PORTAB=(1< _delay_ms(10); PORTAB=(1< }

###

Diagramas de circuito

Diagrama de circuito de cómo interconectar el serial-ADC0831 con el microcontrolador AVR-ATmega16

Componentes del proyecto

  • ATmega16
  • LCD

Vídeo del proyecto

Conteúdo Relacionado

En cada vehículo hay una red de sensores integrada...
El controlador del motor es uno de los componentes...
ESP32-CAM es un módulo de cámara compacto que combina...
La evolución de los estándares USB ha sido fundamental...
SCHURTER anuncia una mejora de su popular serie SWZ...
Visual Communications Company (VCC) ha anunciado sus nuevos tubos...
A Sealevel Systems anuncia o lançamento da Interface Serial...
A STMicroelectronics introduziu Diodos retificadores Schottky de trincheira de...
Determinar uma localização precisa é necessário em várias indústrias...
O novo VIPerGaN50 da STMicroelectronics simplifica a construção de...
A Samsung Electronics, fornecedora de tecnologia de memória avançada,...
O mercado embarcado tem uma necessidade de soluções de...
Probablemente se haya encontrado con el término " resistencia...
Probablemente tenga un aislante de soporte si ha notado...
Probablemente haya visto un aislante colocado en postes de...
Probablemente hayas visto aisladores de grillete entronizados en postes...
Probablemente hayas experimentado situaciones en las que controlar un...
Regresar al blog

Deja un comentario

Ten en cuenta que los comentarios deben aprobarse antes de que se publiquen.