Arduino paneelmeter

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%)

It's the rule that you live by and die for It's the one thing you can't deny Even though you don't know what the price is. It is justified.

Je hebt als het goed is een mailtje ontvangen.

Groet Diver

Diep nadenken is een kwestie van de goede baan uitkiezen

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

Diep nadenken is een kwestie van de goede baan uitkiezen

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

Diep nadenken is een kwestie van de goede baan uitkiezen

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.

It's the rule that you live by and die for It's the one thing you can't deny Even though you don't know what the price is. It is justified.

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

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.

It's the rule that you live by and die for It's the one thing you can't deny Even though you don't know what the price is. It is justified.

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)
It's the rule that you live by and die for It's the one thing you can't deny Even though you don't know what the price is. It is justified.

Ah kijk, dat is nog eens handig :D

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 :D. Ik ben benieuwd of het gaat lukken.

Diep nadenken is een kwestie van de goede baan uitkiezen

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.

It's the rule that you live by and die for It's the one thing you can't deny Even though you don't know what the price is. It is justified.

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)

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/

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.

It's the rule that you live by and die for It's the one thing you can't deny Even though you don't know what the price is. It is justified.

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.

It's the rule that you live by and die for It's the one thing you can't deny Even though you don't know what the price is. It is justified.

Roland, met welk programma heb jij die tekeningen gemaakt? Zien er beter uit als mijn .txt tekeningen.

Diep nadenken is een kwestie van de goede baan uitkiezen

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

It's the rule that you live by and die for It's the one thing you can't deny Even though you don't know what the price is. It is justified.

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!

Diep nadenken is een kwestie van de goede baan uitkiezen

Als je me je adres mailed, dan heb je dinsdag een paar vergelijkbare spoeltjes in je brievenbus. (10uH zal het ook wel doen).

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/

Hmmm, staat een foutje in het shema, de LM35 hangt niet aan pin 17 (Aref) maar aan pin 14 (ADC3)

It's the rule that you live by and die for It's the one thing you can't deny Even though you don't know what the price is. It is justified.

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!

Diep nadenken is een kwestie van de goede baan uitkiezen
Diep nadenken is een kwestie van de goede baan uitkiezen

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

Shiptronic

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 ;)

Wie de vraag stelt, zal met het antwoord moeten leren leven.

@ 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?

Diep nadenken is een kwestie van de goede baan uitkiezen

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.

It's the rule that you live by and die for It's the one thing you can't deny Even though you don't know what the price is. It is justified.