De presentatie wordt gedownload. Even geduld aub

De presentatie wordt gedownload. Even geduld aub

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

Verwante presentaties


Presentatie over: "Geïntegreerde Proef: DCF77-klok met PIC microcontroller Van Hoylandt Roel 2007 - 2008 6EE - 4."— Transcript van de presentatie:

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

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

3 Omschrijving Presentatie 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

4 Motivatie Presentatie 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

5 Blokschema Presentatie 1 > ⃕⃔ Voeding PIC µC Antenne 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

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

7 Algemeen DCF77 > ⃕⃔ 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

8 Informatie in het signaal DCF77 > ⃕⃔  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)

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

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

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

12 Pariteit DCF77 > ⃕⃔ 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 Presentatie 1 > ⃕⃔ Voeding PIC µC Antenne DCF77 Display Ontvangstmodule Open collector uitgangen Principe werking

14 Ontvangstmodule Ontvanger > ⃕⃔ 1.Massa 2.Voedingsspanning 3.DCF77 uitgang (open collector) 4.Geïnverteerde DCF77 uitgang (open collector) U in = 1, V DC I in gebruik = 3 mA I uit max = 1 mA U uit max = 30 V

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

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

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

18 Schema Voeding > ⃕⃔  Diode  Afvlakcondensatoren  Spanningsregelaar

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

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

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

22 Spanningsstabbelisatie Voeding > ⃕⃔ Stel U uit stijgt:  U b2 stijgt  T 2 gaat meer in doorlaat  U R1 stijgt  U b1 daalt  T 1 gaat meer is sper  U uit daalt Stel U uit daalt:  U b2 daalt  T 2 gaat meer in sper  U R1 daalt  U b1 stijgt  T 1 gaat meer doorlaat  U uit stijgt Stel I uit wordt te groot:  U R5 > 0.7 Volt  T 3 gaat (meer) in doorlaat  U R1 stijgt  U b1 daalt  T 1 gaat meer sper  U uit daalt UZUZ U b2 U b1 U R5

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

24 Algemeen Display > ⃕⃔ 16 Karakters2 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

25 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

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

27 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

28 CGROM Display > ⃕⃔ Character Generator Read Only Memory HD44780A02: EuropeesHD44780A00: 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) 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

30 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 opS = 1: schuiven toegestaan

31 Instructies (3) Display > ⃕⃔ Display on/off control Zet het hele display, cursoraanduiding (lijn) of pinkende cursoraanduiding (blok) aan of uit. D = 0: Display uitC = 0: Cursoraanduiding (lijn) uitB = 0: Cursoraanduiding (blok) uit D = 1: Display aanC = 1: Cursoraanduiding (lijn) aanB = 1: Cursoraanduiding (blok) aan

32 Instructies (4) Display > ⃕⃔ Cursor or display shift Verplaatst de cursor en schuift display naar links of rechts. DL=0:4 bits communicatieN = 0: Display met 1 lijn DL=1: 8 bits communicatieN = 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 cursorR/L = 0: Schuif naar links S/C = 1: Schuif displayR/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.

33 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

34 Protocol Display > ⃕⃔ 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: voeding Schema > ⃕⃔

36 Schema: microcontroller Display > ⃕⃔

37 Schema: extern Schema > ⃕⃔

38 Printontwerp Printontwerp > ⃕⃔

39 Behuizing Extra > ⃕⃔

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

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

42 FM-AM Extra > ⃕⃔ 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 > ⃕⃔

44 Opstarten display Extra > ⃕⃔  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 > ⃕⃔  “Set DDRAM address” met adres A bv: A = ( 64 ) 10 = ( ) 2  “Write data to CGRAM or DDRAM” met data Dbv: D = ( 68 ) 10 = ( ) 2 = “D”  “Write data to CGRAM or DDRAM” met data Dbv: D = ( 67 ) 10 = ( ) 2 = “C”  “Write data to CGRAM or DDRAM” met data Dbv: D = ( 70 ) 10 = ( ) 2 = “F”

