Geïntegreerde Proef: DCF77-klok met PIC microcontroller

Slides:



Advertisements
Verwante presentaties
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 1 Les 5 - onderwerpen •DB038 hardware : toetsenbordje.
Advertisements

Vincent Poté Nelis Vandermeiren Simen Akkermans Kevin De Neef
PROS2 Les 13 Programmeren en Software Engineering 2.
Hoe werkt een rekenmachine?
Serieel naar parallel omzetting
CODEERELEMENTEN DECODERS BCD naar 7-SEGMENT
PROS2 Les 2 Programmeren en Software Engineering 2.
Installatie & beheer Jonathan Mohnen Martijn Wolfs.
Informatieverwerkende systemen
Hardware (1) SGDB Informatica.
Module 2 – Hoofdstuk 3 Opbouw en werking van de computer.
(E)OBD.
Par. 3.1 Computers zijn overal


Hardware (1) NSG Informatica.
Jerry van den Heuvel Pim van der Lee
Arduino project.
Input/Output Invoer/Uitvoer
Basisgeheugenschakelingen
Logische schakelingen
ADuC8xx MICROCONVERTER
Auteursomgeving voor Digitale Componenten
De microcontroller Door Klaas De Nys.
Week 2: Microarchitectuur niveau ALU en datapad
1/1/ eindhoven university of technology / faculty of Computer Science 2IC20:Computersystemen Week 6: Practicumprocessor invoer en uitvoer.
5JJ20: Computerarchitectuur 2M200: Inleiding Computersystemen
Computerarchitectuur
automatiseringselektronica
F. Rubben NI Lookout 1 06/RIS/05 - NI Lookout VTI Brugge F. Rubben, ing.
C programma int main(){ } Compilatie met devc++ in file main.c Gecompileerd programma in file FirstProgram.exe Mov R1, 120 Mov R2, 160 ADD R1, R2.

Hoofdstuk 6: Controle structuren
5JJ20: Computerarchitectuur 2M200: Inleiding Computersystemen
1/1/ / faculty of Computer Science eindhoven university of technology 5B040:Computerarchitectuur 2M200:Inleiding Computersystemen Sessie 7(1): Flow of.
1Ben Bruidegom Hoe werkt een rekenmachine? Ben Bruidegom AMSTEL Instituut Universiteit van Amsterdam.
Auteursomgeving voor Digitale Componenten
1Ben Bruidegom A Harvard Machine Recapitulatie Calculator Calculator  Calculator met “loopjes” Calculator met “loopjes”  Processor.

Hoe werkt een rekenmachine?
1Ben Bruidegom 1 De Harvard Machine Van rekenmachine met “loopjes” naar processor.
Ben Bruidegom 1 Sequentiële schakelingen Toestand uitgang bepaald door:  ingangen;  vorige toestand uitgang.
1 Van Harvard naar MIPS. 2 3 Van Harvard naar MIPS Microprocessor without Interlocked Pipeline Stages Verschillen met de Harvard machine: - 32 Registers.
Signaalverwerking Verwerkers. IR-buitenlamp. IJkgrafiek sensor.
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology ; PIC assember programeren 1 Les 3 - onderwerpen Het.
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology ; PIC assember programeren 1 Les 4 - onderwerpen Tellen.
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 1 Les 3 - onderwerpen Instruction timing Shadow.
Power PC Assembler. Assembler toolkit bevat Assembler zelf Linkerlibrarian.
Presentatie door: Martijn Schmid, Kathinka Veldkamp en Nynke Zwart
1/1/ eindhoven university of technology / faculty of Computer Science 2IC20:Computersystemen Week 4: Digitale logica niveau: “systeem-architectuur” cpu-chips.
Afstudeerproject ETHERFLOW:
23 september 2014 Niels Vanmarcke
Les 2: Zaterdag 24 mei 2014 Wim Peeters
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 1 Les 3 - onderwerpen  DB036 printjes subroutines.
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1  herhaling ARM assembler instructies  assembler.
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.
Onderwerp: PIC assembler programmeren
Les 1: Zaterdag 10 mei 2014 Wim Peeters
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 1 Les 2 - onderwerpen  Helaas nog geen printjes.
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology ; PIC assember programeren 1 Les 2 - onderwerpen MPLAB.
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.
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 1 Les 4 - onderwerpen DB038 hardware : luidsprekertje.
2TPRJ5 – PIC assembler Hogeschool Utrecht / Institute for Information & Communication Technology Wouter van Ooijen Mail: Sheets.
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 1.
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 1 Les 3 - onderwerpen Instruction timing Shadow.
Hoorcollege 1: efficiëntie en complexiteitsontwikkeling.
Digitale gegevens Drs. Ing. Rainier Kock 1. Vorige les 2 Computers werken met elektrische schakelingen Schakelaar aan = 1, uit = 0 Tekst, geluid en beeld.
3 Hardware 3.1 De processor en intern geheugen
Transcript van de presentatie:

Geïntegreerde Proef: DCF77-klok met PIC microcontroller Van Hoylandt Roel 2007 - 2008 6EE - 4

Hoofdmenu Inhoud Presentatie 1: Inhoud Presentatie 2: Omschrijving Blokschema Motivatie Herhaling: DCF77 Blokschema PIC µC DCF77 Software Ontvanger Extra Voeding Display Schema en printontwerp Behuizing Stand van zaken Extra Voorstelling beëindigen

Presentatie 1 > Omschrijving Haalt uit zichzelf de juiste tijd en datum op doormiddel van het DCF77 signaal Gebruikt een PIC microcontroller voor alle berekeningen HD44780 compatibel PLED-display 7805 Spanningsregelaar als voeding Gebruiksvriendelijk, Geen instellingen nodig, geen knoppen, enkel aansluiten van voeding en ontvanger ⃔ ⃕

Motivatie ⃔ ⃕ Microcontrollers zijn boeiende dingen Presentatie 1 > Motivatie Microcontrollers zijn boeiende dingen Een klok die altijd juist staat is handig om te hebben Ik vindt het leuk om er achter te komen hoe iets werkt Combinatie van elektronica/computers/programmeren Ik had basiskennis van zaken voor ik er aan begon ⃔ ⃕

Blokschema ⃔ ⃕ DCF77: AM-Signaal met tijd en datum informatie Presentatie 1 > Blokschema Voeding DCF77 Antenne PIC µC Display DCF77: AM-Signaal met tijd en datum informatie Antenne: Ontvangt het DCF77 signaal en zet het om naar een bruikbaar signaal PIC µC: Hart van de schakeling, ontvangt, decodeert de informatie, laat de tijd en datum zien op het display Display: Maakt de tijd en datum zichtbaar Voeding: Zorgt ervoor dat elke onderdeel een correcte spanning krijgt ⃔ ⃕

DCF77 ⃔ ⃕ Algemeen Informatie in het signaal Bitstructuur AM Protocol Presentatie 1 > DCF77 Voeding DCF77 Antenne PIC µC Display Algemeen Informatie in het signaal Bitstructuur AM Protocol Pariteit ⃔ ⃕

Algemeen ⃔ ⃕ Deutschland C Kenteken lange golf DCF77 > Algemeen Deutschland C Kenteken lange golf Frankfurt (op 25 km van Mainflingen) 77 Freq. uitgezonden signaal (77,5 kHz) Mainflingen Signaal is zo goed als constant te ontvangen (99.87 % van de tijd) Als tijdbasis worden er 3 atoomklokken gebruikt ⃔ ⃕

Informatie in het signaal DCF77 > Informatie in het signaal Dag van de week (1-7) Maand (1-12) Jaar (bv: 2008) Meteotime (Licentie verplicht) Reserve/hoofd antenne in gebruik Zomertijd/wintertijd Minuten (0-59) Uren (0-23) Dag van de maand (1-31) ⃔ ⃕

DCF77 > Bitstructuur Elke seconde wordt er 1 bit uitgezonden, behalve op seconde 59 → 59 bits per minuut ⃔ ⃕

Het DCF77-signaal wordt uitgezonden als een AM-signaal Freq. signaal = constant Amplitude signaal afhankelijk van inkomend signaal ⃔ ⃕

Protocol ⃔ ⃕ Gemoduleerd tot 25% gedurende: DCF77 > Protocol Gemoduleerd tot 25% gedurende: 100 ms: ontvangen bit is een 0 200 ms: ontvangen bit is een 1 Willekeurige moment Minuutovergang ⃔ ⃕

Pariteit ⃔ ⃕ Pariteit is dient voor controle van de ontvangen data DCF77 > Pariteit Pariteit is dient voor controle van de ontvangen data DCF77 maakt gebruik van even pariteit Aantal ontvangen énen is altijd even 0110 1011 1 → Even → Juist 0110 1010 1 → Oneven → Fout ⃔ ⃕

Ontvanger ⃔ ⃕ Ontvangstmodule Open collector uitgangen Presentatie 1 > Ontvanger Voeding DCF77 Antenne PIC µC Display Ontvangstmodule Open collector uitgangen Principe werking ⃔ ⃕

Ontvangstmodule ⃔ ⃕ Massa Voedingsspanning Ontvanger > Ontvangstmodule Massa Voedingsspanning DCF77 uitgang (open collector) Geïnverteerde DCF77 uitgang (open collector) Uin = 1,2 - 15 V DC Iin gebruik = 3 mA Iuit max = 1 mA Uuit max = 30 V ⃔ ⃕

Open collector uitgangen Ontvanger > Open collector uitgangen 5 V 0 V “H” “L” → 10 kOhm → Imax = 0,5 mA ⃔ ⃕

