Categorie: Projecten

ESR-Meter Update

Ik heb nu de code werkend gekregen. Er is iets mis met picbasic waardoor de AD omzetting problemen geeft bij een 16f690. Daarom heb ik zelf een stukje code geschreven voor het “handmatig” uit te lezen.

De code:

'****************************************************************
'* Name : ESR_meter *
'* Author : [Stynus] *
'* Notice : Copyright (c) 2008 [www.elektronicastynus.be] *
'* : All Rights Reserved *
'* Date : 24/02/2009 *
'* Version : 1.1 *
'****************************************************************
'Config
 Device 16F690
 Config INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_OFF, MCLRE_OFF
 XTAL = 8
 OSCCON = %01110111

 Dim spanning As Word
 Dim esr As Float
 
 Declare LCD_DTPIN PORTC.4
 Declare LCD_ENPIN PORTC.3
 Declare LCD_RSPIN PORTB.6
 Declare LCD_LINES 2 

 TRISA.2 = 1 
 ADCON0 = %10000001
 ANSEL = %00000100 
 ANSELH = %00000000
 
 ADIN_RES = 10 
 ADIN_TAD = FRC 
 ADIN_STIME = 500 

 Symbol lcdTijd = 600
 Clear
 Cls
 Print At 1, 1, "ElektronicaStynu"
 Print At 2, 1, " ESR-Meter V1.2 "
 DelayMS lcdTijd
 Print At 1, 1, "lektronicaStynus"
 DelayMS lcdTijd
 Print At 1, 1, "ektronicaStynus."
 DelayMS lcdTijd
 Print At 1, 1, "ktronicaStynus.b"
 DelayMS lcdTijd
 Print At 1, 1, "tronicaStynus.be"
 DelayMS lcdTijd
 
 Cls
 Print At 1, 1, " ESR-Meter V1.2 " 
 Print At 2, 1, " ESR = , "
 Print At 2, 16, $FE,$40,$00,$0E,$11,$11,$11,$0A,$1B,$00


While 1 = 1 
 GoSub AD_in
 spanning = spanning - 480
 esr = spanning / 19
 If esr > 27 Then
 Print At 2, 9, "Open "
 Else 
 Print At 2, 9, DEC2 esr , " "
 EndIf
 DelayMS 550 

Wend
AD_in:
 ADCON0 = %10001001 
 DelayMS 510
 ADCON0.1 = 1 
 While ADCON0.1 = 1 : Wend
 spanning = 0
 spanning.HighByte = ADRESH
 spanning.LowByte = ADRESL

Return
End

De hex file

IN-12 Nixie klok Update

Ik heb beslist om niet op Robert te wachten voor de code enzo. Dus heb ik zelf wat ontworpen en gemaakt. De klok werkt nu met een pic16f628a. De tijd wordt bijgehouden door een DS1307 en de temperatuur wordt gemeten door een TC74. Omdat de 16f628a niet genoeg uitgangen heeft heb ik er 4 74HC595 schuifregisters bijgezet, zo kan ik alle nixies en neonlampjes met 3 uitgangen aansturen.

Schema:

schema

Pcb layout:

pcb

Foto van de opgebouwde print:

print

Filmpje van de schakeling in werking:

De code:

Device  16F628A
Config  INTRC_OSC_NOCLKOUT, WDT_off, PWRTE_off, LVP_off, MCLRE_on
ALL_DIGITAL     TRUE 
PORTB_PULLUPS   = On
'In en uitgangen
    'Nixies en neons
        Symbol  klok      = PORTA.1
        Symbol  ZetVast   = PORTA.0
        Symbol  Data_Pin  = PORTA.2
    'Temperatuursensor en RTC
        Symbol  SDA       = PORTB.4
        Symbol  SLC       = PORTB.3
    'Knoppen
        Symbol  KnopR     = PORTB.7 : TRISB.7 = 1
        Symbol  KnopM     = PORTB.6 : TRISB.6 = 1
        Symbol  KnopL     = PORTB.5 : TRISB.5 = 1

