AVR Assembler Tutorial 7 (6 / 12 stap)

Stap 6: Welke aan-uitschakelaars moeten we stellen?


Laten we eerst nadenken over hoe we dit code willen, zodat de controller kan lezen van de input van het toetsenbord en zet hem in een numerieke waarde die overeenkomt met de knop die werd ingedrukt.

We gaan de analoog naar Digitaal Converter (ADC), dat is ingebouwd in de Atmega328p gebruiken. We zullen gebruiken AREF als onze referentie spanning en onze toetsenbord productie zal worden aangesloten op PortC0 of PC0. Merk op dat deze pin wordt ook wel genoemd ADC0 voor analoog / digitaal-Converter 0.

Het zou een goed idee voor u te lezen via de sectie 12.4 op interrupts voor de ATmega328P en ook hoofdstuk 24 over de analoog-digitaalomzetter voordat we aan de slag of op zijn minst die secties klaar voor verwijzing hebben.

Om de microcontroller zodanig instellen dat het weet wat te doen met een analoog ingangssignaal, en hoe om te interageren met ons programma, moeten we eerst instellen van een paar van de verschillende gerelateerde ADC register bits. Dit zijn in wezen gelijkwaardig zijn aan de oude aan-uitschakelaars op de eerste computers. U ofwel spiegelen een switch ON of OFF, of zelfs verder terug die u kabels tussen een stopcontact en een ander aansluiten zou zodat elektronen die vork in de weg te bereiken zou het vinden van een poort gesloten en een andere open het te dwingen een andere weg in het doolhof van circuits en dus een andere logische taak uitvoeren. Bij het coderen in assembler hebben wij nauwe toegang tot deze functies van de microcontroller die tot de aantrekkelijke dingen behoort over het doen van het in de eerste plaats. Het is meer "hands on" en veel minder gaat "achter de scenes" als het ware. Dus niet denken aan het instellen van deze registers als een vervelende taak. Dit is wat maakt assembler interessant! Wij zijn een zeer persoonlijke relatie met de binnenwerkingen en de logica van de chip te verkrijgen en daarmee doen precies wat we willen het--niet meer en niet minder. Geen verspilde klokcycli.

