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: 3
3 gasten
0 leden:
[code] Teller met geheugen.
Artikel informatie
Stynus
Moeilijkheidsgraad: Normaal Aantal punten:
Hits: 2195 Aantal stemmen: 71
Gepost op: 05-10-2008 Stem:
» 0 reacties    

Het artikel
Dit is een teller die van 0 tot 999 of van 0 tot 99 kan tellen. Er zitten 4 knoppen op: +1, -1, +10, -10 en reset. Als de spanning wegvalt dan onthoud de pic de tel waarde in zijn eeprom. Bij de 0-99 versie vervalt het linkse display.

Schema:


Code:
0-999 teller:

Code
'****************************************************************
'*  Author  : Coenen Stijn [Stynus]                             *
'*  Notice  : Copyright (c) 2008 ElektronicaStynus.be           *
'*          : All Rights Reserved                               *
'*  Date    : 20/07/2008                                        *
'*  Version : 1.8                                               *
'*  Notes   : Teller                                            *
'****************************************************************
Device  16F628A
Config WDT_OFF, PWRTE_OFF, MCLRE_OFF, INTRC_OSC_NOCLKOUT, LVP_OFF, BODEN_ON 
ALL_DIGITAL         =   true  
'****************************************************************         
Symbol  Cu          =   PORTA.0
Symbol  Cd          =   PORTA.1

Symbol  Cu10        =   PORTA.2
Symbol  Cd10        =   PORTA.3
Symbol  noPower     =   PORTA.4
Symbol  reset       =   PORTA.5
Symbol  digit2      =   PORTA.6

Symbol  digit3      =   PORTA.7
Symbol  digita      =   PORTB.0
Symbol  display     =   PORTB
Symbol  digit1      =   PORTB.7
'****************************************************************
        TRISA       =   %00111111
        TRISB       =   %00000000

'**************************************************************** 
Dim     CuBit       As  Bit
Dim     CdBit       As  Bit
Dim     Cu10Bit     As  Bit
Dim     Cd10Bit     As  Bit
Dim     index       As  Byte
Dim     waarde      As  Byte
Dim     waarde100   As  Byte
Dim     waarde10    As  Byte
Dim     waarde1     As  Byte

'**************************************************************** 
'Init
Clear
DelayMS 1000
'Oude tellerstand terug inlezen  
waarde1   =   ERead 0 
waarde10  =   ERead 1
waarde100 =   ERead 2

DelayMS 1000
'****************************************************************
While 1 = 1
'************************************************************
    'Knoppen inlezen
    'Count up
    If Cu = 0 And CuBit = 0 Then
        Inc waarde1
        If waarde1 = 10 Then
            waarde1 = 0
            Inc waarde10
            If waarde10 = 10 Then
                waarde10 = 0
                Inc waarde100
                If waarde100 = 10 Then
                    waarde100 = 0
                EndIf            
            EndIf            
        EndIf
        CuBit = 1
    EndIf
    If Cu = 1 And CuBit = 1 Then
        CuBit = 0
    EndIf
    GoSub spanningweg
    'Count down
    If Cd = 0 And CdBit = 0 Then
        Dec waarde1
        If waarde1 = 255 Then
            waarde1 = 9
            Dec waarde10
            If waarde10 = 255 Then
                waarde10 = 9
                Dec waarde100
                If waarde100 = 255 Then
                    waarde100 = 9
                EndIf            
            EndIf            
        EndIf
        CdBit = 1
    EndIf
    If Cd = 1 And CdBit = 1 Then
        CdBit = 0
    EndIf
    GoSub spanningweg
    'Count up + 10
    If Cu10 = 0 And Cu10Bit = 0 Then
        Inc waarde10
        If waarde10 = 10 Then
            waarde10 = 0
            Inc waarde100
            If waarde100 = 10 Then
                waarde100 = 0
            EndIf            
        EndIf       
        Cu10Bit = 1
    EndIf
    If Cu10 = 1 And Cu10Bit = 1 Then
        Cu10Bit = 0
    EndIf
    GoSub spanningweg
    'Count down - 10
    If Cd10 = 0 And Cd10Bit = 0 Then
        Dec waarde10
        If waarde10 = 255 Then
            waarde10 = 9
            Dec waarde100
            If waarde100 = 255 Then
                waarde100 = 9
            EndIf            
        EndIf          
        Cd10Bit = 1
    EndIf
    If Cd10 = 1 And Cd10Bit = 1 Then
        Cd10Bit = 0
    EndIf
    GoSub spanningweg
    'Controleren op reset
    If reset = 0 Then
        waarde1   = 0
        waarde10  = 0
        waarde100 = 0
    EndIf    
    '************************************************************ 
    GoSub dispuit   