'Variabelen declareren
    Dim     Teller          As Byte
    Dim     Temp1           As Byte
    Dim     Temp2           As Byte 
    Dim     BCD_Opt         As Byte   
    Dim     index           As Byte
    Dim     Seconden        As Byte
    Dim     Minuten         As Byte
    Dim     Uren            As Byte
    Dim     Datum           As Byte
    Dim     Maand           As Byte
    Dim     Jaar            As Byte
    Dim     Temperatuur     As Byte
    Dim     neon            As Byte
    Symbol  Reg_Seconden    =  $00 
    Symbol  Reg_Minuten     =  $01
    Symbol  Reg_Uren        =  $02
    Symbol  Reg_Dag         =  $03
    Symbol  Reg_Datum       =  $04
    Symbol  Reg_Maand       =  $05
    Symbol  Reg_Jaar        =  $06
    Symbol  Lezen           =  %11010001
    Symbol  Schrijven       =  %11010000

    Clear

    While 1 = 1 
        Tijd:
            For index = 0 To 50
                I2CIN  SDA, SLC, Lezen, Reg_Uren, [Uren]     
                I2CIN  SDA, SLC, Lezen, Reg_Minuten, [Minuten]
                I2CIN  SDA, SLC, Lezen, Reg_Seconden, [Seconden] 
                neon = %01111001
                
                SHOut Data_Pin, klok, msbfirst, [neon \ 8]
                DelayUS 20
                SHOut Data_Pin, klok, msbfirst, [Uren \ 8]
                DelayUS 20
                SHOut Data_Pin, klok, msbfirst, [Minuten \ 8]   
                DelayUS 20
                SHOut Data_Pin, klok, msbfirst, [Seconden \ 8]   
                High ZetVast
                DelayUS 20
                Low ZetVast
                If KnopR = 0 Or KnopM = 0 Or KnopL = 0 Then
                    GoSub TijdInst
                EndIf
                DelayMS 200
            Next
        Date:
            For index = 0 To 10
                I2CIN  SDA, SLC, Lezen, Reg_Jaar, [Jaar]
                I2CIN  SDA, SLC, Lezen, Reg_Maand, [Maand]
                I2CIN  SDA, SLC, Lezen, Reg_Datum, [Datum] 
                neon = %01111010
                    
                SHOut Data_Pin, klok, msbfirst, [neon \ 8]
                DelayUS 20
                SHOut Data_Pin, klok, msbfirst, [Datum \ 8]
                DelayUS 20
                SHOut Data_Pin, klok, msbfirst, [Maand \ 8]   
                DelayUS 20
                SHOut Data_Pin, klok, msbfirst, [Jaar \ 8]   
                High ZetVast
                DelayUS 20
                Low ZetVast
                If KnopR = 0 Or KnopM = 0 Or KnopL = 0 Then
                    GoSub DatumInst
                EndIf 
                DelayMS 200
            Next       
        Temp: 
            For index = 0 To 10
                I2Cin SDA, SLC,$91,[Temperatuur] 
                Temp1 = Temperatuur / 10
                Temp2 = (Temperatuur - (Temp1 * 10))
                Temperatuur = Temp2
                Temperatuur.7 = Temp1.3 
                Temperatuur.6 = Temp1.2
                Temperatuur.5 = Temp1.1
                Temperatuur.4 = Temp1.0
                   
                neon = %00100100
                
                SHOut Data_Pin, klok, msbfirst, [neon \ 8]
                DelayUS 20        
                SHOut Data_Pin, klok, msbfirst, [$FF \ 8]
                DelayUS 20
                SHOut Data_Pin, klok, msbfirst, [Temperatuur \ 8]   
                DelayUS 20
                SHOut Data_Pin, klok, msbfirst, [$FF \ 8]   
                High ZetVast
                DelayUS 20
                Low ZetVast
                DelayMS 200
            Next
    Wend  

