Slides:



Advertisements
Verwante presentaties

Advertisements

PROS2 Les 13 Programmeren en Software Engineering 2.

Programmeren en Software Engineering 2


PROS2 Les 2 Programmeren en Software Engineering 2.
Programmeren en Software Engineering 2
De HF Spectrumanalyzer
Global e-Society Complex België - Regio Vlaanderen e-Regio Provincie Limburg Stad Hasselt Percelen.
Parallel naar serieel omzetting
Microcontroller Programmeren in C

PROS2 Les 12 Programmeren en Software Engineering 2.
MICPRG Les 12 Microcontroller Programmeren in C. 127 Real-time clock PC heeft een RTC Real-time Clock die de “time of day” bijhoudt. De RTC is voorzien.
Arduino project.
EVMINX4 Week 3 Algoritmen en Datastructuren (ALDAT)
Gestructureerd programmeren in C
PROS2 Les 11 Programmeren en Software Engineering 2.
Logische schakelingen
ADuC8xx MICROCONVERTER
GESPRG Les 14 Gestructureerd programmeren in C. 174 Details! The devil is in the details.
1/1/ eindhoven university of technology / faculty of Computer Science 2IC20:Computersystemen Week 6: Practicumprocessor invoer en uitvoer.
5JJ20: Computerarchitectuur 2M200: Inleiding Computersystemen
F. Rubben NI Lookout 1 06/RIS/05 - NI Lookout VTI Brugge F. Rubben, ing.
PROS2 Les 14 Programmeren en Software Engineering 2.

Fysische Informatica sensoren en AD-omzetter

Phoenix Contact ILC150ETH F. Rubben, Ing.. Phoenix Contact ILC150ETH F. Rubben, Ing.
Digitale informatie analoog signaal  digitaal signaal (zie figuur):
Hoofdstuk 6: Controle structuren
1Ben Bruidegom Hoe werkt een rekenmachine? Ben Bruidegom AMSTEL Instituut Universiteit van Amsterdam.
1Ben Bruidegom 1 Sequentiële schakelingen Toestand uitgang bepaald door:  ingangen &  vorige toestand uitgang.
Wat levert de tweede pensioenpijler op voor het personeelslid? 1 Enkele simulaties op basis van de weddeschaal B1-B3.
Digitale signalen.
PROS2 Les 7 Programmeren en Software Engineering 2.
PROS2 Les 6 Programmeren en Software Engineering 2.
MICPRG Les 11 Microcontroller Programmeren in C. 112 Datastructuren in C Werkgeheugen (PC en microcontroller): Statische datastructuren (vaste grootte):


