Op Elektronicaforum.nl is de kans om een antwoord op je vraag te krijgen heel groot. In overzichtelijke subcategorieën kun je vragen en antwoorden over elektronica zoeken, plaatsen en beantwoorden.
Elektronica Forum is onderdeel van Schakelingen Online
 


 
PIC16F877A 6 digit klok

 
Plaats nieuw bericht   Plaats Reactie    Schakelingen Online Forum Index -> Digitaal
Auteur Bericht
captain nguyen



Geregistreerd op: 26-7-2008
Berichten: 40

BerichtGeplaatst: Do 13 Aug 2009, 14:47    Onderwerp: PIC16F877A 6 digit klok Reageer met quote

Ik ben aan het proberen om met enkele PIC16F877A een klok maken.

Zo'n schema is wat ik in gedachten hebt. (zie attach)
De transistor staan anders dan op schema staat.
En ik gebruik 4MHz krystal.
Ik gebruik 1 extra transistor omdat ik 12V source voor display nodig hebt.
Het is Common Anode 8V 20mA.
Ik gebruik 2N3904 NPN (T1)en 2N3906 PNP (T2). (zie attach)

Maar nu weet ik het subroutine niet om 6 digit aan te sturen, multiplexen, en knopjes die het moet weten waar die ervoor dient.

Deze code heb ik van sample gehaald en is voor LCD en 12 uren mode.

Zou iemand mij iets kunnen helpen of zo hoe dat eigelijk werkt met dit code.

Code:
Device  16F877A
CONFIG XT_OSC , WDT_OFF , PWRTE_OFF , BODEN_OFF , LVP_OFF , WRTE_ON , CP_OFF , DEBUG_OFF
ALL_DIGITAL         =   true 

****************************************************************************************
Symbol  Cu          =   PORTA.0
Symbol  noPower     =   PORTA.4
Symbol  digit1      =   PORTC.0    ' eerste digit (seconden)
Symbol  digit2      =   PORTC.1      ' tweede digit (10 seconden)
Symbol  digit3      =   PORTC.2      ' derde digit (minuten)
Symbol  digit4      =   PORTC.3      ' vierde digit (10 minuten)
Symbol  digit5      =   PORTC.4      ' vijfde digit (uren)
Symbol  digit6      =   PORTC.5      ' zesde digit (10 uren)
Symbol  digita      =   PORTB.0      ' segment a
Symbol  digitb      =   PORTB.1      ' segment b
Symbol  digitc      =   PORTB.2      ' segment c
Symbol  digitd      =   PORTB.3      ' segment d
Symbol  digite      =   PORTB.4      ' segment e
Symbol  digitf      =   PORTB.5      ' segment f
Symbol  digitg      =   PORTB.6      ' segment g
Symbol  display     =   PORTB

****************************************************************************************
        TRISA       =   %00111111
        TRISB       =   %00000000

****************************************************************************************
Dim hour    as     byte          ' Define hour variable
Dim dhour   as     byte          ' Define display hour variable
Dim minute  as     byte          ' Define minute variable
Dim second  as     byte          ' Define second variable
Dim ticks   as     byte          ' Define pieces of seconds variable
Dim update  as     byte          ' Define variable to indicate update of Digit
Dim i       as     byte          ' Debounce loop variable

****************************************************************************************
hour = 0                 ' zet tijd naar 00:00:00
minute = 0
second = 0
ticks = 0
update = 1               ' forceer de eerste display
****************************************************************************************
mainloop:
        PORTA = 0                   ' PORTA knoppen
        TRISB = $F0                 ' alle knoppen aan

        ' Check any button pressed to set time
        If PORTA.0 = 0 Then incmin   ' stel minuten op
        If PORTA.1 = 0 Then incmin      ' stel uren op

        ' controleer voor tijd om te update
