Controle Paneel |
|
|
Site info |
»
»
»
»
» Upload Archief
|
|
Stats |
Totaal online: 11 11 gasten 0 leden: |
|
|
Forum > Digitaal > pcf8563 uitlezen met een pic18f2550 |
2 3 » |
|
Gepost op zaterdag 31 December 2011 12:52:07 |
 |
Sinds een paar maand ben ik bezig om een stoplicht te maken voor mijn dochter die 6 uur op rood, 7 uur op oranje en 7:30 uur op groen moet gaan branden.
Ik kan de schakeltijd wel instellen alleen blijft de tijd stil staan op 01:01:01.
Weet iemand hoe dat kan??
Hier volgt mijn code in picbasic.
Code |
Device 18F2550
@CONFIG_REQ
@__config CONFIG1L, PLLDIV_1_1 & CPUDIV_1_1 & USBDIV_1_1
@__config CONFIG1H, FOSC_HS_1 & FCMEM_OFF_1 & IESO_OFF_1
@__config CONFIG2L, PWRT_ON_2 & BOR_OFF_2 & VREGEN_ON_2
@__config CONFIG2H, WDT_OFF_2 & WDTPS_128_2
@__config CONFIG3H, MCLRE_ON_3 & LPT1OSC_OFF_3 & PBADEN_OFF_3 & CCP2MX_OFF_3
@__config CONFIG4L, STVREN_OFF_4 &
LVP_OFF_4 & ICPRT_OFF_4 & XINST_OFF_4 & DEBUG_OFF_4
@__config CONFIG5L, CP0_OFF_5 & CP1_OFF_5 & CP2_OFF_5
@__config CONFIG5H, CPB_OFF_5 & CPB_OFF_5
@__config CONFIG6L, WRT0_OFF_6 & WRT1_OFF_6 & WRT2_OFF_6
@__config CONFIG6H, WRTC_OFF_6 & WRTB_OFF_6 & WRTD_OFF_6
@__config CONFIG7L, EBTR0_OFF_7 & EBTR1_OFF_7 & EBTR2_OFF_7
@__config CONFIG7H, EBTRB_OFF_7
XTAL = 4
ALL_DIGITAL true
LCD_DTPIN PORTA.0
LCD_RSPIN PORTA.5
LCD_ENPIN PORTA.4
LCD_INTERFACE = 4
LCD_LINES = 2
Symbol KN_Enter = PORTC.0
Symbol KN_Up = PORTC.1
Symbol KN_Down = PORTC.2
TRISC.0 = 1
TRISC.1 = 1
TRISC.2 = 1
Dim Buf_Enter As Byte
Dim Buf_Up As Byte
Dim Buf_Down As Byte
Symbol Led_Red = PORTB.3
Symbol Led_Yellow = PORTB.4
Symbol Led_Green = PORTB.5
TRISB.3 = 0
TRISB.4 = 0
TRISB.5 = 0
Symbol SDA = PORTB.0
Symbol SCL = PORTB.1
Dim Menu As Byte
Dim Mode As Bit
Dim Hour As Byte
Dim Minit As Byte
Dim Second As Byte
Dim KN_Delay As Byte
Dim KN_Rate As Byte
Dim Red_Hour As Byte
Dim Red_Minit As Byte
Dim Yellow_Hour As Byte
Dim Yellow_Minit As Byte
Dim Green_Hour As Byte
Dim Green_Minit As Byte
Dim Off_Hour As Byte
Dim Off_Minit As Byte
Dim Delay_Timer As Byte
Dim TempB1 As Byte
Dim TempB2 As Byte
Dim FormTemp0 As Byte
Dim FormTemp1 As Byte
Dim FormTemp2 As Byte
Dim LA As Byte ; Laatse Actie
Dim NoOn As Bit ; Aan = 0 / Uit = 1
Dim Stat As Byte
; Status 0 = Nog niets geweest , 1 = Rood ,
;2 = Geel , 3 = Groen , 4 = Uit
Dim NoWDT As Bit
DelayMS 500
;Init
Clear
; 76543210
;I2COut SDA,SCL,%10100000,0,[%00000000] ; Reset RTC
TempB1 = ERead 0
If TempB1 <> 127 Then
EWrite 0,[127]
EWrite 1,[128] ; KN_Delay
EWrite 2,[50] ; KN_Rate
EWrite 10,[7] ; Red_Hour
EWrite 11,[0] ; Red_Minit
EWrite 12,[7] ; Yellow_Hour
EWrite 13,[30] ; Yellow_Minit
EWrite 14,[8] ; Green_Hour
EWrite 15,[0] ; Green_Minit
EWrite 16,[9] ; Off_Hour
EWrite 17,[30] ; Off_Minit
EndIf
KN_Delay = ERead 1
KN_Rate = ERead 2
Red_Hour = ERead 10
Red_Minit = ERead 11
Yellow_Hour = ERead 12
Yellow_Minit = ERead 13
Green_Hour = ERead 14
Green_Minit = ERead 15
Off_Hour = ERead 16
Off_Minit = ERead 17
DelayMS 500
Cls
Print At 1,1,"Stoplicht Timer!"
DelayMS 1000
Cls
Led_Red = 1
Led_Yellow = 1
Led_Green = 1
Main_Loop:
If Delay_Timer = 0 Then GoSub Display_Time
Inc Delay_Timer
DelayMS 1
GoSub Knoppen
If NoWDT = 0 Then clrwdt
GoTo Main_Loop
Knoppen:
Button KN_Enter,0,KN_Delay,KN_Rate,Buf_Enter,0,No_Enter
If Menu = 0 Then
Inc NoOn
Else
If Mode = 0 Then
Mode = 1
Else
Mode = 0
EndIf
EndIf
Cls : GoSub Display_Menu
No_Enter:
Button KN_Up,0,KN_Delay,KN_Rate,Buf_Up,0,No_Up
If Mode = 0 Then Inc Menu
If Menu = 14 Then Menu = 0
If Mode = 1 Then
If Menu = 1 And Hour < 23 Then Inc Hour
If Menu = 2 And Minit < 59 Then Inc Minit
If Menu = 3 And Red_Hour < 23 Then Inc Red_Hour
If Menu = 4 And Red_Minit < 59 Then Inc Red_Minit
If Menu = 5 And Yellow_Hour < 23 Then Inc Yellow_Hour
If Menu = 6 And Yellow_Minit < 59 Then Inc Yellow_Minit
If Menu = 7 And Green_Hour < 23 Then Inc Green_Hour
If Menu = 8 And Green_Minit < 59 Then Inc Green_Minit
If Menu = 9 And Off_Hour < 23 Then Inc Off_Hour
If Menu = 10 And Off_Minit < 59 Then Inc Off_Minit
If Menu = 11 Then Inc KN_Delay
If Menu = 12 Then Inc KN_Rate
If Menu = 13 Then NoWDT = 1 : Menu = 0
EndIf
Cls : GoSub Display_Menu
No_Up:
Button KN_Down,0,KN_Delay,KN_Rate,Buf_Down,0,No_Down
If Mode = 0 And Menu > 0 Then Dec Menu
If Menu = 0 Then Cls : GoSub Display_Time
If Mode = 1 Then
If Menu = 1 And Hour > 0 Then Dec Hour
If Menu = 2 And Minit > 0 Then Dec Minit
If Menu = 3 And Red_Hour > 0 Then Dec Red_Hour
If Menu = 4 And Red_Minit > 0 Then Dec Red_Minit
If Menu = 5 And Yellow_Hour > 0 Then Dec Yellow_Hour
If Menu = 6 And Yellow_Minit > 0 Then Dec Yellow_Minit
If Menu = 7 And Green_Hour > 0 Then Dec Green_Hour
If Menu = 8 And Green_Minit > 0 Then Dec Green_Minit
If Menu = 9 And Off_Hour > 0 Then Dec Off_Hour
If Menu = 10 And Off_Minit > 0 Then Dec Off_Minit
If Menu = 11 Then Dec KN_Delay
If Menu = 12 Then Dec KN_Rate
EndIf
Cls : GoSub Display_Menu
No_Down:
Return
Display_Time:
If Menu = 0 Then
I2CIn SDA,SCL,%00000000,2,[FormTemp0]
GoSub Hex2Dec : Second = FormTemp0
I2CIn SDA,SCL,%01000101,3,[FormTemp0]
GoSub Hex2Dec : Minit = FormTemp0
I2CIn SDA,SCL,%00010100,4,[FormTemp0]
GoSub Hex2Dec : Hour = FormTemp0
Print At 1,1, DEC2 Hour,":",DEC2 Minit,":",DEC2 Second
Print At 2,1
If NoWDT = 0 Then
Print "L. actie: "
If LA = 0 Then Print "Niets"
If LA = 1 Then GoSub LCD_Rood ; Print "Rood "
If LA = 2 Then GoSub LCD_Geel ; Print "Geel "
If LA = 3 Then GoSub LCD_Groen ; Print "Groen"
If LA = 4 Then Print "Uit "
Else
Print "Reset!"
EndIf
EndIf
If Hour = Red_Hour And Minit = Red_Minit Then Stat = 1
If Hour = Yellow_Hour And Minit = Yellow_Minit Then Stat = 2
If Hour = Green_Hour And Minit = Green_Minit Then Stat = 3
If Hour = Off_Hour And Minit = Off_Minit Then Stat = 4
If NoOn = 1 Then
High Led_Green : High Led_Yellow : High Led_Red
If Menu = 0 Then Print At 1,14,"OFF"
Else
If Menu = 0 Then Print At 1,14," ON"
If Stat = 1 Then
Low Led_Red : High Led_Yellow : High Led_Green : LA = 1
ElseIf Stat = 2 Then
Low Led_Yellow : High Led_Red : High Led_Green : LA = 2
ElseIf Stat = 3 Then
Low Led_Green : High Led_Yellow : High Led_Red : LA = 3
ElseIf Stat = 4 Then
High Led_Green : High Led_Yellow : High Led_Red : LA = 4
EndIf
EndIf
Return
Hex2Dec:
If FormTemp0 > 15 Then
FormTemp1 = FormTemp0 / 16
FormTemp2 = FormTemp0 // 16 ;FormTemp2 = FormTemp0 - (FormTemp1 * 16)
FormTemp0 = (FormTemp1 * 10) + FormTemp2
EndIf
Return
Dec2Hex:
If FormTemp0 > 9 Then
FormTemp1 = FormTemp0 / 10
FormTemp2 = FormTemp0 // 10 ;FormTemp2 = FormTemp0 - (FormTemp1 * 10)
FormTemp0 = (FormTemp1 * 16) + FormTemp2
EndIf
Return
Display_Menu:
Cls
If Menu = 1 Or Menu = 2 Then Print At 1,1,"Tijd "
If Menu > 2 And Menu < 11 Then Print At 1,1,"Licht "
If Menu = 11 Or Menu = 12 Then Print At 1,1,"Keyb. "
If Menu = 13 Then Print At 1,1,"WDT reset?"
If Menu = 3 Or Menu = 4 Then GoSub LCD_Rood ; Print "Rood "
If Menu = 5 Or Menu = 6 Then GoSub LCD_Geel ; Print "Geel "
If Menu = 7 Or Menu = 8 Then GoSub LCD_Groen ; print "Groen "
If Menu = 9 Or Menu = 10 Then Print "uit "
If Menu = 1 Or Menu = 3 Or Menu = 5 Or Menu = 7 Or Menu = 9 Then Print "Uur?"
If Menu = 2 Or Menu = 4 Or Menu = 6 Or Menu = 8 Or Menu = 10 Then Print "Min.?"
If Menu = 11 Then Print "Delay ?"
If Menu = 12 Then Print "Rate ?"
If Mode = 1 Then
Print At 2,1,"Waarde: "
If Menu = 1 Then
Print DEC2 Hour
FormTemp0 = Hour : GoSub Dec2Hex : I2COut SDA,SCL,%10100000,4,[FormTemp0]
Else If Menu = 2 Then
Print DEC2 Minit
FormTemp0 = Minit : GoSub Dec2Hex : I2COut SDA,SCL,%10100000,3,[FormTemp0]
Else If Menu = 3 Then
Print DEC2 Red_Hour : EWrite 10,[Red_Hour]
Else If Menu = 4 Then
Print DEC2 Red_Minit : EWrite 11,[Red_Minit]
Else If Menu = 5 Then
Print DEC2 Yellow_Hour : EWrite 12,[Yellow_Hour]
Else If Menu = 6 Then
Print DEC2 Yellow_Minit : EWrite 13,[Yellow_Minit]
Else If Menu = 7 Then
Print DEC2 Green_Hour : EWrite 14,[Green_Hour]
Else If Menu = 8 Then
Print DEC2 Green_Minit : EWrite 15,[Green_Minit]
Else If Menu = 9 Then
Print DEC2 Off_Hour : EWrite 16,[Off_Hour]
Else If Menu = 10 Then
Print DEC2 Off_Minit : EWrite 17,[Off_Minit]
Else If Menu = 11 Then
Print DEC2 KN_Delay : EWrite 1,[KN_Delay]
Else If Menu = 12 Then
Print DEC2 KN_Rate : EWrite 2,[KN_Rate]
Else If Menu = 13 Then
Print DEC1 NoWDT
EndIf
Else
If Menu > 0 Then Print At 2,1,"Menu: ",DEC2 Menu
EndIf
Return
LCD_Rood:
Print "Rood "
Return
LCD_Geel:
Print "Geel "
Return
LCD_Groen:
Print "Groen "
Return
End
|
|
|
|
|
Gepost op zaterdag 31 December 2011 13:49:51 |
 |