Principe werking ⃔ ⃕ Amplitude verzwakt tot 25 % → Uu = 5 V Ontvanger > Principe werking Amplitude verzwakt tot 25 % → Uu = 5 V Signaal is uitleesbaar door de microcontroller ⃔ ⃕

Voeding ⃔ ⃕ Schema Afvlakcondensatoren Spanningsregelaar 7805 Presentatie 1 > Voeding Voeding DCF77 Antenne PIC µC Display Schema Afvlakcondensatoren Spanningsregelaar 7805 Zenerstabelisatie Spanningsstabbelisatie ⃔ ⃕

Voeding > Schema Diode Afvlakcondensatoren Spanningsregelaar ⃔ ⃕

Afvlakcondensatoren ⃔ ⃕ Laagfrequente afvlakking Richtlijn: Voeding > Afvlakcondensatoren Laagfrequente afvlakking Richtlijn: 2200 µF per opgenomen Ampère Hoogfrequente afvlakking Typische waarde: 100 nF ⃔ ⃕

Voeding > Spanningsregelaar 7805 Maakt van een variabele spanning een stabiele 5 Volt spanning Eigenschappen: TO220 behuizing Stroombegrenzing (1 A) Temperatuurbegrenzing (150 °C) Opgewekt vermogen: ⃔ ⃕

Te grote belasting haalt de zener uit stabelisatie Voeding > Zenerstabbelisatie Te grote belasting haalt de zener uit stabelisatie ⃔ ⃕

Spanningsstabbelisatie Voeding > Spanningsstabbelisatie Stel Uuit stijgt: Ub2 stijgt T2 gaat meer in doorlaat UR1 stijgt Ub1 daalt T1 gaat meer is sper Uuit daalt Stel Uuit daalt: Ub2 daalt T2 gaat meer in sper UR1 daalt Ub1 stijgt T1 gaat meer doorlaat Uuit stijgt UZ Ub2 Ub1 UR5 Stel Iuit wordt te groot: UR5 > 0.7 Volt T3 gaat (meer) in doorlaat UR1 stijgt Ub1 daalt T1 gaat meer sper Uuit daalt ⃔ ⃕

Display ⃔ ⃕ Algemeen Aansluitpinnen HD44780 controller DDRAM CGROM Presentatie 1 > Display Voeding DCF77 Antenne PIC µC Display Algemeen Aansluitpinnen HD44780 controller DDRAM CGROM Instructies ⃔ ⃕

Algemeen ⃔ ⃕ → Onmogelijk om aan te sturen met µC Display > Algemeen PLED (Polymer Light Emitting Diodes) display: Laag verbruik, Helder LCD (Liquid Crystal Display): Groot verbruik (achtergrond verlichting), van ver moeilijk leesbaar 2 Karakters 16 Karakters 32 karakters x 40 pixels = 1280 pixels → Onmogelijk om aan te sturen met µC → Aparte controller voor display ⃔ ⃕

Aansluitpinnen ⃔ ⃕ Deze pinnen dienen voor: Aansluiten voeding Display > Aansluitpinnen Deze pinnen dienen voor: Aansluiten voeding Regelen Helderheid Communicatie met display controller Pinfunctie: 1: Massa (0 V) 2: Power Supply (+ 5 V) 3: Contrast/Brightness 4: Function Select (IR/DR) 5: Read/Write 6: Enable 7-14: Databus 15-16: No connection Aansluitpinnen ⃔ ⃕

HD44780 controller ⃔ ⃕ Deze controller van Hitachi is zeer populair, Display > HD44780 controller Deze controller van Hitachi is zeer populair, een bekende kloon is KS0066 (van SEC). Eigenschappen: Kan displays van verschillende groottes aansturen (1 x 8, 2 x 8, 1 x 16, 2 x 16, …) Kan displays met verschillende karaktergroottes aansturen (5 x 8 of 5 x 10 pixels) Laag verbruik (batterijvoeding) Simpel aan te sturen 4 of 8 bits mode Er zijn verschillende versies verkrijgbaar HD44780A00 (met Japaneese karakters) HD44780A02 (met Europeese karakters bv: ç, è, é, ê, ë, ù, ú, û en ü ) ⃔ ⃕

DDRAM ⃔ ⃕ Display Data Random Acces Memory Houdt bij welke en waar de karakters op het display staan. Elke geheugenplaats: Heeft een eigen nummer (adres) Is 1 byte groot (kan 1 karakter opslaan) Kan op elk moment beschreven worden Kan op elk moment uitgelezen worden Een cursor duidt het actieve adres aan ⃔ ⃕

CGROM ⃔ ⃕ Character Generator Read Only Memory HD44780A02: Europees Display > CGROM Character Generator Read Only Memory HD44780A02: Europees HD44780A00: Japanees Vanuit het DDRAM wordt er naar dit geheugen verwezen Het CGROM vertelt hoe een karakter wordt opgebouwd De tabel volgt zoveel mogelijk de ASCII code bv: (65) 10 = (0100 0001) 2 = “A” De eerste 8 geheugenplaatsen kunnen zelf beschreven worden → CGRAM ⃔ ⃕