TijdInst:
    I2CIN  SDA, SLC, Lezen, Reg_Uren, [Uren]     
    I2CIN  SDA, SLC, Lezen, Reg_Minuten, [Minuten]
    I2CIN  SDA, SLC, Lezen, Reg_Seconden, [Seconden] 
    neon = %01111001
    While 1 = 1 
        SHOut Data_Pin, klok, msbfirst, [neon \ 8]
        DelayUS 20
        SHOut Data_Pin, klok, msbfirst, [Uren \ 8]
        DelayUS 20
        SHOut Data_Pin, klok, msbfirst, [Minuten \ 8]   
        DelayUS 20
        SHOut Data_Pin, klok, msbfirst, [Seconden \ 8]   
        High ZetVast
        DelayUS 20
        Low ZetVast
        DelayMS 200
        Inc Teller
        If KnopR = 0 Then
            BCD_Opt = Seconden
            GoSub bcd_tellen
            Seconden = BCD_Opt
            Teller = 0
        EndIf
        If KnopM = 0 Then
            BCD_Opt = Minuten
            GoSub bcd_tellen
            Minuten = BCD_Opt
            Teller = 0
        EndIf
        If KnopL = 0 Then
            BCD_Opt = Uren
            GoSub bcd_uur
            Uren = BCD_Opt
            Teller = 0
        EndIf
        DelayMS 250
        If Teller = 12 Then Break
    Wend
    'Wegschrijven
    I2COUT SDA, SLC, Schrijven ,Reg_Seconden, [Seconden]
    I2COUT SDA, SLC, Schrijven ,Reg_Minuten, [Minuten]
    I2COUT SDA, SLC, Schrijven ,Reg_Uren, [Uren]

Return
bcd_tellen:
    Temp1 = BCD_Opt & %00001111 'Xor
    Temp2 = BCD_Opt - Temp1
    Temp2 = Temp2 >> 4
    Inc Temp1
    If Temp1 > 9 Then
        Temp1 = 0
        Inc Temp2
        If Temp2 > 5 Then
            Temp2 = 0
        EndIf
    EndIf  
    Temp2   = Temp2 << 4   
    BCD_Opt = Temp2 + Temp1

Return   
bcd_uur:
    Temp1 = BCD_Opt & %00001111 'Laagste bits doorlaten 
    Temp2 = BCD_Opt - Temp1
    Temp2 = Temp2 >> 4
    Inc Temp1
    If Temp1 > 9 Then
        Temp1 = 0
        Inc Temp2
        If Temp2 > 5 Then
            Temp2 = 0
        EndIf
    EndIf  
    Temp2   = Temp2 << 4   
    BCD_Opt = Temp2 + Temp1
    If BCD_Opt > 23 Then
        BCD_Opt = 0
    EndIf
Return    

DatumInst:
    I2CIN  SDA, SLC, Lezen, Reg_Jaar, [Jaar]
    I2CIN  SDA, SLC, Lezen, Reg_Maand, [Maand]
    I2CIN  SDA, SLC, Lezen, Reg_Datum, [Datum]
    neon = %01111010
    While 1 = 1 
        SHOut Data_Pin, klok, msbfirst, [neon \ 8]
        DelayUS 20
        SHOut Data_Pin, klok, msbfirst, [Datum \ 8]
        DelayUS 20
        SHOut Data_Pin, klok, msbfirst, [Maand \ 8]   
        DelayUS 20
        SHOut Data_Pin, klok, msbfirst, [Jaar \ 8]    
        High ZetVast
        DelayUS 20
        Low ZetVast
        DelayMS 200
        Inc Teller
        If KnopR = 0 Then
            BCD_Opt = Jaar
            GoSub bcd_jaar
            Jaar = BCD_Opt
            Teller = 0
        EndIf
        If KnopM = 0 Then
            BCD_Opt = Maand
            GoSub bcd_Maand
            Maand = BCD_Opt
            Teller = 0
        EndIf
        If KnopL = 0 Then
            BCD_Opt = Datum
            GoSub bcd_Datum
            Datum = BCD_Opt
            Teller = 0
        EndIf
        DelayMS 250
        If Teller = 12 Then Break
    Wend
    'Wegschrijven
    I2COUT SDA, SLC, Schrijven ,Reg_Jaar, [Jaar]
    I2COUT SDA, SLC, Schrijven ,Reg_Maand, [Maand]
    I2COUT SDA, SLC, Schrijven ,Reg_Datum, [Datum]

