» Advertenties

Zo 20 Mei 2012, 07:31

Alle AVR microprocessors hebben Input/Output poorten, deze hebben maximaal 8 individuele controleerbare pinnen. Van het hardware perspectief, zijn deze I/O pins de fysische pinnetjes die uit de processor chip komen. Deze pinnen worden gestuurd door software. De spanning op deze pinnen kan 0V en 5V gestuurd worden. De spanning die op de pinnen staat kan anderzijds ook teruggelezen worden.

Terwijl de I/O pinnen echte pinnetjes zijn in de buiten wereld, bestaan deze ook binnenin de processor. Binnenin bestaan ze onder de vorm van geheugenlocaties, welke we registers noemen. De software heeft controle over deze registers, zo wordt bepaalt hoe deze fungeren.

De AVR processors zijn 8bit processors, alles gebeurt met 8bits tegelijk. I/O pinnen zijn ook in groepen van 8 terug te vinden, deze groepen noemen we I/O poorten. Elke poort heeft 3 controle registers, elk register is 8bits groot.

DDRx - Dit register bepaalt richting (input / output) van de pinnen van port x
- Een '0' bit maakt de pin tot een ingang
- Een '1' bit maakt de pin tot een uitgang

PORTx - Dit register bepaalt de uitgangs status van de pinnen van port x
- Een '0' bit maakt de uitgang laag (~0V)
- Een '1' bit maakt de uitgang hoog (~5V)

PINx - Dit register houd de input status van de pinnen van port x
- Een '0' bit duid op een laag signaal (~0V)
- Ean '1' bit duid op een hoog signaal (~5V)

De x moet nog wel vervangen worden A,B,C of D of bij sommige grotere processors zijn er ook E en F poorten. Niet alle AVR's hebben dezelfde pinnen en poorten, in de datasheet je voor de specifieke AVR informatie vinden.
In AVR-GGC C bestaan er macro's om een enkele pin van een poort aan te sturen

C code -
  1. sbi(poort, bit); ///< Set Bit(port, pin)
  2. cbi(poort, bit); ///< Clear Bit(port, pin)


Om meerdere pinnen van een zelfde poort te sturen gebruik je best de volgende macro's.

C code -
  1. outb(poort, waarde); ///< waarde naar poort schrijver
  2. inb(poort); ///< waarde van poort lezen


Praktische voorbeelden
Fusebits zijn instellingen in je AVR die je met een programmer moet doen, je kan deze niet wijzigen vanuit de software die je op de AVR draait.

Hieronder zie je de fusebits van een ATMega8 (gebruikte programma is AVR Studio)
File #111

Ga niet zomaar zitten stoeien met de fusebits, het zou wel eens kunnen dat je je AVR zo in een coma krijgt!

RSTDISBL - Reset disable
Reset pin als gewone I/O pin gebruiken, opletten met deze optie. Of beter, laat de reset waarvoor die is, en gebruik een grotere AVR als je maar I/O pinnen nodig hebt.

WTDON - Watchdog on
Als de watchdog actief is, moet je deze tijdig resetten zodat de watchdog je AVR niet reset. Als je AVR ergens in je programma te lang blijft hanger (gewild of ongewild) gaat de watchdog een reset creeren, en begint het programma opnieuw. Als de AVR een PC was zou je zeggen dat da watchdog ingrijpt en je PC reset als deze is vast gelopen.

SPIEN - SPI ENable (!!)
Om de AVR te kunnen programmeren via een ISP-programmer moet deze bit aangevinkt zijn. Je kan deze bit uit zetten met een ISP-programmer, maar niet terug aan. Deze kun je wel terug aanzetten via HV-programmer en JTAG als je AVR al JTAG ondersteunt en JTAG moet je ook enabled zijn. (ook via fusebits, Mega8 heeft dat niet, enkele de grotere: Mega16, 32, 128, ...)

EESAVE - EEPROM save
EEPROM waarden onthouden na een erase.

BOOTSZ - Boot size
Grote die de bootloader krijgt.

BOOTRST - Boot vector
Na een reset niet aan het begin van het programma starten, maar aan begin van de boot sectie.

CKOPT - Oscillator optie
Functie afhnkelijk van de CKSEL bits, zie ook de datasheet.

BODLEVEL - Burn Out Detector LEVEL select
Burn out detector trigger select

BODEN - Burn Out Detector ENable
Burn out detector enable, deze zal de AVR in reset sturen als de voedingsspanning onder het ingestelde trigger niveau komt. Nadat er een burn out is gedetecteerd blijft de AVR nog even in reset.

SUT_CKSEL - Start Up Time en Clock SELect
Door de dropdown te openen krijg je een lijst van mogelijk heden. De AVR heeft oa de mogelijk om:
- Interne RC oscialtor, meetstel ook meerdere snelheden, niet naukeurig
- Externe RC oscilator
- Externe clock, gewoon pulsjes als clock
- Extern crystal (naukeurig) of resonator (minder naukeurig)
Wat is het schil tussen HEX en Assembly?

Niveau om code voor een AVR te schrijven, van laag naar hoog:
- Hex
- Assembler (AVR Studio)
- C (AVR-GCC, ...)
- Basic (Bascom)
- Flowcode of andere grafische omgevingen.

De HEX-file is het bestandje dat je krijgt na het compileren van eender welke taal. Deze HEX moet je dan met behulp van een programmer naar de AVR downloaden. Voor de normale mens is een hex niet echt te lezen, deze bestaat uit veel opeen volgende hexadecimale codes.

Assembly daar in tegen is een low-level programmeertaal. Assembly is eigenlijk niet meer dan een reeks instructies, op elke regel één. Deze instructies worden door een compiler dan vertaalt naar machinetaal, de HEX file. ATMEL (fabrikant van AVR) stelt de gratis AVR Studio ter beschikking van iedereen. Hierin zit een assembly compiler en bied ondersteuning voor diverse programmers.

Door te programmeren in assembly heb je volledige controle over alles wat er gedaan word door de microcontroller. In hogere talen zoals C zitten wat meer dingen verborgen, waardoor je minder controle hebt. Maar assembly heeft ook wel een nadeel dat de programmeur al snel het overzicht kan verliezen. Bij hogere talen is het veel makkelijk om alles ordelijk te houden ook al wordt een project zeer groot.

Programmeren in C is een stap hoger dan assembly. AVR Studio in samenwerking met WIN-AVR voor de GCC compiler zijn gratis tools en hebben geen beperkingen. Ideaal dus als je starten met het programmeren van AVR microcontrollers.

Bascom zie ik als hogere taal dan C want Bascom verbergt nog een stuk meer code dan AVR-GCC. Over de standaard libraries heb je geen controle. Bij C kun je gemakkelijk zelf libraries schrijven en telkens weer opnieuw gebruiken.

Als je overstapt op de grafische omgeving om code te schrijven voor AVR's ben je helemaal de band kwijt met de interne opbouw van de AVR. Je steekt er zeer gemakkelijk allerhande dingen mee in elkaar. Maar je hebt geen controle over wat er nu eigenlijk allemaal gebeurd.
Very nice site!
Naam
a-z A-Z 0-9 _

 
E-mail
Wordt niet getoont.
  (niet verplicht)
 
Mail sturen als
(optie)
Smoerijf reageerd
Eender wie reageaard
Nooit
 
Mail sturen
(optie)
Enkel mailen bij eerste reactie
Bij elke reactie mailen
 
Reactie
Laatste wijziging: Zo 20 September 2009, 18:02