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 (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.

http://www.uploadarchief.net/files/download/resized/voltmeter_attiny861.jpg

'******************************************************************************
'                                                                             *
'    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:

' MUX5:0 Differential Input Positive          Negative    Gain
' 100100                    ADC1 (PA1)        ADC2 (PA2)  20x
 
Current = Getadc(&B100100)

Ah kijk, dat is nog eens handig :D

Voor mij wordt dat stukje dan:


Current = Getadc(&B010111)

Ik heb gister van een vriend een programmer geleend dus als Mouser binnenkomt kan ik ook gaan bouwen :D. 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)

Shema:

http://www.uploadarchief.net/files/download/resized/voltmeter.png

Op mijn huidige proto zit nog een potmeter voor de stroomweerstand, maar dat kun je beter in de software doen.

Gisterenavond onderstaande code geladen om de interne offset te meten:

$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.

Met ExpressPcb. Bij deze trouwens een nieuwe versie van het shema, door extra ontkoppeling van Avcc met een spoeltje ben ik het offset probleem kwijt.

http://www.uploadarchief.net/files/download/resized/voltmeter_v1.1.png

Spoeltje ziet er uit als een weerstand:

http://t0.gstatic.com/images?q=tbn:ANd9GcQQbsR828IbXKS5yDb9vFp1IMtNOMW1pF48mzRrKEF75-_mGs6W7NN-UulY

Kijk, ga ik mijn schema eens netjes digitaliseren zetten ipv allemaal losse volgekladderde A4'tjes :D

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!


http://www.diveralpha.nl/images/photoalbum/panelmeter_t2.jpg

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!

Ik wil deze panneel meter ook gaan maken maar kon de attiny861 niet vinden. Behalve bij farnell. Weet iemand waar ik hem kan kopen?

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?

Printje gemaakt:

http://www.uploadarchief.net/files/download/resized/attiny861_print_1.jpg

http://www.uploadarchief.net/files/download/resized/attiny861_print_2.jpg

http://www.uploadarchief.net/files/download/resized/attiny861_pcb.jpg

Foto van de achterzijde van de print komt nog.