GESPRG Les 7 Gestructureerd programmeren in C. 92 Verwisselen Schrijf een functie waarmee twee int variabelen verwisseld kunnen worden. void wissel(int.
MICPRG Les 14 Microcontroller Programmeren in C. 153 Duurzaam AVR gebruik De AVR ATmega32A is de opvolger van de ATmega32. De A versie is ongeveer 40%
Inleiding programmeren in C++ Life Science & Technology 2 februari Universiteit Leiden.
Seminarie 1: Pythagoreïsche drietallen
Ben Bruidegom 1 Sequentiële schakelingen Toestand uitgang bepaald door:  ingangen;  vorige toestand uitgang.
Meet-, stuur- en regelsystemen
Signaalverwerking Verwerkers. IR-buitenlamp. IJkgrafiek sensor.
Workshop Informatievaardigheden
1 Datastructuren Introductie tot de programmeeropgaven in C++ Jan van Rijn
Flight 68K Temperatuur geregelde ventilator
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology ; PIC assember programeren 1 Les 3 - onderwerpen Het.
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag Het ARM bord met wat library functies.
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 1 Les 6 - onderwerpen seriele interface (UART -
Presentatie Soorten bijzondere driehoeken en Rekenen met hoeken
23 september 2014 Niels Vanmarcke
Les 2: Zaterdag 24 mei 2014 Wim Peeters
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 C programmeren voor niet-C programmeurs les 2 definitie.
Tircms03-p les 7 Standaardfuncties. In header opnemen bijv: using namespace std // C++ // oude C.
Hoofdstuk 6 – Objectgeoriënteerd Programmeren: Overerving
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag Finite State Machine (Eindige.
Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1  programma draaien vanuit ROM.
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology ; PIC assember programeren 1 Les 6 - onderwerpen Uitleg.
Tircms02-p les 2 Meer operatoren Arrays en pointers Types en conversie.
Les 1: Zaterdag 10 mei 2014 Wim Peeters
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag User-defined characters op de.
VPEMSY1, D3ECPT2 : ARM Assembler 1 Hogeschool Utrecht / Electrical Engineering & Design 1  Herhaling: CMP, CMN,
PEMSY1http:// 1  Herhaling nieuwe instructies van vorige week  nieuw: combineren van assembler en C  oefeningen: assembler.
Analog  Digital Conversion
Transcript van de presentatie:

Microcontroller Programmeren in C MICPRG Les 4

Globale variabele We gebruiken liever geen globale variabele. Waarom eigenlijk niet? De variabele i in de ISR kan niet lokaal zijn. Oplossing: static lokaal (variabele wordt maar 1x aangemaakt en blijft daarna bestaan). ISR(TIMER0_OVF_vect) { static uint8_t i = 0; ++i; if (i == 10) { i = 0; TCNT0 = 160; PORTB ^= 1<<7; /* flip LED7 */ } ISR(TIMER0_OVF_vect) { uint8_t i = 0; ++i; if (i == 10) { i = 0; TCNT0 = 160; PORTB ^= 1<<7; /* flip LED7 */ } uint8_t i = 0; ISR(TIMER0_OVF_vect) { ++i; if (i == 10) { i = 0; TCNT0 = 160; PORTB ^= 1<<7; /* flip LED7 */ } static Scope (zichtbaarheid) = block (lokaal). Livetime = tot einde programma.

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.

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 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

Bijv: ADC 0-3V => 2 bits Omrekenen: Uin = Umax * (DIGout + ½) / (DIGmax + 1) Kwantiseringsfout: ±½ LSB = ±½ * Umax / (DIGmax + 1) Gemeten digitale waarde Omgerekende analoge waarde Min analoge waarde Max analoge waarde 0.375 ± 0.375 0.00 0.75 1 1.125 ± 0.375 1.50 2 1.875 ± 0.375 2.25 3 2,625 ± 0.375 3.00

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

ADC eenvoudig blokschema ADEN en ADSC in ADCSRA Analog input 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

Huiswerk Bestudeer: Lees: Programmeer: 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 ATmega32A datasheets: http://www.atmel.com/Images/Atmel-8155-8-bit-Microcontroller-AVR-ATmega32A_Datasheet.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)!

Microcontroller Programmeren in C MICPRG Les 5

ADC ATmega32 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 niet besproken). De ADC wordt bestuurd met behulp van het ADMUX (ADc MUltipleXer selection Register), ADCSRA en SFIOR (Special Function IO Register).

ADC ATmega32 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.

ADC ATmega32 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.

Verkeerde waarde in REFS1 of REFS0 maakt ADC stuk! ADMUX Pas op! Verkeerde waarde in REFS1 of REFS0 maakt ADC stuk!

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

SFIOR

Opdracht Maak een programma dat de spanning op PA0 op de LCD display laat zien. Maak gebruik van de LCD display library (Zie BB)! void lcd_init(void); /* initialize LCD */ void lcd_cls(void); /* clear screen */ void lcd_cursor(bool cursorOn, bool cursorBlinks); void lcd_home(void); /* place cursor in upper left corner) */ void lcd_goto(uint8_t row, uint8_t column); uint8_t lcd_get_row(void); /* get cursor row position (0..1) */ uint8_t lcd_get_column(void); /* get cursor column pos (0..39) */ void lcd_putc(char c); /* write character c */ void lcd_puts(char* s); /* write string s */

Uitwerking Spanning als getal 0-1023. Uitleg snprintf zie BB! #include <avr/io.h> #include <stdio.h> #include "lcd.h" int main(void) { char buffer[5]; lcd_init(); lcd_cursor(false, false); // division factor fclk / fadc = 3686 / 200 = 18.4 Kies 32 // fadc = 3686 / 32 = 115 KHz. ADMUX = 0; ADCSRA = 1<<ADEN | 1<<ADPS2 | 1<<ADPS0; while (1) { ADCSRA |= 1<<ADSC | 1<<ADIF; while (~ADCSRA & 1<<ADIF); lcd_home(); snprintf(buffer, sizeof buffer, "%4d", ADC); lcd_puts(buffer); } return 0; Uitleg snprintf zie BB!

Zie BB voor gebruik float met snprintf! Uitwerking Spanning in Volts. Zie BB voor gebruik float met snprintf! #include <avr/io.h> #include <stdio.h> #include "lcd.h" int main(void) { char buffer[5]; lcd_init(); lcd_cursor(false, false); ADMUX = 0; ADCSRA = 1<<ADEN | 1<<ADPS2 | 1<<ADPS0; while (1) { ADCSRA |= 1<<ADSC | 1<<ADIF; while (~ADCSRA & 1<<ADIF); // 1 stapje = 5 / 1024 = 0.0048828125 V = 4.8828125 mV // fout = +/-2.44 mv. Geef antwoord met 2 cijfers achter de punt lcd_home(); snprintf(buffer, sizeof buffer, "%4.2f", 5.0 * (ADC + 0.5) / 1024); lcd_puts(buffer); } return 0;