| Author |
Message
|
Matizz Poziom 17

Joined: 10 Mar 2006 Posts: 398 Location: Zawiercie
|
#1
25 Dec 2007 22:45 [BASCOM] Miernik do zasilacza |
|
|
|
Witam
Popełniłem ostatnio źródło prądowe do testowania zasilaczy. Wszystko chodzi fajnie, ale jak wiadomo apetyt rośnie w miarę jedzenia, więc pomyślałem że przydał by mi się do tego jakiś fajny miernik LCD żeby nie przełączać cały czas miernika uniwersalnego.
W pisaniu programów jestem nowicjuszem- umiem napisać program który gasi i zapala led, a największe co zrobiłem to program so sterowania silnikiem krokowym.
Założenia:
wyświetlanie:
napięcie wejściowe,
prąd obciążenia,
moc,
rezystancje źródła
napięcie minimalne poniżej którego źródło się wyłączy,
(potem planuje dodać jeszcze pomiar temp radiatora).
Uwe 450V, Iwe 0.2A,
Przeglądnąłem kilka projektów woltomierzy i wyszedł mi taki kod:
| Code: |
$regfile = "m8def.DAT"
$crystal = 8000000
Config Lcd = 20 * 2
Config Lcdpin = Pin , Db4 = Portd.5 , Db5 = Portd.6 , Db6 = Portd.7 , Db7 = Portb.0 , E = Portd.3 , Rs = Portd.2 'konfiguracja linii
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Cursor Off
Dim Wart_acv As Word
Dim Wart_aca As Word
Dim Wart_vlim As Word
Dim Volt As Single
Dim Amp As Single
Dim Pow As Single
Dim Rez As Single
Dim V As Single
Dim A As Single
Dim P As Single
Dim R As Single
Dim Vod As Single
Start Adc
Do
Wart_acv = Getadc(0)
Wart_aca = Getadc(1)
Wart_vlim = Getadc(2)
Cls
Volt = Wart_acv * 0.49 `na wejściu tego ADC będzie dzielnik przez 100
V = Fusing(volt , "#.##")
Locate 1 , 1
Lcd "V" ; V ; V
Amp = Wart_aca * 0.0049
A = Fusing(amp , "#.##")
Locate 1 , 8
Lcd "A" ; A ; A
Pow = Volt * Amp
P = Fusing(pow , "#.##")
Locate 1 , 15
Lcd "P" ; P ; W
Vlim = Wart_vlim * 0.49
Vod = Fusing(vlim , "#.#")
Locate 2 , 1
Lcd "Vlim" ; Vod ; V
Rez = Volt / Amp
R = Fusing(rez , "#.#")
Locate 2 , 10
Lcd "R" ; R ; Ohm
Waitms 500
Loop
End |
Niestety moja niewiedza w pisaniu programów jest ogromna więc program nie chce się skompilować bo wyskakują błędy:
Error 42 w linii 48
Error 31 w linii 50
Nie wiem też czy samo wyświetlanie na LCD jest dobrze zrobione.
Możecie mi podrzucić informację co jest źle bo ja nie mam pojęcia jak to dalej poprawić.
Pozdrawiam
Matizz
|
|
| Back to top |
|
 |
Google

|
#
25 Dec 2007 22:45 |
|
|
|
|
|
| Back to top |
|
 |
teedd Poziom 15

Joined: 17 Apr 2003 Posts: 217 Location: Sosnowiec
|
#2
26 Dec 2007 01:12 Re: [BASCOM] Miernik do zasilacza |
|
|
|
Witaj.
Poniżej poprawiony program, przy którym kompilator nie melduje błędów. Było ich kilka. Przypomina mi się taka łamigłówka - "Znajdź 10 różnic na 2 rysunkach" :) Tyle nie było. Poprawności wyświetlania na LCD nie sprawdzałem, ale poprawiłem tak, aby był sens w wyświetlanych danych. Jak go podłączysz, to sprawdzisz.
| Code: |
$regfile = "m8def.DAT"
$crystal = 8000000
Config Lcd = 20 * 2
Config Lcdpin = Pin , Db4 = Portd.5 , Db5 = Portd.6 , Db6 = Portd.7 , Db7 = Portb.0 , E = Portd.3 , Rs = Portd.2 'konfiguracja linii
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Cursor Off
Dim Wart_acv As Word
Dim Wart_aca As Word
Dim Wart_vlim As Word
Dim Volt As Single
Dim Vlim As Single
Dim Amp As Single
Dim Pow As Single
Dim Rez As Single
Dim V As Single
Dim A As Single
Dim P As Single
Dim R As Single
Dim Vod As Single
Start Adc
Do
Wart_acv = Getadc(0)
Wart_aca = Getadc(1)
Wart_vlim = Getadc(2)
Cls
Volt = Wart_acv * 0.49 'na wejściu tego ADC będzie dzielnik przez 100
V = Fusing(volt , "#.##")
Locate 1 , 1
Lcd "U=" ; V ; "V"
Amp = Wart_aca * 0.0049
A = Fusing(amp , "#.##")
Locate 1 , 8
Lcd "I=" ; A ; "A"
Pow = Volt * Amp
P = Fusing(pow , "#.##")
Locate 1 , 15
Lcd "P=" ; P ; "W"
Vlim = Wart_vlim * 0.49
Vod = Fusing(vlim , "#.#")
Locate 2 , 1
Lcd "Vlim=" ; Vod ; "V"
Rez = Volt / Amp
R = Fusing(rez , "#.#")
Locate 2 , 10
Lcd "R=" ; R ; "Ohm"
Waitms 500
Loop
End
|
Pozdrowienia - teedd
|
|
| Back to top |
|
 |
M. S. Poziom 22

Joined: 12 Jan 2005 Posts: 1508 Location: Czechowice - Dziedzice
|
#3
26 Dec 2007 09:59 Re: [BASCOM] Miernik do zasilacza |
|
|
|
Ponieważ Fusing zwraca zmienną tekstową więc deklaracja zmiennych stanowiących wynik tej instrukcji powinna być następująca:
| Code: |
Dim V As String * 6
Dim A As String * 6
Dim P As String * 6
Dim R As String * 6
Dim Vod As String * 6 |
Zmienne są wystarczająco długie dla zakresu 99.9.
Jeśli wartość przekracza 100 powinno być String * 7
|
|
| Back to top |
|
 |
seba_x Poziom 22

Joined: 07 Jul 2003 Posts: 1598 Location: czarna dziura
|
#4
27 Dec 2007 13:10 Re: [BASCOM] Miernik do zasilacza |
|
|
|
możesz od razu napisać :
| Code: |
| Lcd Fusing(napiecie0 , "#.#"); |
i nie trzeba deklarować stringów
|
|
| Back to top |
|
 |
Matizz Poziom 17

Joined: 10 Mar 2006 Posts: 398 Location: Zawiercie
|
#5
27 Dec 2007 22:35 Re: [BASCOM] Miernik do zasilacza |
|
|
|
| seba_x wrote: |
możesz od razu napisać :
| Code: |
| Lcd Fusing(napiecie0 , "#.#"); |
i nie trzeba deklarować stringów |
Więc mogę wpisać:
| Code: |
Amp = Wart_aca * 0.0049
Locate 1 , 8
Lcd Fusing(amp , "#.##") |
ale w którym momencie muszę wtedy wstawić "I=" i "A" ?
Znalazłem w szufladzie czujnik temperatury DS18B20 a na necie kawałki programu do obsługi go, zmiksowałem to z moim programem i wyszedł mi taki "koktajl" :
| Code: |
$regfile = "m8def.DAT"
$crystal = 8000000
Config Lcd = 20 * 2
Config Lcdpin = Pin , Db4 = Portd.5 , Db5 = Portd.6 , Db6 = Portd.7 , Db7 = Portb.0 , E = Portd.3 , Rs = Portd.2 'konfiguracja linii
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Config 1wire = Portb.1
Cursor Off
Dim Wart_acv As Word
Dim Wart_aca As Word
Dim Wart_vlim As Word
Dim Volt As Single
Dim Vlim As Single
Dim Amp As Single
Dim Pow As Single
Dim Rez As Single
Dim V As String * 7
Dim A As String * 6
Dim P As String * 6
Dim R As String * 6
Dim Vod As String * 7
Dim I1 As Integer ,
Dim T1 As String * 6
Dim Dsid1(8) As Byte
Deflcdchar 0 , 32 , 28 , 20 , 28 , 32 , 7 , 4 , 7
Start Adc
Do
Wart_acv = Getadc(0)
Wart_aca = Getadc(1)
Wart_vlim = Getadc(2)
Volt = Wart_acv * 0.49 'na wejściu tego ADC będzie dzielnik przez 100
V = Fusing(volt , "#.##")
Locate 1 , 1
Lcd "U=" ; V ; "V"
Amp = Wart_aca * 0.0049
A = Fusing(amp , "#.##")
Locate 1 , 8
Lcd "I=" ; A ; "A"
Pow = Volt * Amp
P = Fusing(pow , "#.##")
Locate 1 , 15
Lcd "P=" ; P ; "W"
Vlim = Wart_vlim * 0.49
Vod = Fusing(vlim , "#.#")
Locate 2 , 1
Lcd "Vlim=" ; Vod ; "V"
Rez = Volt / Amp
R = Fusing(rez , "#.#")
Locate 2 , 10
Lcd "R=" ; R ; "Ohm"
Waitms 500
Dsid1(1) = 1wsearchfirst()
1wreset
1wwrite &H55
1wverify Dsid1(1)
1wwrite &HBE
I1 = 1wread(2)
1wreset
1wwrite &HCC
1wwrite &H44
Waitms 750
I1 = I1 * 10
I1 = I1 / 16
T1 = Str(i1)
T1 = Format(t1 , " 0.0")
Locate 2 , 15
Lcd ; T1 ; Chr(0) ; "C"
Loop
End
|
Jutro musze uruchomić moje atmegi (obecnie mam tylko ustawione na zegar zewnętrzny) i zacznę wreszcie testować ten kod w praktyce.
dziękuje i pozdrawiam
Matizz
|
|
| Back to top |
|
 |
seba_x Poziom 22

Joined: 07 Jul 2003 Posts: 1598 Location: czarna dziura
|
#6
28 Dec 2007 10:31 Re: [BASCOM] Miernik do zasilacza |
|
|
|
locate 1,8
lcd "I=" '<- nie mam jak sprawdzić ale tu może trzeba dać średnik
Lcd Fusing(amp , "#.##")
|
|
| Back to top |
|
 |
PiotrPitucha Poziom 19

Joined: 08 Jan 2006 Posts: 602 Location: Rzeszów
|
#7
28 Dec 2007 12:26 Re: [BASCOM] Miernik do zasilacza |
|
|
|
Witam
Koło rok temu w Elektronice Praktycznej był miernik do zasilacza na Atmega8, zastosowano kilka ciekawych rozwiązań, w artykule był listing, nawet jak zrobisz po swojemu to programowi warto się przyjrzeć
Piotr
|
|
| Back to top |
|
 |
Matizz Poziom 17

Joined: 10 Mar 2006 Posts: 398 Location: Zawiercie
|
#8
28 Dec 2007 15:18 Re: [BASCOM] Miernik do zasilacza |
|
|
|
| PiotrPitucha wrote: |
Witam
Koło rok temu w Elektronice Praktycznej był miernik do zasilacza na Atmega8, zastosowano kilka ciekawych rozwiązań, w artykule był listing, nawet jak zrobisz po swojemu to programowi warto się przyjrzeć
Piotr |
Przejrzałem na necie dostępne numery EP,niestety nie znalazłem takigo projektu.
Za to znalazłem trochę o metodach pomiarów prądu.
Mógłbyś podać trochę bardziej konkretnie kiedy był ten artykuł?
Jeszcze zastanawia mnie jedna rzecz w tym programiku:
po odczycie napięć i prądów ma czekać 500ms a dopiero potem odczytać temperaturę więc jest to bez tylko strata czasu.
Po przestawieniu tego Waitms :
| Code: |
(...)
Rez = Volt / Amp
R = Fusing(rez , "#.#")
Locate 2 , 10
Lcd "R=" ; R ; "Ohm"
'z tego miejsca'
Dsid1(1) = 1wsearchfirst()
1wreset
1wwrite &H55
1wverify Dsid1(1)
1wwrite &HBE
I1 = 1wread(2)
1wreset
1wwrite &HCC
1wwrite &H44
Waitms 750
I1 = I1 * 10
I1 = I1 / 16
T1 = Str(i1)
T1 = Format(t1 , " 0.0")
Locate 2 , 15
Lcd ; T1 ; Chr(0) ; "C"
'tutaj'
waitms 500
|
Już jest trochę lepiej, ale gdyby całkowicie zrezygnować z tego końcowego waitms 500 i z kasowania ekranu na początku programu - wtedy dane były by tylko uaktualniane i nie trzeba by było czekać na pojawienie się wskaźnika temperatury.
Dobrze myślę?
Pozdrawiam
Matizz
|
|
| Back to top |
|
 |
seba_x Poziom 22

Joined: 07 Jul 2003 Posts: 1598 Location: czarna dziura
|
#9
29 Dec 2007 08:45 Re: [BASCOM] Miernik do zasilacza |
|
|
|
na końcu nie musisz na nic czekać ! , tak się składa że też piszę prog. do zasilacza i też z pomiarem temp. , ja zrobiłem tak
| Code: |
Temperaturka:
1wreset
1wwrite &HCC
1wwrite &H44
Do
Incr Opozniacz_przerwania
Gosub Przyciski
Gosub Pomiar
Gosub Wyswietlacz1
If Opozniacz_przerwania = 50 Then
Opozniacz_przerwania = 0
Exit Do
End If
Loop
1wreset
1wwrite &HCC
1wwrite &HBE
Odczyt(1) = 1wread(2)
1wreset
Tempe = Makeint(odczyt(1) , Odczyt(2))
Tempe = Abs(tempe)
'Tempe = Tempe * 10
Tempe = Tempe / 16
Temperatura = Str(tempe)
Return |
jak widać nawet nie czekam bez sensu 750ms tylko w to miejsce dałem skoki do odpowiednich podprogramów , głównie chodziło mi o to żeby pomiar prądu był bez żadnych przerw bo robię zabezpieczenie po przekroczeniu którego procek odłączy zasilacz
ekranu nie czyść cls-em tylko nadpisuj odpowiednie miejsca , nie będziesz miał migotania lcd
jak zrobię porządek w programie to go tu wrzucę
ten twój zasilacz jest symetryczny (+/-) ? możesz podesłać mi schemat bo ja walczę z lm317/lm337 + tranzystory
|
|
| Back to top |
|
 |
Google

|
#
29 Dec 2007 08:45 |
|
|
|
|
|
| Back to top |
|
 |
Matizz Poziom 17

Joined: 10 Mar 2006 Posts: 398 Location: Zawiercie
|
#10
29 Dec 2007 13:36 Re: [BASCOM] Miernik do zasilacza |
|
|
|
| seba_x wrote: |
na końcu nie musisz na nic czekać ! , tak się składa że też piszę prog. do zasilacza i też z pomiarem temp. , ja zrobiłem tak
| Code: |
Temperaturka:
1wreset
1wwrite &HCC
1wwrite &H44
Do
Incr Opozniacz_przerwania
Gosub Przyciski
Gosub Pomiar
Gosub Wyswietlacz1
If Opozniacz_przerwania = 50 Then
Opozniacz_przerwania = 0
Exit Do
End If
Loop
1wreset
1wwrite &HCC
1wwrite &HBE
Odczyt(1) = 1wread(2)
1wreset
Tempe = Makeint(odczyt(1) , Odczyt(2))
Tempe = Abs(tempe)
'Tempe = Tempe * 10
Tempe = Tempe / 16
Temperatura = Str(tempe)
Return |
jak widać nawet nie czekam bez sensu 750ms tylko w to miejsce dałem skoki do odpowiednich podprogramów , głównie chodziło mi o to żeby pomiar prądu był bez żadnych przerw bo robię zabezpieczenie po przekroczeniu którego procek odłączy zasilacz
ekranu nie czyść cls-em tylko nadpisuj odpowiednie miejsca , nie będziesz miał migotania lcd
jak zrobię porządek w programie to go tu wrzucę
ten twój zasilacz jest symetryczny (+/-) ? możesz podesłać mi schemat bo ja walczę z lm317/lm337 + tranzystory |
Tak myślałem żeby zacząć od pomiaru temperatury i w czasie jej konwersji odwołać się do SUB z pomiarami prądu i napięcia, ale nie byłem pewien czy tak można i co się stanie gdy pomiar napięć zajmie mniej czasu niż te 750ms.
a w sprawie zasilacza napisałem na PW żeby nie robić OT.
pozdrawiam
Matizz
|
|
| Back to top |
|
 |
PiotrPitucha Poziom 19

Joined: 08 Jan 2006 Posts: 602 Location: Rzeszów
|
#11
29 Dec 2007 17:37 Re: [BASCOM] Miernik do zasilacza |
|
|
|
Cześć
Pamięć bywa zawodna, teraz jestem przy gazetach, to Nowy Elektronik 6/2004, wydawało mi się że było to niedawno :)
Artykuł nazywa się Uniwersalny V/A do zasilaczy, występuje tez w zestawach do samodzielnego montażu jako zestaw 388-K
Zakres pomiarowy 0-100V i 0-9A, oczywiście przerabiając bocznik możemy zakres zmienić
Piotr
|
|
| Back to top |
|
 |
Matizz Poziom 17

Joined: 10 Mar 2006 Posts: 398 Location: Zawiercie
|
#12
30 Dec 2007 21:52 Re: [BASCOM] Miernik do zasilacza |
|
|
|
Miernik jest już uruchomiony i działa w miarę dobrze.
Wady jakie wykryłem to:
-za mały wyświetlacz- nie mieszczą się wszystkie wyniki w obecnej postaci :/
-ponieważ nie kasuje ekranu to gdy wynikiem będzie np. 123.4V to po zmniejszeniu napięcia do np. 45.3 na wyświetlaczu pojawia się 45.3VV
ale znalazłem już na to sposób- zastosuję zamiast polecenia Fusing polecenie Format :
| Code: |
Amp = Wart_aca * 0.0049
A = Format (amp , "000")
Locate 1 , 8
Lcd "I" ; A ; Chr(1) |
Jutro przetestuję to w praktyce.
Kolejny problem to rozdzielczość pomiaru Rezystancji-
od 15ohm do 450 kohm.
Bardzo pomocna była by tutaj automatyczna zmiana zakresu pomiarowego(nigdzie na necie nie znalazłem jakiegoś przykładu ze źródłem :/ ).
Spróbuję więc tutaj polecenia Select-case i zobaczę co wyjdzie.
Ale dalej nie wiem jak zrobić sygnalizację przekroczenia temperatury i maksymalnej mocy strat na tranzystorze :/
Przy poleceniu If -> Then wyskakują mi głupie błędy.
Muszę poszukać więcej przykładów na necie.
Gdybyście mieli jakieś sugestie co jeszcze można by było poprawić/zmienić/udoskonalić to chętnie wszystkiego wysłucham.
Pozdrawiam
Matizz
|
|
| Back to top |
|
 |
seba_x Poziom 22

Joined: 07 Jul 2003 Posts: 1598 Location: czarna dziura
|
#13
02 Jan 2008 11:20 Re: [BASCOM] Miernik do zasilacza |
|
|
|
możesz tak wykombinować :
locate 1,8
if napiecie < 100 then
lcd " ";napiecie;"V"
else
lcd napiecie;" V"
pisałem na szybko z głowy , musisz sprawdzić , litera "V" powinna być cały czas w tym samym miejscu tylko wynik będziesz miał z pustym miejscem na początku jak będzie poniżej 100
automatyczna zmiana zakresu ? napięcia ? to napisz tak :
jeśli nap. większe od jakiegoś tam to wystaw 1 na jakimś pinie (tu podłanczasz przekazniczek który przełączy ci rezystorki w dzielniku , dodatkowo zabezpiecz adc przed zbyt wysokim napięciem (rezystorek+zenerka5.1v))
tak samo z temp. : jeśli większa od nastawionej to daj ostrzeżenie na lcd
daj to wszystko w pętli głównej i po problemie
ot : zasilacz masz "wypasiony" mój to cienki pikuś przy twoim :D
|
|
| Back to top |
|
 |
Matizz Poziom 17

Joined: 10 Mar 2006 Posts: 398 Location: Zawiercie
|
#14
02 Jan 2008 12:44 Re: [BASCOM] Miernik do zasilacza |
|
|
|
Witam
Wyświetlanie wyników zrobiłem już trochę inaczej:
| Code: |
Locate 1 , 1 'napięcie
Lcd "U" ; V
Locate 1 , 5
Lcd "V "
|
Przy napięciach do 10V mam na wyświetlaczu 9.00V,
do 100V mam 99.V,
a powyżej 100V. można się do tego przyzwyczaić tylko że napięcie poniżej 100V ma już dość spory błąd pomiarowy(myślę że ze względu na duży dzielnik wejściowy - 750k->7k5). chwilowo układ jest złożony na płytce uniwersalnej i nie mam miejsca na przekaźnik do przełączania zakresów.
Narazie to zostawiłem i bawię się z przekroczeniem temperatury.
Właściwie to już działa ale poziom alarmu ustawia się w czasie programowania, a chciałbym żeby można było zmienić tą wartość i była ona zapamiętana.
Wymyśliłem więc coś takiego:
| Code: |
Dim Tmax As Integer
Config Pinb.1 = Input
Config Pinb.2 = Input
Config Pinb.3 = Input
Declare Sub Tmaxset
Declare Sub Main
Up Alias Pinb.1
Down Alias Pinb.2
Sel Alias Pinb.3
Do
If Sel = 1 Then
Gosub Tmaxset
Else Gosub Main
End If
Loop
Sub Tmaxset
Readeeprom Tmax , 1
Locate 2 , 15
Lcd Tmax
If Up = 1 Then
Tmax = Tmax + 10
Writeeeprom Tmax , 1
End If
If Down = 1 Then
Tmax = Tmax - 10
Writeeeprom Tmax , 1
End If
End Sub
End |
i przy pomiarze temperatury :
| Code: |
readeeprom tmax ,1
If I1 >= Tmax Then
Gosub Ot
|
Tylko że widziałem kilka programów które odnoszą sie do pamięci eprom i każdy był napisany inaczej :/ więc nie wiem czy to co mi wyszło jest OK.
Co do zmiany zakresów to narazie wygospodarowałem tyle miejsca na LCD że nie musze tego robić(ale to stan przejściowy, i poprawię to).
A tak w ogóle to mi się kończy możliwość programu :/ bo wersja demo
Pozdrawiam
Matizz
|
|
| Back to top |
|
 |
seba_x Poziom 22

Joined: 07 Jul 2003 Posts: 1598 Location: czarna dziura
|
#15
02 Jan 2008 14:32 Re: [BASCOM] Miernik do zasilacza |
|
|
|
temperatura alarmu musi być "nastawiana" ? zaoszczędził byś trochę miejsca jak byś np. tak jak ja dał sobie stałą temp. alarmu .
twoje demko ma ograniczenie do 4kb ?
|
|
| Back to top |
|
 |
Matizz Poziom 17

Joined: 10 Mar 2006 Posts: 398 Location: Zawiercie
|
#16
02 Jan 2008 18:35 Re: [BASCOM] Miernik do zasilacza |
|
|
|
| seba_x wrote: |
| temperatura alarmu musi być "nastawiana" ? zaoszczędził byś trochę miejsca jak byś np. tak jak ja dał sobie stałą temp. alarmu . |
Naprawdę aż tak źle napisałem ten kawałek programu? ;)
Temperatura co prawda nie musi być ustawiana, ale często zmieniam tranzystory obciążające i tu by mi się przydało zmieniać ich Pmax bez przeprogramowania układu.
Tak moje demko(v.1.11.8.7) ma ograniczenie do 4kb kodu (zostało mi jeszcze 5%)
| Quote: |
możesz tak wykombinować :
locate 1,8
if napiecie < 100 then
lcd " ";napiecie;"V"
else
lcd napiecie;" V"
|
Właśnie przetestowałem i po drobnej modyfikacji pasuje idealnie(zamiast wartości napięcia dałem wartość adc, bo u mnie U jest zapisane jako string więc nie pasuje do IF)
Btw. czy jest jakaś funkcja która by wyświetliła znaki w negatywie czy trzeba to ręcznie wpisywać w LCD desinger?
pozdrawiam
Matizz
|
|
| Back to top |
|
 |
seba_x Poziom 22

Joined: 07 Jul 2003 Posts: 1598 Location: czarna dziura
|
#17
03 Jan 2008 09:23 Re: [BASCOM] Miernik do zasilacza |
|
|
|
w negatywie nie (też to kiedyś przerabiałem ;-) ) zostaje tylko lcd designer , zapisywanie temperatury do epromu , nie wiem ile to pamięci zabiera sprawdz czy np przy pomocy debounce i dwuch przycisków ( + , - ) mógłbyś ustawić sobie (niestety za każdym razem jak wyłączysz zasilanie) temperaturę alarmu , może zaoszczędzisz trochę pamięci
trochę poprawiłem twój prog. zaoszczędziłem 76 bajty ramu (może nie wiele ale przy ograniczeniu do 4kb to zawsze "coś")
znak stopnia masz zdefiniowany , to zabiera dużo pamięci , sprawdz w pdf-ie od lcd czy ma taki znaczek , wystarczy tylko że każesz mu go wyświetlić i już
| Code: |
$regfile = "m8def.DAT"
$crystal = 8000000
Config Lcd = 20 * 2
Config Lcdpin = Pin , Db4 = Portd.5 , Db5 = Portd.6 , Db6 = Portd.7 , Db7 = Portb.0 , E = Portd.3 , Rs = Portd.2 'konfiguracja linii
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Config 1wire = Portb.1
Cursor Off
Dim Wart_acv As Word
Dim Wart_aca As Word
Dim Wart_vlim As Word
Dim Volt As Single
Dim Vlim As Single
Dim Amp As Single
Dim Pow As Single
Dim Rez As Single
'Dim V As String * 7
'Dim A As String * 6
'Dim P As String * 6
'Dim R As String * 6
'Dim Vod As String * 7
Dim I1 As Integer ,
Dim T1 As String * 6
Dim Dsid1(8) As Byte
'Deflcdchar 0 , 32 , 28 , 20 , 28 , 32 , 7 , 4 , 7
Start Adc
Do
Wart_acv = Getadc(0)
Wart_aca = Getadc(1)
Wart_vlim = Getadc(2)
Volt = Wart_acv * 0.49 'na wejściu tego ADC będzie dzielnik przez 100
'V = Fusing(volt , "#.##")
Locate 1 , 1
Lcd "U="
Lcd Fusing(volt , "#.##")
Lcd "v"
Amp = Wart_aca * 0.0049
'A = Fusing(amp , "#.##")
Locate 1 , 8
Lcd "I="
Lcd Fusing(amp , "#.##")
Lcd "a"
Pow = Volt * Amp
'P = Fusing(pow , "#.##")
Locate 1 , 15
Lcd "P="
Lcd Fusing(pow , "#.##")
Lcd "w"
Vlim = Wart_vlim * 0.49
'Vod = Fusing(vlim , "#.#")
Locate 2 , 1
Lcd "Vlim="
Lcd Fusing(vlim , "#.#")
Lcd "v"
Rez = Volt / Amp
'R = Fusing(rez , "#.#")
Locate 2 , 10
Lcd "R="
Lcd Fusing(rez , "#.#")
Lcd "ohm"
'Waitms 500
Dsid1(1) = 1wsearchfirst()
1wreset
1wwrite &H55
1wverify Dsid1(1)
1wwrite &HBE
I1 = 1wread(2)
1wreset
1wwrite &HCC
1wwrite &H44
Waitms 750
I1 = I1 * 10
I1 = I1 / 16
T1 = Str(i1)
'T1 = Format(t1 , " 0.0")
Locate 2 , 15
Lcd Format(t1 , " 0.0")
Lcd "c"
Loop
End |
|
|
| Back to top |
|
 |
Google

|
#
03 Jan 2008 09:23 |
|
|
|
|
|
| Back to top |
|
 |
Matizz Poziom 17

Joined: 10 Mar 2006 Posts: 398 Location: Zawiercie
|
#18
26 Jan 2008 23:14 Re: [BASCOM] Miernik do zasilacza |
|
|
|
Witam
Program do miernika jest już prawie skończony, zostało mi tylko dopracować menu i zmienić rezystory w dzielnikach na 1%.
Wartość maksymalnej temperatury jest ustawiana przy pierwszym włączeniu i zapisywana do eeprom.
Chciałbym sie jeszcze tylko dowiedzieć w jaki sposób zadeklarować w programie żeby przy programowaniu zapisało do pamięci eeprom domyślną wartość ograniczenia temperaturowego - tak by nie trzeba było tego ustawiać przy pierwszym włączeniu miernika, ale można było ją puźniej zmienić i zapamiętać (więc coś takiego na początku programu:
| Code: |
tmax = 100
writeeeprom tmax ,1 |
odpada)
znalazłem kilka przykładów ale nie potrafię ich rozgryść(gdzie jest określone miejsce w eepromie a gdzie wartość do zapisania):
| Quote: |
Dta1:
Data &H0 , &H00 , &H28 , &H54
Data &H0 , &H0A , &H05 , &H47
Data &H1 , &H1E , &H2E , &H14
Data &H0D , &H89 , &H36 , &H27 |
Pozdrawiam
Matizz
|
|
| Back to top |
|
 |
gagarin33 Poziom 3

Joined: 05 Jan 2008 Posts: 6 Location: Jaworzno
|
#19
05 Feb 2012 04:51 Re: [BASCOM] Miernik do zasilacza |
|
|
|
Witam. Potrzebuję pomocy. Kupiłem zestaw NE388 i po złożeniu okazuje się że nie reaguje na pomiary podejrzewam ubity procesor. Czy ktoś ma może wsad do tego miernika ? Zapłacę. Próbowałem skontaktować się z producentem, ale nie działają numery telefonów.
|
|
| Back to top |
|
 |
Gienek Poziom 21

Joined: 29 Aug 2002 Posts: 1447 Location: Toruń
|
#20
05 Feb 2012 09:36 Re: [BASCOM] Miernik do zasilacza |
|
|
|
Wsad w załączniku.
| Filename: |
VA.ZIP |
 Download |
| Contents: |
|
| Filesize: |
4.89 KB |
| Punkty: |
4 = 0.00 for transfer + 4 for the user (set manually) |
|
|
| Back to top |
|
 |