Wend
'**************************************************************** 
'Subroutines
dispuit:
    For index = 0 To 2  
        Select index
            Case 0
                waarde  = waarde1
            Case 1
                waarde  = waarde10          
            Case 2
                waarde  = waarde100          
        EndSelect   
        Select Case waarde    
        Case 0          'gfedcba
            display =  %00111111    
        Case 1          'gfedcba
            display =  %00000110              
        Case 2          'gfedcba
            display =  %01011011              
        Case 3          'gfedcba
            display =  %01001111              
        Case 4          'gfedcba
            display =  %01100110              
        Case 5          'gfedcba
            display =  %01101101              
        Case 6          'gfedcba
            display =  %01111101             
        Case 7          'gfedcba
            display =  %00000111              
        Case 8          'gfedcba
            display =  %01111111             
        Case 9          'gfedcba
            display =  %01101111  
        'Bij fout
        Case Else       'gfedcba
            display =  %01111001     
        EndSelect
        Select index
            Case 0
                High    digit1
            Case 1
                High    digit2            
            Case 2
                High    digit3            
        EndSelect 
        DelayMS 1
        GoSub spanningweg
        Low digit1
        Low digit2
        Low digit3
    Next
Return

spanningweg:
    'Controleren op voedingsspanning
    If noPower = 1 Then
        EWrite 0 , [waarde1]
        DelayMS 20
        EWrite 1 , [waarde10]
        DelayMS 20
        EWrite 2 , [waarde100]
        While noPower = 1
            DelayMS 1000
        Wend
    EndIf
Return

'**************************************************************** 
End



0-99 teller:

Code
'****************************************************************
'*  Author  : Coenen Stijn [Stynus]                             *
'*  Notice  : Copyright (c) 2008 ElektronicaStynus.be           *
'*          : All Rights Reserved                               *
'*  Date    : 20/07/2008                                        *
'*  Version : 1.8                                               *
'*  Notes   : Teller                                            *
'****************************************************************
Device  16F628A
Config WDT_OFF, PWRTE_OFF, MCLRE_OFF, INTRC_OSC_NOCLKOUT, LVP_OFF, BODEN_ON 
ALL_DIGITAL         =   true  
'****************************************************************         
Symbol  Cu          =   PORTA.0
Symbol  Cd          =   PORTA.1

Symbol  Cu10        =   PORTA.2
Symbol  Cd10        =   PORTA.3
Symbol  noPower     =   PORTA.4
Symbol  reset       =   PORTA.5
Symbol  digit2      =   PORTA.6

Symbol  digita      =   PORTB.0
Symbol  display     =   PORTB
Symbol  digit1      =   PORTB.7
'****************************************************************
        TRISA       =   %00111111
        TRISB       =   %00000000
'**************************************************************** 

Dim     CuBit       As  Bit
Dim     CdBit       As  Bit
Dim     Cu10Bit     As  Bit
Dim     Cd10Bit     As  Bit
Dim     index       As  Byte
Dim     waarde      As  Byte
Dim     waarde10    As  Byte
Dim     waarde1     As  Byte

