1 / 18

Programmeren en Software Engineering 2

Programmeren en Software Engineering 2. PROS2 Les 4. Globale variabele. We gebruiken liever geen globale variabele. Waarom eigenlijk niet? De variabele i in de ISR kan niet lokaal zijn. Waarom eigenlijk niet?

kaiser
Download Presentation

Programmeren en Software Engineering 2

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Programmeren en Software Engineering 2 PROS2 Les 4

  2. Globale variabele • We gebruiken liever geen globale variabele. • Waarom eigenlijk niet? • De variabele i in de ISR kan niet lokaal zijn. • Waarom eigenlijk niet? • Oplossing: static lokaal (variabele wordt maar 1x aangemaakt en blijft daarna bestaan). staticScope (zichtbaarheid) = block (lokaal).Livetime = tot einde programma.

  3. ADC Analog Digital Converter • Veel signalen in de buitenwereld zijn analoog en continue. • Veel meetsensoren leveren een analoge uitgangsspanning: • Temperatuursensor • Druksensor • Lichtsensor • Microfoon • enz... • Om deze signalen te kunnen inlezen met een µC (microcontroller) moeten ze discreet en digitaal gemaakt worden. • Veel µC’s hebben een ingebouwde ADC.

  4. Bijv: ADC 0-3V => 2 bits Analoog Continue afkomstig van sensor Analoog Discreet na sample (1 ms) en hold 2 bits Digitaal Discreet uitgang ADC U 3 11 2 10 01 1 00 0 0 2 4 6 8 10 12 14 16 18 t (ms) 0 1 3 3 1 1 1 3 2 1 0 2 2 1 0 0 1 3 3

  5. Bijv: ADC 0-3V => 2 bits • Omrekenen:Uin = Umax * (DIGout + ½) / (DIGmax + 1) • Kwantiseringsfout:±½ LSB = ±½ * Umax / (DIGmax + 1)

  6. ADC • Sample frequentie: • Volgens theorie (bemonsteringstheorema van Nyquist-Shannon) 2x hoogst voorkomende frequentie in signaal. • spraak 4KHz => sample frequentie 8 KHz (telefoon => 8KHz) • muziek 20 KHz => sample frequentie 40 KHz (CD => 44,1 KHz) • oventemperatuur 10 Hz => sample frequentie 20Hz • omgevingstemperatuur 0,01Hz => sample frequentie 0,02 Hz • maximale sample frequentie is afhankelijk van de conversiesnelheid van de ADC. • AVR: fADC = 50 – 200 KHz. Conversion time (single ended, free running) = 13,5 ADC clocks. Dus max fsample = 14,8 KHz. • Signaal bewerkingen voor S&H: • Versterken of verzwakken. • Verschuiven. • Filteren (te hoge frequenties eruit = Anti-aliasing filter). • Resolutie ADC: • AVR: 10 bits

  7. ADC eenvoudig blokschema ADEN en ADSC in ADCSRA Analoginput ADIF in ADCSRA Comparator ADC_vect interrupt PA0..PA7 Controller ADIE in ADCSRA MUX4..0 in ADMUX D/A Register ADC D/A converter 10 bits digital output

  8. Huiswerk • Bestudeer: • AVR boek blz. 97 t/m 99 (tot program K). • AVR boek blz. 109 t/m 112 (tot program M). • Lees: • Hoofdstuk over de ADC in ATmega16 datasheets:http://www.atmel.com/dyn/resources/prod_documents/doc2466.pdf 19 pagina’s. Dit soort documentatie moet je aan het einde van het 2de jaar zelfstandig kunnen gebruiken! (Wordt volgende les uitgelegd.) • Programmeer: • Maak een programma dat de spanning op PA0 op de LCD display laat zien. Maak gebruik van de LCD display library (zie BB)!

  9. Programmeren en Software Engineering 2 PROS2 Les 5

  10. ADC Atmega16 • ADC gebruikt relatief veel energie daarom staat de ADC na reset uit. Aanzetten met bit ADEN(ADc ENable) in het ADCSRA(ADc Control and Status Register A) register. • Alle ingangen van poort A (PA0 t/m PA7) kunnen als single-ended ingang van de ADC gebruikt worden. Meten t.o.v. GND (GrouND) en AREF (Analog REFerence). • ADC heeft ook differential mode (wordt later besproken). • De ADC wordt bestuurd met behulp van het ADMUX(ADc MUltipleXer selection Register), ADCSRA en SFIOR(Special Function IO Register).

  11. ADC ATmega16 • Schrijven van 1 naar ADSC(ADc Start Conversion) bit in ADCSRA start de conversie. • Flag ADIF(ADc Interrupt Flag) van ADCSRA register wordt 1 als de conversie klaar is en resultaat in ADC register (16 bits) staat. Dit bit kun je resetten door er een 1 naar toe te schrijven. • Als ADIE(ADc Interrupt Enable) bit in ADCSRA register geset is wordt een ADC_vect interrupt gegeven als ADIF geset wordt. ADIF wordt bij afhandelen van de interrupt automatisch gereset.

  12. ADC ATmega16 • Automatisch starten van conversie (auto trigger). • Set bit ADATE(ADc Auto Trigger Enable) in ADCSRA en kies een trigger source met de bits ADTS2 (ADc Trigger Source), ADTS1 en ADTS0 in het SFIOR register. • ADC Interrupt flag ADIF => Free Running Mode (continue bemonsteren). • Timer/Counter0 Overflow TOV0 => Equidistant bemonsteren. • Timer/Counter1 Overflow TOV1 => Idem.

  13. ADCMUX Pas op! Verkeerde waarde in REFS1 of REFS0 maakt ADC stuk!

  14. ADCSRA • Division Factor = fclk / fADC • Voor maximale (10 bits) nauwkeurigheid: 50 KHz ≤fADC ≤ 200 KHz. Weet je het nog? ADEN = ...ADSC = ...ADATE = ...ADIF = ...ADIE = ...

  15. SFIOR

  16. Opdracht • Maak een programma dat de spanning op PA0 op de LCD display laat zien. Maak gebruik van de LCD display library (Zie BB)!

  17. Uitwerking • Spanning als getal 0-1023. Uitleg snprintf zie BB!

  18. Uitwerking • Spanning in Volts. Zie BB voor gebruik float met snprintf! 50

More Related