Chkup:  If update = 1 Then
           Cls                     ' Clear screen

             ' Display tijd als hh:mm:ss
             dhour = hour             ' verander uren 0 naar 23
             If (hour // 23) = 0 Then
                dhour = dhour + 23

             update = 0               ' Screen updated
          Endif

      Goto mainloop   
            
' Increment minuten
Incmin: minute = minute + 1
        If minute >= 60 Then
         minute = 0
        Endif
        Goto debounce

' Increment hours
Inchr:  hour = hour + 1
        If hour >= 24 Then
         hour = 0
        Endif
        Goto debounce

' Decrement minutes
Decmin: minute = minute - 1
        If minute >= 60 Then
         minute = 59
        Endif
        Goto debounce

' Decrement hours
Dechr:  hour = hour - 1
        If hour >= 24 Then
         hour = 23
        Endif

' Debounce and delay for 250ms
Debounce:
        For i = 1 to 25
           Delayms 10                    ' 10ms at a time so no interrupts are lost
        Next

        Update = 1                  ' Set to update screen

        Goto Chkup
********************************************************************************************************





lamp_source2.gif

lamp_source2.gif - 5781 keer


CLOCK.jpg

CLOCK.jpg - 5781 keer

Naar boven
Bekijk gebruikers profiel Stuur privé bericht
stynus
Moderator
Moderator


Geregistreerd op: 16-5-2003
Berichten: 5787
Woonplaats: Overpelt (België)

BerichtGeplaatst: Do 13 Aug 2009, 15:04    Onderwerp: Reageer met quote

Ik denk dat je in je tweede schema best pnp torren gebruikt.

Verder heeft picbasic zelf geen multiplex commando. Dit zal je zelf moeten schrijven. Met dig kan je makkelijk 1 digit uit een getal halen. Daarna schrijf je om de beurd alle digits weg.

Dan zou je zoiets kunnen maken:
Code:
charuit:
        'Uitzoeken uitgangen port B bij bepaalde code
        '     a
        '   ####
        ' f #g # b
        '   ####
        ' e #  # c
        '   ####
        '    d
        'Symbool:   Code:   Bits:       Hex:
        '                   Pabcdefg   
        '0          00      x0000001    01
        '1          01      x1001111    4F
        '2          02      x0010010    12
        '3          03      x0000110    06
        '4          04      x1001100    4C
        '5          05      x0100100    24
        '6          06      x0100000    20
        '7          07      x0001111    0F
        '8          08      x0000000    00
        '9          09      x0000100    04     
        PORTB = LookUp digit , [$01, $4F, $12, $06, $4C, $24, $20, $0F, $00, $04]
        PORTB.7 = point
        DelayMS 2
        PORTB = 0       
    Return
    dispuit:
            digit = Dig teller, 0 'Digit 1 uit teller halen
            Digit1 = 0            'Digit 1 op display selecteren
            GoSub charuit         'Waarde naar digit schrijven
            Digit1 = 1            'Digit 1 terug uitzetten
            digit = Dig teller, 1
            Digit2 = 0
            GoSub charuit
            Digit2 = 1
            digit = Dig teller, 2
            Digit3 = 0
            GoSub charuit
            Digit3 = 1
            digit = Dig teller, 3
            Digit4 = 0
            GoSub charuit
            Digit4 = 1
    Return


Wil je dan het display aansturen zet je een getal in teller en doe je gosub dispuit. Die dispuit routine zal je wel min 50 keer per seconde moeten aanroepen. Anders gaat het display knipperren.
_________________
Met vriendelijke groet,
Stynus
http://www.elektronicastynus.be

--> Elektronica bouwpakketten en componenten te koop. <--
Naar boven
Bekijk gebruikers profiel Stuur privé bericht Bekijk de homepage
JARI NETWORKS



Geregistreerd op: 23-4-2006
Berichten: 1697
Woonplaats: Hedalen. Noorwegen ...

BerichtGeplaatst: Ma 31 Dec 2012, 11:18    Onderwerp: Reageer met quote

zou ik dit niet als klok kunnen gebruiken om het weer te geven op een 4x20 lcd display ?
ik zou graag ook de datum en de maand er bij willen zetten
Naar boven
Bekijk gebruikers profiel Stuur privé bericht
stynus
Moderator
Moderator


Geregistreerd op: 16-5-2003
Berichten: 5787
Woonplaats: Overpelt (België)

BerichtGeplaatst: Ma 31 Dec 2012, 11:45    Onderwerp: Reageer met quote

Dat kan, maar met dit schema ga je een paar minuten afwijking per dag hebben.
_________________
Met vriendelijke groet,
Stynus
http://www.elektronicastynus.be

--> Elektronica bouwpakketten en componenten te koop. <--
Naar boven
Bekijk gebruikers profiel Stuur privé bericht Bekijk de homepage
JARI NETWORKS



Geregistreerd op: 23-4-2006
Berichten: 1697
Woonplaats: Hedalen. Noorwegen ...

BerichtGeplaatst: Ma 31 Dec 2012, 12:08    Onderwerp: Reageer met quote

en dat is niet bij te stellen ?
Naar boven
Bekijk gebruikers profiel Stuur privé bericht
stynus
Moderator
Moderator


Geregistreerd op: 16-5-2003
Berichten: 5787
Woonplaats: Overpelt (België)

BerichtGeplaatst: Ma 31 Dec 2012, 12:11    Onderwerp: Reageer met quote

Door een real time clock te gebruiken. Die hun kristal is veel stabieler.
_________________
Met vriendelijke groet,
Stynus
http://www.elektronicastynus.be

--> Elektronica bouwpakketten en componenten te koop. <--
Naar boven
Bekijk gebruikers profiel Stuur privé bericht Bekijk de homepage
JARI NETWORKS



Geregistreerd op: 23-4-2006
Berichten: 1697
Woonplaats: Hedalen. Noorwegen ...

BerichtGeplaatst: Ma 31 Dec 2012, 12:12    Onderwerp: Reageer met quote

ok, dus toch maar die ds3232 bestellen??
zal dan wel weer problemen krijgen met schema's en programma

maar dat zie ik dan wel weer
Naar boven
Bekijk gebruikers profiel Stuur privé bericht
stynus
Moderator
Moderator


Geregistreerd op: 16-5-2003
Berichten: 5787
Woonplaats: Overpelt (België)

BerichtGeplaatst: Ma 31 Dec 2012, 12:22    Onderwerp: Reageer met quote

Die problemen mag je hier altijd op het forum posten (liefst wel in dat andere topic, want hier is het off-topic), we zullen je dan wel proberen verder te helpen.
_________________
Met vriendelijke groet,
Stynus
http://www.elektronicastynus.be

--> Elektronica bouwpakketten en componenten te koop. <--


Laatst aangepast door stynus op Ma 31 Dec 2012, 12:41, in totaal 1 keer bewerkt
Naar boven
Bekijk gebruikers profiel Stuur privé bericht Bekijk de homepage
JARI NETWORKS



Geregistreerd op: 23-4-2006
Berichten: 1697
Woonplaats: Hedalen. Noorwegen ...

BerichtGeplaatst: Ma 31 Dec 2012, 12:31    Onderwerp: Reageer met quote

ok, dank je Stynus, en alvast een heel gelukkig nieuw jaar
Naar boven
Bekijk gebruikers profiel Stuur privé bericht
Plaats nieuw bericht   Plaats Reactie    Schakelingen Online Forum Index -> Digitaal Tijden zijn in GMT + 2 uur
Pagina 1 van 1                     

 
Ga naar:  
Je mag geen nieuwe onderwerpen plaatsen
Je mag geen reacties plaatsen
Je mag je berichten niet bewerken
Je mag je berichten niet verwijderen
Ja mag niet stemmen in polls
Je mag geen attachments plaatsen in dit forum
Je mag bestanden downloaden in dit forum


Powered by phpBB © 2001, 2002 phpBB Group and phpBB SEO