Programmering i C Programmering af microcontroller i C (4 af 4) 12. april 2007



Relaterede dokumenter
Intro til AVR. Mads Pedersen, OZ6HR

Datamaters arkitektur og programmering

System Arkitektur og Integration

Programmering i C Intro og grundlæggende C 5. marts 2007

Embedded controller, almen.

Internt interrupt - Arduino

Start på Arduino og programmering

// Definition af porte og funktioner

Introduktion til C programmering

Microcontroller, Arduino

Erklæring af variabler. Void indstil (Indstiller starttidspunkt og måleinterval).

8 bit unsigned integer værdier vist som binær, decimal og hexdecimal. Embeddede systemer. En introduktion til MSP430

Fra programmering til mikroprocessor

Arduino Programmering

Analoge indgange og A/D konvertering. Analoge udgange

Microcontroller, Arduino

Projekt rapport. for. Zigbee kommunikation

I 2 C BUSSEN KØRER MED ARDUINO IND I FORÅRET

Programmering i C. Lektion december 2008

Arduinostyret klimaanlæg Afsluttende projekt informationsteknologi B

CANSAT & ARDUINO step by step

Interrupt - Arduino. Programmering for begyndere Brug af Arduino. Kursusaften 6 EDR Hillerød Knud Krogsgaard Jensen / OZ1QK

Planen for idag. Kontrol af ydre enheder. Systemarkitektur. Synkronisering ved aktiv venten. Multiprogrammering[1]: Ydre enheder og multiprogrammer

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2

Af: OZ7EC Erik Christiansen Chiptemperatur med Arduino

Indholdsfortegnelse Indledning... 2 Projektbeskrivelse... 2 Dette bruger vi i projektet... 2 Komponenter... 2 Software... 2 Kalibrering...

Programmeringskursus Kursusaften 3. Programmering for begyndere Brug af Arduino. Display. Kursusaften 3 EDR Hillerød Knud Krogsgaard Jensen / OZ1QK

// inkluder library kode: #include <LiquidCrystal.h> #include <Serial.h> // Initialiser display LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

Indholdsfortegnelse :

Asus computer og hvad man kan gøre ved den. For flere år siden købte jeg en lille maskine der hed Asus Eee Pc 900.

Systemkald DM Obligatoriske opgave. Antal sider: 7 inkl. 2 bilag Afleveret: d. 18/ Afleveret af: Jacob Christiansen,

Arduinostyret klimaanlæg Afsluttende projekt programmering C

Under 'Microsoft Block Editor', klik 'New project' for at åbne block editor-værktøjet.