Dus is hier een lijst van de switches die we moeten stellen:

  1. Uitschakelen van de macht vermindering ADC bit, PRADC, oftewel bit 0 van het register van PRR, sindsdien als deze bit is op op zal dicht waas de ADC. Het register van de vermindering van de macht is in wezen een manier voor dicht vandoor verschillende dingen die macht gebruiken wanneer u ze niet nodig. Aangezien we zijn met behulp van de ADC willen we ervoor zorgen dat deze niet op deze manier is uitgeschakeld. (Zie PRADC op pagina 46)
  2. Selecteer het analoge invoerkanaal als ADC0 door het uitschakelen van MUX3... 0 in het register met ADC Multiplexer selectie (ADMUX) (zie tabel 24-4, pagina 249) deze al uit standaard zijn zodat we niet echt nodig om dit te doen. Ik ben het echter ook aangezien als u ooit een andere poort dan ADC0 u moet deze schakelopties dienovereenkomstig in-of uitschakelen. Verschillende combinaties van MUX3, MUX2, MUX1, MUX0 kunt gebruiken om het even welk van de analoge poorten als uw input en u kunt deze op de vlieg ook wijzigen als u wilt kijken naar een heleboel verschillende analoge signalen tegelijk.
  3. Zodat we AREF als onze referentie spanning in plaats van een interne verwijzing (zie pagina 248 gebruiken zal) uit REFS0 en REFS1 bits in het register van de ADMUX in te schakelen.
  4. Inschakelen van de ADLAR bit in ADMUX dus het resultaat "links aangepast is" we zullen bespreken deze keuze in de volgende stap.
  5. Stel de ADC0D bit in het digitale Input uitschakelen Register (DIDR0) uit digitale ingang aan PC0 te schakelen. We zijn met behulp van die poort voor analoge ingang zodat we ook de digitale ingang voor het kan uitschakelen.
  6. Set ISC0 en ISC1 in de externe Interrupt besturingselement registreren A (EICRA) om aan te geven dat wij willen activeren op de stijgende rand van een signaal van de spanning aan de INT0 pin (PD2), zie pagina 71.
  7. Schakel bits INT0 en INT1 in de externe Interrupt masker registreren (EIMSK) om aan te geven dat we zijn niet met behulp van interrupts op deze pin. Als wij moesten inschakelen interrupts op deze pin we een interrupt handler op adres 0x0002 zou moeten maar in plaats daarvan we zijn oprichting ervan zodat een signaal op deze pincode de ADC-conversie activeert, de voltooiing van die wordt afgehandeld door de ADC-conversie voltooid interrupt op adres 0x002A. Zie bladzijde 72.
  8. Instellen van de ADC inschakelen (ADEN) bit (bit 7) in het ADC-besturingselement en status register A (ADCSRA) om de ADC. Zie bladzijde 249.
  9. Konden we beginnen met een conversie door de ADC start conversie bit (ADSC) elke keer dat we wilden lezen het analoge signaal, maar voor nu we liever het lezen automatisch wanneer iemand duwt de knop, dus in plaats daarvan zullen we de ADC Autotrigger inschakelen (ADATE) beet in het ADCSRA registreren zodat triggering gebeurt automatisch.
  10. Wij stellen ook de ADPS2... 0 bits (de AD Prescalar bits) tot 111 zodat de ADC-klok is de CPU-kloksnelheid gedeeld door een factor van 128.
  11. Wij zullen het selecteren van de bron van de ADC triggering te PD2 ook wel INT0 genoemd (externe Interrupt Request 0). We doen dit door het wisselen van de diverse bits in het register van ADCSRB (zie tabel 24-6 op pagina 251). We zien in de tabel die wij willen ADTS0 af, ADTS1 op, en ADTS2 af zodat de ADC die pin op gang zal brengen. Opmerking dat als we voortdurend proeven van de analoge poort wilden zoals als we sommige continu analoge signaal (ofzo geluid bemonstering) lezen we dit zou ingesteld op Free Running Mode. De methode die we gebruiken voor het instellen van triggering op PD2 activeert een ADC lezing van de analoge poort PC0 zonder een interrupt. De interrupt zal komen wanneer de conversie voltooid is.
  12. U de ADC-Interrupt inschakelen (ADIE) bit in het ADCSRA-register zodanig dat wanneer de analoog naar digitaal conversie voltooid is zal het genereren van een interrupt die wij kunnen schrijven van een interrupt handler voor en zet zijn op .org 0x002A.
  13. Stel de ik beetje in SREG om interrupts.

Oefening 1: Zorg ervoor dat u lezen de relevante secties in het gegevensblad voor elk van de bovenstaande instellingen zodat u begrijpen wat er gaande is en wat er zou gebeuren als we hen alternatieve instellingen hebt gewijzigd.

Gerelateerde Artikelen

AVR Assembler Tutorial 2

AVR Assembler Tutorial 2

Deze tutorial is een voortzetting van het "AVR Assembler Tutorial 1"Als je niet hebt doorlopen Tutorial 1 moet je nu stoppen en dat men eerst doen.In deze tutorial zullen we onze studie van assembly language programmering van de atmega328p in de
AVR Assembler Tutorial 11

AVR Assembler Tutorial 11

