PCF8583 verbinden met pic16f628a uitlezen op lcd

Hallo allemaal,

Ik ben nieuw op dit forum omdat ik meer te weten wil komen over het programmeren van pic controllers.
Ik ben bezig met een projectje om een stoplicht te maken die op tijd geschakeld gaat worden d.m.v. de PCF8583.

Ik wil dus de PCF8583 inlezen op de 16f628a en dan kunnen instellen met evt. pulsschakelaartjes en dan alles aflezen op de lcd.

Kunnen jullie mij helpen?

SCL->A2
SDA->A3
B2-B7->LCD
A1,A0,A7->relais
Pulsschakelaartjes->A5,B0,B1

Arco

Special Member

Heb je al iets, en in welke taal programmeer je?

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Ik programmeer met pic basic, ik kan text op het lcd krijgen en uitgangen programmeren maar dan houd het wel een beetje op.

Ga je de stoplicht met een klok/kalender chip besturen?
Een stoplicht (verkeerslicht?) kun je toch beter met een timer (van de PIC) besturen dan met de (echte) tijd (= real time)?
Op de CDROM van picbasic.nl staat wat over de PCF8583 en Proton PIC Basic.

Ohm sweet Ohm | www.picbasic.nl

Hij moet elke dag een bepaalde tijd branden(van 6:00 tot 7:00 rood-> 7:00 tot 7:30 oranje en daarna een half uurtje op groen). Onze dochter is nog al op tijd wakker. Er staat wel wat op het forum maar dat is net anders dan dat ik het in gedachten heb.

Waarom neem je niet een electronische schakelklok van de gamma.
ff slopen en je hebt een groot deel van je schakeling al.
Het electronica gedeelte(clockpcb) van de schakelklok heeft maar iets van 3 a 4 volt nodig en er zit een schakel poort op die hoog of laag wordt.
Hier achter zet je dan je tijdvertraging van 1 uur en 30 minuten en weer 30 minuten,die resp.de kleur rood oranje en groen laat oplichten.
Voordeel is dat je je de komende maanden niet druk hoeft te maken over I2C_read/I2Cwrite,etc etc.
Je mag je met deze tip concentreren op Interrupts en waitloops

Display zit op de klok en ook je geheugen voor de hele week.
Meerdere programma's mogelijk.En de knopjes zitten er al op.
Ik denk dat die schakelklok goedkoper of evenduur is dan een display van 4,95 + PCF8583+portokosten.
Die tijdvertraging kan een PIC zijn,maar het programmeer werk wordt een stuk minder. of een 4060 via de reset ingang?

NB.De relais-print uit de schakelklok zou ik niet gebruiken voor de voeding, want die is niet galvanisch gescheiden van het lichtnet.

edit: Als je nou alleen kleine ledjes laat oplichten kun je overwegen de print wel te gebruiken en het geheel in te bouwen in de schakelklok met de ledjes aan de voorzijde ondermekaar.Is het kastjes probleem ook opgelost en de voeding!!.
Er is nog plaats weet ik uit ervaring.

Het is maar een TIP..