Welk real time clock ic gebruik je?
EDIT:
Dat stond dus in de titel, overheen gelezen eerst.
Heb je het Control/Status 1 register wel ingesteld? Hierin zit namelijk een start/stop bit. [Bericht gewijzigd door Stynus op Zaterdag 31 December 2011 14:10:32] |
Met vriendelijke groet, Stynus ||| www.elektronicastynus.be |
|
Gepost op zaterdag 31 December 2011 14:25:15 |
 |
hallo,
waar moet ik dat neerzetten? sorry ik heb nog niet veel kennis van picbasic.
gr
|
|
|
Gepost op zaterdag 31 December 2011 15:11:33 |
 |
Waar je je tijd instelt moet je dat erbij zetten. In je code staat geen commentaar dus het is zo nogal moeilijk je gedachtegang te volgen. |
Met vriendelijke groet, Stynus ||| www.elektronicastynus.be |
|
Gepost op zaterdag 31 December 2011 18:11:09 |
 |
hallo,
maar hoe schrijf ik zoiets op want dat vat ik niet.
iets van I2Cout of zoiets?
hoor graag van je.
gr jan |
|
|
Gepost op zaterdag 31 December 2011 23:12:43 |
 |
I2COut SDA,SCL,%10100000,0,[%00000000] |
Met vriendelijke groet, Stynus ||| www.elektronicastynus.be |
|
Gepost op zondag 1 Januari 2012 14:36:39 |
 |