Return
bcd_jaar:
    Temp1 = BCD_Opt & %00001111 'Xor
    Temp2 = BCD_Opt - Temp1
    Temp2 = Temp2 >> 4
    Inc Temp1
    If Temp1 > 9 Then
        Temp1 = 0
        Inc Temp2
        If Temp2 > 9 Then
            Temp2 = 0
        EndIf
    EndIf  
    Temp2   = Temp2 << 4   
    BCD_Opt = Temp2 + Temp1

Return  
bcd_Maand:
   Temp1 = BCD_Opt & %00001111 'Laagste bits doorlaten 
    Temp2 = BCD_Opt - Temp1
    Temp2 = Temp2 >> 4
    Inc Temp1
    If Temp1 > 9 Then
        Temp1 = 0
        Inc Temp2
    EndIf  
    Temp2   = Temp2 << 4   
    BCD_Opt = Temp2 + Temp1
    If BCD_Opt = $13 Then
        BCD_Opt = 1
    EndIf    
    If BCD_Opt = 0 Then
        BCD_Opt = 1
    EndIf
Return

bcd_Datum:
   Temp1 = BCD_Opt & %00001111 'Laagste bits doorlaten 
    Temp2 = BCD_Opt - Temp1
    Temp2 = Temp2 >> 4
    Inc Temp1
    If Temp1 > 9 Then
        Temp1 = 0
        Inc Temp2
    EndIf  
    Temp2   = Temp2 << 4   
    BCD_Opt = Temp2 + Temp1
    If BCD_Opt = $32 Then
        BCD_Opt = 1
    EndIf
    If BCD_Opt = 0 Then
        BCD_Opt = 1
    EndIf
Return
End

De hex file: Link.

Nu nog iemand zoeken om de behuizing te frezen uit een blok hout en het project is af.

Reflow oven

Na het zien van Xantus zijn reflow toaster kreeg ik zin om zelf ook zoiets in elkaar te knutselen. Een paar weken later waren er in het kruidvat snacktoasters in de aanbieding. Dus heb ik er toen zo 1 gekocht.

Oven aanbieding kruidvat

 

Het vermogen is iets lager dan dat van de toaster van Xantus maar een testje wees uit dat dit ook genoeg is.

 

Het gedeelte waarin de elektronica moet komen is niet breed genoeg, dus heb ik dat 4cm breder gemaakt.

oven breder

 

Nu past er een 2*16 lcd en een toetsenbordje in:

lcd toetsenbord

 

De printplaat voor de aansturing is nog niet klaar. Maar de oven zal werken op basis van een 16F877A. Ik ga er 4 modes in programeren Reflow (Print solderen); Resolder (Print met slechte contacten opnieuw solderen); Preheat (Print opwarmen); Fix temp (Vaste instelbare temperatuur)

Ik voorzie ook een interface met de pc via RS232 om zo de temeratuur uit te lezen en eventueel in te stellen.

 

Ondertussen is er een stuk nieuwe kap gemaakt met gaten voor de lcd enzo. Dat staat nu in de grondverf en moet denk ik nog wel een paar lagen krijgen. Als dat klaar is zullen er foto’s volgen.

Reflow oven Update

Ik heb vandaag de printplaat ge-etst en bestukt.

 

Schema:

schema reflow oven

 

Pcb:

reflow ven pcb layout

 

Foto’s:

Reflow oven print

Reflow oven print

Reflow oven print

Functiegenerator Update

Intussen is er al heel wat aan de functiegenerator verandert. Ik had alleen beslist alles pas hier heen te zetten als alles volledig klaar was. Dat is door wat problemen nu pas. Eerst wou er niks aan werken. Bleek het probleem een weerstand te zijn die ik vergeten was. Toen stond de uitgangsopamp zicht zelf op te blazen. Vermoedelijk door oscillatie. Ik heb die nu vervangen door een opa2677.

 