Instructies (1) ⃔ ⃕ → Read/Write lijn is met de massa verbonden Display > Instructies (1) Datalijnen (juist) wijzigen → Instructie uitvoeren Er zijn twee soorten instructie’s: Instructies die schrijven naar het display Instructies die uitlezen van het display Uitlezen van het display is overbodig in deze schakeling, → Read/Write lijn is met de massa verbonden → Er kunnen nog 9 verschillende instructie’s worden uitgevoerd Clear Display Return home Entry mode set Display on/off control Cursor or display shift Function set Set CGRAM address Set DDRAM address Write data to CGRAM or DDRAM ⃔ ⃕

Instructies (2) ⃔ ⃕ Clear Display Maakt het volledige display leeg en zet de cursor op positie 0. Return home Zet de cursor op positie 0 en maakt alle schuif acties ongedaan. Entry mode set Stelt in, in welke richting de cursor beweegt na het schrijven van data naar het display en of het schuiven ingeschakeld is. I/D=0: cursor telt af S = 0: schuiven niet toegestaan I/D=1: cursor telt op S = 1: schuiven toegestaan ⃔ ⃕

Instructies (3) ⃔ ⃕ Display on/off control Zet het hele display, cursoraanduiding (lijn) of pinkende cursoraanduiding (blok) aan of uit. D = 0: Display uit C = 0: Cursoraanduiding (lijn) uit B = 0: Cursoraanduiding (blok) uit D = 1: Display aan C = 1: Cursoraanduiding (lijn) aan B = 1: Cursoraanduiding (blok) aan ⃔ ⃕

Instructies (4) ⃔ ⃕ Cursor or display shift Verplaatst de cursor en schuift display naar links of rechts. S/C = 0: Verplaats cursor R/L = 0: Schuif naar links S/C = 1: Schuif display R/L = 1: Schuif naar rechts Function set Stelt in of er met 8 of 4 bits communicatie wordt gewerkt, hoeveel lijnen het display bestaat en uit hoeveel pixels 1 karakter bestaat. DL=0: 4 bits communicatie N = 0: Display met 1 lijn DL=1: 8 bits communicatie N = 1: Display met 2 lijnen F = 0: Karakters opgebouwd uit 5 x 8 pixels F = 1: Karakters opgebouwd uit 5 x 10 pixels ⃔ ⃕

Instructies (5) ⃔ ⃕ Set CGRAM address Display > Instructies (5) Set CGRAM address Stelt het CGRAM adres in, de CGRAM data moet verzonden worden achter deze instructie. ACG: CGRAM adres Set DDRAM address Stelt het DDRAM adres in, de DDRAM data moet verzonden worden achter deze instructie. ADD: DDRAM adres Write data to CGRAM or DDRAM Schrijft data in het GGRAM of DDRAM D7-D0: Te verzenden byte (data) ⃔ ⃕

Display > Protocol De display kan aangestuurd worden in 4 of 8 bits modus. 8 Bits modus: Verstuur instructie/data per byte 4 Bits modus: Verstuur instructie/data in twee halve byte’s Er wordt gebruik gemaakt van de 4 bits modus: → datalijnen 0-3 blijven ongebruikt (pull-up weerstanden in de controller) ⃔ ⃕

Schema > Schema: voeding ⃔ ⃕

Schema: microcontroller Display > Schema: microcontroller ⃔ ⃕

Schema > Schema: extern ⃔ ⃕

Printontwerp > Printontwerp ⃔ ⃕

Extra > Behuizing ⃔ ⃕

Stand van zaken ⃔ ⃕ Reeds af: Schema Printontwerp Prototype Print Extra > Stand van zaken Reeds af: Schema Printontwerp Prototype Print Software (grootste deel) Nog te doen: Print solderen Behuizing maken Software afwerken Dossier verder afwerken ⃔ ⃕

Extra ⃔ ⃕ FM-AM Uitbreiding op zenerstabbelisatie Opstarten display Tekst schrijven naar het display Zelf ontworpen karakters ⃔ ⃕

Extra > FM-AM De meeste storingen (bv: bliksem) hebben invloed op de amplitude van het signaal, FM is storingsongevoeliger AM is te ontvangen met kleine goedkope ontvangers ⃔ ⃕

Uitbreiding op zenerstabbelisatie Extra > Uitbreiding op zenerstabbelisatie ⃔ ⃕

Opstarten display ⃔ ⃕ Voedingsspanning Extra > Opstarten display Voedingsspanning Wacht (controller reset zich zelf) RS lijn laag → er volgens instructies “Function set”: 4 bits modus Herhaal de vorige stap 3 keer “Function set”: 4 bits modus, 2 lijnen, 5 x 8 pixels “Clear Display” “Entry mode set”: cursor optellen, niet schuiven “Display on/off control”: display aan, cursoraanduidigen uit ⃔ ⃕

Tekst schrijven naar het display Extra > Tekst schrijven naar het display “Set DDRAM address” met adres A bv: A = ( 64 )10 = ( 0100 0000 )2 “Write data to CGRAM or DDRAM” met data D bv: D = ( 68 )10 = ( 0100 0100 )2 = “D” “Write data to CGRAM or DDRAM” met data D bv: D = ( 67 )10 = ( 0100 0011 )2 = “C” “Write data to CGRAM or DDRAM” met data D bv: D = ( 70 )10 = ( 0100 0110 )2 = “F” ⃔ ⃕

Zelf ontworpen karakters Extra > Zelf ontworpen karakters Splits op in 5 bytes: Byte 0: 00010101 Byte 1: 00010110 Byte 2: 01111100 Byte 3: 00010110 Byte 4: 00010101 “Set CGRAM address” met adres A bv: A = ( 0 )10 = ( 0000 0000 )2 “Write data to CGRAM or DDRAM” met byte 0 … “Write data to CGRAM or DDRAM” met byte 4 ⃔ ⃕

Blokschema ⃔ ⃕ DCF77: AM-Signaal met tijd en datum informatie Presentatie 2 > Blokschema Voeding DCF77 Antenne PIC µC Display DCF77: AM-Signaal met tijd en datum informatie Antenne: Ontvangt het DCF77 signaal en zet het om naar een bruikbaar signaal PIC µC: Hart van de schakeling, ontvangt, decodeert de informatie, laat de tijd en datum zien op het display Display: Maakt de tijd en datum zichtbaar Voeding: Zorgt ervoor dat elke onderdeel een correcte spanning krijgt ⃔ ⃕

Presentatie 2 > Herhaling: DCF77 100 ms = 0 200 ms = 1 ⃔ ⃕

PIC µC ⃔ ⃕ Algemeen PIC microcontroller 16F648A Blokschema: 16F648A Presentatie 2 > PIC µC Voeding DCF77 Antenne PIC µC Display Algemeen PIC microcontroller 16F648A Blokschema: 16F648A Aansluitpinnen Interrupts TMR0 Oscillator RA5/MCLR/Vpp -pin ⃔ ⃕

µC (microcontroller) ↔ µP (microprocessor) PIC µC > Algemeen Een µC steunt op de volgende basispijlers: Invoer, Geheugen, Verwerking, Uitvoer. Zelfde basispijlers dan bij een PC µC (microcontroller) ↔ µP (microprocessor) Invoer, geheugen, verwerking en uitvoer in één IC. Enkel verwerking (= processor) in één IC. Weinig (tot geen) extra randcomponenten nodig. Geheugenchips en invoer-, uitvoer schakelingen zijn nog nodig. ⃔ ⃕

PIC microcontroller ⃔ ⃕ Gebruikte type µC is een PIC µC. PIC staat voor: Programmable Interface Controller, Programmable Intelligent Computer, Peripheral Interface Controller. PIC µC’s: Zijn opgebouwd volgens de Harvard-architectuur. Gescheiden bussen en adresruimtes voor data en instructies. → Snellere processors dan “Von Neumann”-processors Bevaten een RISC (Reduced Instruction Set Computer) processor. → Kleine instructieset (35 intructies) ⃔ ⃕

16F648A ⃔ ⃕ Het gebruikte type µC is de 16F648A. PIC µC > 16F648A Het gebruikte type µC is de 16F648A. Programmageheugen is 4 kB groot, 16F628A heeft 2 kB. Belangrijkste eigenschappen: Isink = 25 mA, Isource = 20 mA, In-circuit serial programming (ISCP) ondersteuning, Hardware stack van 8 adressen diep, Twee poorten (A & B), elk 8 bits breed → 16 inputs/outputs, Interne oscillator van 4 MHz (+/- 1 %) en 37 kHz, TMR0 8-bit timer/counter met 8-bit programmeerbare prescaler, 3,0 Volt < Uvoeding < 5,5 Volt. …  ⃔ ⃕

PIC µC > Blokschema 16F648A ⃔ ⃕

PIC µC > Aansluitpinnen Poort A Voeding Poort B ⃔ ⃕

Interrupts ⃔ ⃕ Interrupt = Onderbreking PIC µC > Start Hoofdprog. Instructie 1 Instructie 2 … Instructie x Bij Interrupt ISR Normaal programma verloop Programma verloop met interrupt ⃔ ⃕

TMR0 ⃔ ⃕ Prescaler (= voorpulsteller) PIC µC > TMR0 Prescaler (= voorpulsteller) Deelt de inkomende pulsen door 2, 4, 8, … Timer 0 8-bits breed register, overlopen van 255 naar 0 geeft een interrupt Instructie klok = fosc / 4 TMR0 Prescaler 1 : 256 128 64 32 16 8 4 2 PS2, PS1, PS0 RA4/T0CKI/CMP2 T0CS 1 T0SE TMR0 Source Edge select 0: Reageer op pos. flank 1: Regaeer op neg. flank TMR0 Clock Source Select 0: Instruction Cycle clock 1: RA4/T0CKI/CMP2 pin ⃔ ⃕

