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

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

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

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

Geïntegreerde Proef:

DCF77-klok met PIC microcontroller

Van Hoylandt Roel2007 - 2008

6EE - 4

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

Hoofdmenu

Voorstelling beëindigen

Inhoud Presentatie 1:OmschrijvingMotivatieBlokschema

DCF77OntvangerVoedingDisplay

Schema en printontwerpBehuizing

Inhoud Presentatie 2:

Stand van zakenExtra

BlokschemaHerhaling: DCF77PIC µC

SoftwareExtra

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

OmschrijvingPresentatie 1 >

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

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

MotivatiePresentatie 1 >

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

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

BlokschemaPresentatie 1 >

Voeding

PIC µCAntenne

DCF77

Display

Antenne: Ontvangt het DCF77 signaal en zet het om naar een bruikbaar signaal

DCF77: AM-Signaal met tijd en datum informatie

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

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

DCF77Presentatie 1 >

Voeding

PIC µCAntenne

DCF77

Display

AlgemeenInformatie in het signaalBitstructuur

AMProtocolPariteit

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

AlgemeenDCF77 >

Mainflingen

Deutschland

C Kenteken lange golf

Frankfurt (op 25 km van Mainflingen)

77 Freq. uitgezonden signaal (77,5 kHz)

Signaal is zo goed als constant te ontvangen (99.87 % van de tijd)

Als tijdbasis worden er 3 atoomklokken gebruikt

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

Informatie in het signaalDCF77 >

Reserve/hoofd antenne in gebruik

Zomertijd/wintertijd

Minuten (0-59)

Uren (0-23)

Dag van de maand (1-31)

Dag van de week (1-7)

Maand (1-12)

Jaar (bv: 2008)

Meteotime (Licentie verplicht)

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

BitstructuurDCF77 >

Elke seconde wordt er 1 bit uitgezonden, behalve op seconde 59 → 59 bits per minuut

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

AMDCF77 >

Het DCF77-signaal wordt uitgezonden als een AM-signaal

Freq. signaal = constant

Amplitude signaal afhankelijk van inkomend signaal

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

ProtocolDCF77 >

Gemoduleerd tot 25% gedurende:

100 ms: ontvangen bit is een 0

200 ms: ontvangen bit is een 1

Willekeurige moment Minuutovergang

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

PariteitDCF77 >

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

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

OntvangerPresentatie 1 >

Voeding

PIC µCAntenne

DCF77

Display

OntvangstmoduleOpen collector uitgangenPrincipe werking

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

OntvangstmoduleOntvanger >

1. Massa

2. Voedingsspanning

3. DCF77 uitgang (open collector)

4. Geïnverteerde DCF77 uitgang (open collector)

Uin = 1,2 - 15 V DC

Iin gebruik = 3 mA

Iuit max = 1 mA

Uuit max = 30 V

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

Open collector uitgangenOntvanger >

“H”0 V

“L”5 V

→ 10 kOhm → Imax = 0,5 mA

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

Principe werkingOntvanger >

Amplitude verzwakt tot 25 % → Uu = 5 V

Signaal is uitleesbaar door de microcontroller

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

VoedingPresentatie 1 >

Voeding

PIC µCAntenne

DCF77

Display

SchemaAfvlakcondensatorenSpanningsregelaar 7805

ZenerstabelisatieSpanningsstabbelisatie

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

SchemaVoeding >

Diode

Afvlakcondensatoren

Spanningsregelaar

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

AfvlakcondensatorenVoeding >

Laagfrequente afvlakking

Richtlijn:

2200 µF per opgenomen Ampère

Hoogfrequente afvlakking

Typische waarde: 100 nF

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

Spanningsregelaar 7805 Voeding >

Maakt van een variabele spanning een stabiele 5 Volt spanning

Eigenschappen:

TO220 behuizing

Stroombegrenzing (1 A)

Temperatuurbegrenzing (150 °C)

Opgewekt vermogen:

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

