C:\PIC\Navigatielichten\Navigatielichten.c

Vergelijkbare documenten
Brainbox professional BRAINBOX PRO 1

VTI Sint-Laurentius De school voor Wetenschap, Techniek en Technologie Pr. Thuysbaertlaan Lokeren info@vti-lokeren.

GEÏNTEGREERDE PROEF. VTI Sint-Laurentius. Pakketweegschaal. Industriële informatie & communicatietechnologie SCHOOLJAAR

GEÏNTEGREERDE PROEF. VTI Sint-Laurentius. Pakketweegschaal. Industriële informatie & communicatietechnologie SCHOOLJAAR

ES1 Project 1: Microcontrollers

Zelf PIC's programmeren. Deel-13 IR-sensor

Sumo-robotcompetitie. Uitlegsessie 15 maart 2011

ID-er/sequencer. Beschrijving. Pag 1/6

RCL Arduino Workshop 1

Technology, Innovation & Society Delft

Handleiding GSM kiezer V2.03

Arduino Workshop 1 Zuid-Limburg

ROBO- BITS-38. Afz.hcc Robotica gg, p.a. Henk de Gans, Anjerlaan 3, 3871 ev Hoevelaken. Jaargang10, nummer 3, september 2007

Opgave Tussentijdse Oefeningen Jaarproject I Reeks 4: Lcd Interface & Files

Galaxy Dimension TOUCHCENTER Handleiding gebruiker

Software beschrijving Epoluthon 2.0

Microcontrollers. Week 5 Introductie microcontroller Jesse op den Brouw (met dank aan Ben Kuiper) INLMIC/

Toets In2305-ii Embedded Programming Dinsdag 28 November 2006, 15:45-16:30

continue in een for, while of do lus herhaalt de lus vroegtijdig. De volgende herhaling wordt onmiddellijk begonnen.

Microcontrollers. Bart Kardinaal E Verslag microcontrollers Rev 1.0 Status definitief.

Projectwerk microcontrollers:

Tinyserir-RC5. Datasheet. Tinyserir-RC5 Page: 1 of 8

CTCSS Encoder Super Flexibel Ontwerpen met een Arduino Nano

IT&T tsc B.V. Programmeer Voorschrift IT&T Kwaliteitscentrale (VERSIE 2V) (VIALIS VARIANT)

De FOR lus: // terug naar waar je vandaan kwam Serial.begin(115200); // communicatie snelheid met de PC

Microcontrollers Week 5 Interrupts, Timer/Counter 0 Jesse op den Brouw INLMIC/

Inductiemeter via de parallelle poort

Arduino : Morse Voltmeter

Zelfbouw frequentieteller

Gelukkig Nieuwjaar! Experimenten op de club

De Arduino-microcontroller in de motorvoertuigentechniek (4)

EmSE presentatie. Starten met de ATtiny2313: Een RGB powerled driver Kees Moerman, 13 juli 2010

G-13.MFT Munttester, enkelvoudige blokkering

Bij manueel trein elke keer vanaf spoor 1 te starten, dus altijd twee ritten. StartLED gaat aan en pas uit als trein op 1 arriveert.

7,6. Samenvatting door A woorden 12 april keer beoordeeld. Natuurkunde. Natuurkunde Systemen. Systemen

Lab6: Implementatie video timing generator

Een intelligent DMX netwerk

Slimme schakelingen (2)

Herhaling: het spelverloop Alles over de sensoren en actuatoren die we gebruiken

Basisoefeningen en uitwerkingen Systeembord. Opgaven en antwoorden op It s learning en agtijmensen.nl

Microcontrollers Week 1 Introductie microcontroller Jesse op den Brouw INLMIC/

Sequentiële schakelingen

Pulse output High speed counter Input interrupts

Proef Natuurkunde Practica hoofdstuk 3

Opgave Tussentijdse Oefeningen Jaarproject I Reeks 3: Tijd, licht en warmte

9 Tijdsfuncties. 9.1 Voorstelling tijden

Handleiding software USB PIC DEV. BOARD

Besturingssystemen: WPO

Microcontrollers. Robert Langenhuysen, PA0RYL

Chronotherm Thermostaat Modulation

LocoServo Handleiding

Online c++ leren programmeren:

DDS chips. DDS = Direct Digital (frequency) Synthesis. Output = sinusvormig signaal. Maximum frequentie = ½ klokfrequentie

Combinatorische schakelingen

b Geluid waarnemen, meten en omzetten in elektrische spanning.