Oscillator RA5/MCLR/Vpp -pin ⃔ ⃕ PIC µC > Oscillator Wekt een signaal met vaste frequentie op, → Deze frequentie bepaalt de “snelheid” van de µC → Kristal in een Pierce oscillator schakeling RA5/MCLR/Vpp -pin Deze pin kan men gebruiken als: Digitale ingang Reset ingang → 0 Volt: µC in reset → 5 Volt: µC in run VRA5 = Vpp = 13 V → Programmeermodus → RB6 = Program-clock → RB7 = Program-data ⃔ ⃕

Presentatie 2 > Software Algemeen Principe Blokschema ⃔ ⃕

Lagere programmeertaal Hogere programmeertaal Software > Algemeen Lagere programmeertaal Hogere programmeertaal Mens ↔ Machine bestand.jal bestand.asm bestand.hex vb: LED_rood = off vb: BCF PORTB,2 vb: 020000040000FA ⃔ ⃕

Klokdisp = DCFontvangen Software > Principe Ontvangen pariteit juist → DCFcontrole = DCFontvangen DCFontvangen = DCFcontrole → Klokdisp = DCFontvangen Echte tijd DCFontvangen DCFcontrole KlokDisp Actie 17:04:01 00:00 Geen 17:05:01 17:05 00:01 DCFcontrole = 17:05 17:06:01 17:06 00:02 DCFcontrole = 17:06 Klokdisp = DCFontvangen 17:07:01 17:07 DCFcontrole = 17:07 17:08:01 14:45 17:08 17:09:01 17:09 DCFcontrole = 17:09 ⃔ ⃕

Blokschema ⃔ ⃕ Software > Start Variabelen declareren Display instellen + zelf ontworpen tekens doorsturen Timer 0 module instellen Welkomstteksten tonen Antenne opgestart? Startbit? DCF77 signaal decoderen en foutencontrole Displaytekst vernieuwen Nee Ja ISR: Verhoog de klok met 1 seconde ⃔ ⃕

Var. declareren/Disp. instellen Blokschema > Var. declareren/Disp. instellen Start ;============================================ ;Variabelen declareren var bit DCF_IN is pin_a2 pin_a2_direction = input var dword INTCNTR1 INTCNTR1 = 0 … var word INTCNTR2 INTCNTR2 = 0 var byte i var byte sec_disp var byte sec_teller sec_teller = 0 var byte min_dcf min_dcf = 0 var byte uur_dcf uur_dcf = 0 var bit DCF_bit[60] const byte msg1[16] = {" ", 0 ," ","D","C","F","7","7", "-","K","l","o","k"," ", 0 ," "} ;============================================ ;Display intstellingen ;============================================  hd44780_clear hd44780_define(0,14,21,21,23,17,17,14,0) -- klokje hd44780_define(1,0,4,21,14,4,4,4,0) -- antenne hd44780_define(2,0,0,14,14,14,0,0,0) -- puntje hd44780_define(3,16,24,24,24,24,24,24,16) -- links2 a hd44780_define(4,1,3,3,3,3,3,3,1) -- rechts2 b hd44780_define(5,31,31,0,0,0,0,0,0) -- boven c hd44780_define(6,31,31,0,0,0,0,31,31) -- boven_onder d hd44780_define(7,0,0,0,0,0,0,31,31) -- onder e ⃔ ⃕

TMR0/Start-teksten/Ant. Opstarten Blokschema > TMR0/Start-teksten/Ant. Opstarten ;============================================================== ;Start-teksten ;msg1 & msg2 hd44780_line1 i = 0 for 16 loop hd44780 = msg1[i] i = i + 1 end loop   hd44780_line2 hd44780 = msg2[i] delay_100ms( 10 ) … ;============================================;TMR0 intstellingen ;============================================  GIE = on ;global interrupts enabled T0IE = on ;TMR0 interrupts enabled T0CS = off ;Internal instruction cycle clock (CLKOUT) PSA = off ;Prescaler is assigned to the Timer0 module PS2 = off ;000 => prescaler = 1:2 PS1 = off ;9765,625 interrupts/sec PS0 = off ;=> 78125 interrupts/ 8 Seconds T0IF = off ;TMR0 flag bit ;=======================================================================;Antenne laten opstarten ;=======================================================================  while DCF_IN == on loop end loop ;antenne is opgestart ! ⃔ ⃕