ZenerstabbelisatieVoeding >

Te grote belasting haalt de zener uit stabelisatie

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

SpanningsstabbelisatieVoeding >

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

Stel Iuit wordt te groot:

UR5 > 0.7 Volt

T3 gaat (meer) in doorlaat

UR1 stijgt

Ub1 daalt

T1 gaat meer sper

Uuit daalt

D1

R1

R2

T2

T1

Q3

R5

R4

R3

In Out

GND

UZ

Ub2

Ub1

UR5

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

DisplayPresentatie 1 >

Voeding

PIC µCAntenne

DCF77

Display

AlgemeenAansluitpinnenHD44780 controller

DDRAMCGROMInstructies

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

AlgemeenDisplay >

16 Karakters

2 Karakters

PLED (Polymer Light Emitting Diodes) display: Laag verbruik, Helder

LCD (Liquid Crystal Display): Groot verbruik (achtergrond verlichting), van ver moeilijk leesbaar

32 karakters x 40 pixels = 1280 pixels

→ Onmogelijk om aan te sturen met µC

→ Aparte controller voor display

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

Aansluitpinnen Display >

Deze pinnen dienen voor:

Aansluiten voeding

Regelen Helderheid

Communicatie met display controller

AansluitpinnenPinfunctie:

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

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

HD44780 controller Display >

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

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

DDRAM Display >

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

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

CGROM Display >

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

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

Instructies (1)Display >

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

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

Instructies (2)Display >

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

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

Instructies (3)Display >

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

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

Instructies (4)Display >

Cursor or display shift

Verplaatst de cursor en schuift display naar links of rechts.

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

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.

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

Instructies (5)Display >

Set CGRAM address

Stelt het CGRAM adres in, de CGRAM data moet verzonden worden achter deze instructie.

ADD: DDRAM adres

ACG: CGRAM adres

Set DDRAM address

Stelt het DDRAM adres in, de DDRAM data moet verzonden worden achter deze instructie.

D7-D0: Te verzenden byte (data)

Write data to CGRAM or DDRAM

Schrijft data in het GGRAM of DDRAM

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

ProtocolDisplay >

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)

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

Schema: voedingSchema >

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

Schema: microcontrollerDisplay >

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

Schema: externSchema >

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

PrintontwerpPrintontwerp >

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

BehuizingExtra >

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

Stand van zakenExtra >

Reeds af:

Schema

Printontwerp

Prototype

Print

Software (grootste deel)

Nog te doen:

Print solderen

Behuizing maken

Software afwerken

Dossier verder afwerken

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

ExtraExtra >

Opstarten displayTekst schrijven naar het displayZelf ontworpen karakters

FM-AMUitbreiding op zenerstabbelisatie

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

FM-AMExtra >

De meeste storingen (bv: bliksem) hebben invloed op de amplitude van het signaal,

FM is storingsongevoeliger

AM is te ontvangen met kleine goedkope ontvangers

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

Uitbreiding op zenerstabbelisatieExtra >

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

Opstarten displayExtra >

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

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

Tekst schrijven naar het displayExtra >

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

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

Zelf ontworpen karaktersExtra >

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

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

BlokschemaPresentatie 2 >

Voeding

PIC µCAntenne

DCF77

Display

Antenne: Ontvangt het DCF77 signaal en zet het om naar een bruikbaar signaal

DCF77: AM-Signaal met tijd en datum informatie

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

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

Herhaling: DCF77Presentatie 2 >

100 ms = 0

200 ms = 1

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

PIC µCPresentatie 2 >

Voeding

PIC µCAntenne

DCF77

Display

AlgemeenPIC microcontroller16F648A

Blokschema: 16F648AAansluitpinnenInterrupts

TMR0Oscillator RA5/MCLR/Vpp -pin

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

AlgemeenPIC µC >

Een µC steunt op de volgende basispijlers:

Invoer,

Geheugen,

Verwerking,

Uitvoer.

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

