En aquest tutorial farem una interfície del sensor FLEX amb el microcontrolador ATMEGA8. A ATMEGA8, utilitzarem la funció ADC (conversió analògica a digital) de 10 bits per fer aquesta feina. Ara l' ADC a ATMEGA no pot obtenir una entrada superior a + 5V.
Què és un sensor Flex?
Un sensor FLEX és un transductor que canvia la seva resistència quan es canvia la seva forma. Es mostra a la figura següent.

Aquest sensor s’utilitza per detectar els canvis de linealitat. Per tant, quan el sensor FLEX està doblegat, la resistència es dobla dràsticament. Això es mostra a la figura següent.

Ara per convertir aquest canvi de resistència al canvi de voltatge, utilitzarem un circuit divisor de tensió. En aquesta xarxa resistiva tenim una resistència constant i una altra resistència variable. Com es mostra a la figura següent, R1 és una resistència constant i R2 és un sensor FLEX que actua com a resistència. Es mesura el punt mitjà de la branca. Quan la resistència R2 canvia, el Vout canvia linealment. Per tant, amb això tenim una tensió que canvia amb la linealitat.

Ara el més important que cal tenir en compte aquí és que l'entrada del controlador per a la conversió ADC és tan baixa com 50µAmp. Aquest efecte de càrrega del divisor de tensió basat en la resistència és important ja que el corrent extret de Vout del divisor de tensió augmenta el percentatge d'errors, de moment no ens hem de preocupar per l'efecte de càrrega.
Agafarem dues resistències i formarem un circuit divisor de manera que per a un Vin de 25 Volts obtinguem un Vout de 5 Volts. Per tant, tot el que hem de fer és multiplicar el valor de Vout per "5" al programa per obtenir la tensió real d'entrada.
Components necessaris
HARDWARE: ATMEGA8, font d'alimentació (5v), PROGRAMADOR AVR-ISP, JHD_162ALCD (16x2LCD), condensador 100uF, condensador 100nF (5 peces), resistència 100KΩ.
PROGRAMARI: Atmel studio 6.1, progisp o flash magic.
Diagrama de circuits i explicació de treball
Al circuit PORTD d' ATMEGA8 està connectat al port de dades LCD. A la pantalla LCD de 16 x 2 hi ha 16 pins si hi ha llum de fons, si no hi ha llum de fons hi haurà 14 pins. Es pot alimentar o deixar els passadors de llum de fons. Ara als 14 pins hi ha 8 pins de dades (7-14 o D0-D7), 2 pins de font d'alimentació (1 i 2 o VSS i VDD o gnd & + 5v), 3r pin per controlar el contrast (VEE controla el gruix dels caràcters mostrats) i 3 pins de control (RS & RW & E).
Al circuit, podeu observar que només he pres dos pins de control. El bit de contrast i READ / WRITE no s’utilitzen sovint, de manera que es poden reduir a terra. D’aquesta manera, la pantalla LCD té un contrast i un mode de lectura més alts. Només hem de controlar els pins ENABLE i RS per enviar caràcters i dades en conseqüència.
Les connexions LCD amb ATmega8 són les següents:
PIN1 o VSS a terra
PIN2 o VDD o VCC a una potència de + 5v
PIN3 o VEE a terra (proporciona el màxim contrast possible per a principiants)
PIN4 o RS (Selecció de registre) a PB0 de uC
PIN5 o RW (lectura / escriptura) a terra (posa la pantalla LCD en mode lectura facilita la comunicació per a l'usuari)
PIN6 o E (Habilita) a PB1 de uC
PIN7 o D0 a PD0 de uC
PIN8 o D1 a PD1 de uC
PIN9 o D2 a PD2 de uC
PIN10 o D3 a PD3 de uC
PIN11 o D4 a D4 de uC
PIN12 o D5 a PD5 de uC
PIN13 o D6 a PD6 de uC
PIN14 o D7 a PD7 de uC
Al circuit podeu veure que hem utilitzat la comunicació de 8 bits (D0-D7), però això no és obligatori, podem utilitzar la comunicació de 4 bits (D4-D7), però amb el programa de comunicació de 4 bits es fa una mica complex, així que només hem anat amb 8 bits comunicació. (Consulteu també aquest tutorial: interfície LCD de 16x2 amb microcontrolador AVR)
Per tant, a partir de la simple observació de la taula superior, connectem 10 pins de pantalla LCD al controlador en què 8 pins són pins de dades i 2 pins són per controlar.

La tensió a través de R2 no és completament lineal; serà sorollós. Per filtrar els condensadors de soroll es col·loquen a través de cada resistència del circuit divisor, tal com es mostra a la figura.
El pot 1K aquí és per ajustar la precisió de l'ADC. Ara anem a parlar sobre ADC d'ATMEGA8.
A ATMEGA8, podem donar entrada analògica a qualsevol dels QUATRE canals de PORTC, no importa quin canal escollim, ja que tots són iguals, escollirem el canal 0 o PIN0 de PORTC.
A ATMEGA8, l’ADC té una resolució de 10 bits, de manera que el controlador pot detectar un canvi mínim de Vref / 2 ^ 10, de manera que si la tensió de referència és de 5V obtindrem un increment de sortida digital per cada 5/2 ^ 10 = 5mV. Així doncs, per cada increment de 5 mV a l’entrada tindrem un increment d’un a la sortida digital.
Ara hem d’ establir el registre d’ADC en funció dels termes següents, 1. Primer de tot, hem d’habilitar la funció ADC a ADC.
2. Aquí obtindreu un voltatge d'entrada màxim per a la conversió ADC de + 5V. Per tant, podem configurar el valor màxim o la referència de l’ADC a 5V.
3. El controlador té una funció de conversió d'activació que significa que la conversió ADC només té lloc després d'un activador extern, ja que no volem que hàgim de configurar els registres perquè l'ADC funcioni en mode d'execució lliure contínua.
4. Per a qualsevol ADC, la freqüència de conversió (valor analògic a valor digital) i la precisió de la sortida digital són inversament proporcionals. Per tant, per a una millor precisió de la sortida digital hem de triar una freqüència menor. Per al rellotge ADC normal, estem establint la prevenda d’ADC al valor màxim (2). Com que fem servir el rellotge intern d'1 MHz, el rellotge d'ADC serà (1000000/2).
Aquestes són les úniques quatre coses que hem de saber per començar a utilitzar ADC.
Les quatre funcions anteriors estan configurades per dos registres:


VERMELL (ADEN): aquest bit s'ha d'establir per habilitar la funció ADC d'ATMEGA.
BLAU (REFS1, REFS0): Aquests dos bits s’utilitzen per configurar la tensió de referència (o tensió màxima d’entrada que donarem). Com que volem tenir una tensió de referència 5V, s'hauria d'establir REFS0, a la taula.

GROC (ADFR): aquest bit s’ha d’establir perquè l’ADC funcioni contínuament (mode d’execució lliure).
ROSA (MUX0-MUX3): aquests quatre bits serveixen per indicar el canal d’entrada. Com que farem servir ADC0 o PIN0, no hem d’establir cap bit segons la taula.

MARRÓ (ADPS0-ADPS2): aquests tres bits serveixen per configurar el prescalar per ADC. Com que fem servir un prescalar de 2, hem d’establir un bit.

VERD FOSC (ADSC): aquest bit definit per a l'ADC per iniciar la conversió. Aquest bit es pot desactivar al programa quan necessitem aturar la conversió.
La interfície del sensor FLEX amb ATmega8 s’explica pas a pas en el codi C que es mostra a continuació.