Startbit zoeken ⃔ ⃕ Neem time_off op time_off = 1000 ms → Startbit Blokschema > Startbit zoeken while START_BIT_GEVONDEN == off loop   time_off = 0 while DCF_IN == off loop delay_1ms(10) time_off = time_off + 1 end loop if i == 0 then ;maak valse starbit aan i = 1 START_BIT_GEVONDEN = on geen_signaal = on end if i = i - 1 hd44780_position(69) format_byte_dec(hd44780,i,2,0) hd44780 = "/" hd44780 = "6" hd44780 = "0" while DCF_IN == on loop end loop if time_off >= 100 then T0IE = off ;TMR0 disabled T0IE = on ;TMR0 enabled sec_teller = 0 Neem time_off op ;============================================;Startbit zoeken ;============================================  hd44780_clear hd44780_line1 i = 0 for 16 loop ;”Starbit zoeken !” hd44780 = msg7[i] i = i + 1 end loop   while DCF_IN == off loop end loop while DCF_IN == on loop end loop ;dcf_in wordt laag ! START_BIT_GEVONDEN = off i = 60 hd44780_position(69) hd44780 = "6" hd44780 = "0" hd44780 = "/" hd44780 = "6" hd44780 = "0" ;60/60  time_off = 1000 ms → Startbit ⃔ ⃕

Hoofdlus ⃔ ⃕ Status DCF-bit ? Pariteit goed → waardes wegschrijven if sec_disp == 0 & sec_0_eenmaal == on then min_dcf2 = min_dcf2 + 1 if min_dcf2 == 60 then min_dcf2 = 0 uur_dcf2 = uur_dcf2 + 1 if uur_dcf2 == 24 then uur_dcf2 = 0 end if sec_0_eenmaal = off if sec_teller == 1 then sec_0_eenmaal = on if pos_flank == on & par_min_error == off & par_uur_error == off & par_dat_error == off & dcf_frame_error == off then sec_disp = 1 pos_flank = off INTCNTR2 = 0 INTCNTR1 = 0 if par_min_error == off & par_uur_error == off & par_dat_error == off & dcf_frame_error == off & eerste_minuut == 0 then min_disp = min_dcf uur_disp = uur_dcf dag_disp = dag_dcf dag_week_disp = dag_week_dcf maand_disp = maand_dcf jaar_disp = jaar_dcf initialiseren = off if geen_signaal == off & copy_geen_signaal == on then initialiseren = on   copy_geen_signaal = geen_signaal refresh_disp end loop forever loop if startbit == on & pos_flank == on then sec_teller = 0 end if if neg_flank == on then geen_signaal = off startbit = off if 585 < aan_tijd & aan_tijd < 1367 then bit_dcf = off elsif 1562 < aan_tijd & aan_tijd < 2343 then bit_dcf = on elsif 2342 <= aan_tijd then dcf_frame_error = on decode_dcf neg_flank = off if 9277 < uit_tijd & uit_tijd <= 13671 then startbit = on if 19531 <= aan_tijd then geen_signaal = on if 65400 <= aan_tijd then aan_tijd = 65400 if 65400 <= uit_tijd then uit_tijd = 65400 if sec_teller == 58 then eerste_minuut = 0 if uur_disp == 0 & min_disp == 0 & sec_disp == 2 then initialiseren = on Status DCF-bit ? Pariteit goed → waardes wegschrijven ⃔ ⃕

ISR ⃔ ⃕ 1 sec. Timer aan_tijd/ uit_tijd timer DCF_IN_copy1 = DCF_IN   if DCF_IN_copy1 == on & DCF_IN_copy2 == off then ; positieve flank if aan_tijd > 488 then ; +/- 0,05 sec, tegen "dender" sec_teller = sec_teller + 1 end if pos_flank = on   aan_tijd_enable = 1 uit_tijd_enable = 0 aan_tijd = 0 elsif DCF_IN_copy1 == off & DCF_IN_copy2 == on then ;negatieve flank   neg_flank = on   aan_tijd_enable = 0 uit_tijd_enable = 1 uit_tijd = 0 DCF_IN_copy2 = DCF_IN_copy1 if aan_tijd_enable == 1 & DCF_IN_copy1 == on then aan_tijd = aan_tijd + 1 if uit_tijd_enable == 1 & DCF_IN_copy1 == off then uit_tijd = uit_tijd + 1 LED = DCF_IN T0IF = off ;TMR0 flag bit end procedure procedure isr is ; elke 102.4 µs pragma interrupt   INTCNTR1 = INTCNTR1 + 1 INTCNTR2 = INTCNTR2 + 1 ani_counter = ani_counter + 1 if INTCNTR1 == 78124 then ;elke 8 sec (100 % juist) INTCNTR2 = 0 INTCNTR1 = 0 disp_groot = ! disp_groot end if If INTCNTR2 == 9765 then ;elke 0,999936 sec (64 µs vertraagt) sec_disp = sec_disp + 1 if sec_disp == 60 then sec_disp = 0 min_disp = min_disp + 1 if min_disp == 60 then min_disp = 0 uur_disp = uur_disp + 1 if uur_disp == 24 then uur_disp = 0 end if  1 sec. Timer aan_tijd/ uit_tijd timer ⃔ ⃕