Zelfde basispijlers dan bij een PC

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

PIC microcontrollerPIC µC >

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)

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

16F648APIC µC >

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.

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

Blokschema 16F648APIC µC >

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

AansluitpinnenPIC µC >

Poort APoort BVoeding

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

InterruptsPIC µC >

Interrupt = Onderbreking

Start

Hoofdprog.

Instructie 1Instructie 2…Instructie x

Start

Hoofdprog.

Instructie 1Instructie 2…Instructie x

Bij Interrupt

ISR

Instructie 1Instructie 2…Instructie x

Normaal programma verloop Programma verloop met interrupt

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

TMR0PIC µC >

Instructie klok

= fosc / 4

TMR0

Prescaler

1 :256128643216842

PS2, PS1, PS0

RA4/T0CKI/CMP2

0

T0CS

1T0SE

TMR0 Source Edge select

0: Reageer op pos. flank

1: Regaeer op neg. flankTMR0 Clock Source Select

0: Instruction Cycle clock

1: RA4/T0CKI/CMP2 pin

Prescaler (= voorpulsteller)

Deelt de inkomende pulsen door 2, 4, 8, … Timer 0

8-bits breed register, overlopen van 255 naar 0 geeft een interrupt

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

OscillatorPIC µC >

Wekt een signaal met vaste frequentie op,

→ Deze frequentie bepaalt de “snelheid” van de µC

→ Kristal in een Pierce oscillator schakeling

RA5/MCLR/Vpp -pinDeze 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

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

SoftwarePresentatie 2 >

AlgemeenPrincipe

Blokschema

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

AlgemeenSoftware >

bestand.jal

bestand.asm

bestand.hex

Mens ↔ Machine

Lagere programmeertaal

Hogere programmeertaal

vb: LED_rood = off

vb: BCF PORTB,2

vb: 020000040000FA

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

PrincipeSoftware >

Echte tijd DCFontvangen DCFcontrole KlokDisp Actie

17:04:01 00:00 00:00 00:00 Geen

17:05:01 17:05 00:01 00:01 DCFcontrole = 17:05

17:06:01 17:06 17:06 00:02DCFcontrole = 17:06

Klokdisp = DCFontvangen

17:07:01 17:07 17:07 17:07DCFcontrole = 17:07

Klokdisp = DCFontvangen

17:08:01 14:45 17:08 17:08 Geen

17:09:01 17:09 17:09 17:09DCFcontrole = 17:09

Klokdisp = DCFontvangen

Ontvangen pariteit juist → DCFcontrole = DCFontvangen

DCFontvangen = DCFcontrole → Klokdisp = DCFontvangen

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

BlokschemaSoftware >

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

NeeJa

NeeJa

ISR:

Verhoog de klok met 1 seconde

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

Var. declareren/Disp. instellenBlokschema >

;============================================

;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 = 0var 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

Start

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

TMR0/Start-teksten/Ant. Opstarten Blokschema >

;==============================================================

;Start-teksten

;==============================================================

;msg1 & msg2

hd44780_line1

i = 0

for 16 loop

hd44780 = msg1[i]

i = i + 1

end loop

 

hd44780_line2

i = 0

for 16 loop

hd44780 = msg2[i]

i = i + 1

end loop

delay_100ms( 10 )

;=======================================================================;Antenne laten opstarten

;======================================================================= 

while DCF_IN == on loop

end loop ;antenne is opgestart !

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

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

Startbit zoekenBlokschema >

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

START_BIT_GEVONDEN = on

sec_teller = 0

end if

 

end loop

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

Neem time_off op

time_off = 1000 ms

→ Startbit

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

Hoofdlus