'**************************************************************** 
'Init
Clear
Low PORTA.7
DelayMS 1000
'Oude tellerstand terug inlezen  
waarde1   =   ERead 0 
waarde10  =   ERead 1

DelayMS 1000
'****************************************************************
While 1 = 1

'************************************************************
    'Knoppen inlezen
    'Count up
    If Cu = 0 And CuBit = 0 Then
        Inc waarde1
        If waarde1 = 10 Then
            waarde1 = 0
            Inc waarde10
            If waarde10 = 10 Then
                waarde10 = 0
            EndIf            
        EndIf
        CuBit = 1
    EndIf
    If Cu = 1 And CuBit = 1 Then
        CuBit = 0
    EndIf
    GoSub spanningweg
    'Count down
    If Cd = 0 And CdBit = 0 Then
        Dec waarde1
        If waarde1 = 255 Then
            waarde1 = 9
            Dec waarde10
            If waarde10 = 255 Then
                waarde10 = 9     
            EndIf            
        EndIf
        CdBit = 1
    EndIf
    If Cd = 1 And CdBit = 1 Then
        CdBit = 0
    EndIf
    GoSub spanningweg
    'Count up + 10
    If Cu10 = 0 And Cu10Bit = 0 Then
        Inc waarde10
        If waarde10 = 10 Then
            waarde10 = 0       
        EndIf       
        Cu10Bit = 1
    EndIf
    If Cu10 = 1 And Cu10Bit = 1 Then
        Cu10Bit = 0
    EndIf
    GoSub spanningweg
    'Count down - 10
    If Cd10 = 0 And Cd10Bit = 0 Then
        Dec waarde10
        If waarde10 = 255 Then
            waarde10 = 9          
        EndIf          
        Cd10Bit = 1
    EndIf
    If Cd10 = 1 And Cd10Bit = 1 Then
        Cd10Bit = 0
    EndIf
    GoSub spanningweg
    'Controleren op reset
    If reset = 0 Then
        waarde1   = 0
        waarde10  = 0
    EndIf    
    '************************************************************ 
    GoSub dispuit   

Wend
'**************************************************************** 
'Subroutines
dispuit:
    For index = 0 To 1  
        Select index
            Case 0
                waarde  = waarde1
            Case 1
                waarde  = waarde10                
        EndSelect   
        Select Case waarde    
        Case 0          'gfedcba
            display =  %00111111    
        Case 1          'gfedcba
            display =  %00000110              
        Case 2          'gfedcba
            display =  %01011011              
        Case 3          'gfedcba
            display =  %01001111              
        Case 4          'gfedcba
            display =  %01100110              
        Case 5          'gfedcba
            display =  %01101101              
        Case 6          'gfedcba
            display =  %01111101             
        Case 7          'gfedcba
            display =  %00000111              
        Case 8          'gfedcba
            display =  %01111111             
        Case 9          'gfedcba
            display =  %01101111  
        'Bij fout
        Case Else       'gfedcba
            display =  %01111001     
        EndSelect
        Select index
            Case 0
                High    digit1
            Case 1
                High    digit2                       
        EndSelect 
        DelayMS 1
        GoSub spanningweg
        Low digit1
        Low digit2
    Next
Return

spanningweg:
    'Controleren op voedingsspanning
    If noPower = 1 Then
        EWrite 0 , [waarde1]
        DelayMS 20
        EWrite 1 , [waarde10]
        While noPower = 1
            DelayMS 1000
        Wend
    EndIf
Return
'**************************************************************** 
End

Active Topics

» Audi
» Show je mini projecten
» Puls schkelaar
» Draadknipper
» Intercom
» buske (Peugeot Boxer 2...
» Voeding 24V 3A Stynus
» moodlight
» SMD kristal vervangen ...
» Subaru Outback 2016

» Meer actieve topics

Advertenties

ElektronicaStynus

© 2004-2019 SchemaTheek
Laadtijd: 0.05157 sec.