Decode_dcf ⃔ ⃕ ;==MINUTEN======================================= if sec_teller == 21 & bit_dcf == on then ;waarde 1 bij de minuten min_dcf = min_dcf + 1 P1 = ! P1 elsif sec_teller == 22 & bit_dcf == on then ;waarde 2 bij de minuten min_dcf = min_dcf + 2 elsif sec_teller == 23 & bit_dcf == on then ;waarde 4 bij de minuten min_dcf = min_dcf + 4 elsif sec_te... ... elsif sec_teller == 27 & bit_dcf == on then ;waarde 40 bij de minuten min_dcf = min_dcf + 40 elsif sec_teller == 28 then ;pariteit bij de minuten if P1 != bit_dcf | min_dcf >= 60 then par_min_error = on ;foute pariteit else ;goede pariteit if min_dcf == min_dcf2 then par_min_error = off else par_min_error = on end if min_dcf2 = min_dcf end procedure procedure decode_dcf is ;==BIT 20======================================== if sec_teller == 20 & bit_dcf == off then ;bit 20 moet 1 zijn par_min_error = on par_uur_error = on par_dat_error = on dcf_frame_error = on elsif sec_teller == 20 & bit_dcf == on then dcf_frame_error = off min_dcf = 0 uur_dcf = 0 dag_dcf = 0 dag_week_dcf = 0 maand_dcf = 0 jaar_dcf = 0 P1 = off P2 = off P3 = off end if ⃔ ⃕

Refresh_disp (1) ⃔ ⃕ Maa./Din./Woe./… 23:59:14 23-06-08 if geen_signaal == on then hd44780_line2 i = 0 for 16 loop hd44780 = msg9[i] i = i + 1 end loop elsif initialiseren == on then hd44780 = msg8[i] else hd44780 = " " if dag_week_disp == 1 then hd44780 = "M" hd44780 = "a" elsif dag_week_disp == 2 then hd44780 = "D" hd44780 = "i" hd44780 = "n" ... elsif dag_week_disp == 7 then hd44780 = "Z" hd44780 = "o" end if   hd44780 = "." format_byte_dec(hd44780,dag_disp,2,0) hd44780 = "-" format_byte_dec(hd44780,maand_disp,2,0) format_byte_dec(hd44780,jaar_disp,2,0) procedure refresh_disp is if disp_groot == on then if aantal_schuif == 20 then ani_counter = 0 end if if ani_counter >= 160 then hd44780_shift_left( 1 ) aantal_schuif = aantal_schuif + 1 else if aantal_schuif == 0 then hd44780_shift_right( 1 ) aantal_schuif = aantal_schuif - 1 hd44780_line1   for 4 loop hd44780 = " " end loop format_byte_dec(hd44780,uur_disp,2,0) hd44780 = ":" format_byte_dec(hd44780,min_disp,2,0) format_byte_dec(hd44780,sec_disp,2,0) Maa./Din./Woe./… 23:59:14 23-06-08 ⃔ ⃕

Refresh_disp (2) ⃔ ⃕ ... eenh_uur = uur_disp % 10 tien_uur = uur_disp / 10   eenh_min = min_disp % 10 tien_min = min_disp / 10 hd44780_line3 bigchar_line1(tien_uur) bigchar_line1(eenh_uur) hd44780 = segp bigchar_line1(tien_min) bigchar_line1(eenh_min) for 3 loop hd44780 = " " end loop hd44780_line4 bigchar_line2(tien_uur) bigchar_line2(eenh_uur) bigchar_line2(tien_min) bigchar_line2(eenh_min) format_byte_dec(hd44780,sec_disp,2,0) end procedure procedure bigchar_line1(byte in char) is if char == 0 then hd44780 = segb hd44780 = segc hd44780 = sega elsif char == 1 then hd44780 = " " elsif char == 2 then hd44780 = segd ... elsif char == 9 then end if end procedure ⃔ ⃕

Galvanische scheiding Software > Programmeertoestel USB ► RS232 USB RS232 Galva-wisp Galvanische scheiding DCF77-klok 5 Bestand.hex & Bumblebee.exe ⃔ ⃕

Extra ⃔ ⃕ Codeformaten Film, na synchronisatie Code Bumblebee

Bedankt voor de aandacht Naar hoofdmenu Voorstelling beëindigen ⃔ ⃕

Codeformaten ⃔ ⃕ Byte-oriented file register operations Vb: Extra > Codeformaten Byte-oriented file register operations Vb: CLRF, INCF, MOVWF, … Bit-oriented file register operations Vb: BCF, BTFSC, … Literal and control operations General instructions Vb: ADDLW, MOVLW, … CALL en GOTO instructies Vb: CALL & GOTO ⃔ ⃕