Zelftest Programmeren in PL/I

DIGITAL_AGC1 voor QCX software rev2

Beckhoff. Motion Control PTP

Hoofdstuk 5: Signaalverwerking

Showmaster 24 ORDERCODE 50335

NL Manual GSM module RC-GBT8448BC V1.1. Handleiding GSM RC-GBT8448BC

Arduino. Arduino UNO. Sam Decoster. CoderDojo Roeselare. Sam Decoster

Uitsluitend aansluiten op de spanning en frequentie zoals aangegeven op het typeplaatje.

ES1 Project 1: Microcontrollers

Werkbladen voor Arduino workshop 1

Combinatorisch tegenover sequentieel

Programmeermethoden. Recursie. Walter Kosters. week 11: november kosterswa/pm/

ROBOTICS CCFZ 27/3/2010

Toets Digitale Systemen 01/06/2006, uur

Universele telefoonprint met/voor PIC besturing

Zelf PIC's programmeren. Deel-1 KnipperLED (flashing LED)

Klasse B output buffer voor een Flat Panel Display Kolom aansturing

Programmeer Voorschrift IT&T Kwaliteitscentrale. (Versie 3 - Vialis/TPA)

Practica bij het vak. Inleiding tot de Elektrotechniek: Practicum 2 Analoge versus digitale signalen en hun overdracht

Draadloos Clickkit Snelgids

MICPRG 15 januari Toets: Theorie:

LocoServo Handleiding

Virtueel haardvuur Waar geen rook is, moet elektronica zijn

Examen Software Ontwikkeling I 2e Bachelor Informatica Academiejaar Januari, **BELANGRIJK** : Schrijf je naam onderaan dit blad

Programmeermethoden. Recursie. week 11: november kosterswa/pm/

Instructies en blokken

Basiscursus microcontrollers

2-KANAALS RF AFSTANDSBEDIENINGSSET

Ravi Ramcharan Arduino PRO Smart leeslampje

28 HD LED TV MODEL NR.:28LED1600

Testprogramma voor EPROMprogrammer

Hard- en software. 1 Gebruiksaanwijzing voor Labview-grafieken. 2 Data-acquisitie met de computer

Oefening 1 - Seriële communicatie via USB

Het Versacom systeem is gedefinieerd in DIN 43861, deel 301 als "transfer protocol A".

INTERACTIEVE TOUCHSCREEN MET RGB LEDS

MURRELEKTRONIK IO-LINK, EN NU? Roel Janssen

AUTO ON OFF BEDIENINGSHANDLEIDING RC 5

FA23 Aansluitschema Onderdeel nr:

Logische bit-instructies

Een typisch programma in C en C++ bestaat uit een aantal onderdelen:

GT-912/GT-913/GT-914 Inbouwhandleiding

Multiplexers en demultiplexers MULTIPLEXERS

Informatiebundel ADuC832 Motor interface bord MGM/[dp]

Infographic De infographic geeft in grove lijnen het overkoepelend concept weer Your home remotely controlled Zie de infographic hier naast.

Transcriptie:

// Dit programma kan geprogrammeerd worden in een PIC 12F683 // en heeft als doel: het op afstand in- en uitschakelen van // navigatieverlichting, landingslichten en lichtbakens // op een RC vliegtuig. // // Ruben Buysschaert, 19 januari 2011. // // www.rubu.be #include "int16cxx.h" #include "math16.h" //Deze header is nodig om enkele standaard routines //voor tijdens de interrupt te kunnen gebruiken. //Bijvoorbeeld: int_save_registers //Configuration word instellingen #pragma config = 0x00D4 // 0000.0000.1101.0100 = 0x00D4 gebruik // interne oscillator van 8Mhz //Definities van de in- en uitgangen #pragma bit ch1 @ GPIO.5 //input kanaal 1 #pragma bit ch2 @ GPIO.4 //input kanaal 2 #pragma bit navigationlights @ GPIO.0 //output #pragma bit landinglights @ GPIO.1 //output #pragma bit beaconlights @ GPIO.2 //output //Prototypes van de functies void init(void); void inittimer1(void); //Let op: deze functie werkt met Timer 0! void Timer1On(void); void Timer1Off(void); void inittimer2(void); //Let op: deze functie werkt met Timer 1! void Timer2On(void); void Timer2Off(void); 1

