Auteur |
Bericht |
captain nguyen
Geregistreerd op: 26-7-2008 Berichten: 40
|
Geplaatst: Do 13 Aug 2009, 14:47 Onderwerp: PIC16F877A 6 digit klok |
|
|
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 - 7672 keer

CLOCK.jpg - 7672 keer
|
|
Naar boven |
|
stynus Moderator


Geregistreerd op: 16-5-2003 Berichten: 5803 Woonplaats: Overpelt (België)
|
Geplaatst: Do 13 Aug 2009, 15:04 Onderwerp: |
|
|
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 |
|
JARI NETWORKS
Geregistreerd op: 23-4-2006 Berichten: 1697 Woonplaats: Hedalen. Noorwegen ...
|
Geplaatst: Ma 31 Dec 2012, 11:18 Onderwerp: |
|
|
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 |
|
stynus Moderator


Geregistreerd op: 16-5-2003 Berichten: 5803 Woonplaats: Overpelt (België)
|
|
Naar boven |
|
JARI NETWORKS
Geregistreerd op: 23-4-2006 Berichten: 1697 Woonplaats: Hedalen. Noorwegen ...
|
Geplaatst: Ma 31 Dec 2012, 12:08 Onderwerp: |
|
|
en dat is niet bij te stellen ?
|
|
Naar boven |
|
stynus Moderator


Geregistreerd op: 16-5-2003 Berichten: 5803 Woonplaats: Overpelt (België)
|
|
Naar boven |
|
JARI NETWORKS
Geregistreerd op: 23-4-2006 Berichten: 1697 Woonplaats: Hedalen. Noorwegen ...
|
Geplaatst: Ma 31 Dec 2012, 12:12 Onderwerp: |
|
|
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 |
|
stynus Moderator


Geregistreerd op: 16-5-2003 Berichten: 5803 Woonplaats: Overpelt (België)
|
Geplaatst: Ma 31 Dec 2012, 12:22 Onderwerp: |
|
|
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 |
|
JARI NETWORKS
Geregistreerd op: 23-4-2006 Berichten: 1697 Woonplaats: Hedalen. Noorwegen ...
|
Geplaatst: Ma 31 Dec 2012, 12:31 Onderwerp: |
|
|
ok, dank je Stynus, en alvast een heel gelukkig nieuw jaar
|
|
Naar boven |
|