Stijn Coenen

Zie Over Mij

Berichten met de meeste reacties

  1. UV-belichtingsbak V3 Update — 7 reacties
  2. Plexiglas buiger — 5 reacties
  3. Rapid CSN140 Elektrische Nietmachine Accu Reparatie (B311) — 4 reacties
  4. “100W Temperature Controlled Soldering Pot” Review — 4 reacties
  5. Afvoer pomp sturing — 3 reacties

Berichten van deze auteur

LED-Aftelklok V2 Update

De print is ondertussen bestukt:

Led Aftelklok V2 bestukt

Led Aftelklok V2 bestukt

Led Aftelklok V2 bestukt

Led Aftelklok V2 bestukt

PIC bestuurde robotwagen Update

Ondertussen is de tank ook voorzien van printplaten :p :

De sensoren:

tank

De hoofdprint:

tank

De motoren:

tank

“Overzicht’s”foto:

tank

PIC bestuurde robotwagen Update

De code is ondertussen klaar.

De code in de robotauto:

    Device              16F628A
    Config WDT_OFF, PWRTE_Off, LVP_OFF, MCLRE_on, INTRC_OSC_NOCLKOUT
    ALL_DIGITAL         TRUE 
    PORTB_PULLUPS       = 1
'Declaraties    
    'Sensoren
    Symbol sensorR      = PORTA.6
    Symbol sensorL      = PORTA.7
    'Motoren
    Symbol motorvooruit = PORTA.2
    Symbol motorachteruit  = PORTA.3
    Symbol stuurLinks   = PORTA.1
    Symbol stuurRechts  = PORTA.0
    'Terugkoppeling stuur
    Symbol stuursensL   = PORTB.0
    Symbol stuursensM   = PORTB.1
    Symbol stuursensR   = PORTB.2
    'Leds
    Symbol led1         = PORTB.3
    Symbol led2         = PORTB.4
    Symbol led3         = PORTB.5
    Symbol led4         = PORTB.6
    Symbol led5         = PORTB.7
    

'Wachten voor dat er bogonnen wordt 
'(De sensoren hebben tijd nodig om op te starten)    
    DelayMS 1000
    
'Stuur initialiseren
    'Staat het stuur in het midden?
    If stuursensM = 0 Then
        GoTo klaarinit      'Direct naar klaarinit gaan
    EndIf
    'Staat het stuur links?
    If stuursensL = 0 Then 
        GoTo links         'Naar links gaan
    EndIf
    'Staat het stuur rechts?
    If stuursensR = 0 Then
        GoTo rechts        'Naar rechts gaan
    EndIf
    'In geen stand (geen terugkoppeling)
    'Eerst volledig naar rechts draaien
    High    stuurRechts
    While   stuursensR = 1 
        ;Lusje totdat de stuursensor rechts laag wordt
    Wend
    Low     stuurRechts
    DelayMS 500 
    'Naar gedeelte gaan voor als het stuur naar rechst staat    
    GoTo    rechts      
    
rechts:
    'Naar links sturen    
    High    stuurLinks
    While   stuursensM = 1 
        ;Lusje totdat de stuursensor midden laag wordt
    Wend
    Low     stuurLinks
    DelayMS 500
    GoTo    klaarinit
    
links:
    ;Naar rechts sturen
    High    stuurLinks
    While   stuursensM = 1
        ;Lusje totdat de stuursensor midden laag wordt
    Wend
    Low     stuurLinks
    DelayMS 500

klaarinit:        
    High motorvooruit
    Low  motorachteruit
    High led3
    GoTo main
    

'Hoofdprogramma
main:   
    ;links opstakel
    If sensorL = 0 Then
        DelayMS 10
        High    led1
        GoSub   linksDect
    EndIf
    Low led1 
    ;rechts opstakel
    If sensorR = 0 Then
        DelayMS 10
        High    led5
        GoSub   rechtsDect 
    EndIf
    Low led5  

GoTo main
            
rechtsDect:  
    High led4  
    ;stukje achteruit
    Low     motorvooruit
    DelayMS 10
    High    motorachteruit
    DelayMS 1000
    Low  motorachteruit
    Low     led4
    ;Draaien
    High    stuurLinks    
    While stuursensL = 1
        ;Lusje totdat de stuursensor links laag wordt
    Wend
    Low     stuurLinks   
    ;Stukje vooruit
    DelayMS 10
    High    motorvooruit
    DelayMS 1000
    Low     motorvooruit
    ;Stuur  terug recht zetten
    High    stuurRechts
    While   stuursensM = 1
        ;Lusje totdat de stuursensor midden laag wordt
    Wend
    Low     stuurRechts
    DelayMS 10
    High    motorvooruit

Return

linksDect:
    High  led2
    ;stukje achteruit
    Low     motorvooruit
    DelayMS 10
    High    motorachteruit
    DelayMS 1000
    Low  motorachteruit
    Low     led2
    ;Draaien
    High    stuurRechts    
    While stuursensR = 1
        ;Lusje totdat de stuursensor links laag wordt
    Wend
    Low     stuurRechts
    ;Stukje vooruit
    DelayMS 10
    High    motorvooruit
    DelayMS 1000
    Low     motorvooruit
    ;Stuur  terug recht zetten
    High    stuurLinks
    While   stuursensM = 1
        ;Lusje totdat de stuursensor midden laag wordt
    Wend
    Low     stuurLinks
    DelayMS 10
    High    motorvooruit