Introduktion til programmering. Af mikroprocessor Atmel ATmega328P i en Arduino Uno

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) { int wmid, wmevent; programmering med

1 Indholdsfortegnelse.

Example sensors. Accelorometer. Simple kontakter. Lysfølsomme. modstande. RFID reader & tags. Temperaturfølsomme. Flex Sensor.

Indhold. Maskinstruktur Kapitel 1. Assemblersprog Indledning Hop-instruktioner Input og output...

Delay(100); Man skriver fx blot delay(100); for at få Microcontrolleren til at vente 100 ms inden programmet fortsætter.

Arduino Programmering

HTML, PHP, SQL, webserver, hvad er hvad??

Hvorfor & Hvordan lære Elever At programmere Arduinoer

danske karakterer på Lcd

Eksamens spørgsmål i Teknologi (Digital) 3. Semester (i)

Indholdsfortegnelse:

BRUGERVEJLEDNING FLTA

Det er muligt at chekce følgende opg. i CodeJudge: og

C for uc kompendium. Denne compendium er et forsøg på at lære lidt om C for uc, med Keil syntax.

Brug af digitale ind og udgange

Kursusarbejde 2 Grundlæggende Programmering

Dette korte foredrag er opdelt i 3 dele: 1. ARDUINO i flere versioner, hvad er det? 2. DEMO-video 3. Din fremtidige Oscillator, SI5351A 4.

Måle og test I. Lasse Kaae 2012

Programmeringseksempel tl BCxxxx (Seriel)

1 Titelblad. Synopsis Denne rapport omhandler et autonomt robotsystem bygget op omkring microcontrolleren MSP430 fra Texas Instruments.

Algoritmer og invarianter

Netværk & elektronik

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3

Efter installation af GEM Drive Studio software fra Delta s CD-rom, skal hoved skærmbilledet se således ud: (koden til administrator adgang er: admin)

Andreas Nordbek & Kristoffer Skude Jensen. DMX Styring Side 1 af 15

Lær Python dag 1 - modul 1

KOMPONENT BESKRIVELSE

Indledning. Hvorfor det forholder sig sådan har jeg en masse idéer om, men det bliver for meget at komme ind på her. God fornøjelse med læsningen.

DM507 Algoritmer og datastrukturer

MultiProgrammer Manual

Anvendelse af del og hersk princippet involverer altså problemopdelning og løsningskombination.

Et alfabet er en ordnet mængde af bogstaver og andre tegn

Alt elektronik heri er købt via og arduino udviklingssoftware er hentet fra

Frekvensbestemmelse. HWP I1 Kursusarbejde Forår 2007

Transkript:

Programmering i C Programmering af microcontroller i C (4 af 4) 12. april 2007 Mads Pedersen, OZ6HR mads@oz6hr.dk

Plan i dag Afrunding af OZ3VB's program Fra "almindelig C" til "microcontroller C" Lighederne Struktur, løkker, if/else, variabler, Forskelle Input, output, registre, Eksempler MSP430 (LED, indbygget temperatur-sensor) AVR (seriel kommunikation) PIC (LM75 temperatur-sensor) Slide 2

OZ3VB's program Kan findes på klubbens hjemmeside Debug programmet Sæt "breakpoint" ved at klikke med musen på en linje i den sorte margin (eller Ctrl + F5) Vælg Debug Debug (F8) Step over hver linje (F7) Vælg en variabel Højreklik Add Watch Slide 3

"Almindelig" C til "microcontroller C" (1) Ikke den store forskel Strukturen (layout) er stadig den samme #include "msp430x20x3.h" void main(void) WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer P1DIR = 0x01; // Set P1.0 to output direction while(1 == 1) volatile unsigned int i; // volatile to prevent optimization P1OUT ^= 0x01; // Toggle P1.0 using exclusive-or i = 10000; // SW Delay while(i!= 0) i--; Slide 4

"Almindelig" C til "microcontroller C" (2) Lighederne: Main-funktionen Løkker for while Conditions if if / else if / else if / else Variabler int, short, long, float, double, char Slide 5

"Almindelig" C til "microcontroller C" (3) Forskellene Input (før scanf) Output (før printf) Giver ikke længere mening, for hvordan skal man indtaste data og hvor skal man præsentere data? I stedet Registre kan bruges som input (f.eks. fra ADC eller temperatur-sensor) Display (LCD) eller seriel kommunikation kan bruges som output Slide 6

Eksempel MSP430

MSP430 (1) OZ2JN John introducerede Texas Instruments MSP430 (Ultra low-power). Præsentationen ligger på www.oz6hr.dk Eksperimenteret med "Developer Tool" http://www.ti-estore.com/merchant2/merchant.mvc? Screen=PROD&Product_Code=EZ430-F2013 Hurtigt og simpelt at komme i gang Både C og Assembler CD med software "IAR Embedded Workbench IDE" Slide 8

MSP430 (2) Brochure og User's Guide http://focus.ti.com/mcu/docs/mcuprodoverview.tsp?sectionid=95&tabid= 140&familyId=342&DCMP=MCU_other&HQS=Other+IL+msp430 Assembler-instruktioner i kapitel "RISC 16-Bit CPU" Slide 9

MSP430 (3): LED-test #include "msp430x20x3.h" void main(void) WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer P1DIR = 0x01; // Set P1.0 to output direction while(1 == 1) volatile unsigned int i; // volatile to prevent optimization P1OUT ^= 0x01; // Toggle P1.0 using exclusive-or i = 10000; // SW Delay while(i!= 0) i--; I include-filen "msp430x20x3.h" defineres adresser, konstanter mv. for netop denne μc Info om registre kan findes i User's Guide Ellers standard C Slide 10

MSP430 (4): LED-test Vi kører programmet fra "IAR Embedded Workbench IDE" Project Options Target (MSP430F2013) Debugger Simulator FET Debugger (FET = Flash Emulation Tool) Debugger/simulator meget nyttig under udvikling! Slide 11

MSP430 (5): Temperatur-sensor #include <msp430x20x3.h> #include <stdio.h> #define ADCDeltaOn 31 // ~0.5 Deg C delta static unsigned int LastADCVal; // holds ADC temperature result void main(void) BCSCTL2 = DIVS_3; // SMCLK/8 WDTCTL = WDT_MDLY_32; // WDT Timer interval IE1 = WDTIE; // Enable WDT interrupt P1DIR = 0x01; // P1.0 to output direction SD16CTL = SD16REFON +SD16SSEL_1; // 1.2V ref, SMCLK SD16INCTL0 = SD16INCH_6; // A6+/- SD16CCTL0 = SD16SNGL + SD16IE ; // Single conv, interrupt _BIS_SR(LPM0_bits + GIE); // Enter LPM0 with interrupt // SD16_A interrupt service routine #pragma vector=sd16_vector interrupt void SD16ISR(void) // Make the compare (the ADC value is in SD16MEM0) if (SD16MEM0 > LastADCVal + ADCDeltaOn) P1OUT = 0x01; // LED on else P1OUT &= ~0x01; // LED off LastADCVal = SD16MEM0; // Store value // Watchdog Timer interrupt service routine #pragma vector=wdt_vector interrupt void watchdog_timer(void) SD16CCTL0 = SD16SC; // Start SD16 conversion Se User's Guide for info om registre Nye ting i dette program: Kaldes automatisk, når ADC'en har foretaget en konvertering En Watchdog Timer bruges normalt til at resette et system, hvis alt andet kikser Her starter WDT ADC'en Slide 12

MSP430 (6): Temperatur-sensor Vi kører programmet fra "IAR Embedded Workbench IDE" Sæt breakpoint ved at dobbeltklikke i margin Programmet startes i "FET Debugger" Tryk F5 for at fortsætte til breakpoint Højreklik på variabel "Add to Watch" F.eks. LastADCVal og SD16MEM0 Slide 13

Eksempel AVR

AVR (1) Flere af klubbens medlemmer har selv bygget et "developer board" med en AVR microcontroller (AT90S2313) Datasheet: http://www.atmel.com/dyn/products/product_card.asp?fa mily_id=607&family_name=avr+8%2dbit+risc+&part_i d=1993 Vi har primært programmeret i BASCOM, som et et Basic-lignende sprog Det er også et fint højniveau-sprog, men ikke nær så udbredt og standardiseret et sprog som C Man kan sagtens programmere AVR i C F.eks. WinAVR (http://sourceforge.net/projects/winavr) Slide 15

AVR (1): Seriel kommunikation #include <avr/io.h> /* Prototypes */ void InitUART( unsigned char baudrate ); unsigned char ReceiveByte( void ); void TransmitByte( unsigned char data ); /* Main - a simple test program */ int main( void ) InitUART( 11 ); /* Set the baudrate to 19,200 bps using a 3.6864MHz crystal */ for(;;) /* Forever */ TransmitByte( ReceiveByte() ); /* Echo the received character */ return 0; /* Initialize UART */ void InitUART( unsigned char baudrate ) UBRR = baudrate; /* Set the baud rate */ UCR = ( (1<<RXEN) (1<<TXEN) ); /* Enable UART receiver and transmitter */ Alternativ til while(1 == 1) Funktioner /* Read and write functions */ unsigned char ReceiveByte( void ) while (!(USR & (1<<RXC)) ) /* Wait for incomming data */ ; /* Return the data */ return UDR; void TransmitByte( unsigned char data ) while (!(USR & (1<<UDRE)) ) ; /* Wait for empty transmit buffer */ UDR = data; /* Start transmittion */ Slide 16

Eksempel PIC

PIC (1) Vi har arbejdet med PIC tidligere PIC kan også sagtens programmeres i C, det kræver blot at der installeres en udvidelse (C compiler) til det normale "MPLAB" Slide 18

PIC (2) LM75 er den samme temperatur-sensor, som blev brugt i AVR-projektet Der kan læses mere om I2C i præsentationen af AVR på www.oz6hr.dk #include <16f877.h> #define LM75_SDA PIN_C4 #define LM75_SCL PIN_C3 char result; // The result where the temperature value goes void main() LM75_init(); while (1) result = LM75_read_temperature(); printf("temperature = %d", result); // Sent to remote debugger delay_ms(1000); void LM75_init(void) output_float(lm75_sda); output_float(lm75_scl); i2c_start(); i2c_write(i2c_write_command); i2c_write(lm75_config_reg_addr); i2c_write(lm75_config_value); i2c_stop(); char LM75_read_temperature(void) char msb; char lsb; i2c_start(); i2c_write(i2c_write_command); //0b10011110 LM75_I2C_WRITE_ADDR i2c_write(0x00); i2c_start(); i2c_write(i2c_read_command); //0b10011111 LM75_I2C_READ_ADDR msb = i2c_read(); lsb = i2c_read(0); i2c_stop(); return msb; // Ignore lsb Slide 19

Slut! Det var det! Spørgsmål? Jeg besvarer naturligvis spørgsmål senere Kodetekniske spørgsmål Værktøjer Microcontroller-relateret (platforme, værktøjer, ) Alt ligger tilgængeligt på www.oz6hr.dk Afsat 4 aftener i næste kvartal til microcontrollerprojekter Slide 20