46 Zelf ontworpen karakters Extra > ⃕⃔ 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 Presentatie 2 > ⃕⃔ Voeding PIC µC Antenne 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

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

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

50 Algemeen PIC µ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

51 PIC microcontroller PIC µ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)

52 16F648A PIC µC > ⃕⃔ Het gebruikte type µC is de 16F648A. Programmageheugen is 4 kB groot, 16F628A heeft 2 kB. Belangrijkste eigenschappen:  I sink = 25 mA, I source = 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 < U voeding < 5,5 Volt.  …

53 Blokschema 16F648A PIC µC > ⃕⃔

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

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

56 TMR0 PIC µC > ⃕⃔ Instructie klok = f osc / 4 TMR0 Prescaler 1 : PS2, PS1, PS0 RA4/T0CKI/ CMP2 0 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 Prescaler (= voorpulsteller) Deelt de inkomende pulsen door 2, 4, 8, … Timer 0 8-bits breed register, overlopen van 255 naar 0 geeft een interrupt

57 Oscillator PIC µ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 -pin Deze pin kan men gebruiken als:  Digitale ingang  Reset ingang → 0 Volt: µC in reset → 5 Volt: µC in run  V RA5 = V pp = 13 V→ Programmeermodus → RB6 = Program-clock → RB7 = Program-data

58 Software Presentatie 2 > ⃕⃔ Algemeen Principe Blokschema

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

60 Principe Software > ⃕⃔ Echte tijdDCF ontvangen DCF controle Klok Disp Actie 17:04:0100:00 Geen 17:05:0117:0500:01 DCF controle = 17:05 17:06:0117:06 00:02 DCF controle = 17:06 Klok disp = DCF ontvangen 17:07:0117:07 DCF controle = 17:07 Klok disp = DCF ontvangen 17:08:0114:4517:08 Geen 17:09:0117:09 DCF controle = 17:09 Klok disp = DCF ontvangen Ontvangen pariteit juist → DCF controle = DCF ontvangen DCF ontvangen = DCF controle → Klok disp = DCF ontvangen

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 Nee Ja ISR: Verhoog de klok met 1 seconde

62 Var. declareren/Disp. instellen Blokschema > ⃕⃔ ;============================================ ;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) -- links2a hd44780_define(4,1,3,3,3,3,3,3,1) -- rechts2b 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_onderd hd44780_define(7,0,0,0,0,0,0,31,31) -- onder e Start

63 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 ;=> interrupts/ 8 Seconds T0IF = off ;TMR0 flag bit

64 Startbit zoeken Blokschema > ⃕⃔ 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

65 Hoofdlus ⃕⃔ 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 end if decode_dcf neg_flank = off end if if 9277 < uit_tijd & uit_tijd <= then startbit = on end if if <= aan_tijd then dcf_frame_error = on geen_signaal = on end if if <= aan_tijd then aan_tijd = end if if <= uit_tijd then uit_tijd = end if if sec_teller == 58 then eerste_minuut = 0 end if if uur_disp == 0 & min_disp == 0 & sec_disp == 2 then initialiseren = on end 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 sec_0_eenmaal = off end if 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 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 if if geen_signaal == off & copy_geen_signaal == on then initialiseren = on end if copy_geen_signaal = geen_signaal refresh_disp end loop Status DCF-bit ? Pariteit goed → waardes wegschrijven

66 ISR ⃕⃔ 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) 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 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 bit end procedure 1 sec. Timer aan_tijd/ uit_tijd timer

67 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 procedure

68 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 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" 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 = " " end if... 23:59:14 Maa./ Din./ Woe./ …

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) 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 = sega elsif char == 2 then hd44780 = " " hd44780 = segd hd44780 = sega... elsif char == 9 then hd44780 = segb hd44780 = segd hd44780 = sega end if end procedure

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

71 Extra Extra > ⃕⃔ Codeformaten Film, na synchronisatie Code Bumblebee

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

73 Codeformaten Extra > ⃕⃔ 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


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

Verwante presentaties


Ads door Google