Return

;bij fout
GoTo main
End

 

De code in de tank:

Device 16F628A
Config WDT_OFF,PWRTE_OFF,LVP_OFF,MCLRE_ON,INTRC_OSC_NOCLKOUT, BODEN_OFF

ALL_DIGITAL true 

Symbol      motorLinksV = PORTA.2
Symbol      motorLinksA = PORTA.3
Symbol      motorRechtsV = PORTA.6

Symbol      motorRechtsA = PORTA.7

Symbol      sensorL = PORTA.0
Symbol      sensorR = PORTA.1

Symbol      led1 = PORTB.0
Symbol      led2 = PORTB.1

Symbol      led3 = PORTB.2
Symbol      led4 = PORTB.3
Symbol      led5 = PORTB.4 

Clear 

High motorLinksV
DelayMS 10
High motorRechtsV

Low motorRechtsA
Low motorLinksA

main:
If sensorL = 0 Then
            'hoog maken van led1
            High led1
            'stoppen van motoren vooruit
            Low motorLinksV
            Low motorRechtsV
            '100ms wachten
            DelayMS 100
            'achteruit rijden
            High motorLinksA
            DelayMS 10
            High motorRechtsA
            'hoogmaken van led3 en Led4
            High led3
            High led4
            '1 s wachten
            DelayMS 1000
            'stoppen met rijden 
            Low motorLinksA
            Low motorRechtsA
            Low motorLinksV
            Low motorRechtsV
            'laag maken van led3 en led4
            Low led3
            Low led4
            '100 ms wachten
            DelayMS 100
            'led2 hoogmaken
            High led2
            'draaien van tank
            High motorLinksV
            DelayMS 10
            High motorRechtsA
            '500ms draaien
            DelayMS 500
            'laagmaken led2            
            Low led2
            'stoppen met draaien
            Low motorLinksV
            Low motorRechtsA
            '10 ms stoppen
            DelayMS 10
            'terug vooruit rijden
            High motorLinksV
            DelayMS 10
            High motorRechtsV


Else
            'als sensor links niets detecteert gaat led1 niet branden
            Low led1
EndIf
If sensorR = 0 Then
            'hoog maken van led5
            High led5
            'stoppen van motoren vooruit
            Low motorLinksV
            Low motorRechtsV
            '100ms wachten
            DelayMS 100
            'achteruit rijden
            High motorLinksA
            DelayMS 10
            High motorRechtsA
            'hoogmaken van led3 en Led4
            High led3
            High led4
            '1 s wachten
            DelayMS 1000
            'stoppen met rijden 
            Low motorLinksA
            Low motorRechtsA
            Low motorLinksV
            Low motorRechtsV
            'laag maken van led3 en led4
            Low led3
            Low led4
            '100 ms wachten
            DelayMS 100
            'led2 hoogmaken
            High led2
            'draaien van tank
            High motorLinksA
            DelayMS 10
            High motorRechtsV
            '500ms draaien
            DelayMS 500
            'laagmaken led2            
            Low led2
            'stoppen met draaien
            Low motorLinksA
            Low motorRechtsV
            '10 ms stoppen
            DelayMS 10
            'terug vooruit rijden
            High motorLinksV
            DelayMS 10
            High motorRechtsV


Else
            'als sensor rechts niets detecteert gaat led5 niet branden
            Low led5
EndIf

GoTo main
End

Raambediening Update

Ik heb besloten om de pcb layout en de code ook vrij te geven.

De layout van V2.1:
Printplaat V2_1Printplaat V2_1

De layout van V2.2:
Printplaat V2_2
Printplaat V2_2

In deze layouts zitten nog fouten dus even vergelijken met het schema en corrigeren als je dit wil nabouwen. Als er intresse is kan ik wel even een nieuw printplaat tekenen.

 

De code:

'****************************************************************
'*  Name    : Comfortconsole.BAS                                *
'*  Author  : [Stynus]                                          *
'*  Notice  : Copyright (c) 2008 [www.elektronicastynus.be]     *
'*          : All Rights Reserved                               *
'*  Date    : 14/02/2008                                        *
'*  Version : 4.1                                               *
'*  Notes   : Comfortconsole                                    *
'****************************************************************
    Device 12F629
    Config INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, MCLRE_ON, CP_ON
    ALL_DIGITAL     TRUE
    
    Dim tellerlaag  As Byte
    Dim tellerhoog  As Byte
    Dim ICounter    As Byte
    Clear
    
    Symbol stroomSensor = PORTB.0
    Symbol knopOmhoog   = PORTB.4
    Symbol knopOmlaag   = PORTB.5
    Symbol UitR         = PORTB.2
    Symbol UitL         = PORTB.1
    
    Low UitR
    Low UitL
   
