SchemaTheek
 
Home Nieuws Forum Schema's Artikelen Magazine Downloads Links Shops Zoeken
 
Controle Paneel
Gebruikersnaam
Wachtwoord
  Onthoud mij
» Wachtwoord?
» Registreren
Site info
» Het Team
» Contact
» FAQ
» Leden
» Upload Archief
Stats
Totaal online: 11
11 gasten
0 leden:
Forum > Digitaal > pcf8563 uitlezen met een pic18f2550
[1] 2 3 »
jan1981
Lid
Berichten: 12
Gepost op zaterdag 31 December 2011 12:52:07 QuoteWijzig

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

Stynus
Admin
Berichten: 2849
Gepost op zaterdag 31 December 2011 13:49:51 QuoteWijzig

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
jan1981
Lid
Berichten: 12
Gepost op zaterdag 31 December 2011 14:25:15 QuoteWijzig

hallo,

waar moet ik dat neerzetten? sorry ik heb nog niet veel kennis van picbasic.

gr

Stynus
Admin
Berichten: 2849
Gepost op zaterdag 31 December 2011 15:11:33 QuoteWijzig

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
jan1981
Lid
Berichten: 12
Gepost op zaterdag 31 December 2011 18:11:09 QuoteWijzig

hallo,

maar hoe schrijf ik zoiets op want dat vat ik niet.

iets van I2Cout of zoiets?

hoor graag van je.

gr jan

Stynus
Admin
Berichten: 2849
Gepost op zaterdag 31 December 2011 23:12:43 QuoteWijzig

I2COut SDA,SCL,%10100000,0,[%00000000]


Met vriendelijke groet, Stynus ||| www.elektronicastynus.be
jan1981
Lid
Berichten: 12
Gepost op zondag 1 Januari 2012 14:36:39 QuoteWijzig

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.

jan1981
Lid
Berichten: 12
Gepost op zondag 1 Januari 2012 22:29:08 QuoteWijzig

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

Stynus
Admin
Berichten: 2849
Gepost op maandag 2 Januari 2012 19:30:17 QuoteWijzig

; zet het in commentaar. Dus dat moet idd weg.


Met vriendelijke groet, Stynus ||| www.elektronicastynus.be
jan1981
Lid
Berichten: 12
Gepost op woensdag 4 Januari 2012 12:32:32 QuoteWijzig

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

jan1981
Lid
Berichten: 12
Gepost op maandag 16 Januari 2012 20:00:08 QuoteWijzig

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

Stynus
Admin
Berichten: 2849
Gepost op maandag 16 Januari 2012 20:42:28 QuoteWijzig

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
jan1981
Lid
Berichten: 12
Gepost op dinsdag 17 Januari 2012 22:51:44 QuoteWijzig

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

Stynus
Admin
Berichten: 2849
Gepost op woensdag 18 Januari 2012 18:48:34 QuoteWijzig

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
jan1981
Lid
Berichten: 12
Gepost op dinsdag 24 Januari 2012 23:36:34 QuoteWijzig

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

Stynus
Admin
Berichten: 2849
Gepost op woensdag 25 Januari 2012 18:36:07 QuoteWijzig

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
jan1981
Lid
Berichten: 12
Gepost op donderdag 26 Januari 2012 23:25:01 QuoteWijzig

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

Stynus
Admin
Berichten: 2849
Gepost op vrijdag 27 Januari 2012 19:15:59 QuoteWijzig

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
jan1981
Lid
Berichten: 12
Gepost op zaterdag 28 Januari 2012 15:08:10 QuoteWijzig

ja ik heb er 2 van 4k7 aan zitten.

Stynus
Admin
Berichten: 2849
Gepost op zaterdag 28 Januari 2012 15:12:37 QuoteWijzig

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
jan1981
Lid
Berichten: 12
Gepost op dinsdag 7 Februari 2012 23:04:39 QuoteWijzig

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

[1] 2 3 »

Active Topics

» De gevolgen van een kl...
» Virtual Chemist probleem
» Probleem met Toyota Av...
» Whirlpool kookplaat
» 24 volt motor vertrage...
» Show je mini projecten
» Purer 8.3se
» MULTIMETERS geven alle...
» Werkplaatsinrichting
» 2022

» Meer actieve topics

Advertenties

PCBway

© 2004-2022 SchemaTheek
Laadtijd: 0.58453 sec.