Hallo mensen,
Allereerst gelukkig nieuw jaar!!!
Ik heb even het programma doorgekeken en er zit wel zoiets in:
DelayMS 500
;Init
Clear
; 76543210
;I2COut SDA,SCL,%10100000,0,[%00000000] ; Reset RTC
Alleen moet het volgens mij zo:
DelayMS 500
;Init
Clear
; 76543210
I2COut SDA,SCL,%10100000,0,[%00000000] ; Reset RTC
Klopt dat??
Hoor graag van jullie. |
|
|
Gepost op zondag 1 Januari 2012 22:29:08 |
 |
Hallo,
zonder die ";" bedoelde ik eigenlijk.
Ik zal morgen nog eens verder zoeken in de datasheet van 8563 want het is me tot nu toe nog niet gelukt.
Iemand ideeen? post ze a.u.b.!
Alvast bedankt.
gr Jan |
|
|
Gepost op maandag 2 Januari 2012 19:30:17 |
 |
; zet het in commentaar. Dus dat moet idd weg. |
Met vriendelijke groet, Stynus ||| www.elektronicastynus.be |
|
Gepost op woensdag 4 Januari 2012 12:32:32 |
 |
Hallo,
Kan iemand hier een stukje code van maken, ben namelijk al een paar dagen aan het proberen maar het lukt me niet om een goede tijd op mijn lcd te krijgen.
Geeft nu hele rare waardes aan.
1. Send a START condition and the slave address for write (A2h).
2. Set the address pointer to 2 (VL_seconds) by sending 02h.
3. Send a RESTART condition or STOP followed by START.
4. Send the slave address for read (A3h).
5. Read VL_seconds.
6. Read Minutes.
7. Read Hours.
; 76543210
I2COut SDA,SCL,%00100000,0,[%00100000] ; Reset RTC
I2Cout SDA,%00000010,02h, [%00000010] ; adress pointer
I2Cout SDA,SCL,%00100000,00h,[%00100000] ; herstart rtc
If Menu = 0 Then
I2CIn SDA,SCL,%00000010,02h,[FormTemp0]
GoSub Hex2Dec : Second = FormTemp0
I2CIn SDA,SCL,%00011001,03h,[FormTemp0]
GoSub Hex2Dec : Minit = FormTemp0
I2CIn SDA,SCL,%00100100,04h,[FormTemp0]
GoSub Hex2Dec : Hour = FormTemp0
Dit heb ik er nu in zitten.
Ik hoor graag van jullie..
|
|
|
Gepost op maandag 16 Januari 2012 20:00:08 |
 |
hallo mensen,
ik heb de klok lopend alleen word er vanaf sec.40 tot 59 een 4 bij de tientallen van de uren opgeteld. bv 63:29:40 ipv 23:29:40 hoe kan zoiets?
gr jan |
|
|
Gepost op maandag 16 Januari 2012 20:42:28 |
 |
Je hebt er een lcd aan hangen? Dan kan je op je lcd de hex waarde weergeven. Bekijk even of het daar al mis gaat. Of dat het aan het omzetten ligt. |
Met vriendelijke groet, Stynus ||| www.elektronicastynus.be |
|
Gepost op dinsdag 17 Januari 2012 22:51:44 |
 |
He Stynus,
Ik heb er een lcd aan zitten, verder komt ook alles wel goed op het scherm.
Ik zet de tijd als volgt om:
Display_Time:
If Menu = 0 Then
BusIn %10100011, $02, [Seconden] ;Lees (read) tijd in vanuit de PCF8583
BusIn %10100011, $03, [Minuten]
BusIn %10100011, $04, [Uren]
;Zet de BCD waarden van de seconden, minuten en uren om in decimale waarden
Seconden = ((Seconden >> 4) * 10) + (Seconden & 15)
Minuten = ((Minuten >> 4) * 10) + (Minuten & 15)
Uren = ((Uren >> 4) * 10) + (Uren & 15)
Print At 1,1, DEC2 Uren,":",DEC2 Minuten,":",DEC2 Seconden
Dit heb ik van picbasic.nl volgens mij moet dat ook zo.
hoor graag van je.
vr gr |
|
|
Gepost op woensdag 18 Januari 2012 18:48:34 |
 |