Main:
    While 1 = 1
        If knopOmhoog = 0 And knopOmlaag = 1 And stroomSensor = 0 Then
            GoSub Omhoog
        EndIf
        If knopOmlaag = 0 And knopOmhoog = 1 And stroomSensor = 0 Then
            GoSub Omlaag
        EndIf
    Wend

Omhoog:
    Low UitL
    High UitR 
    DelayMS 500
    While 1 = 1 
        If knopOmlaag = 0  Or stroomSensor = 1 Then
            Low UitR
            GoTo wachten
        EndIf 
    Wend

Omlaag:
    Low UitR
    High UitL 
    DelayMS 500
    While 1 = 1 
        If knopOmhoog = 0  Or stroomSensor = 1 Then 
            Low UitL
            GoTo wachten
        EndIf 
    Wend

wachten:
    DelayMS 1000
    Return
    
End      

LED-Aftelklok V2 Update

De code is ondertussen ook af:

'****************************************************************
'*  Name    : Aftelklok                                         *
'*  Author  : Coenen Stijn [Stynus]                             *
'*  Notice  : Copyright (c) 2008 ElektronicaStynus.be           *
'*          : All Rights Reserved                               *
'*  Date    : 26/04/2008                                        *
'*  Version : 2.8                                               *
'****************************************************************
'Declaraties:
    Device          16F877A
    Config XT_OSC, WDT_OFF, PWRTE_ON, BODEN_OFF, LVP_OFF, PWRTE_ON
    XTAL            3',2768 MHz
    ALL_DIGITAL     true
    
    'Lcd declaraties      
    Symbol  Lengte      = 16
    Symbol  Regels      = 2
    Declare LCD_DTPIN PORTD.4 
    Declare LCD_ENPIN PORTD.1
    Declare LCD_RSPIN PORTD.0
    Declare LCD_INTERFACE   4
    Declare LCD_LINES   Regels
    
    'Knoppen 
    Symbol  Knop1       = PORTE.2
    Symbol  Knop2       = PORTA.0
    Symbol  Knop3       = PORTA.4
    Symbol  Knop4       = PORTC.0
    Symbol  Knop5       = PORTA.1
    Symbol  Knop6       = PORTA.5
    Symbol  Knop7       = PORTC.1
    Symbol  Knop8       = PORTA.2
    Symbol  Knop9       = PORTE.0
    Symbol  Knop0       = PORTA.3
    Symbol  Knopenter   = PORTE.1
    Symbol  Knopback    = PORTC.2        
    Symbol  Back        = 10
    Symbol  Enter       = 11 
    Dim     Knop        As Byte    
    Dim     Uren10      As Byte
    Dim     Uren1       As Byte
    Dim     Min10       As Byte
    Dim     Min1        As Byte
    
    'Algemeen
    Dim     Index       As Byte
    Dim     intAan      As Bit
    Dim     temp        As Byte
    Dim     initbit     As Bit
    
    'Leds
    Symbol  rij0        = PORTC.7
    Symbol  rij1        = PORTC.6
    Symbol  rij2        = PORTC.5
    Symbol  rij3        = PORTC.4
    Symbol  rij4        = PORTD.3
    Symbol  rij5        = PORTD.2
    Symbol  ledKolom    = PORTB
    Dim     ledTabel[6] As Byte
    TRISB               = 0
    
     'Tijden
    Dim     Uren        As Byte
    Dim     Minuten     As Byte
    Dim     Seconden    As Byte
    Dim     Tijd        As DWord
    Dim     LedTijd     As Word
    
    'Interupt   
    Symbol  T0IE        = INTCON.5        'TMR0 Overflow Interrupt Enable 
    Symbol  T0IF        = INTCON.2        'TMR0 Overflow Interrupt Flag 
    Symbol  GIE         = INTCON.7        'Global Interrupt Enable 
    Symbol  PS0         = OPTION_REG.0    'Prescaler bit-0 
    Symbol  PS1         = OPTION_REG.1    'Prescaler bit-1 
    Symbol  PS2         = OPTION_REG.2    'Prescaler bit-2  
    Symbol  PSA         = OPTION_REG.3    'Prescaler Assignment  
    Symbol  T0CS        = OPTION_REG.5    'Timer0 Clock Source Select
    Dim     klaarBit    As Bit
    

'****************************************************************
Init: 
    'Interupt (Maar nog niet inschakelen)    
        '3276800/4*256*128*25=1sec               
        PSA                 = 0 'Prescaler op het externe cristal zetten
        PS0                 = 1 'De prescaler op 255x zetten 
        PS1                 = 1
        PS2                 = 1 
        T0CS                = 0                 
        TMR0                = 128 
        T0IF                = 0
        T0IE                = 0
        GIE                 = 0
    'Lcd wissen
        Cls
        DelayMS 30
        GoSub DispClear
    'registers clearen  
        Clear
    'Opstartscherm
        Print At 1, 1, " Elektro-Stynus "

        Print At 2, 1, "Led-Aftelklok V2"  
        DelayMS 1000
    'Tijd instellen
        GoSub Instellen
        If initbit = 1 Then
            initbit = 0
            GoTo Init
        EndIf 
        Uren = Uren10 * 10
        Uren = Uren + Uren1
        Minuten = Min10 * 10
        Minuten = Minuten + Min1
    'Tijd per led uitrekenen
        Tijd = Uren * 60
        Tijd = Tijd + Minuten
        LedTijd = Tijd / 37
        GoSub DispClear
        Print At 1, 1, "Resterende tijd:" 
        T0IE = 1
        GIE  = 1
    'Alle leds aan
        ledTabel[0] = 255
        ledTabel[1] = 255       
        ledTabel[2] = 255
        ledTabel[3] = 255
        ledTabel[4] = 255
        ledTabel[5] = 255      