//Declaraties van de variabelen char temp; uns16 teller; //Interrupt definitie #pragma origin 4 interrupt interruptsubroutine(void) int_save_registers //zie int16cxx.h C:\PIC\Navigatielichten\Navigatielichten.c //Interrupt van GPIO's (zowel bij dalende als bij stijgende flank) if(gpif == 1) temp = GPIO; //GP lezen zodat de oude info overschreven //wordt met de huidige info GPIF = 0; //IF reseten //Indien kanaal 1 een signaal bevat, start de Timer if((ch1 == 1) && (T0IE == 0)) Timer1On(); //start de meting van 1,5ms //Indien kanaal 2 een signaal bevat, start de Timer if((ch2 == 1) && (TMR1IE == 0)) Timer2On(); //start de meting van 1,5ms //Interrupt van timer 0, voor kanaal 1 if((t0if == 1) && (T0IE == 1)) T0IF = 0; Timer1Off(); //na 1,5ms check ch1 if(ch1 == 1) navigationlights = 1; 2

else navigationlights = 0; //Interrupt van timer 1, voor kanaal 2 if((tmr1if == 1) && (TMR1IE == 1)) TMR1IF = 0; Timer2Off(); //na 1,5ms check ch2 if(ch2 == 1) landinglights = 1; else landinglights = 0; int_restore_registers //Start van de main functie void main( void) init(); // Alle LED's uitschakelen navigationlights = 0; nop(); landinglights = 0; nop(); while(1) 3

//Maak een 'flikker-sequentie' voor de lichtbakens, //indien de navigatielichten ingeschakeld zijn. if(navigationlights == 1) teller++; if(teller==0) beaconlights = 1; if(teller==5000) if(teller==7500) beaconlights = 1; if(teller==12500) else void init(void) OSCCON.6 = 1; OSCCON.5 = 1; OSCCON.4 = 1; CM2 = 1; CM1 = 1; CM0 = 1; ANSEL = 0; TRISIO = 0b00111000; //kies 8MHz //comparatoren uitschakelen //Analoge ingangen uitschakelen //input-output instellen 4

GIE = 1; GPIE = 1; IOC = 0b00110000; PEIE = 1; //interrupts toelaten //interrupts van GPIO's toelaten //interrupts van pin 5 en 4 toelaten (ch1 en ch2) //interrupts van pheriperals toelaten inittimer1(); inittimer2(); void inittimer1() T0CS = 0; //interne klok selectern //prescaler gebruiken PSA = 0; PS0 = 0; //instellen op 1:32 PS1 = 0; PS2 = 1; TMR0 = 0; T0IF = 0; T0IE = 0; //teller resetten //IF clearen //interrupt nog niet toelaten void Timer1On() // Je wil 1,5ms meten. Aan een kloksignaal van 8MHz/4 = 2MHz => 0,5µs per tel, // met prescaler van 32 => één tel van Timer 0 = 0,5µs * 32 = 16µs // 1,5ms/16µs = 93,75 pulsen ~ 94 pulsen // 256-94 = 162 als init waarde. TMR0 = 162; //teller resetten T0IF = 0; //IF clearen T0IE = 1; //interrupt toelaten void Timer1Off() T0IE = 0; //interrupt niet meer toelaten 5

T0IF = 0; //IF clearen TMR0 = 0; //teller resetten //Let op: De timer is niet uitgeschakeld! Vandaar dat in de interrupt //subroutine, ook gecontrolleerd moet worden of T0IE == 1... void inittimer2() TMR1CS = 0; //interne klok selecteren T1CKPS1 = 1; //prescaler op 1:8 T1CKPS0 = 1; T1GE = 0; TMR1H = 0; //teller resetten TMR1L = 0; TMR1ON = 1; //timer inschakelen TMR1IF = 0; //interrupt flag resetten TMR1IE = 0; //interrupt nog niet toelaten void Timer2On() // Je wil 1,5ms meten. Aan een kloksignaal van 8MHz/4 = 2MHz => 0,5µs per tel // met prescaler van 8 => één tel van Timer 0 = 0,5µs * 8 = 4µs // 1,5ms/4µs = 375 pulsen // 65536-375 = 65161 als init waarde // = 11111110.10001001 TMR1L = 0b10001001; TMR1H = 0b11111110; TMR1IF = 0; TMR1IE = 1; //interrupt toelaten void Timer2Off() 6

TMR1IE = 0; //interrupt niet meer toelaten TMR1IF = 0; TMR1H = 0; TMR1L = 0; //Let op: De timer is niet uitgeschakeld! Vandaar dat in de interrupt //subroutine, ook gecontrolleerd moet worden of TMR1IE == 1... 7