FAQ | Points | Add... | Recent posts | Search | Register | Log in


[BASCOM] Miernik do zasilacza


Post new topic  Reply to topic      Main Page -> Forum Index -> Microcontrollers Generally -> [BASCOM] Miernik do zasilacza
Author
Message
Matizz
Poziom 17
Poziom 17


Joined: 10 Mar 2006
Posts: 398
Location: Zawiercie

Post#1 Post from the author of the topic 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

Google Adsense


Post# Post from the author of the topic 25 Dec 2007 22:45   





Back to top
   
teedd
Poziom 15
Poziom 15


Joined: 17 Apr 2003
Posts: 217
Location: Sosnowiec

Post#2 26 Dec 2007 01:12helpful post - solution   

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
Poziom 22


Joined: 12 Jan 2005
Posts: 1508
Location: Czechowice - Dziedzice

Post#3 26 Dec 2007 09:59helpful post - solution   

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
Poziom 22


Joined: 07 Jul 2003
Posts: 1598
Location: czarna dziura

Post#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
Poziom 17


Joined: 10 Mar 2006
Posts: 398
Location: Zawiercie

Post#5 Post from the author of the topic 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
Poziom 22


Joined: 07 Jul 2003
Posts: 1598
Location: czarna dziura

Post#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
Poziom 19


Joined: 08 Jan 2006
Posts: 602
Location: Rzeszów

Post#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
Poziom 17


Joined: 10 Mar 2006
Posts: 398
Location: Zawiercie

Post#8 Post from the author of the topic 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
Poziom 22


Joined: 07 Jul 2003
Posts: 1598
Location: czarna dziura

Post#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

Google Adsense


Post# 29 Dec 2007 08:45   





Back to top
   
Matizz
Poziom 17
Poziom 17


Joined: 10 Mar 2006
Posts: 398
Location: Zawiercie

Post#10 Post from the author of the topic 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
Poziom 19


Joined: 08 Jan 2006
Posts: 602
Location: Rzeszów

Post#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
Poziom 17


Joined: 10 Mar 2006
Posts: 398
Location: Zawiercie

Post#12 Post from the author of the topic 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
Poziom 22


Joined: 07 Jul 2003
Posts: 1598
Location: czarna dziura

Post#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
Poziom 17


Joined: 10 Mar 2006
Posts: 398
Location: Zawiercie

Post#14 Post from the author of the topic 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
Poziom 22


Joined: 07 Jul 2003
Posts: 1598
Location: czarna dziura

Post#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
Poziom 17


Joined: 10 Mar 2006
Posts: 398
Location: Zawiercie

Post#16 Post from the author of the topic 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
Poziom 22


Joined: 07 Jul 2003
Posts: 1598
Location: czarna dziura

Post#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

Google Adsense


Post# 03 Jan 2008 09:23   





Back to top
   
Matizz
Poziom 17
Poziom 17


Joined: 10 Mar 2006
Posts: 398
Location: Zawiercie

Post#18 Post from the author of the topic 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
Poziom 3


Joined: 05 Jan 2008
Posts: 6
Location: Jaworzno

Post#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
Poziom 21


Joined: 29 Aug 2002
Posts: 1447
Location: Toruń

Post#20 05 Feb 2012 09:36   

Re: [BASCOM] Miernik do zasilacza


Wsad w załączniku.



VA.ZIP
 Filename:  VA.ZIP
Download
 Contents:  
 Filesize:  4.89 KB
 Punkty:  4 = 0.00 for transfer + 4 for the user (set manually)

Back to top
   
Post new topic  Reply to topic      Main Page -> Forum Index -> Microcontrollers Generally -> [BASCOM] Miernik do zasilacza
Page 1 of 1
Similar topics
[ATMega8][C] Miernik do zasilacza - jak zmienić? (2)
Miernik na LCD2x16. Moduł do zasilacza laboratoryjnego. (2)
[atiny 2313][bascom] miernik ph (6)
Miernik częstotliwości na 4-LEDy w Bascom (6)
miernik częstotliwości bascom avr (12)
[Bascom] Miernik U i F na ATMega8 (6)
Miernik do zasilacza na ICL7107 (2)
Miernik U/I do zasilacza - prośba o ocenę koncepcji (11)
Bascom - miernik pojemności i kompilacja 89c4051 (21)
[mega8][bascom] Jak obliczyć mAh i średnia.. Miernik DIY (16)

Page generation time: 0.166 seconds


FAQ || Administrator || Moderators || Widgets and banners || Contact
elektroda.pl topic RSS feed