Het schema:

schema functiegen

 

De nieuwe print half opgebouwd:

Functiegenerator

PCB layout wordt NIET vrijgegeven! Dit wegens paar foutjes erin.

 

Ingebouwd:

Functiegenerator

 

Nieuwe knoppen:

Functiegenerator

ZIF-Blokje

Een tijdje geleden had ik een kastje gemaakt met een zif voet zodat ik niet tekens een breadboard moet nemen/leeg maken, om een microcontroller die niet in circuit geprogrammeerd kan worden te programmeren. Bezoekers van de SchemaTheek zullen dit project daar al wel eerder op het forum voorbij hebben zien komen. Ik was van plan het toen ook hier te posten maar ben dat vergeten.

Schema:

Schema ZIF-Blokje

 

De pics komen er op deze manier in:

ZIF-Blokje

Foto’s:
Binnenkant:

ZIF-Blokje

Buitenkant:

PICKIT2 ZIF-Blokje

ZIF PICKIT 2

CNC boor/frees machine V2 – Elektronica – Update

Ik heb ondertussen een Proxxon micromot gekocht. Die micromot heeft geen toerental regeling dus heb ik zelf wat in elkaar gezet uit sloop onderdelen op basis van een LM338.

schema

 

Foto’s:

De regeling:

Proxxon regeling

Proxxon regeling

 

De Proxxon:

proxxon micromot

 

De klem die ik hiervoor heb gemaakt:

proxxon klem

 

En een filmpje waarin de x as werkend te zien is:

De Y as werkt ondertussen ook al maar bij de z as is iets mis met de stappenmotor.

Differentiële Probe

Met deze schakeling kan je met een scoop die geaard is aan het lichtnet meten zonder dat de aardlekschakelaar uitvalt. Het schema heb ik van op Pros zijn site vandaan.

Link: http://prosje.be/CO/Schemas/slides/DiffProbe.html

De schema’s met pcb lay-outs:

Print 1:

Differentiële ProbeDifferentiële ProbePDF

Print 2:

Differentiële ProbeDifferentiële ProbePDF

Print 3:

Differentiële ProbeDifferentiële ProbePDF

Foto’s:

Differentiële ProbeDifferentiële ProbeDifferentiële ProbeDifferentiële Probe

Servo Positioning Unit

Aangezien ik in het derde jaar bachelor elektronica zit moet ik dit jaar een stage doen. Die stage heb ik bij de school waar ik het middelbaar gezeten heb gedaan. Ik heb deze stage samen met Rob gedaan. (Zelfde Rob als bij het pic bestuurde auto project).

Onze opdracht bestaat er uit om een Yamaha servodrive aan te sturen voor een robotarm samen
met het programmeren van twee transportbanden met geïntegreerde lift.

De robotarm moet een werkstuk uit een magazijn nemen. Daarna moet deze robotarm het
werkstuk op de bovenste transportband leggen. Dit werkstuk wordt dan via de lift getransporteerd
naar de onderste transportband. Op de onderste transportband wordt er dan een bewerking
uitgevoerd op het werkstuk. Hierna gaat het bewerkte werkstuk met de lift terug omhoog en wordt
deze terug opgenomen door de robotarm. Vervolgens wordt het bewerkte werkstuk ergens
gestockeerd. Het bewerken van het plaatje behoort echter niet tot onze opdracht.

Overzicht

Een filmpje van de handelingen van de robot zonder werkstuk. Het magazijn ontbreekt hier ook nog:

Enkele foto’s van onderdelen:

De robot arm wordt aangestuurd door een servo drive van Yamaha type QRCX-E.

Servo drive

De servo drive en de rest van de robot wordt aangestuurd door een S7-313C.

PLC

De bek van de robotarm:

bek

Meer foto’s kan je hier vinden: Link.

Het boekje dat we hiervoor geschreven hebben: Link.

 

Servo Positioning Unit Update

Het veiligheidshek is ondertussen ook afgemaakt. Enkele foto’s:

spuspu

 

Filmpje van de robot in werking: