I denna handledning ska vi gränssnitt FLEX-sensor med ATMEGA8 mikrokontroller. I ATMEGA8 ska vi använda 10bit ADC (Analog till Digital Conversion) -funktion för att göra detta jobb. Nu kan ADC i ATMEGA inte ta en ingång mer än + 5V.
Vad är en flexsensor?
En FLEX-sensor är en givare som ändrar dess motstånd när dess form ändras. Det visas i bilden nedan.
Denna sensor används för att känna av förändringarna i linjäritet. Så när FLEX-sensorn är böjd böjs motståndet drastiskt. Detta visas i bilden nedan.
Nu för att konvertera denna förändring i motstånd mot förändring i spänning, kommer vi att använda en spänningsdelarkrets. I detta resistiva nätverk har vi ett konstant motstånd och ett annat variabelt motstånd. Som visas i figuren nedan är R1 här ett konstant motstånd och R2 är FLEX-sensor som fungerar som ett motstånd. Grenens mittpunkt tas till mätning. När motstånd R2 förändras ändras Vout linjärt med det. Så med detta har vi en spänning som ändras med linjäritet.
Nu är det viktigt att notera att ingången från styrenheten för ADC-konvertering är så låg som 50 µAmp. Denna belastningseffekt av motståndsbaserad spänningsdelare är viktig eftersom strömmen från Vout av spänningsdelaren ökar felprocenten, för nu behöver vi inte oroa oss för belastningseffekt.
Vi ska ta två motstånd och bilda en delarkrets så att vi för en 25 volt Vin får en 5 volt Vout. Så allt vi behöver göra är att multiplicera Vout-värdet med "5" i programmet för att få den verkliga ingångsspänningen.
Komponenter krävs
HARDWARE: ATMEGA8, strömförsörjning (5v), AVR-ISP-PROGRAMMER, JHD_162ALCD (16x2LCD), 100uF kondensator, 100nF kondensator (5 stycken), 100KΩ motstånd.
PROGRAMVARA: Atmel studio 6.1, progisp eller flashmagi.
Kretsschema och arbetsförklaring
I kretsen är PORTD på ATMEGA8 ansluten till dataport LCD. I 16x2 LCD finns det 16 stift överallt om det finns en bakgrundsbelysning, om det inte finns något bakgrundsbelysning kommer det att finnas 14 stift. Man kan driva eller lämna bakljuset. Nu i de 14 stiften finns 8 datastift (7-14 eller D0-D7), 2 effektmatningsstiften (1 & 2 eller VSS & VDD eller GND & + 5v), 3 : e stift för kontrastreglering (VEE-styr hur tjock tecknen bör vara visas) och 3 kontrollstift (RS & RW & E).
I kretsen kan du se att jag bara har tagit två kontrollstift. Kontrastbiten och LÄS / SKRIV inte ofta så att de kan kortslutas till marken. Detta sätter LCD i högsta kontrast och läsläge. Vi behöver bara kontrollera ENABLE- och RS-stift för att skicka tecken och data i enlighet därmed.
LCD-anslutningarna med ATmega8 är som följer:
PIN1 eller VSS till mark
PIN2 eller VDD eller VCC till + 5v ström
PIN3 eller VEE till marken (ger maximal kontrast bäst för en nybörjare)
PIN4 eller RS (Registrera val) till PB0 i uC
PIN5 eller RW (läs / skriv) till marken (sätter LCD i läsläge underlättar kommunikationen för användaren)
PIN6 eller E (Aktivera) till PB1 i uC
PIN7 eller D0 till PD0 för uC
PIN8 eller D1 till PD1 för uC
PIN9 eller D2 till PD2 för uC
PIN10 eller D3 till PD3 för uC
PIN11 eller D4 till D4 för uC
PIN12 eller D5 till PD5 för uC
PIN13 eller D6 till PD6 i uC
PIN14 eller D7 till PD7 i uC
I kretsen kan du se att vi har använt 8-bitars kommunikation (D0-D7) men detta är inte obligatoriskt, vi kan använda 4-bitars kommunikation (D4-D7) men med 4-bitars kommunikationsprogram blir lite komplicerat så vi gick bara med 8 bitar kommunikation. (Se även den här handledningen: 16x2 LCD-gränssnitt med AVR-mikrokontroller)
Så från enbart observation från ovanstående tabell ansluter vi 10 stift LCD till styrenhet där 8 stift är datapinnar och 2 stift är för kontroll.
Spänningen över R2 är inte helt linjär; det blir en högljudd. För att filtrera bort är bruskondensatorerna placerade över varje motstånd i delarkretsen som visas i figuren.
1K-potten här är för att justera noggrannheten för ADC. Låt oss nu diskutera om ADC för ATMEGA8.
I ATMEGA8 kan vi ge analog ingång till någon av de fyra PORTC-kanalerna, det spelar ingen roll vilken kanal vi väljer eftersom alla är desamma, vi kommer att välja kanal 0 eller PIN0 för PORTC.
I ATMEGA8 har ADC 10 bitars upplösning, så att styrenheten kan känna av en känsla av en minsta förändring av Vref / 2 ^ 10, så om referensspänningen är 5V får vi en digital utgångsinkrement för varje 5/2 ^ 10 = 5mV. Så för varje 5mV-steg i ingången kommer vi att öka en på digital utgång.
Nu måste vi ställa in ADC-registret baserat på följande villkor, 1. Först och främst måste vi aktivera ADC-funktionen i ADC.
2. Här kommer att få en maximal ingångsspänning för ADC-omvandling är + 5V. Så vi kan ställa in maximalt värde eller referens för ADC till 5V.
3. Styrenheten har en utlösningsomvandlingsfunktion som innebär att ADC-omvandling endast sker efter en extern utlösare, eftersom vi inte vill att vi behöver ställa in registren för att ADC ska kunna köras i kontinuerligt frilöpande läge.
4. För varje ADC är omvandlingsfrekvensen (analogt värde till digitalt värde) och noggrannheten för digital utgång omvänt proportionell. Så för bättre noggrannhet för digital utgång måste vi välja lägre frekvens. För normal ADC-klocka ställer vi in förförsäljningen av ADC till maximalt värde (2). Eftersom vi använder den interna klockan på 1MHZ kommer klockan till ADC att vara (1000000/2).
Det här är de enda fyra sakerna vi behöver veta för att komma igång med ADC.
Alla ovanstående fyra funktioner är inställda av två register:
RÖD (ADEN): Denna bit måste ställas in för att aktivera ADC-funktionen i ATMEGA.
BLÅ (REFS1, REFS0): Dessa två bitar används för att ställa in referensspänningen (eller max ingångsspänningen vi ska ge). Eftersom vi vill ha referensspänning 5V, bör REFS0 ställas in enligt tabellen.
GUL (ADFR): Denna bit måste ställas in för att ADC ska kunna köras kontinuerligt (frilöpande läge).
PINK (MUX0-MUX3): Dessa fyra bitar är för att berätta ingångskanalen. Eftersom vi ska använda ADC0 eller PIN0 behöver vi inte ställa in några bitar som i tabellen.
BRUN (ADPS0-ADPS2): dessa tre bitar är för att ställa in prescalar för ADC. Eftersom vi använder en prescalar på 2 måste vi ställa in en bit.
MÖRK GRÖN (ADSC): denna bituppsättning för att ADC ska starta omvandlingen. Denna bit kan inaktiveras i programmet när vi behöver stoppa konverteringen.
FLEX-sensorgränssnitt med ATmega8 förklaras steg för steg i C-koden nedan.