GoTo Main
'****************************************************************
Main:
    'Leds berekenen
    'Array's invullen
    If Tijd > (LedTijd * 30) Then
        '5de rij array plaatsen
        If Tijd > (LedTijd * 36) Then
            ledTabel[5] = %00111111
        Else 
            If Tijd > (LedTijd * 35) Then
                ledTabel[5] = %00011111
            Else 
                If Tijd > (LedTijd * 34) Then
                    ledTabel[5] = %00001111
                Else        
                    If Tijd > (LedTijd * 33) Then
                        ledTabel[5] = %00000111
                    Else 
                        If Tijd > (LedTijd * 32) Then
                            ledTabel[5] = %00000011
                        Else 
                            ledTabel[5] = %00000001
                        EndIf
                    EndIf
                EndIf
            EndIf
        EndIf
        ledTabel[0] = 255
        ledTabel[1] = 255       
        ledTabel[2] = 255
        ledTabel[3] = 255
        ledTabel[4] = 255
    Else
        '4de rij array plaatsen
        If Tijd > (LedTijd * 24) Then
            If Tijd > (LedTijd * 30) Then
                ledTabel[4] = %00111111
            Else 
                If Tijd > (LedTijd * 29) Then
                    ledTabel[4] = %00011111
                Else 
                    If Tijd > (LedTijd * 28) Then
                        ledTabel[4] = %00001111
                    Else        
                        If Tijd > (LedTijd * 27) Then
                            ledTabel[4] = %00000111
                        Else 
                            If Tijd > (LedTijd * 26) Then
                                ledTabel[4] = %00000011
                            Else 
                                ledTabel[4] = %00000001
                            EndIf
                        EndIf
                    EndIf
                EndIf
            EndIf
            ledTabel[0] = 255
            ledTabel[1] = 255       
            ledTabel[2] = 255
            ledTabel[3] = 255
            ledTabel[5] = 0
        Else
            '3de rij array plaatsen
            If Tijd > (LedTijd * 18) Then
                If Tijd > (LedTijd * 24) Then
                    ledTabel[3] = %00111111
                Else 
                    If Tijd > (LedTijd * 23) Then
                        ledTabel[3] = %00011111
                    Else 
                        If Tijd > (LedTijd * 22) Then
                            ledTabel[3] = %00001111
                        Else        
                            If Tijd > (LedTijd * 21) Then
                                ledTabel[3] = %00000111
                            Else 
                                If Tijd > (LedTijd * 20) Then
                                    ledTabel[3] = %00000011
                                Else 
                                    ledTabel[3] = %00000001
                                EndIf
                            EndIf
                        EndIf
                    EndIf
                EndIf
                ledTabel[0] = 255
                ledTabel[1] = 255       
                ledTabel[2] = 255
                ledTabel[4] = 0
                ledTabel[5] = 0
            Else
                '2de rij array plaatsen
                If Tijd > (LedTijd * 12) Then
                    If Tijd > (LedTijd * 18) Then
                        ledTabel[2] = %00111111
                    Else 
                        If Tijd > (LedTijd * 17) Then
                            ledTabel[2] = %00011111
                        Else 
                            If Tijd > (LedTijd * 16) Then
                                ledTabel[2] = %00001111
                            Else        
                                If Tijd > (LedTijd * 15) Then
                                    ledTabel[2] = %00000111
                                Else 
                                    If Tijd > (LedTijd * 14) Then
                                        ledTabel[2] = %00000011
                                    Else 
                                        ledTabel[2] = %00000001
                                    EndIf
                                EndIf
                            EndIf
                        EndIf
                    EndIf
                    ledTabel[0] = 255
                    ledTabel[1] = 255       
                    ledTabel[3] = 0
                    ledTabel[4] = 0
                    ledTabel[5] = 0
                Else
                    '1ste rij array plaatsen
                    If Tijd > (LedTijd * 6) Then
                        If Tijd > (LedTijd * 12) Then
                            ledTabel[1] = %00111111
                        Else 
                            If Tijd > (LedTijd * 11) Then
                                ledTabel[1] = %00011111
                            Else 
                                If Tijd > (LedTijd * 10) Then
                                    ledTabel[1] = %00001111
                                Else        
                                    If Tijd > (LedTijd * 9) Then
                                        ledTabel[1] = %00000111
                                    Else 
                                        If Tijd > (LedTijd * 8) Then
                                            ledTabel[1] = %00000011
                                        Else 
                                            ledTabel[1] = %00000001
                                        EndIf
                                    EndIf
                                EndIf
                            EndIf
                        EndIf
                        ledTabel[0] = 255
                        ledTabel[2] = 0       
                        ledTabel[3] = 0
                        ledTabel[4] = 0
                        ledTabel[5] = 0
                    Else
                        '0ste rij array plaatsen
                            If Tijd > (LedTijd * 6) Then
                                ledTabel[0] = %00111111
                            Else 
                                If Tijd > (LedTijd * 5) Then
                                    ledTabel[0] = %00011111
                                Else 
                                    If Tijd > (LedTijd * 4) Then
                                        ledTabel[0] = %00001111
                                    Else        
                                        If Tijd > (LedTijd * 3) Then
                                            ledTabel[0] = %00000111
                                        Else 
                                            If Tijd > (LedTijd * 2) Then
                                                ledTabel[0] = %00000011
                                            Else 
                                                ledTabel[0] = %00000001
                                            EndIf
                                        EndIf
                                    EndIf
                                EndIf
                            EndIf
                            ledTabel[1] = 0
                            ledTabel[2] = 0       
                            ledTabel[3] = 0
                            ledTabel[4] = 0
                            ledTabel[5] = 0
                    EndIf
                EndIf
            EndIf
        EndIf
    EndIf
    TRISB = 0
    
    'Leds aansturen
    Call ledUit

    'Display aansturen
    Print At 2, 4, DEC2 Uren, ":", DEC2 Minuten, ":", DEC2 Seconden
    
    If klaarBit = 1 Then
        GoTo Klaar
    EndIf
    
    If Knopback = 0 Then
        GoTo cancel
    EndIf
    