Welkom bij Tutorial 11!In deze korte tutorial, zijn we eindelijk het eerste deel van onze laatste project bouwen.Het eerste wat dat u moet doen is gaat u naar de allerlaatste stap van deze tutorial en Bekijk de video. Dan kom hier terug. [onderbreken
AVR Assembler Tutorial 1

AVR Assembler Tutorial 1

Ik heb besloten om een serie tutorials over hoe te schrijven van assembler programma's voor de Atmega328p die het gebruikt in de Arduino microcontroller is schrijven. Als mensen geïnteresseerd blijven blijft ik stak een een week of zo totdat ik oprak
AVR Assembler Tutorial 6

AVR Assembler Tutorial 6

Welkom bij Tutorial 6!Today's tutorial zullen kort waar zullen we het ontwikkelen van een eenvoudige methode om gegevens tussen een atmega328p en een andere met twee poorten verbinden hen te delen. Wij zullen vervolgens nemen de dobbelstenen rol van
AVR Assembler Tutorial 8

AVR Assembler Tutorial 8

Welkom bij Tutorial 8!In deze korte tutorial gaan we een beetje een afleiding van de invoering van nieuwe aspecten van assembly language programmering te laten zien hoe onze prototyping componenten verplaatsen naar een aparte "gedrukt" printplaa
AVR Assembler Tutorial 9

AVR Assembler Tutorial 9

Welkom bij Tutorial 9.Vandaag zullen wij tonen hoe de controle van zowel een 7-segment display en een 4-cijferige weergave met behulp van onze ATmega328P en AVR assembler code. In de loop doen die we nemen van omleidingen moeten zal op how to use van
AVR Assembler Tutorial 10

AVR Assembler Tutorial 10

Welkom bij Tutorial 10!Sorry dat het zo lang duurde om deze volgende aflevering eruit maar dit is een behoorlijk hectische tijd van het jaar. In ieder geval, is hier het!We hebben een lange weg afgelegd en u bent waarschijnlijk al bekwaam genoeg is o
AVR Assembler Tutorial 5

AVR Assembler Tutorial 5

Vandaag gaan we nemen een kijkje op de verschillende geheugenlocaties in de Atmega328p microcontroller en zien als we beter begrijpen kunnen hoe de dingen worden opgeslagen, waar ze worden opgeslagen en hoe de pointers en opzoektabellen werken.De tut
AVR Assembler Tutorial 4

AVR Assembler Tutorial 4

Welkom bij de handleiding voor nummer 4!In deze tutorial zullen we bouwen een circuit om te simuleren het rollen van twee dobbelstenen. Dan zullen we eerst een brute-force-programma welk doet naar de job schrijven. Dan zullen we dat programma op vers
AVR Assembler Tutorial 3

AVR Assembler Tutorial 3

Welkom op tutorial nummer 3!Voordat we beginnen wil ik een filosofische opmerking maken. Wees niet bang om te experimenteren met de circuits en de code die we proberen op te in deze tutorials bouwen. Draden rond wijzigen, nieuwe onderdelen toe te voe
Een geavanceerde benadering van programmering van Arduino & AVR

Een geavanceerde benadering van programmering van Arduino & AVR

Dit instructable is een must read voor iedereen die vertrouwd is met core AVR chips en Arduino.Nou, om meer specifieke, bij het lezen van de instructable, zal u zitten kundig voor:1) weten het juiste verschil tussen AVR en Arduino.2) programmering Ar
Programmeerbare LED

Programmeerbare LED

geïnspireerd door diverse LED Throwies, knipperende LEDs en soortgelijke instructables ik wilde doen van mijn versie van een LED aangestuurd door een microcontroller.Het idee is om de LED knipperende reeks Herprogrammeerbare. Deze herprogrammering ka
De generator van willekeurige golfvorm, voor ~ 20$

De generator van willekeurige golfvorm, voor ~ 20$

een willekeurige golfvorm generator (AWG) is een nuttige maar vaak duur stuk van testapparatuur (ebay voor lacht). Gebruiken om te bepalen component frequentiebereik, genereren van vervoerder signalen, als een LCR-meter als u een bereik, tune resonan
Star Trek deurbel Hack

Star Trek deurbel Hack

Ik heb altijd al een fan van de Star Treks en als zodanig ik was erg opgewonden toen mijn kamergenoot bracht het huis van een originele serie stijl Star Trek comm panel. Ik had nog nooit gezien een van deze, maar een snelle zoektocht nam ons mee naar