forever loopif startbit == on & pos_flank == on then sec_teller = 0end ifif 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 end if decode_dcf neg_flank = offend ifif 9277 < uit_tijd & uit_tijd <= 13671 then startbit = onend ifif 19531 <= aan_tijd then dcf_frame_error = on geen_signaal = onend ifif 65400 <= aan_tijd then aan_tijd = 65400end ifif 65400 <= uit_tijd then uit_tijd = 65400end ifif sec_teller == 58 then eerste_minuut = 0end ifif uur_disp == 0 & min_disp == 0 & sec_disp == 2 then initialiseren = onend if

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 end if sec_0_eenmaal = offend ifif 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 end if 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 end ifend if if geen_signaal == off & copy_geen_signaal == on then initialiseren = onend if copy_geen_signaal = geen_signaal refresh_disp end loop

Status DCF-bit ?

Pariteit goed → waardes

wegschrijven

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

ISR

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) INTCNTR2 = 0 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 end if end if end if 

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 end if  DCF_IN_copy2 = DCF_IN_copy1 if aan_tijd_enable == 1 & DCF_IN_copy1 == on then aan_tijd = aan_tijd + 1 end if if uit_tijd_enable == 1 & DCF_IN_copy1 == off then uit_tijd = uit_tijd + 1 end if LED = DCF_IN T0IF = off ;TMR0 flag bitend procedure

1 sec. Timer

aan_tijd/ uit_tijd timer

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

Decode_dcf

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 par_min_error = on par_uur_error = on par_dat_error = on 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

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

P1 = ! P1

elsif sec_teller == 23 & bit_dcf == on then

;waarde 4 bij de minuten

min_dcf = min_dcf + 4

P1 = ! P1

elsif sec_te...

...

elsif sec_teller == 27 & bit_dcf == on then

;waarde 40 bij de minuten

min_dcf = min_dcf + 40

P1 = ! P1

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 if

end if

...

end procedure

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

Refresh_disp (1)

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 ani_counter = 0 end if else if aantal_schuif == 0 then ani_counter = 0 end if if ani_counter >= 160 then hd44780_shift_right( 1 ) aantal_schuif = aantal_schuif - 1 ani_counter = 0 end if end if 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) hd44780 = ":" format_byte_dec(hd44780,sec_disp,2,0)  for 4 loop hd44780 = " " end loop 

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_line2 i = 0 for 16 loop hd44780 = msg8[i] i = i + 1 end loop else hd44780_line2 hd44780 = " " if dag_week_disp == 1 then hd44780 = "M" hd44780 = "a" hd44780 = "a" elsif dag_week_disp == 2 then hd44780 = "D" hd44780 = "i" hd44780 = "n"

... elsif dag_week_disp == 7 then hd44780 = "Z" hd44780 = "o" hd44780 = "n" end if  hd44780 = "."  hd44780 = " " format_byte_dec(hd44780,dag_disp,2,0) hd44780 = "-" format_byte_dec(hd44780,maand_disp,2,0) hd44780 = "-" format_byte_dec(hd44780,jaar_disp,2,0) hd44780 = " " hd44780 = " "  end if

...

23:59:14

Maa./Din./Woe./…

23-06-08

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

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) hd44780 = segp bigchar_line2(tien_min) bigchar_line2(eenh_min) hd44780 = " " 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 = " " hd44780 = " " hd44780 = sega elsif char == 2 then hd44780 = " " hd44780 = segd hd44780 = sega ... elsif char == 9 then hd44780 = segb hd44780 = segd hd44780 = sega end ifend procedure

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

ProgrammeertoestelSoftware >

USB RS232►USB

RS232 Galva-wisp

Galvanische scheiding

DCF77-klok

5

Bestand.hex&

Bumblebee.exe

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

ExtraExtra >

Codeformaten

Film, na synchronisatieCode

Bumblebee

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

Bedankt voor de aandacht

Naar hoofdmenu Voorstelling beëindigen

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

CodeformatenExtra >

Byte-oriented file register operations

Bit-oriented file register operations

Literal and control operations

CALL en GOTO instructies

General instructions

Vb: CLRF, INCF, MOVWF, …

Vb: BCF, BTFSC, …

Vb: ADDLW, MOVLW, …

Vb: CALL & GOTO