De presentatie wordt gedownload. Even geduld aub

De presentatie wordt gedownload. Even geduld aub

Geïntegreerde Proef: DCF77-klok met PIC microcontroller

Verwante presentaties


Presentatie over: "Geïntegreerde Proef: DCF77-klok met PIC microcontroller"— Transcript van de presentatie:

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

2 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

3 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

4 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

5 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

6 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

7 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

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

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

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

11 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

12 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 → Even → Juist → Oneven → Fout

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

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

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

16 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

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

18 Voeding > Schema Diode Afvlakcondensatoren Spanningsregelaar

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

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

21 Te grote belasting haalt de zener uit stabelisatie
Voeding > Zenerstabbelisatie Te grote belasting haalt de zener uit stabelisatie

22 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

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

24 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

25 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

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

27 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

28 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 = ( ) 2 = “A” De eerste 8 geheugenplaatsen kunnen zelf beschreven worden → CGRAM

29 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

30 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

31 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

32 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

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

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

35 Schema > Schema: voeding

36 Schema: microcontroller
Display > Schema: microcontroller

37 Schema > Schema: extern

38 Printontwerp > Printontwerp

39 Extra > Behuizing

40 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

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

42 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

43 Uitbreiding op zenerstabbelisatie
Extra > Uitbreiding op zenerstabbelisatie

44 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

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

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

47 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

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

49 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

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

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

52 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. … 

53 PIC µC > Blokschema 16F648A

54 PIC µC > Aansluitpinnen Poort A Voeding Poort B

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

56 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

57 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

58 Presentatie 2 > Software Algemeen Principe Blokschema

59 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: FA

60 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

61 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

62 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

63 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 ;=> interrupts/ 8 Seconds T0IF = off ;TMR0 flag bit ;=======================================================================;Antenne laten opstarten ;=======================================================================  while DCF_IN == on loop end loop ;antenne is opgestart !

64 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

65 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 < 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 <= then startbit = on if <= aan_tijd then geen_signaal = on if <= aan_tijd then aan_tijd = 65400 if <= 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

66 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 µs pragma interrupt INTCNTR1 = INTCNTR1 + 1 INTCNTR2 = INTCNTR2 + 1 ani_counter = ani_counter + 1 if INTCNTR1 == then ;elke 8 sec (100 % juist) INTCNTR2 = 0 INTCNTR1 = 0 disp_groot = ! disp_groot end if If INTCNTR2 == 9765 then ;elke 0, 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

67 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

68 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

69 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

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

71 Extra ⃔ ⃕ Codeformaten Film, na synchronisatie Code Bumblebee

72 Bedankt voor de aandacht
Naar hoofdmenu Voorstelling beëindigen

73 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


Download ppt "Geïntegreerde Proef: DCF77-klok met PIC microcontroller"

Verwante presentaties


Ads door Google