De bedoeling van deze klok is dat een tijd kan ingesteld worden en dat die dan afgeteld wordt.
Elke 20min gaat er een ledje uit.
mei 28 2007
De bedoeling van deze klok is dat een tijd kan ingesteld worden en dat die dan afgeteld wordt.
Elke 20min gaat er een ledje uit.
aug 03 2007
Ik heb een tijd geleden besloten een nixie klok te gaan bouwen. Het ontwerp van de klok neemt Robert voor zijn rekening. Bedankt Robert!! De klok zal werken met een AVR daarom heb ik alvast een programmer gebouwd.
Op dit moment heb ik de hoogspanningsvoeding gebouwd voor te testen:
Schema:
(Als de enable hoog is stopt de schakeling.)
De foto’s:
De printlayout:
PDF met componten
PDF zonder componenten
aug 26 2007
Gisteren heb ik de nixies binnengekregen (Bedankt Robert en Pascal!!) en vandaag maar meteen mee aan het experimenteren gegaan:
Gegevens:
De buisvoet:
mrt 25 2008
Omdat de eerste versie niet volledig voldoet moet er een tweede versie gemaakt worden.
Schema:
Foto’s:
Keyboard:
Hoofdprint Ontwerp (Zitten nog fouten in die me niet waren opgevallen voor het etsten 🙁 ).
Hoofdprint zonder componenten:
apr 26 2008
De code is ondertussen ook af:
'**************************************************************** '* Name : Aftelklok * '* Author : Coenen Stijn [Stynus] * '* Notice : Copyright (c) 2008 ElektronicaStynus.be * '* : All Rights Reserved * '* Date : 26/04/2008 * '* Version : 2.8 * '**************************************************************** 'Declaraties: Device 16F877A Config XT_OSC, WDT_OFF, PWRTE_ON, BODEN_OFF, LVP_OFF, PWRTE_ON XTAL 3',2768 MHz ALL_DIGITAL true 'Lcd declaraties Symbol Lengte = 16 Symbol Regels = 2 Declare LCD_DTPIN PORTD.4 Declare LCD_ENPIN PORTD.1 Declare LCD_RSPIN PORTD.0 Declare LCD_INTERFACE 4 Declare LCD_LINES Regels 'Knoppen Symbol Knop1 = PORTE.2 Symbol Knop2 = PORTA.0 Symbol Knop3 = PORTA.4 Symbol Knop4 = PORTC.0 Symbol Knop5 = PORTA.1 Symbol Knop6 = PORTA.5 Symbol Knop7 = PORTC.1 Symbol Knop8 = PORTA.2 Symbol Knop9 = PORTE.0 Symbol Knop0 = PORTA.3 Symbol Knopenter = PORTE.1 Symbol Knopback = PORTC.2 Symbol Back = 10 Symbol Enter = 11 Dim Knop As Byte Dim Uren10 As Byte Dim Uren1 As Byte Dim Min10 As Byte Dim Min1 As Byte 'Algemeen Dim Index As Byte Dim intAan As Bit Dim temp As Byte Dim initbit As Bit 'Leds Symbol rij0 = PORTC.7 Symbol rij1 = PORTC.6 Symbol rij2 = PORTC.5 Symbol rij3 = PORTC.4 Symbol rij4 = PORTD.3 Symbol rij5 = PORTD.2 Symbol ledKolom = PORTB Dim ledTabel[6] As Byte TRISB = 0 'Tijden Dim Uren As Byte Dim Minuten As Byte Dim Seconden As Byte Dim Tijd As DWord Dim LedTijd As Word 'Interupt Symbol T0IE = INTCON.5 'TMR0 Overflow Interrupt Enable Symbol T0IF = INTCON.2 'TMR0 Overflow Interrupt Flag Symbol GIE = INTCON.7 'Global Interrupt Enable Symbol PS0 = OPTION_REG.0 'Prescaler bit-0 Symbol PS1 = OPTION_REG.1 'Prescaler bit-1 Symbol PS2 = OPTION_REG.2 'Prescaler bit-2 Symbol PSA = OPTION_REG.3 'Prescaler Assignment Symbol T0CS = OPTION_REG.5 'Timer0 Clock Source Select Dim klaarBit As Bit '**************************************************************** Init: 'Interupt (Maar nog niet inschakelen) '3276800/4*256*128*25=1sec PSA = 0 'Prescaler op het externe cristal zetten PS0 = 1 'De prescaler op 255x zetten PS1 = 1 PS2 = 1 T0CS = 0 TMR0 = 128 T0IF = 0 T0IE = 0 GIE = 0 'Lcd wissen Cls DelayMS 30 GoSub DispClear 'registers clearen Clear 'Opstartscherm Print At 1, 1, " Elektro-Stynus " Print At 2, 1, "Led-Aftelklok V2" DelayMS 1000 'Tijd instellen GoSub Instellen If initbit = 1 Then initbit = 0 GoTo Init EndIf Uren = Uren10 * 10 Uren = Uren + Uren1 Minuten = Min10 * 10 Minuten = Minuten + Min1 'Tijd per led uitrekenen Tijd = Uren * 60 Tijd = Tijd + Minuten LedTijd = Tijd / 37 GoSub DispClear Print At 1, 1, "Resterende tijd:" T0IE = 1 GIE = 1 'Alle leds aan ledTabel[0] = 255 ledTabel[1] = 255 ledTabel[2] = 255 ledTabel[3] = 255 ledTabel[4] = 255 ledTabel[5] = 255 GoTo Main '**************************************************************** Main: 'Leds berekenen 'Array's invullen If Tijd > (LedTijd * 30) Then '5de rij array plaatsen If Tijd > (LedTijd * 36) Then ledTabel[5] = %00111111 Else If Tijd > (LedTijd * 35) Then ledTabel[5] = %00011111 Else If Tijd > (LedTijd * 34) Then ledTabel[5] = %00001111 Else If Tijd > (LedTijd * 33) Then ledTabel[5] = %00000111 Else If Tijd > (LedTijd * 32) Then ledTabel[5] = %00000011 Else ledTabel[5] = %00000001 EndIf EndIf EndIf EndIf EndIf ledTabel[0] = 255 ledTabel[1] = 255 ledTabel[2] = 255 ledTabel[3] = 255 ledTabel[4] = 255 Else '4de rij array plaatsen If Tijd > (LedTijd * 24) Then If Tijd > (LedTijd * 30) Then ledTabel[4] = %00111111 Else If Tijd > (LedTijd * 29) Then ledTabel[4] = %00011111 Else If Tijd > (LedTijd * 28) Then ledTabel[4] = %00001111 Else If Tijd > (LedTijd * 27) Then ledTabel[4] = %00000111 Else If Tijd > (LedTijd * 26) Then ledTabel[4] = %00000011 Else ledTabel[4] = %00000001 EndIf EndIf EndIf EndIf EndIf ledTabel[0] = 255 ledTabel[1] = 255 ledTabel[2] = 255 ledTabel[3] = 255 ledTabel[5] = 0 Else '3de rij array plaatsen If Tijd > (LedTijd * 18) Then If Tijd > (LedTijd * 24) Then ledTabel[3] = %00111111 Else If Tijd > (LedTijd * 23) Then ledTabel[3] = %00011111 Else If Tijd > (LedTijd * 22) Then ledTabel[3] = %00001111 Else If Tijd > (LedTijd * 21) Then ledTabel[3] = %00000111 Else If Tijd > (LedTijd * 20) Then ledTabel[3] = %00000011 Else ledTabel[3] = %00000001 EndIf EndIf EndIf EndIf EndIf ledTabel[0] = 255 ledTabel[1] = 255 ledTabel[2] = 255 ledTabel[4] = 0 ledTabel[5] = 0 Else '2de rij array plaatsen If Tijd > (LedTijd * 12) Then If Tijd > (LedTijd * 18) Then ledTabel[2] = %00111111 Else If Tijd > (LedTijd * 17) Then ledTabel[2] = %00011111 Else If Tijd > (LedTijd * 16) Then ledTabel[2] = %00001111 Else If Tijd > (LedTijd * 15) Then ledTabel[2] = %00000111 Else If Tijd > (LedTijd * 14) Then ledTabel[2] = %00000011 Else ledTabel[2] = %00000001 EndIf EndIf EndIf EndIf EndIf ledTabel[0] = 255 ledTabel[1] = 255 ledTabel[3] = 0 ledTabel[4] = 0 ledTabel[5] = 0 Else '1ste rij array plaatsen If Tijd > (LedTijd * 6) Then If Tijd > (LedTijd * 12) Then ledTabel[1] = %00111111 Else If Tijd > (LedTijd * 11) Then ledTabel[1] = %00011111 Else If Tijd > (LedTijd * 10) Then ledTabel[1] = %00001111 Else If Tijd > (LedTijd * 9) Then ledTabel[1] = %00000111 Else If Tijd > (LedTijd * 8) Then ledTabel[1] = %00000011 Else ledTabel[1] = %00000001 EndIf EndIf EndIf EndIf EndIf ledTabel[0] = 255 ledTabel[2] = 0 ledTabel[3] = 0 ledTabel[4] = 0 ledTabel[5] = 0 Else '0ste rij array plaatsen If Tijd > (LedTijd * 6) Then ledTabel[0] = %00111111 Else If Tijd > (LedTijd * 5) Then ledTabel[0] = %00011111 Else If Tijd > (LedTijd * 4) Then ledTabel[0] = %00001111 Else If Tijd > (LedTijd * 3) Then ledTabel[0] = %00000111 Else If Tijd > (LedTijd * 2) Then ledTabel[0] = %00000011 Else ledTabel[0] = %00000001 EndIf EndIf EndIf EndIf EndIf ledTabel[1] = 0 ledTabel[2] = 0 ledTabel[3] = 0 ledTabel[4] = 0 ledTabel[5] = 0 EndIf EndIf EndIf EndIf EndIf TRISB = 0 'Leds aansturen Call ledUit 'Display aansturen Print At 2, 4, DEC2 Uren, ":", DEC2 Minuten, ":", DEC2 Seconden If klaarBit = 1 Then GoTo Klaar EndIf If Knopback = 0 Then GoTo cancel EndIf GoTo Main '**************************************************************** Klaar: klaarBit = 0 T0IE = 0 GIE = 0 GoSub DispClear Print At 1, 1, " Klaar! " Print At 2, 1, " (enter = reset) " While 1 = 1 If Knopenter = 0 Then GoTo Init EndIf Wend '**************************************************************** cancel: klaarBit = 0 T0IE = 0 GIE = 0 GoSub DispClear Print At 1, 1, " Druk op Enter om" Print At 2, 1, " te resetten " While 1 = 1 If Knopenter = 0 Then GoTo Init EndIf Wend '**************************************************************** 'Interrupt routine ON_HARDWARE_INTERRUPT GoTo Interupt Interupt: 'Checken of de interrrupt wel van timer0 komt If T0IF = 1 Then T0IF = 0 'Timer overflow flag weer resetten TMR0 = 118 'Normaal 128 maar door afweiking kristal 118 Inc Index '1 sec is afgelopen If Index = 26 Then Index = 0 'Tijd aftellen Dec Seconden 'Als de seconden "op zijn" dan minuut aftellen If Seconden = 255 Then Seconden = 59 Dec Minuten Dec Tijd 'Als de minuten "op zijn" dan uur aftellen If Minuten = 255 Then Minuten = 59 Dec Uren 'Als uren "op" zijn dan klaar If Uren = 255 Then 'Klaar! T0IE = 1 GIE = 1 klaarBit = 1 EndIf EndIf EndIf EndIf EndIf Context Restore ' Restore the registers and exit the interrupt '**************************************************************** subroutines: '************************************************************ 'Tijden instellen Instellen: 'Scherm wissen GoSub DispClear Print At 1, 1, "Tijd: uu:mm" '**************************************************** 'Tientallen van de uren urenInstellenHoog: 'Cursor op positie 6 zetten Print $FE ,128 For Index = 1 To 6 Print $FE, $14 Next Print $FE, $0F GoSub Inlezen 'Terug If Knop = Back Then DelayMS 500 GoTo urenInstellenHoog EndIf 'Enter If Knop = Enter Then GoTo urenInstellenHoog EndIf 'Lcd aansturen Print Dec Knop 'Tijd in variabele zetten Uren10 = Knop * 10 DelayMS 500 '**************************************************** 'Eenheden uren urenInstellenLaag: 'Cursor op positie 7 zetten Print $FE ,128 'cursor naar pos 1,1 For Index = 1 To 7 Print $FE, $14 'Cursor 1 positie naar rechts opschuiven Next Print $FE, $0F GoSub Inlezen 'Terug If Knop = Back Then DelayMS 500 GoTo urenInstellenHoog EndIf 'Enter If Knop = Enter Then GoTo urenInstellenLaag EndIf 'Lcd aansturen Print Dec Knop 'Tijd in variabele zetten Uren1 = Knop DelayMS 500 '**************************************************** 'Tientallen van de Minuten minutenInstellenHoog: 'Cursor op positie 9 zetten Print $FE ,128 For Index = 1 To 9 Print $FE, $14 Next Print $FE, $0F GoSub Inlezen 'Terug If Knop = Back Then DelayMS 500 GoTo urenInstellenLaag EndIf 'Kijken of het aantal niet hoger is dan 6 If Knop > 5 And Knop < 10 Then 'Bij 6 accepteren maar volgende input automatisch 0 maken If Knop = 6 Then Min10 = 6 Min1 = 0 Print "60" GoTo StartenOfTerug Else GoTo minutenInstellenHoog EndIf EndIf 'Enter If Knop = Enter Then GoTo minutenInstellenHoog EndIf 'Lcd aansturen Print Dec Knop 'Tijd in variabele zetten Min10 = Knop DelayMS 500 '**************************************************** 'Eenheden Minuten minutenInstellenLaag: 'Cursor op positie 10 zetten Print $FE ,128 'cursor naar pos 1,1 For Index = 1 To 10 Print $FE, $14 Next Print $FE, $0F GoSub Inlezen 'Terug If Knop = Back Then DelayMS 500 GoTo minutenInstellenHoog EndIf 'Enter If Knop = Enter Then GoTo minutenInstellenLaag EndIf 'Lcd aansturen Print Dec Knop 'Tijd in variabele zetten Min1 = Knop DelayMS 500 '**************************************************** 'Starten of terug? StartenOfTerug: Print $FE, $0C Print At 2, 11, "KLAAR?" DelayMS 500 If Knopback = 0 Then DelayMS 500 GoTo minutenInstellenLaag EndIf 'Enter If Knopenter = 0 Then GoTo Vergrendelen EndIf GoTo StartenOfTerug '**************************************************** Vergrendelen: Print At 1,1, " Tijd Ingesteld " Print At 2,1, " Starten? " DelayMS 500 While 1 = 1 If Knopback = 0 Then initbit = 1 Return EndIf If Knopenter = 0 Then DelayMS 1000 Return EndIf Wend Return '************************************************************ 'Knoppen inlezen Inlezen: While 1 = 1 If Knop0 = 0 Then Knop = 0 Return EndIf If Knop1 = 0 Then Knop = 1 Return EndIf If Knop2 = 0 Then Knop = 2 Return EndIf If Knop3 = 0 Then Knop = 3 Return EndIf If Knop4 = 0 Then Knop = 4 Return EndIf If Knop5 = 0 Then Knop = 5 Return EndIf If Knop6 = 0 Then Knop = 6 Return EndIf If Knop7 = 0 Then Knop = 7 Return EndIf If Knop8 = 0 Then Knop = 8 Return EndIf If Knop9 = 0 Then Knop = 9 Return EndIf If Knopback = 0 Then Knop = 10 Return EndIf If Knopenter = 0 Then Knop = 11 Return EndIf Wend Return '************************************************************ 'cls wil niet werken bij dit lcd dus daarom zo: DispClear: Print At 1, 1, " " Print At 2, 1, " " DelayMS 500 Return '************************************************************ 'Led matrix aansturen ledUit: 'Rij 0 High rij0 ledKolom = ledTabel[0] DelayMS 1 Low rij0 'Rij 1 High rij1 ledKolom = ledTabel[1] DelayMS 1 Low rij1 'Rij 2 High rij2 ledKolom = ledTabel[2] DelayMS 1 Low rij2 'Rij 3 High rij3 ledKolom = ledTabel[3] DelayMS 1 Low rij3 'Rij 0 High rij4 ledKolom = ledTabel[4] DelayMS 1 Low rij4 'Rij 5 High rij5 ledKolom = ledTabel[5] DelayMS 1 Low rij5 'Rij 0 High rij5 ledKolom = ledTabel[5] DelayMS 1 Low rij5 Return '**************************************************************** End
jun 13 2008
Als ontspanning tijdens het leren voor de examens heb ik een binaire klok ontworpen en gemaakt op basis van een PIC16F628A.
Schema hoofdprint:
Schema led matrix:
Pcb lay-out hoofdprint:
Printlay-out als pdf: Link
Foto’s:
De code voor in de pic:
'**************************************************************** '* Binaire klok * '* Auteur : Coenen Stijn [Stynus] * '* Copyright (c) 2008 ElektronicaStynus.be * '* Datum : 12/06/2008 * '* Versie : 1.0 * '**************************************************************** Device 16F628A Config WDT_OFF, PWRTE_ON, MCLRE_OFF, INTRC_OSC_NOCLKOUT, LVP_off ALL_DIGITAL = true '**************************************************************** 'Leds Dim tijduur10 As Byte Dim tijduur1 As Byte Dim tijdmin10 As Byte Dim tijdmin1 As Byte Symbol leds = PORTB Symbol uren10 = PORTA.0 Symbol uren1 = PORTA.1 Symbol minu10 = PORTA.2 Symbol minu1 = PORTA.3 TRISB = %11000000 TRISA = %00010000 'instellen Symbol incMin = PORTB.6 Symbol incUur = PORTB.7 Dim minBit As Bit Dim uurBit As Bit PORTB_PULLUPS = 1 'interrupt Symbol klok50 = PORTA.4 Dim tussenCount As Byte Clear Symbol T0IF = INTCON.2 'Bit die hoog wordt bij overflow Symbol T0IE = INTCON.5 'Timer Overflow Interupt Enable bit Symbol GIE = INTCON.7 'Global interupt enable bit Symbol PSA = OPTION_REG.3 'Prescaler Assignment bit Symbol TOSE = OPTION_REG.4 'Stijgende of dalende flank kiezen. Symbol T0CS = OPTION_REG.5 'selecteren timer ingang TOSE = 0 'stijgende flank T0CS = 1 'RA4 selecteren als timer ingang PSA = 1 'Prescaler uit T0IE = 1 'Interupt opzetten voor timer 0 T0IF = 0 'Timer 0 vlag clearen TMR0 = 206 '206 in register TMR0 gooien zoadat bij '50Hz 1 keer per seconde interupt is GIE = 1 'Interupt opzetten GoTo over_interupt on_hardware_interrupt GoTo Interupt Interupt: T0IF = 0 'Overflow vlag terug afzetten TMR0 = 206 'Terug 205 in het TMR0 reg zetten '(voor 1 interupt per sec bij 50 hz) Inc tussenCount If tussenCount = 60 Then tussenCount = 0 Inc tijdmin1 'minuten eenheden If tijdmin1 = 10 Then tijdmin1 = 0 'Minuten tientallen Inc tijdmin10 If tijdmin10 = 6 Then Inc tijduur1 tijdmin1 = 0 tijdmin10 = 0 'Uren If tijduur1 = 4 And tijduur10 = 2 Then tijduur1 = 0 tijduur10 = 0 EndIf If tijduur1 = 10 Then tijduur1 = 0 Inc tijduur10 EndIf EndIf EndIf EndIf Context Restore over_interupt: 'preset waarde meegeven tijduur10 = 0 tijduur1 = 0 tijdmin10 = 0 tijdmin1 = 0 Hoofdprog: 'leds aansturen 'minuten eenheden High minu1 leds = tijdmin1 DelayMS 1 Low minu1 leds = 0 DelayUS 50 'Minuten tientallen High minu10 leds = tijdmin10 DelayMS 1 Low minu10 leds = 0 DelayUS 50 'Uren eenheden High uren1 leds = tijduur1 DelayMS 1 Low uren1 leds = 0 DelayUS 50 'Uren tientallen High uren10 leds = tijduur10 DelayMS 1 Low uren10 leds = 0 DelayMS 2 GoSub Instellen GoTo Hoofdprog Instellen: 'Minuten instellen If incMin = 0 And minBit = 0 Then Inc tijdmin1 If tijdmin1 = 10 Then tijdmin1 = 0 'Minuten tientallen Inc tijdmin10 If tijdmin10 = 6 Then tijdmin1 = 0 tijdmin10 = 0 EndIf EndIf minBit = 1 Else If incMin = 1 And minBit = 1 Then minBit = 0 EndIf EndIf 'Uren instellen If incUur = 0 And uurBit = 0 Then Inc tijduur1 If tijduur1 = 10 Then tijduur1 = 0 'Minuten tientallen Inc tijduur10 If tijduur10 = 6 Then tijduur1 = 0 tijduur10 = 0 EndIf EndIf uurBit = 1 Else If incUur = 1 And uurBit = 1 Then uurBit = 0 EndIf EndIf Return End
De hex file: link.
mrt 29 2009
Ik heb beslist om niet op Robert te wachten voor de code enzo. Dus heb ik zelf wat ontworpen en gemaakt. De klok werkt nu met een pic16f628a. De tijd wordt bijgehouden door een DS1307 en de temperatuur wordt gemeten door een TC74. Omdat de 16f628a niet genoeg uitgangen heeft heb ik er 4 74HC595 schuifregisters bijgezet, zo kan ik alle nixies en neonlampjes met 3 uitgangen aansturen.
Schema:
Pcb layout:
Foto van de opgebouwde print:
Filmpje van de schakeling in werking:
De code:
Device 16F628A Config INTRC_OSC_NOCLKOUT, WDT_off, PWRTE_off, LVP_off, MCLRE_on ALL_DIGITAL TRUE PORTB_PULLUPS = On 'In en uitgangen 'Nixies en neons Symbol klok = PORTA.1 Symbol ZetVast = PORTA.0 Symbol Data_Pin = PORTA.2 'Temperatuursensor en RTC Symbol SDA = PORTB.4 Symbol SLC = PORTB.3 'Knoppen Symbol KnopR = PORTB.7 : TRISB.7 = 1 Symbol KnopM = PORTB.6 : TRISB.6 = 1 Symbol KnopL = PORTB.5 : TRISB.5 = 1 'Variabelen declareren Dim Teller As Byte Dim Temp1 As Byte Dim Temp2 As Byte Dim BCD_Opt As Byte Dim index As Byte Dim Seconden As Byte Dim Minuten As Byte Dim Uren As Byte Dim Datum As Byte Dim Maand As Byte Dim Jaar As Byte Dim Temperatuur As Byte Dim neon As Byte Symbol Reg_Seconden = $00 Symbol Reg_Minuten = $01 Symbol Reg_Uren = $02 Symbol Reg_Dag = $03 Symbol Reg_Datum = $04 Symbol Reg_Maand = $05 Symbol Reg_Jaar = $06 Symbol Lezen = %11010001 Symbol Schrijven = %11010000 Clear While 1 = 1 Tijd: For index = 0 To 50 I2CIN SDA, SLC, Lezen, Reg_Uren, [Uren] I2CIN SDA, SLC, Lezen, Reg_Minuten, [Minuten] I2CIN SDA, SLC, Lezen, Reg_Seconden, [Seconden] neon = %01111001 SHOut Data_Pin, klok, msbfirst, [neon \ 8] DelayUS 20 SHOut Data_Pin, klok, msbfirst, [Uren \ 8] DelayUS 20 SHOut Data_Pin, klok, msbfirst, [Minuten \ 8] DelayUS 20 SHOut Data_Pin, klok, msbfirst, [Seconden \ 8] High ZetVast DelayUS 20 Low ZetVast If KnopR = 0 Or KnopM = 0 Or KnopL = 0 Then GoSub TijdInst EndIf DelayMS 200 Next Date: For index = 0 To 10 I2CIN SDA, SLC, Lezen, Reg_Jaar, [Jaar] I2CIN SDA, SLC, Lezen, Reg_Maand, [Maand] I2CIN SDA, SLC, Lezen, Reg_Datum, [Datum] neon = %01111010 SHOut Data_Pin, klok, msbfirst, [neon \ 8] DelayUS 20 SHOut Data_Pin, klok, msbfirst, [Datum \ 8] DelayUS 20 SHOut Data_Pin, klok, msbfirst, [Maand \ 8] DelayUS 20 SHOut Data_Pin, klok, msbfirst, [Jaar \ 8] High ZetVast DelayUS 20 Low ZetVast If KnopR = 0 Or KnopM = 0 Or KnopL = 0 Then GoSub DatumInst EndIf DelayMS 200 Next Temp: For index = 0 To 10 I2Cin SDA, SLC,$91,[Temperatuur] Temp1 = Temperatuur / 10 Temp2 = (Temperatuur - (Temp1 * 10)) Temperatuur = Temp2 Temperatuur.7 = Temp1.3 Temperatuur.6 = Temp1.2 Temperatuur.5 = Temp1.1 Temperatuur.4 = Temp1.0 neon = %00100100 SHOut Data_Pin, klok, msbfirst, [neon \ 8] DelayUS 20 SHOut Data_Pin, klok, msbfirst, [$FF \ 8] DelayUS 20 SHOut Data_Pin, klok, msbfirst, [Temperatuur \ 8] DelayUS 20 SHOut Data_Pin, klok, msbfirst, [$FF \ 8] High ZetVast DelayUS 20 Low ZetVast DelayMS 200 Next Wend TijdInst: I2CIN SDA, SLC, Lezen, Reg_Uren, [Uren] I2CIN SDA, SLC, Lezen, Reg_Minuten, [Minuten] I2CIN SDA, SLC, Lezen, Reg_Seconden, [Seconden] neon = %01111001 While 1 = 1 SHOut Data_Pin, klok, msbfirst, [neon \ 8] DelayUS 20 SHOut Data_Pin, klok, msbfirst, [Uren \ 8] DelayUS 20 SHOut Data_Pin, klok, msbfirst, [Minuten \ 8] DelayUS 20 SHOut Data_Pin, klok, msbfirst, [Seconden \ 8] High ZetVast DelayUS 20 Low ZetVast DelayMS 200 Inc Teller If KnopR = 0 Then BCD_Opt = Seconden GoSub bcd_tellen Seconden = BCD_Opt Teller = 0 EndIf If KnopM = 0 Then BCD_Opt = Minuten GoSub bcd_tellen Minuten = BCD_Opt Teller = 0 EndIf If KnopL = 0 Then BCD_Opt = Uren GoSub bcd_uur Uren = BCD_Opt Teller = 0 EndIf DelayMS 250 If Teller = 12 Then Break Wend 'Wegschrijven I2COUT SDA, SLC, Schrijven ,Reg_Seconden, [Seconden] I2COUT SDA, SLC, Schrijven ,Reg_Minuten, [Minuten] I2COUT SDA, SLC, Schrijven ,Reg_Uren, [Uren] Return bcd_tellen: Temp1 = BCD_Opt & %00001111 'Xor Temp2 = BCD_Opt - Temp1 Temp2 = Temp2 >> 4 Inc Temp1 If Temp1 > 9 Then Temp1 = 0 Inc Temp2 If Temp2 > 5 Then Temp2 = 0 EndIf EndIf Temp2 = Temp2 << 4 BCD_Opt = Temp2 + Temp1 Return bcd_uur: Temp1 = BCD_Opt & %00001111 'Laagste bits doorlaten Temp2 = BCD_Opt - Temp1 Temp2 = Temp2 >> 4 Inc Temp1 If Temp1 > 9 Then Temp1 = 0 Inc Temp2 If Temp2 > 5 Then Temp2 = 0 EndIf EndIf Temp2 = Temp2 << 4 BCD_Opt = Temp2 + Temp1 If BCD_Opt > 23 Then BCD_Opt = 0 EndIf Return DatumInst: I2CIN SDA, SLC, Lezen, Reg_Jaar, [Jaar] I2CIN SDA, SLC, Lezen, Reg_Maand, [Maand] I2CIN SDA, SLC, Lezen, Reg_Datum, [Datum] neon = %01111010 While 1 = 1 SHOut Data_Pin, klok, msbfirst, [neon \ 8] DelayUS 20 SHOut Data_Pin, klok, msbfirst, [Datum \ 8] DelayUS 20 SHOut Data_Pin, klok, msbfirst, [Maand \ 8] DelayUS 20 SHOut Data_Pin, klok, msbfirst, [Jaar \ 8] High ZetVast DelayUS 20 Low ZetVast DelayMS 200 Inc Teller If KnopR = 0 Then BCD_Opt = Jaar GoSub bcd_jaar Jaar = BCD_Opt Teller = 0 EndIf If KnopM = 0 Then BCD_Opt = Maand GoSub bcd_Maand Maand = BCD_Opt Teller = 0 EndIf If KnopL = 0 Then BCD_Opt = Datum GoSub bcd_Datum Datum = BCD_Opt Teller = 0 EndIf DelayMS 250 If Teller = 12 Then Break Wend 'Wegschrijven I2COUT SDA, SLC, Schrijven ,Reg_Jaar, [Jaar] I2COUT SDA, SLC, Schrijven ,Reg_Maand, [Maand] I2COUT SDA, SLC, Schrijven ,Reg_Datum, [Datum] Return bcd_jaar: Temp1 = BCD_Opt & %00001111 'Xor Temp2 = BCD_Opt - Temp1 Temp2 = Temp2 >> 4 Inc Temp1 If Temp1 > 9 Then Temp1 = 0 Inc Temp2 If Temp2 > 9 Then Temp2 = 0 EndIf EndIf Temp2 = Temp2 << 4 BCD_Opt = Temp2 + Temp1 Return bcd_Maand: Temp1 = BCD_Opt & %00001111 'Laagste bits doorlaten Temp2 = BCD_Opt - Temp1 Temp2 = Temp2 >> 4 Inc Temp1 If Temp1 > 9 Then Temp1 = 0 Inc Temp2 EndIf Temp2 = Temp2 << 4 BCD_Opt = Temp2 + Temp1 If BCD_Opt = $13 Then BCD_Opt = 1 EndIf If BCD_Opt = 0 Then BCD_Opt = 1 EndIf Return bcd_Datum: Temp1 = BCD_Opt & %00001111 'Laagste bits doorlaten Temp2 = BCD_Opt - Temp1 Temp2 = Temp2 >> 4 Inc Temp1 If Temp1 > 9 Then Temp1 = 0 Inc Temp2 EndIf Temp2 = Temp2 << 4 BCD_Opt = Temp2 + Temp1 If BCD_Opt = $32 Then BCD_Opt = 1 EndIf If BCD_Opt = 0 Then BCD_Opt = 1 EndIf Return End
De hex file: Link.
Nu nog iemand zoeken om de behuizing te frezen uit een blok hout en het project is af.
jan 21 2010
Ik wil een pc automatisch laten opstarten om 0u en een ingestelde tijd later terug laten afsluiten, dit om enkele back-ups van databases binnen te halen in de daluren. De pc is nogal een oude pc dus de bios ondersteund het automatisch opstarten niet. Ook moet er niet elke dag een back-up gemaakt worden maar alleen op de dagen dat ik het even ervoor instel.
Daarom heb ik dit printje gebouwd. Met 1 relais wordt de spanning naar de voeding onderbroken en met het andere wordt de aan/uitknop bediend.
Schema:
Foto’s:
De print:
Het voorfrontje:
Een filmpje van de schakeling in werking: