De ATTiny is €3,13 per stuk (incl BTW) bij afname van 10+ bij Farnell
MAH heeft net een IA gestart dus daar zou je mee kunnen liften.
Dit is daar het goedkoopste pakketje sockets.
De ATTiny is €3,13 per stuk (incl BTW) bij afname van 10+ bij Farnell
MAH heeft net een IA gestart dus daar zou je mee kunnen liften.
Dit is daar het goedkoopste pakketje sockets.
Bestel ze bij mouser:
Mouser-onderdeelnr. 556-ATTINY861V10PU 25 @ 1.63 excl btw.
De weerstanden kun je daar ook bestellen:
Stroomsensorweerstanden - doorvoergat 0.01ohm 5watt 5%
Mouser-onderdeelnr. 652-PWR44122SDR0100J 10 @ 1.04 excl btw
of smd:
Mouser-onderdeelnr. 652-CRL2512FUR010ELF
Stroomsensorweerstanden - SMD 1W 0.01ohm 1% 10@ 0.37 excl btw
Kom je boven de 75 Euro dan geen verzendkosten.
Neem anders even per mail contact op, misschien kunnen we samen wat bestellen.
[Bericht gewijzigd door Roland van Leusden op 25 november 2011 14:31:31 (14%)
Je hebt als het goed is een mailtje ontvangen.
Groet Diver
Roland,
Ik probeer om de Current measure inputs te verplaatsen van PA1 en PA2 naar PA4 en PA5 om zo PA2 vrij te krijgen voor de SCL van de I2C die ik wil gaan inbakken. Nu moet ook de "Getadc(142)" vervangen worden voor "Getadc(?)" Ik heb geprobeerd om het comment stukje wat er staat de ontcijferen om zo de juist waarde voor ? te ontdekken maar ik kom er niet echt uit. Kan jij me uitleggen hoe je aan de "b10001110" (Admux bit)komt die je naar decimaal vertaald hebt voor in de Getadc?
Groet Diver
Misschien mijn vorige post iets te voorbarig. Ik ben net even de datasheet in gedoken en kom op de volgende uitkomst:
Current measure Positive word PA7
Current measure Negative word PA6
Mux 5:0 wordt dan b010111
Daarvoor komt de 1.1V ref met b10
Het totaal word dan b10010111
Omzetten naar decimaal d151
De code wordt dan Current = Getadc(151)
Klopt dit of heb ik alsnog zitten dromen?
Groet Diver
Klopt helemaal. Inmiddels staat ie bij mij 1/2 op breadbord, kwam dit weekend nog wat anders tussen door. Morgenavond verder want vanavond heb ik cursus.
bascom code:
'******************************************************************************
' *
' Filename: attiny861_volt.bas *
' Date: 25-11-2011 *
' File Version: 0.1 *
' *
' Author: Roland van Leusden *
' *
'******************************************************************************
'********** Configuration Settings **********
$regfile = "attiny861.dat" ' use ATTiny861
$crystal = 8000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portb.3 , Db5 = Portb.4 , Db6 = Portb.5 , Db7 = Portb.6 , E = Portb.2 , Rs = Portb.1
Deflcdchar [0] , 7 , 5 , 5 , 7 , 32 , 32 , 32 , 32 ' For temperature sign
Dim Voltage As Word
Dim Current As Word
Dim Temp As Word
Dim Temperature As Word
Dim Raw_adc As Word
Dim Adc_calc As Word
Dim Admux_store As Byte
Dim Power_out As Long
Dim Fan_on As Byte
Dim Voltage_lcd As String * 5
Dim Current_lcd As String * 5
Dim Temp_lcd As String * 5
Dim Power_lcd As String * 5
'*********** Functions ***********************
Declare Sub Do_measurement()
'*********** Main program ********************
Do
Call Do_measurement()
'*********** Voltage ******************
Voltage = Voltage * 47 'Max voltage = 1023 * 47 = 48081
Shift Voltage , Right , 4 'Voltage / 16 => max 3004
Temp_lcd = Str(voltage)
If Voltage >= 1000 Then
Voltage_lcd = Format(temp_lcd , "00.00")
Else
Voltage_lcd = Format(temp_lcd , " 0.00") 'remove preceding zero
End If
'*********** Current ******************
Current = Current * 39 'max current = 1023 * 39 = 39879
Shift Current , Right , 3 'current / 8 => 4984
Temp_lcd = Str(current)
If Current >= 1000 Then
Current_lcd = Format(temp_lcd , "0.000") 'Amps
Else
Current_lcd = Format(temp_lcd , "000") 'mA
End If
'*********** Power ********************
Power_out = Voltage * Current
Power_out = Power_out / 1000
Power_lcd = Str(power_out)
If Power_out >= 1000 Then
Power_lcd = Format(power_lcd , "00.00")
Else
Power_lcd = Format(power_lcd , "0.00") 'remove preceding zero
End If
'*********** Temperature **************
'Vref 1.1V LM35 => 10mV / Degree => max 110 degrees
Temperature = Temperature * 10 'max: 10230
Temperature = Temperature / 93 'max: 110
'*********** Display ******************
Cls
Upperline
If Current >= 1000 Then
Lcd Voltage_lcd ; " V " ; Current_lcd ; " A"
Else
Lcd Voltage_lcd ; " V " ; Current_lcd ; " mA"
End If
Lowerline
Lcd Power_lcd ; " VA " ; Temperature ; Chr(0) ; "C"
Waitms 100
'*********** Fan Controll **************
'If Temperature >= 35 Then
' Oc1a = 128
' Fan_on = 1
' End If
' If Temperature <= 30 And Fan_on = 1 Then
' Oc1a = 0
' End If
Loop
End 'end program
'*********** Functions ***********************
Sub Do_measurement()
Config Adc = Single , Prescaler = Auto , Reference = Internal_1.1
Start Adc
'now read the temperature sensor
Temperature = Getadc(3) 'LM35 10mV / degree
'now read A/D value from channel 0 (Voltage / Pin 20 / PA0)
Voltage = Getadc(0)
'The first conversion results after changing settings should be discarded.
Voltage = Getadc(0)
' Settings for full range: I = 5A Rshunt = 0.011 Ohm Gain = 20 => 5 * 0.011 * 20 = 1,1V (Vref)
' MUX5:0 Differential Input Positive Negative Gain
' 100100 ADC1 (PA1) ADC2 (PA2) 20x
'now read A/D value from channel 1,2 (Current / Pin 18 & 19 / PA1 & PA2)
Current = Getadc(&B100100)
'The first conversion results after changing reference settings should be discarded.
Current = Getadc(&B100100)
Stop Adc
End Sub
Moet nog wel geijkt worden.
De code wordt dan Current = Getadc(151)
Blijkt niet te kloppen, je hoeft aan Getadc alleen de waarde van MUX5 mee te geven, dus zo:
bascom code:
' MUX5:0 Differential Input Positive Negative Gain
' 100100 ADC1 (PA1) ADC2 (PA2) 20x
Current = Getadc(&B100100)
Ah kijk, dat is nog eens handig
Voor mij wordt dat stukje dan:
bascom code:
Current = Getadc(&B010111)
Ik heb gister van een vriend een programmer geleend dus als Mouser binnenkomt kan ik ook gaan bouwen . Ik ben benieuwd of het gaat lukken.
Gisterenavond nog wat zitten spelen, over het spanningsgedeelte ben ik zeer tevreden, over de range 1 - 30V gemiddeld +/- 5mV afwijking tov een fluke 27 na ijking bij 15V.
Het stroomgedeelte is wat minder, vooral bij lage stromen (<1A) gaat het mis. Niet zo vreemd aangezien er over 0.01Ω maar 1mV staat bij 100mA. De offset van de interne opamp gaat dan ook een rol spelen.
Een optie waar ik nu mee speel is om een 2de weerstand (0,1Ω )in serie te zetten en deze met een mosfet te overbruggen vanaf een bepaalde stroom.
En wat als je je nulpunt ook calibreert? (eerst calibreren bij 1A of zo, en dan kijken wat je bij 100mA aangeeft, en dan het nulpunt afstellen zodat het gaat kloppen)
Gisterenavond onderstaande code geladen om de interne offset te meten:
bascom code:
$regfile = "attiny861.dat" ' use ATTiny861
$crystal = 1000000
Dim Adc1a_offset As Word
Dim Adc2a_offset As Word
Dim Adc1b_offset As Word
Dim Adc2b_offset As Word
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portb.3 , Db5 = Portb.4 , Db6 = Portb.5 , Db7 = Portb.6 , E = Portb.2 , Rs = Portb.1
Do
Config Adc = Single , Prescaler = Auto , Reference = Internal_1.1
Start Adc
Adc1a_offset = Getadc(&B111010)'ADC1
Adc1a_offset = Getadc(&B111010)
Adc2a_offset = Getadc(&B111011)'ADC2
Adc2a_offset = Getadc(&B111011)
Set Adcsrb.6 'Gain 32x
Adc1b_offset = Getadc(&B111010)
Set Adcsrb.6
Adc1b_offset = Getadc(&B111010)
Set Adcsrb.6
Adc2b_offset = Getadc(&B111011)
Set Adcsrb.6
Adc2b_offset = Getadc(&B111011)
Reset Adcsrb.6
Stop Adc
Cls
Upperline
Lcd "20x " ; Adc1a_offset ; " " ; Adc2a_offset
Lowerline
Lcd "32x " ; Adc1b_offset ; " " ; Adc2b_offset
Wait 2
Loop
Kreeg waardes terug tussen 0 <-> 12, welke bij elke meting anders zijn. De hoogste waardes uiteraard bij 32x Gain.
Aangezien er in de hoofdlus toch een wachttijd van 100 ms zit voor het lcd zou de clock ook wel omlaag kunnen. Ik heb dan ook nog een testje gedaan met 1Mhz als clock ipv 8Mhz, de hoogste waarde werd toen 7.
Het is niet mijn bedoeling om een uiterst nauwkeurige meter te bouwen, wel wil ik de mogelijkheden van de Tiny zo goed mogelijk benutten.
Roland, met welk programma heb jij die tekeningen gemaakt? Zien er beter uit als mijn .txt tekeningen.
Kijk, ga ik mijn schema eens netjes digitaliseren zetten ipv allemaal losse volgekladderde A4'tjes
Ik heb mijn LCD en spanningsmeting nu werkend, voor vanavond weer een prima resultaat! Volgende week verder, eerst maar eens die software doorpluizen.
Dat spoeltje ziet er trouwens keurig uit!
Als je me je adres mailed, dan heb je dinsdag een paar vergelijkbare spoeltjes in je brievenbus. (10uH zal het ook wel doen).
Hmmm, staat een foutje in het shema, de LM35 hangt niet aan pin 17 (Aref) maar aan pin 14 (ADC3)
Nou, na lang wachten, een aantal onderdelen gebruikt die stiekem ergens anders voor waren... is het dan toch gelukt. Alles compleet op een breadboard geplaatst en na een beetje troubleshooten een mooi resultaat!
Nu nog eens proberen de load wat op te schroeven, kijken of de meter dan ook oploopt.
Het enige probleem is wel nog dat je het scherm ziet verversen... Ik zet binnenkort even een filmpje online, youtube ligt er even uit wegens onderhoud...
Iedereen alvast er bedankt voor de hulp om het zo ver te brengen!
Bij deze alsnog
YouTube
Ik wil deze panneel meter ook gaan maken maar kon de attiny861 niet vinden. Behalve bij farnell. Weet iemand waar ik hem kan kopen?
Overleden
Op 6 december 2011 20:59:29 schreef DiverAlpha:
Nou,
Het enige probleem is wel nog dat je het scherm ziet verversen... !
niet steeds het scherm wissen, zet die CLS, aan het begin en schrijf aleen de niewe data kwa waarde naar het scherm, niet de text
@ Tjans:
Goed plan, is erg leuk om te doen! Op dit topic zijn we momenteel 2 verschillende aan het bouwen, ik wil enkel een panelmeter die communiceert met een I2C bus. Roland is er een aan het bouwen die ook VA aangeeft en met een temperatuursensor een fan aanstuurt voor de koeling.
De ATtiny kan je ook bij mouser bestellen. Daar heb je alleen wel minimaal EUR 75 te bestellen anders heb je EUR 20 verzendkosten... Als je al je onderdelen daar wil kopen kom je (inc. behuizing) wel een eindje als je nog wat spares en andere onderdelen besteld. Je kunt er bijvoorbeeld ook je shunt weerstand bestellen. Als je er niet aan komt kun je ook met iemand anders samen bestellen, hebben Roland en ik ook gedaan.
@ Shiptronic:
Goeie tip, ga ik van het weekend denk ik wel even proberen! Waar in de code kan je hem dan het beste plaatsen, om buiten je loop te houden?