Probeer dit eens (gewoon als test):
Code |
BusIn %10100011, $02, [Seconden] ;Lees (read) tijd in vanuit de PCF8583
BusIn %10100011, $03, [Minuten]
BusIn %10100011, $04, [Uren]
Print At 1,1, HEX2 Uren,":",HEX2 Minuten,":",HEX2 Seconden.
|
Dan controleren of de hex waarde klopt. |
Met vriendelijke groet, Stynus ||| www.elektronicastynus.be |
|
Gepost op dinsdag 24 Januari 2012 23:36:34 |
 |
Hallo Stynus,
Beetje laat maar mijn projectje deed het helemaal niet meer, dit opgelost.
De hex waarde krijg ik ook goed binnen want hij staat op een gegeven moment op : 17:3B:00 dit heb ik ook als start waarde,
daarna staat hij op : 3F:3B:28 en volgens mij komt dit overeen met: 23:59:00 en 23:59:40. Dus volgens mij gaat er met het omzetten wat fout.
Enig idee????
vr gr Jan |
|
|
Gepost op woensdag 25 Januari 2012 18:36:07 |
 |
3F:3B:28 hex is 63:59:40 dec. Dus ik vermoed dat er bij het inlezen al iets fout gaat. Misschien eens een loopje maken dat altijd hetzelfde register inleest en dan met de scoop kijken welke data er door komt. |
Met vriendelijke groet, Stynus ||| www.elektronicastynus.be |
|
Gepost op donderdag 26 Januari 2012 23:25:01 |
 |
Hallo Stynus,
Ik ben weer een poosje bezig geweest maar het lukt me niet om het goed te krijgen.
Hoe kan ik dit het beste doen?
gr jan |
|
|
Gepost op vrijdag 27 Januari 2012 19:15:59 |
 |
Heb je pullup weerstanden op de I?C lijnen zitten? Daar zou het misschien al mis kunnen gaan. |
Met vriendelijke groet, Stynus ||| www.elektronicastynus.be |
|
Gepost op zaterdag 28 Januari 2012 15:08:10 |
 |
ja ik heb er 2 van 4k7 aan zitten.
|
|
|
Gepost op zaterdag 28 Januari 2012 15:12:37 |
 |
Ok, dan zal het daar al niet aan liggen. Probeer eens met Declare I2C_Slow_Bus On in het begin van je code. |
Met vriendelijke groet, Stynus ||| www.elektronicastynus.be |
|
Gepost op dinsdag 7 Februari 2012 23:04:39 |
 |