GoTo Main


'****************************************************************
Klaar:
    klaarBit = 0
    T0IE     = 0
    GIE      = 0 
    GoSub DispClear 
    Print At 1, 1, "     Klaar!      "
    Print At 2, 1, " (enter = reset) "
    While 1 = 1                       
        If Knopenter = 0 Then
            GoTo Init
        EndIf        
    Wend

'****************************************************************
cancel:
    klaarBit = 0
    T0IE     = 0
    GIE      = 0 
    GoSub DispClear 
    Print At 1, 1, " Druk op Enter om"
    Print At 2, 1, "   te resetten   "
    While 1 = 1
        If Knopenter = 0 Then
            GoTo Init
        EndIf        
    Wend
           

'****************************************************************
'Interrupt routine
ON_HARDWARE_INTERRUPT GoTo Interupt
Interupt:
    'Checken of de interrrupt wel van timer0 komt
    If T0IF = 1 Then
        T0IF = 0    'Timer overflow flag weer resetten
        TMR0 = 118  'Normaal 128 maar door afweiking kristal 118
        Inc Index   
        
        '1 sec is afgelopen
        If Index = 26 Then
            Index = 0
            
            'Tijd aftellen
            Dec Seconden
            'Als de seconden "op zijn" dan minuut aftellen
            If Seconden = 255 Then
                Seconden = 59
                Dec Minuten
                Dec Tijd
                'Als de minuten "op zijn" dan uur aftellen
                If Minuten = 255 Then
                    Minuten = 59
                    Dec Uren
                    'Als uren "op" zijn dan klaar
                    If Uren = 255 Then
                        'Klaar!
                        T0IE = 1
                        GIE  = 1
                        klaarBit = 1
                    EndIf
                EndIf
            EndIf  
                  
        EndIf
        
    EndIf
Context Restore ' Restore the registers and exit the interrupt    

'****************************************************************

subroutines:
    '************************************************************
    'Tijden instellen
        Instellen:
            'Scherm wissen
                GoSub DispClear
                Print At 1, 1, "Tijd: uu:mm"
          
            '****************************************************                     
            'Tientallen van de uren
            urenInstellenHoog:
            
                'Cursor op positie 6 zetten 
                Print $FE ,128
                For Index = 1 To 6  
                    Print $FE, $14     
                Next
                Print $FE, $0F
                
                GoSub   Inlezen
                'Terug
                If Knop = Back Then 
                     DelayMS 500    
                    GoTo urenInstellenHoog
                EndIf 
                'Enter
                If Knop = Enter Then
                    GoTo urenInstellenHoog
                EndIf
                'Lcd aansturen
                Print Dec Knop
                'Tijd in variabele zetten
                Uren10 = Knop * 10 
                DelayMS 500
                
            '****************************************************    
            'Eenheden uren
            urenInstellenLaag:
                'Cursor op positie 7 zetten 
                Print $FE ,128      'cursor naar pos 1,1
                For Index = 1 To 7  
                    Print $FE, $14  'Cursor 1 positie naar rechts opschuiven    
                Next  
                Print $FE, $0F
                          
                GoSub   Inlezen
                'Terug
                If Knop = Back Then
                     DelayMS 500  
                    GoTo urenInstellenHoog
                EndIf 
                'Enter
                If Knop = Enter Then
                    GoTo urenInstellenLaag
                EndIf
                'Lcd aansturen
                Print Dec Knop
                'Tijd in variabele zetten
                Uren1 = Knop 
                DelayMS 500
            
            '****************************************************    
            'Tientallen van de Minuten
            minutenInstellenHoog:
            
                'Cursor op positie 9 zetten 
                Print $FE ,128    
                For Index = 1 To 9  
                    Print $FE, $14    
                Next
                Print $FE, $0F
                
                GoSub   Inlezen
                'Terug
                If Knop = Back Then 
                    DelayMS 500     
                    GoTo urenInstellenLaag
                EndIf 
                
                'Kijken of het aantal niet hoger is dan 6
                If Knop > 5 And Knop < 10 Then
                    'Bij 6 accepteren maar volgende input automatisch 0 maken
                    If Knop = 6 Then
                        Min10   = 6
                        Min1    = 0
                        Print   "60"

                        GoTo    StartenOfTerug 
                    Else
                        GoTo minutenInstellenHoog
                    EndIf
                EndIf
                
                'Enter
                If Knop = Enter Then
                    GoTo minutenInstellenHoog
                EndIf
                'Lcd aansturen
                Print Dec Knop
                'Tijd in variabele zetten
                Min10 = Knop 
                DelayMS 500
              
            '****************************************************  
            'Eenheden Minuten
            minutenInstellenLaag:
            
                'Cursor op positie 10 zetten 
                Print $FE ,128      'cursor naar pos 1,1
                For Index = 1 To 10  
                    Print $FE, $14  
                Next
                Print $FE, $0F
                
                GoSub   Inlezen
                'Terug
                If Knop = Back Then
                    DelayMS 500  
                    GoTo minutenInstellenHoog
                EndIf 
                'Enter
                If Knop = Enter Then
                    GoTo minutenInstellenLaag
                EndIf
                'Lcd aansturen
                Print Dec Knop
                'Tijd in variabele zetten
                Min1 = Knop 
                DelayMS 500
                
            '****************************************************
            'Starten of terug?
            StartenOfTerug:
                Print           $FE, $0C
                Print At 2, 11, "KLAAR?" 
                DelayMS 500
                If Knopback = 0 Then
                    DelayMS 500
                    GoTo minutenInstellenLaag
                EndIf 
                'Enter
                If Knopenter = 0 Then
                    GoTo Vergrendelen
                EndIf          
            GoTo StartenOfTerug
            '****************************************************                 
            Vergrendelen:         
                Print At 1,1, " Tijd Ingesteld "

                Print At 2,1, "    Starten?    "
                DelayMS 500
                While 1 = 1
                    If Knopback = 0 Then
                        initbit = 1
                        Return
                    EndIf
                    If Knopenter = 0 Then
                        DelayMS 1000
                        Return
                    EndIf  
                Wend 
        Return
    '************************************************************       
    'Knoppen inlezen
        Inlezen:
            While 1 = 1
                If Knop0 = 0 Then
                    Knop = 0
                    Return
                EndIf
                If Knop1 = 0 Then
                    Knop = 1
                    Return
                EndIf
                If Knop2 = 0 Then
                    Knop = 2
                    Return
                EndIf
                If Knop3 = 0 Then
                    Knop = 3
                    Return
                EndIf
                If Knop4 = 0 Then
                    Knop = 4
                    Return
                EndIf
                If Knop5 = 0 Then
                    Knop = 5
                    Return
                EndIf
                If Knop6 = 0 Then
                    Knop = 6
                    Return
                EndIf
                If Knop7 = 0 Then
                    Knop = 7
                    Return
                EndIf
                If Knop8 = 0 Then
                    Knop = 8
                    Return
                EndIf
                If Knop9 = 0 Then
                    Knop = 9
                    Return
                EndIf
                If Knopback = 0 Then
                    Knop = 10
                    Return
                EndIf
                If Knopenter = 0 Then
                    Knop = 11
                    Return
                EndIf
            Wend
        Return
    '************************************************************
    'cls wil niet werken bij dit lcd dus daarom zo:
    DispClear:
        Print At 1, 1, "                "

        Print At 2, 1, "                "
        DelayMS 500        
    Return
    '************************************************************   
    'Led matrix aansturen 
    ledUit:
        'Rij 0
            High rij0
                ledKolom = ledTabel[0]                
                DelayMS 1
            Low rij0
        'Rij 1
            High rij1
                ledKolom = ledTabel[1]
                DelayMS 1
            Low rij1
        'Rij 2
            High rij2
                ledKolom = ledTabel[2]
                DelayMS 1
            Low rij2
        'Rij 3
            High rij3
                ledKolom = ledTabel[3]
                DelayMS 1
            Low rij3
        'Rij 0
            High rij4
                ledKolom = ledTabel[4]
                DelayMS 1
            Low rij4
        'Rij 5
            High rij5
                ledKolom = ledTabel[5]
                DelayMS 1
            Low rij5
        'Rij 0
            High rij5
                ledKolom = ledTabel[5]
                DelayMS 1
            Low rij5
    Return

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

Radiomarkt Eksel 2008