[Bericht gewijzigd door Arabel op woensdag 7 december 2011 22:57:35 (12%)

Re-integratiecoach uitgerangeerde en degoutante electronen

Ik dit even bekijken. Het leek me namelijk wel leuk om het op mijn manier te doen, maar dit is ook een goede optie. bedankt voor de tip.

Het is wel mogelijk wat ik wil, toch? 'k ben al een beetje in de goede richting maar het display geeft nu "tijd 00:00:00" aan.
Kan dat komen doordat ik nog geen kristal op mijn pcf8583 aangesloten heb?

Ik hoor graag van jullie.

De PCF8583 moet sowieso een kristal hebben anders staat ie stil.

Ohm sweet Ohm | www.picbasic.nl

Ik heb er vanavond een kristal op gezet maar hij blijft stil staan.
Ik doe ongetwijfeld iets fout maar ik weet niet wat.
Heb ook iets gelezen over registers openen. dat heb ik nog niet echt door ga ik me eerst maar eens in verdiepen.

Heb de SCL op de A2 en de SDA op A3 aangesloten.

Mischien kunnen jullie mij een duwtje in de goede richting geven?

Zoiets dus?

http://download.collem.nl/psl1.JPG

Vergeet je de fuse niet te zetten?

En de Pull-Ups voor de SDA & SCL?

[Bericht gewijzigd door Stan1 op vrijdag 9 december 2011 14:52:01 (16%)

Read the fuc.... manual and read the fuc.... datasheet! {Proton IDE: V2.0.1.2 / Proton Compiler: V3.5.4.5}

Hartelijk bedankt.

Ik heb ook zoiets gemaakt alleen ben ik de pull-ups vergeten.

Ik ga meerdere leds in serie schakelen d.m.v. een relais, maar dat moet wel lukken denk ik.

Alleen waar ik tegen echt tegen aan loop dat is de code maken voor het geheel, daar kom ik nog niet echt uit.

Mischien kun je me daar nog iets mee op weg helpen.

Alvast bedankt.

Arco

Special Member

Als je nog geen code hebt, is het niet verwonderlijk dat het klok ic niets doet...

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Ik heb wel iets gegoogeld wat er op lijkt volgens mij, daar heb ik wat in en uitgangen veranderd maar dan doet hij het nog niet.
Waarschijnlijk staan daar ook wat verkeerde dingen in maar ik ben nog heel erg basic!!!

Mischien is het beter dat ik het stap voor stap uit probeer.

Het is grappig, een aantal weken geleden was ik met zo iets bezig.
Een stoplicht wat ingezet kan worden voor de pauze tijd. En is dus
hier ook perfect voor te gebruiken. Een stukje programma zal ik nog wel posten!

Read the fuc.... manual and read the fuc.... datasheet! {Proton IDE: V2.0.1.2 / Proton Compiler: V3.5.4.5}

Als je de Lite versie hebt, gaat dat niet passen.
Het programma vult het geheugen van de 16F628A voor ongeveer 97%

Ik weet niet of het mag, maar goed dan halen we het wel weer weg.
Hier mijn progje:

pic basic code:

Device = 16F628A

Reminders False
Warnings False
Dead_Code_Remove = On

Config FOSC_INTOSCIO, WDTE_OFF, PWRTE_ON, MCLRE_OFF, BOREN_OFF, LVP_OFF, CPD_OFF, CP_OFF

Xtal = 4

All_Digital true 
PortB_Pullups On

LCD_DTPin PORTB.4
LCD_DTPort PORTB
LCD_RSPin PORTB.2
LCD_ENPin PORTB.3
LCD_Interface = 4
LCD_Lines = 2

Symbol KN_Enter   = PORTA.5
Symbol KN_Up      = PORTB.0
Symbol KN_Down    = PORTB.1
TRISA.5 = 1
TRISB.0 = 1
TRISB.1 = 1
Dim Buf_Enter   As Byte
Dim Buf_Up      As Byte
Dim Buf_Down    As Byte

Symbol Led_Red    = PORTA.0
Symbol Led_Yellow = PORTA.1
Symbol Led_Green  = PORTA.4
TRISA.0 = 0
TRISA.1 = 0
TRISA.4 = 0

Symbol SDA        = PORTA.3
Symbol SCL        = PORTA.2

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

;Init
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
Print At 1,1,"Stoplicht Timer!"
Print At 2,1,"    V1.0        "
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    
GoTo Main_Loop

Knoppen:

    Button KN_Enter,0,KN_Delay,KN_Rate,Buf_Enter,0,No_Enter
        If Menu > 0 And Mode = 0 Then
            Mode = 1                        
        Else
            Mode = 0
        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 = 13 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       
        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,%10100001,3,[FormTemp0]    
        GoSub Hex2Dec : Minit = FormTemp0
        I2CIn SDA,SCL,%10100001,4,[FormTemp0]
        GoSub Hex2Dec : Hour = FormTemp0
                
        Print At 1,1,"Tijd: ", Dec2 Hour,":",Dec2 Minit
    EndIf
    
    If Hour = Red_Hour And Minit = Red_Minit       Then Low Led_Red    : High Led_Yellow : High Led_Green
    If Hour = Yellow_Hour And Minit = Yellow_Minit Then Low Led_Yellow : High Led_Red    : High Led_Green
    If Hour = Green_Hour And Minit = Green_Minit   Then Low Led_Green  : High Led_Yellow : High Led_Red
    If Hour = Off_Hour And Minit = Off_Minit       Then High Led_Green : High Led_Yellow : High Led_Red        
Return

Hex2Dec:    

    If FormTemp0 > 15 Then
        FormTemp1 = FormTemp0 / 16
        FormTemp2 = FormTemp0 - (FormTemp1 * 16)
        FormTemp0 = (FormTemp1 * 10) + FormTemp2
    EndIf
Return

Dec2Hex:

    If FormTemp0 > 9 Then
        FormTemp1 = FormTemp0 / 10
        FormTemp2 = FormTemp0 - (FormTemp1 * 10)
        FormTemp0 = (FormTemp1 * 16) + FormTemp2
    EndIf
Return

Display_Menu:

    Cls
    If Menu = 1 Then Print At 1,1,"Tijd Uren?"    
    If Menu = 2 Then Print At 1,1,"Tijd Minuten?"  
    If Menu = 3 Then Print At 1,1,"Licht Rood Uur?"  
    If Menu = 4 Then Print At 1,1,"Licht Rood Min.?"  
    If Menu = 5 Then Print At 1,1,"Licht Geel Uur?"  
    If Menu = 6 Then Print At 1,1,"Licht Geel Min.?"  
    If Menu = 7 Then Print At 1,1,"Licht Groen Uur?"  
    If Menu = 8 Then Print At 1,1,"Licht Groen Min.?"  
    If Menu = 9 Then Print At 1,1,"Licht UIT Uur?"  
    If Menu = 10 Then Print At 1,1,"Licht UIT Min.?"                      
    If Menu = 11 Then Print At 1,1,"Keyb. Delay ?"  
    If Menu = 12 Then Print At 1,1,"Keyb. Rate ?"            
  
    If Mode = 1 Then 
        Print At 2,1,"Waarde: "        
        If Menu = 1 Then
            Print At 2,9,Dec2 Hour
            FormTemp0 = Hour : GoSub Dec2Hex : I2COut SDA,SCL,%10100000,4,[FormTemp0]    
        Else If Menu = 2 Then
            Print At 2,9,Dec2 Minit
            FormTemp0 = Minit : GoSub Dec2Hex : I2COut SDA,SCL,%10100000,3,[FormTemp0]    
        Else If Menu = 3 Then
            Print At 2,9,Dec2 Red_Hour      : EWrite 10,[Red_Hour]
        Else If Menu = 4 Then
            Print At 2,9,Dec2 Red_Minit     : EWrite 11,[Red_Minit]           
        Else If Menu = 5 Then
            Print At 2,9,Dec2 Yellow_Hour   : EWrite 12,[Yellow_Hour]
        Else If Menu = 6 Then
            Print At 2,9,Dec2 Yellow_Minit  : EWrite 13,[Yellow_Minit]
        Else If Menu = 7 Then
            Print At 2,9,Dec2 Green_Hour    : EWrite 14,[Green_Hour]
        Else If Menu = 8 Then
            Print At 2,9,Dec2 Green_Minit   : EWrite 15,[Green_Minit]
        Else If Menu = 9 Then
            Print At 2,9,Dec2 Off_Hour      : EWrite 16,[Off_Hour]
        Else If Menu = 10 Then
            Print At 2,9,Dec2 Off_Minit     : EWrite 17,[Off_Minit]
        Else If Menu = 11 Then
            Print At 2,9,Dec2 KN_Delay      : EWrite 1,[KN_Delay]
        Else If Menu = 12 Then
            Print At 2,9,Dec2 KN_Rate       : EWrite 2,[KN_Rate]                     
        EndIf
    Else
        If Menu > 0 Then Print At 2,1,"Menu: ",Dec2 Menu
    EndIf
Return

Misschien heb je er wat aan.

Waarom relais, je kan ook gewoon een BC547 / BC557 gebruiken!

http://download.collem.nl/psl2.JPG

Suc6.

Read the fuc.... manual and read the fuc.... datasheet! {Proton IDE: V2.0.1.2 / Proton Compiler: V3.5.4.5}

He Stan, vriendelijk bedankt voor je hulp, ik ben er net nog ff mee bezig geweest maar het werkt nog niet (kreeg een zwarte balk op m'n lcd) kan ook door een paar aansluitingen op de print komen. Ga daar volgende week mee verder, en hoop dan succes te hebben. Ik laat het nog wel ff weten.

Ik maak met microbasic pro for pic een hex code en die schiet ik met bumble bee erin. dat kan toch wel?

[Bericht gewijzigd door Henry S. op dinsdag 13 december 2011 23:09:24 (15%)

Op 10 december 2011 16:14:11 schreef jan1981:
Ik maak met microbasic pro for pic een hex code en die schiet ik met bumble bee erin. dat kan toch wel?

Gebruik je nou mikrobasic of Picbasic?

Read the fuc.... manual and read the fuc.... datasheet! {Proton IDE: V2.0.1.2 / Proton Compiler: V3.5.4.5}

Ik ben microbasic gaan gebruiken omdat de lite versie maar tot 50 regels kan. Of heb je een ander progje.

Hai,

Microbasic ken ik niet Mikrobasic van Mikroelektronika weer wel, deze heb ik ook, maar gebruik ik bijna nooit. Ik werk bijna altijd met Picbasic PRO van Crownhill / Proton.

Als je veel wil gaan maken, kun je overwegen om de koop versie van Proton bij Wouter aan te schaffen.

Read the fuc.... manual and read the fuc.... datasheet! {Proton IDE: V2.0.1.2 / Proton Compiler: V3.5.4.5}

Goede morgen,

Ik bedoelde ook mikrobasic. Volgens mij doet dat progje ook dezelfde hex code maken.

Ja, maar het Basic progje voor Picbasic is volgens mij niet zonder aan passen te gebruiken voor Mikrobasic.

Read the fuc.... manual and read the fuc.... datasheet! {Proton IDE: V2.0.1.2 / Proton Compiler: V3.5.4.5}

hallo,

de compiler geeft een fout op regel 15 en 17. vraag me niet hoe ik eraan kom maar dat gaf het prog aan.

gr

Arco

Special Member

Als je bovenstaande code door de Mikrobasic compiler haalt zonder aanpassingen, krijg je veel meer als 2 fouten...

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Deze code is eigenlijk niet voor Mikrobasic te gebruiken, het aanpassen hiervan zou veel meer tijd kosten dan het maken van een nieuw progje!

Kan wel de ASM of HEX posten!

[Bericht gewijzigd door Stan1 op zondag 11 december 2011 12:36:59 (99%)

Read the fuc.... manual and read the fuc.... datasheet! {Proton IDE: V2.0.1.2 / Proton Compiler: V3.5.4.5}

Dat mag ook want ik denk niet dat ik dat programma ga kopen want ik ga het niet heel veel gebruiken.

Alvast bedankt.