Hallo Stynus,
Daar ben ik weer, drukke week achter de rug.
Ik heb dit geprobeerd maar veranderde niets heb het omzetten nu zo gedaan: Uren = (((Uren >> 4) & 3)* 10) + (Uren & 15), nu werkt het wel alleen als ik nu wat tijden verander dan word het volgens mij niet in het geheugen weg geschreven. Kun jij nog ff naar m'n code kijken?
gr Jan
Code |
Device 18F2550
CONFIG_START
PLLDIV = 1 ; Divide by 1 (4 MHz oscillator input)
FOSC = XT_XT; XT oscillator, PLL enabled, XT used by USB
PWRT = On ; PWRT enabled
BOR = On ; Brown-out Reset enabled in hardware only (SBOREN is disabled)
BORV = 3 ; Minimum setting
WDT = On ; HW Enabled - SW Disabled
MCLRE = On ; MCLR pin enabled; RE3 input pin disabled
LVP = OFF ; Disabled
PBADEN = OFF ; PORTB<4:0> pins are configured as digital I/O on Reset
CONFIG_END
XTAL = 4
ALL_DIGITAL = TRUE
LCD_DTPIN PORTA.0
LCD_RSPIN PORTA.5
LCD_ENPIN PORTA.4
LCD_INTERFACE = 4
LCD_LINES = 2
Symbol KN_Enter = PORTC.0
Symbol KN_Up = PORTC.1
Symbol KN_Down = PORTC.2
TRISC.0 = 1
TRISC.1 = 1
TRISC.2 = 1
Dim Buf_Enter As Byte
Dim Buf_Up As Byte
Dim Buf_Down As Byte
Symbol Led_Red = PORTB.3
Symbol Led_Yellow = PORTB.4
Symbol Led_Green = PORTB.5
TRISB.3 = 0
TRISB.4 = 0
TRISB.5 = 0
;Poortnamen
Declare SCL_PIN = PORTB.1 ;Serial Clock pin met PORTB.1 verbinden
Declare SDA_PIN = PORTB.0 ;Serial Data pin met PORTB.0 verbinden
Declare I2C_Slow_Bus On
;Variabelen declareren
Dim Minuten As Byte ;Bevat de minuten
Dim Seconden As Byte ;Bevat de seconden
Dim Uren As Byte ;Bevat de uren
Dim Menu As Byte
Dim Mode As Bit
Dim KN_Delay As Byte
Dim KN_Rate As Byte
Dim Red_Uren As Byte
Dim Red_Minuten As Byte
Dim Yellow_Uren As Byte
Dim Yellow_Minuten As Byte
Dim Green_Uren As Byte
Dim Green_Minuten As Byte
Dim Off_Uren As Byte
Dim Off_Minuten As Byte
Dim Delay_Timer As Byte
Dim TempB1 As Byte
Dim TempB2 As Byte
Dim LA As Byte ; Laatse Actie
Dim NoOn As Bit ; Aan = 0 / Uit = 1
Dim Stat As Byte ; Status 0 = Nog niets geweest , 1 = Rood , 2 = Geel , 3 = Groen , 4 = Uit
Dim NoWDT As Bit
DelayMS 500
;Init
Cls ;Wis scherm en zet cursor links bovenaan
BusOut %00000000, $00, [$00] ;Schrijf (write) insteltijd naar de PCF8583
BusOut %10100010, $00, [$00] ;Schrijf (write) insteltijd naar de PCF8583
BusOut %10100010, $01, [$00] ;Schrijf (write) insteltijd naar de PCF8583
BusOut %10100010, $02, [$00] ;Schrijf (write) insteltijd naar de PCF8583
BusOut %10100010, $03, [$05] ;Schrijf (write) insteltijd naar de PCF8583
BusOut %10100010, $04, [$23] ;Schrijf (write) insteltijd naar de PCF8583
TempB1 = ERead 0
If TempB1 <> 127 Then
EWrite 0,[127]
EWrite 1,[1] ; KN_Delay
EWrite 2,[50] ; KN_Rate
EWrite 3,[00] ; time uren
EWrite 4,[00] ; time minuten
EWrite 10,[7] ; Red_Hour
EWrite 11,[0] ; Red_Minit
EWrite 12,[7] ; Yellow_Hour
EWrite 13,[30] ; Yellow_Minit
EWrite 14,[8] ; Green_Hour
EWrite 15,[0] ; Green_Minit
EWrite 16,[9] ; Off_Hour
EWrite 17,[30] ; Off_Minit
EndIf
Hoofdprogramma:
DelayMS 500
Cls
Print At 1,1,"Stoplicht Timer!"
DelayMS 1000
Cls
Uren = ERead 3
Minuten = ERead 4
KN_Delay = ERead 1
KN_Rate = ERead 2
Red_Uren = ERead 10
Red_Minuten = ERead 11
Yellow_Uren = ERead 12
Yellow_Minuten = ERead 13
Green_Uren = ERead 14
Green_Minuten = ERead 15
Off_Uren = ERead 16
Off_Minuten = ERead 17
Led_Red = 1
Led_Yellow = 1
Led_Green = 1
Main_Loop:
If Delay_Timer = 0 Then GoSub Display_Time
Inc Delay_Timer
DelayMS 1
GoSub Knoppen
If NoWDT = 0 Then clrwdt
GoTo Main_Loop
Knoppen:
Button KN_Enter,0,KN_Delay,KN_Rate,Buf_Enter,0,No_Enter
If Menu = 0 Then
Inc NoOn
Else
If Mode = 0 Then
Mode = 1
Else
Mode = 0
EndIf
EndIf
Cls : GoSub Display_Menu
No_Enter:
Button KN_Up,0,KN_Delay,KN_Rate,Buf_Up,0,No_Up
If Mode = 0 Then Inc Menu
If Menu = 14 Then Menu = 0
If Mode = 1 Then
If Menu = 1 And Uren < 23 Then Inc Uren
If Menu = 2 And Minuten < 59 Then Inc Minuten
If Menu = 3 And Red_Uren < 23 Then Inc Red_Uren
If Menu = 4 And Red_Minuten < 59 Then Inc Red_Minuten
If Menu = 5 And Yellow_Uren < 23 Then Inc Yellow_Uren
If Menu = 6 And Yellow_Minuten < 59 Then Inc Yellow_Minuten
If Menu = 7 And Green_Uren < 23 Then Inc Green_Uren
If Menu = 8 And Green_Minuten < 59 Then Inc Green_Minuten
If Menu = 9 And Off_Uren < 23 Then Inc Off_Uren
If Menu = 10 And Off_Minuten < 59 Then Inc Off_Minuten
If Menu = 11 Then Inc KN_Delay
If Menu = 12 Then Inc KN_Rate
If Menu = 13 Then NoWDT = 1 : Menu = 0
EndIf
Cls : GoSub Display_Menu
No_Up:
Button KN_Down,0,KN_Delay,KN_Rate,Buf_Down,0,No_Down
If Mode = 0 And Menu > 0 Then Dec Menu
If Menu = 0 Then Cls : GoSub Display_Time
If Mode = 1 Then
If Menu = 1 And Uren > 0 Then Dec Uren
If Menu = 2 And Minuten > 0 Then Dec Minuten
If Menu = 3 And Red_Uren > 0 Then Dec Red_Uren
If Menu = 4 And Red_Minuten > 0 Then Dec Red_Minuten
If Menu = 5 And Yellow_Uren > 0 Then Dec Yellow_Uren
If Menu = 6 And Yellow_Minuten > 0 Then Dec Yellow_Minuten
If Menu = 7 And Green_Uren > 0 Then Dec Green_Uren
If Menu = 8 And Green_Minuten > 0 Then Dec Green_Minuten
If Menu = 9 And Off_Uren > 0 Then Dec Off_Uren
If Menu = 10 And Off_Minuten > 0 Then Dec Off_Minuten
If Menu = 11 Then Dec KN_Delay
If Menu = 12 Then Dec KN_Rate
EndIf
Cls : GoSub Display_Menu
No_Down:
Return
Display_Time:
If Menu = 0 Then
BusIn %10100011, $02, [Seconden] ;Lees (read) tijd in vanuit de PCF8583
BusIn %10100011, $03, [Minuten]
BusIn %10100011, $04, [Uren]
;Zet de BCD waarden van de seconden, minuten en uren om in decimale waarden
Seconden = ((Seconden >> 4) * 10) + (Seconden & 15)
Minuten = ((Minuten >> 4) * 10) + (Minuten & 15)
Uren = (((Uren >> 4) & 3)* 10) + (Uren & 15)
Print At 1,1, @Uren,":",DEC2 Minuten,":",DEC2 Seconden
Print At 2,1, "L. actie: "
If LA = 0 Then Print "Niets"
If LA = 1 Then GoSub LCD_Rood ; Print "Rood "
If LA = 2 Then GoSub LCD_Geel ; Print "Geel "
If LA = 3 Then GoSub LCD_Groen ; Print "Groen"
If LA = 4 Then Print "Uit "
EndIf
If Uren = Red_Uren And Minuten = Red_Minuten Then Stat = 1
If Uren = Yellow_Uren And Minuten = Yellow_Minuten Then Stat = 2
If Uren = Green_Uren And Minuten = Green_Minuten Then Stat = 3
If Uren = Off_Uren And Minuten = Off_Minuten Then Stat = 4
If NoOn = 1 Then
High Led_Green : High Led_Yellow : High Led_Red
If Menu = 0 Then Print At 1,14,"OFF"
Else
If Menu = 0 Then Print At 1,14," ON"
If Stat = 1 Then
Low Led_Red : High Led_Yellow : High Led_Green : LA = 1
ElseIf Stat = 2 Then
Low Led_Yellow : High Led_Red : High Led_Green : LA = 2
ElseIf Stat = 3 Then
Low Led_Green : High Led_Yellow : High Led_Red : LA = 3
ElseIf Stat = 4 Then
High Led_Green : High Led_Yellow : High Led_Red : LA = 4
EndIf
EndIf
Return
Display_Menu:
Cls
If Menu = 1 Or Menu = 2 Then Print At 1,1,"Tijd "
If Menu > 2 And Menu < 11 Then Print At 1,1,"Licht "
If Menu = 11 Or Menu = 12 Then Print At 1,1,"Keyb. "
If Menu = 13 Then Print At 1,1,"WDT reset?"
If Menu = 3 Or Menu = 4 Then GoSub LCD_Rood ; Print "Rood "
If Menu = 5 Or Menu = 6 Then GoSub LCD_Geel ; Print "Geel "
If Menu = 7 Or Menu = 8 Then GoSub LCD_Groen ; print "Groen "
If Menu = 9 Or Menu = 10 Then Print "uit "
If Menu = 1 Or Menu = 3 Or Menu = 5 Or Menu = 7 Or Menu = 9 Then Print "Uur?"
If Menu = 2 Or Menu = 4 Or Menu = 6 Or Menu = 8 Or Menu = 10 Then Print "Min.?"
If Menu = 11 Then Print "Delay ?"
If Menu = 12 Then Print "Rate ?"
If Mode = 1 Then
Print At 2,1,"Waarde: "
If Menu = 1 Then
Print DEC2 Uren : EWrite 3,[Uren]
Else If Menu = 2 Then
Print DEC2 Minuten : EWrite 4,[Minuten]
Else If Menu = 3 Then
Print DEC2 Red_Uren : EWrite 10,[Red_Uren]
Else If Menu = 4 Then
Print DEC2 Red_Minuten : EWrite 11,[Red_Minuten]
Else If Menu = 5 Then
Print DEC2 Yellow_Uren : EWrite 12,[Yellow_Uren]
Else If Menu = 6 Then
Print DEC2 Yellow_Minuten : EWrite 13,[Yellow_Minuten]
Else If Menu = 7 Then
Print DEC2 Green_Uren : EWrite 14,[Green_Uren]
Else If Menu = 8 Then
Print DEC2 Green_Minuten : EWrite 15,[Green_Minuten]
Else If Menu = 9 Then
Print DEC2 Off_Uren : EWrite 16,[Off_Uren]
Else If Menu = 10 Then
Print DEC2 Off_Minuten : EWrite 17,[Off_Minuten]
Else If Menu = 11 Then
Print DEC2 KN_Delay : EWrite 1,[KN_Delay]
Else If Menu = 12 Then
Print DEC2 KN_Rate : EWrite 2,[KN_Rate]
Else If Menu = 13 Then
Print DEC1 NoWDT
EndIf
Else
If Menu > 0 Then Print At 2,1,"Menu: ",DEC2 Menu
EndIf
GoTo Display_Time
LCD_Rood:
Print "Rood "
Return
LCD_Geel:
Print "Geel "
Return
LCD_Groen:
Print "Groen "
Return
End
|
|
|
|
2 3 » |
|
|
|
|
|