http://www.circuitsonline.net/forum/view/61082

De buit:
1x wireless network pc card 22Mbps
1x printer dataswitch
2x grote koelplaten met 3x 2n3442 op
1x kleine multimeter
5x transformator 2*9V 2.3VA
3x drukknop met tekst (voor cnc project)
2x elco 1000µF 63V
2x ESM740
1x 2SC3795
3x BD242
1x Assortiment MF-trafo’s
1x zakje 10K potmeters
1x zakje fan connectoren
1x zakje MEDL8705 M2 800 dioden
1x zak M3 boutjes
4x schakelaar met stofkapje
1x 16*4 karakter lcd
1x plaat aluminium 300*150*10mm (voor cnc project)
(In totaal was het precies voor 30€)

Foto’s:De drukknoppen:Koelblok:

PIC ontwikkelbordje

Mijn K8048 development bordje werkte gisteren weeral tegen toen ik snel een knightrider wilde testen. Daarom heb ik die toen in een hoekje gesmeten en snel een nieuw bordje ontworpen dat op mijn galvawisp komt. Vandaag heb ik dat printje ge-etst en bestukt. De microcontroller is een 16F628A. Op port A hangen 8 dipswitchen en op port B hangen 8 leds.

Schema:

Schema PIC ontwikkelbordje

PCB:

pcb PIC ontwikkelbordje

De pcb layout als pdf: Link.

Foto’s:

foto PIC ontwikkelbordje

foto PIC ontwikkelbordje

Code knightrider die ik voor het testen heb gebruikt:

'****************************************************************
'*                      knightrider                             *
'*                                                              *
'*  Auteur  : Stijn Coenen [Stynus]                             *
'*  Notice  : Copyright (c) 2008 Stijn Coenen                   *
'*          : All Rights Reserved                               *
'*  Datum   : 29/05/2008                                        *
'*  Version : 1.0                                               *
'*  Website : www.elektronicastynus.be                          *
'****************************************************************
'Config
    Device 16F628A               
    Config INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
    ALL_DIGITAL TRUE                ;Alle ingangen digitaal
'****************************************************************
'Ingangen declareren
    Symbol switch   = PORTA
    Symbol sw1      = PORTA.7
    Symbol sw2      = PORTA.6
    Symbol sw3      = PORTA.5
    Symbol sw4      = PORTA.4
    Symbol sw5      = PORTA.3
    Symbol sw6      = PORTA.2
    Symbol sw7      = PORTA.1
    Symbol sw8      = PORTA.0
    'TrisA register instellen (alles ingang)
    TRISA           = 255 
'****************************************************************
'Uitgangen declareren
    Symbol ledjes   = PORTB
    Symbol led1     = PORTB.7
    Symbol led2     = PORTB.6
    Symbol led3     = PORTB.5
    Symbol led4     = PORTB.4
    Symbol led5     = PORTB.3
    Symbol led6     = PORTB.2
    Symbol led7     = PORTB.1
    Symbol led8     = PORTB.0
    'TrisB register instellen (alles uitgang)
    TRISB = 0                       
'****************************************************************    
'Decraraties voor programma:
    Symbol LedTijd  = 70 'doorschuif snelheid LED    
    Dim    index    As Byte
    ledjes          = %10000000 '1 led aanzetten
'****************************************************************
'Hoofdprogramma                                               
    While 1 = 1                     'Oneindige loop
        'Links schuiven
        For index = 0 To 6          'Uitvoren tot dat index 6 is
            ledjes = ledjes >> 1    'Ledjes naar rechts doorschuiven
            DelayMS LedTijd         'Wachten
        Next
        'Rechts schuiven
        For index = 0 To 6          'Uitvoren tot dat index 6 is
            ledjes = ledjes << 1    'Ledjes naar links doorschuiven
            DelayMS LedTijd         'Wachten
        Next       
    Wend
'****************************************************************
End                  

De hex file: link

Filmpje van de knightrider in actie:

Moodlight Update

Gisteren ben ik aluminium gaan kopen en vandaag heb ik daar een behuizing met in elkaar gezet. Het deksel moet uit plexiglas gemaakt worden en dat heb ik nog niet liggen.

Een paar foto’s:

moodlight behuizing

moodlight behuizing

Moodlight Update

De pcb layout:

Top met componenten

Top zonder componenten

Bottom zonder componenten

Bottom met componenten

Binaire BCD Klok

Als ontspanning tijdens het leren voor de examens heb ik een binaire klok ontworpen en gemaakt op basis van een PIC16F628A.

Schema hoofdprint:

Schema binaire BCD klok
Schema voeding:

Schema voeding

Schema led matrix:

schema led matrix

Pcb lay-out hoofdprint:

pcb binaire BCD klok

Printlay-out als pdf: Link

Foto’s:

binaire BCD klok

binaire BCD klok

binaire BCD klok

binaire BCD klok

binaire BCD klok

binaire BCD klok

De code voor in de pic:

'****************************************************************
'*                       Binaire klok                           *
'*  Auteur  : Coenen Stijn [Stynus]                             *
'*            Copyright (c) 2008 ElektronicaStynus.be           * 
'*  Datum   : 12/06/2008                                        *
'*  Versie  : 1.0                                               *
'****************************************************************
    Device              16F628A
    Config WDT_OFF, PWRTE_ON, MCLRE_OFF, INTRC_OSC_NOCLKOUT, LVP_off
    ALL_DIGITAL         = true   
'****************************************************************   
'Leds 
    Dim     tijduur10   As Byte
    Dim     tijduur1    As Byte
    Dim     tijdmin10   As Byte
    Dim     tijdmin1    As Byte
    Symbol  leds        = PORTB   
    Symbol  uren10      = PORTA.0
    Symbol  uren1       = PORTA.1
    Symbol  minu10      = PORTA.2
    Symbol  minu1       = PORTA.3 
    TRISB               = %11000000
    TRISA               = %00010000
'instellen
    Symbol  incMin      = PORTB.6
    Symbol  incUur      = PORTB.7
    Dim     minBit      As Bit
    Dim     uurBit      As Bit
    PORTB_PULLUPS       = 1 
'interrupt
    Symbol  klok50      = PORTA.4
    Dim     tussenCount As Byte
    Clear
    
    Symbol T0IF         = INTCON.2      'Bit die hoog wordt bij overflow    
    Symbol T0IE         = INTCON.5      'Timer Overflow Interupt Enable bit
    Symbol GIE          = INTCON.7      'Global interupt enable bit
    Symbol PSA          = OPTION_REG.3  'Prescaler Assignment bit
    Symbol TOSE         = OPTION_REG.4  'Stijgende of dalende flank kiezen.
    Symbol T0CS         = OPTION_REG.5  'selecteren timer ingang    
    TOSE                = 0             'stijgende flank
    T0CS                = 1             'RA4 selecteren als timer ingang 
    PSA                 = 1             'Prescaler uit
    T0IE                = 1             'Interupt opzetten voor timer 0
    T0IF                = 0             'Timer 0 vlag clearen
    TMR0                = 206           '206 in register TMR0 gooien zoadat bij 
                                        '50Hz 1 keer per seconde interupt is
    GIE                 = 1             'Interupt opzetten  
GoTo over_interupt

on_hardware_interrupt GoTo Interupt 
Interupt: 
    T0IF = 0    'Overflow vlag terug afzetten
    TMR0 = 206  'Terug 205 in het TMR0 reg zetten 
                '(voor 1 interupt per sec bij 50 hz)
    Inc tussenCount
    If tussenCount = 60 Then
        tussenCount = 0
        Inc tijdmin1
        'minuten eenheden
         If tijdmin1 = 10 Then
            tijdmin1 = 0
            'Minuten tientallen
            Inc tijdmin10
            If tijdmin10 = 6 Then
                Inc tijduur1
                tijdmin1 = 0
                tijdmin10 = 0
                'Uren
                If tijduur1 = 4 And tijduur10 = 2 Then
                   tijduur1 = 0
                   tijduur10 = 0
                EndIf
                If tijduur1 = 10 Then
                   tijduur1 = 0
                   Inc tijduur10
                EndIf
            EndIf
        EndIf 
    EndIf
Context Restore  

over_interupt:
    
'preset waarde meegeven
    tijduur10           = 0 
    tijduur1            = 0
    tijdmin10           = 0
    tijdmin1            = 0
        
Hoofdprog:
    'leds aansturen
    'minuten eenheden
        High minu1
            leds = tijdmin1 
            DelayMS 1 
        Low minu1
        leds = 0
    DelayUS 50
    'Minuten tientallen
        High minu10
            leds = tijdmin10 
            DelayMS 1    
        Low minu10
        leds = 0
    DelayUS 50
    'Uren eenheden
        High uren1
            leds = tijduur1
            DelayMS 1    
        Low uren1
        leds = 0
    DelayUS 50
        'Uren tientallen
        High uren10
            leds = tijduur10  
            DelayMS 1   
        Low uren10
        leds = 0
    DelayMS 2
    GoSub Instellen
GoTo Hoofdprog

Instellen:
    'Minuten instellen
    If incMin = 0 And minBit = 0 Then
        Inc tijdmin1
        If tijdmin1 = 10 Then
            tijdmin1 = 0
            'Minuten tientallen
            Inc tijdmin10
            If tijdmin10 = 6 Then
                tijdmin1 = 0
                tijdmin10 = 0
            EndIf
        EndIf
        minBit = 1
    Else
        If incMin = 1 And minBit = 1  Then
            minBit = 0    
        EndIf
    EndIf
    'Uren instellen
    If incUur = 0 And uurBit = 0 Then
        Inc tijduur1
        If tijduur1 = 10 Then
            tijduur1 = 0
            'Minuten tientallen
            Inc tijduur10
            If tijduur10 = 6 Then
                tijduur1 = 0
                tijduur10 = 0
            EndIf
        EndIf
        uurBit = 1
    Else
        If incUur = 1 And uurBit = 1 Then
            uurBit = 0    
        EndIf
    EndIf
Return
End    

De hex file: link.