Most commented posts
- Resistor Decade Box — 15 comments
- Desoldering Station — 12 comments
- 3D Printer UV Curing Device — 6 comments
- ESR-Meter – Update — 4 comments
- Dust extraction – Part 4: Solid State Relay — 4 comments
Apr 26 2008
The code is ready:
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
May 29 2008
My Velleman K8048 board didn’t always work. When I wanted to program a knightrider it failed again. Then I decided to throw it away and create a new development board that connects to my galvawisp. Today I etched and build this pcb. The microcontroller is a 16F628A, on port A there are 8 dipswitches and on port B there are 8 leds connected.
Circuit:

PCB:

The pcb layout pdf: Link.
Pictures:


Knightrider Code that I used for testing:
'**************************************************************** '* knightrider * '**************************************************************** '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
The hex file: link
Jun 06 2008
Yesterday I went to buy some aluminium and today I made the enclosure out of it. The lid will be made of plexi but I don’t have that yet.
A couple of pictures:


Jun 13 2008
As recreation after studying for my exams I have made an binary bcd clock. The base is a PIC16F628A.
Main circuit:
Power supply circuit:

Led matrix circuit:

Main pcb layout:

The pcb as pdf: link
Pictures:






The code:
'**************************************************************** '* 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
The hex file: link.
Jun 15 2008
Today I have completed the code and build the pcb’s in the enclosure:


The code:
Device 16F627A Config WDT_OFF, PWRTE_ON, MCLRE_ON, HS_OSC, LVP_off XTAL = 20 ALL_DIGITAL = true '**************************************************************** 'Declaraties Symbol Rood = PORTB.7 Symbol Groen = PORTB.5 Symbol Blauw = PORTB.6 Symbol Master = PORTB.4 Symbol Slave = PORTB.3 TRISB.7 = 0 TRISB.6 = 0 TRISB.5 = 0 TRISB.4 = 1 TRISA.3 = 1 PORTB_PULLUPS = 1 Dim MasterSlave As Bit Dim Geval As Byte Dim index As Word Dim vertraging As Byte 'PWM Dim WaardeRood As Byte Dim WaardeGroen As Byte Dim WaardeBlauw As Byte Dim WaardePWM As Byte Dim roodUpDown As Bit Dim groenUpDown As Bit Dim blauwUpDown As Bit Symbol snelheid = 5 'Hoe hoger dit getal hoe trager het prog 'Seriele interface Dim serdata As Byte Dim sergeval As Byte Dim dataOfGeval As Bit HSERIAL_CLEAR = On HSERIAL_RCSTA = 144 HSERIAL_TXSTA = 36 HSERIAL_BAUD = 2400 Symbol RCIF = PIR1.5 Symbol OERR = RCSTA.1 Symbol CREN = RCSTA.4 ON_INTERRUPT GoTo SeriIn Clear '**************************************************************** 'Checken voor master/slave While 1 = 1 If Master = 0 Then GoTo Masterprog EndIf If Slave = 0 Then GoTo Slaveprog EndIf High Rood Wend '**************************************************************** Masterprog: PIE1.5 = 0 WaardeRood = 255 WaardeGroen = 0 WaardeBlauw = 0 Geval = 0 HRSOut 1 DelayUS 10 HRSOut WaardeRood DelayUS 10 HRSOut 2 DelayUS 10 HRSOut WaardeGroen DelayUS 10 HRSOut 3 DelayUS 10 HRSOut WaardeBlauw While 1 = 1 For index = 0 To 255 'Rood If WaardeRood >= index Then High Rood Else Low Rood EndIf 'Groen If WaardeGroen >= index Then High Groen Else Low Groen EndIf 'Blauw If WaardeBlauw >= index Then High Blauw Else Low Blauw EndIf Next Inc vertraging If vertraging = snelheid Then Select Geval Case 0 Inc WaardeGroen GoSub GroenUit If WaardeGroen = 255 Then Geval = 1 EndIf Case 1 Dec WaardeRood GoSub RoodUit If WaardeRood = 0 Then Geval = 2 EndIf Case 2 Inc WaardeBlauw GoSub BlauwUit If WaardeBlauw = 255 Then Geval = 3 EndIf Case 3 Dec WaardeGroen GoSub GroenUit If WaardeGroen = 0 Then Geval = 4 EndIf Case 4 Inc WaardeRood GoSub RoodUit If WaardeRood = 255 Then Geval = 5 EndIf Case 5 Dec WaardeBlauw GoSub BlauwUit If WaardeBlauw = 0 Then Geval = 0 EndIf Case Else 'Bij fout reset WaardeRood = 255 WaardeGroen = 0 WaardeBlauw = 0 Geval = 0 EndSelect vertraging = 0 'GoSub seruit EndIf If Slave = 0 Then GoTo Slaveprog EndIf Wend '**************************************************************** Slaveprog: INTCON = %11000000 PIE1.5 = 1 WaardeRood = 0 WaardeGroen = 0 WaardeBlauw = 0 Low Groen Low Rood Low Blauw While 1 = 1 For vertraging = 0 To snelheid For index = 0 To 255 'Rood If WaardeRood >= index Then High Rood Else Low Rood EndIf 'Groen If WaardeGroen >= index Then High Groen Else Low Groen EndIf 'Blauw If WaardeBlauw >= index Then High Blauw Else Low Blauw EndIf Next If Master = 0 Then GoTo Masterprog EndIf Next Wend '**************************************************************** 'Subroutines: RoodUit: HRSOut 1 DelayUS 10 HRSOut WaardeRood Return GroenUit: HRSOut 2 DelayUS 10 HRSOut WaardeGroen Return BlauwUit: HRSOut 3 DelayUS 10 HRSOut WaardeBlauw sergeval = 0 Return SeriIn: If dataOfGeval = 0 Then HSerIn [sergeval] dataOfGeval = 1 Else HSerIn [serdata] Select sergeval Case 1 WaardeRood = serdata Case 2 WaardeGroen = serdata Case 3 WaardeBlauw = serdata Case Else GoTo SeriIn EndSelect dataOfGeval = 0 EndIf Context Restore '**************************************************************** End
The hex file of this code: link.
You-tube clip of the moodlight working:
(Sorry for the bad picture quality)
Jun 16 2008
Yesterday I finally got the code to read the temperature sensor value working. Today I’ve build a experimental setup with a small peltier. On the hot side I used an old Pentium 2 heat sink. On the cold side a piece of scrap aluminium with the temperature sensor attached to it.
The temperature controller working:

The temperature sensor mounted:

On the next picture u can see how the peltier is squeezed between the aluminum and the heat sink:

The heat sink is of an old P2 processor.
Component list:
| Name: | Value: |
| R1, R2, R3, R4, R5, R6, R7 | 180 Ohm |
| R9, R11, R12 | 1 KOhm |
| R13, R14 | 4k7 |
| C1, C2, C3, C4 | 100nF |
| 7Seg1, 7Seg2 | 7-Segment display CC |
| T1 | High power darlington |
| T3, T4 | BC547 |
| VR1 | 7805 |
| IC1 | PIC16F628 |
| IC2 | TC74A0 |
The code:
Device 16F628A Config WDT_OFF, PWRTE_ON, MCLRE_OFF, INTRC_OSC_NOCLKOUT, LVP_off ALL_DIGITAL = true '**************************************************************** Symbol digit1 = PORTB.5 Symbol digit2 = PORTA.1 Symbol digitA = PORTA.0 Symbol digitB = PORTA.7 Symbol digitC = PORTA.2 Symbol digitD = PORTB.6 Symbol digitE = PORTB.3 Symbol digitF = PORTA.6 Symbol digitG = PORTB.2 Symbol peltier = PORTB.4 Symbol SCL = PORTB.0 Symbol SDA = PORTB.1 Dim getal1 As Byte Dim getal2 As Byte Dim getal As Byte Dim index As Byte Dim temperatuur As Byte Symbol gewenst = 10 '**************************************************************** init: Clear I2Cin SDA,SCL,$90,[$00] '**************************************************************** main: While 1 = 1 GoSub sensorIn getal1 = temperatuur / 10 getal2 = (temperatuur - (getal1 * 10)) GoSub dispUit If temperatuur < gewenst Then Low peltier Else High peltier EndIf Wend '**************************************************************** sensorIn: I2Cin SDA, SCL,$91,[temperatuur] Return '**************************************************************** dispUit: ' A ' F B ' G ' E C ' D For index = 0 To 1 If index = 0 Then getal = getal1 High digit1 EndIf If index = 1 Then High digit2 getal = getal2 EndIf Select getal Case 0 High digitA High digitB High digitC High digitD High digitE High digitF Low digitG Case 1 Low digitA High digitB High digitC Low digitD Low digitE Low digitF Low digitG Case 2 High digitA High digitB Low digitC High digitD High digitE Low digitF High digitG Case 3 High digitA High digitB High digitC High digitD Low digitE Low digitF High digitG Case 4 Low digitA High digitB High digitC Low digitD Low digitE High digitF High digitG Case 5 High digitA Low digitB High digitC High digitD Low digitE High digitF High digitG Case 6 High digitA Low digitB High digitC High digitD High digitE High digitF High digitG Case 7 High digitA High digitB High digitC Low digitD Low digitE Low digitF Low digitG Case 8 High digitA High digitB High digitC High digitD High digitE High digitF High digitG Case 9 High digitA High digitB High digitC High digitD Low digitE High digitF High digitG EndSelect DelayMS 2 Low digitA Low digitB Low digitC Low digitD Low digitE Low digitF Low digitG Low digit1 Low digit2 Next Return '**************************************************************** End
If I have some time in the future maybe I will write a program of a PID controller.
Jun 18 2008
Today I mounted an aluminium plate to my Z-axis for the connection between the Z and X axis. Then I made some slide bearings for on the rails of the Y-axis. The slide bearings are mounted on the back on the aluminium plate.




Jun 20 2008
The last couple of days I’ve been busy making a table for my cnc. I already mounted the Y-axis.


Jun 30 2008
Some time ago I saw Turbokeu’s his mini power supply, and I thought “I can build a smaller one”. A month later I got an enclosure from a 12Vdc => 230Vac inverter (Thanks Jeroen!). This case was perfect for my mini psu. The volume off Turbokeu his supply is 1323cm³and mine will be 588cm³.
The circuit I used is based on an article Elektor published in march 98 (Called “Regelbare voeding” in Dutch). The displays are DPM125 witch I bought at an electronics flea market. The power supply delivers 3-24V at 1A. But this is only for short times because the case is used as heat sink.
Circuit mainboard:
Circuit display supply:
Pcb mainboard:
Pcb display supply:

Part list (only from the mainboard):
| R1 | 1K 1206 |
| R2, R3 | 47K 0805 |
| R4, R6 | 270K 0805 |
| R5 | 3K9 0805 |
| R7 | 15K 0805 |
| R8, R9, R14 | 4K7 0805 |
| R10, R11 | 220R 0805 |
| R12, R13 | 1R 1W |
| R15 | 3K3 1W |
| C1 | 4700µF |
| C2, C4, C5, C6, C7 | 100nF 0805 |
| C3 | 100µF |
| D1, D2, D3, D4, D6, D9 | 1N4007 SMD DO214BA |
| D5, D7 | BAT85 |
| D8 | 5V6 zener |
| IC1, IC2 | TLC271 |
| IC3 | 78L09 |
| POT1, POT2 | 1K |
| Q1, Q2 | IRF540 |
| TR1 | transformer |
Pictures:

The top side of the mainboard:

Bottom side:

Bottom side of the display supply:

Top side:

Here you can see how much space is left
:


Closed:


2 pictures with my hand as size reference.

