| Author |
Message
|
Robstar Poziom 14

Joined: 14 Oct 2003 Posts: 158
|
#31
03 Sep 2007 10:02 Re: 4x DS18b20 +LCD = Termometr |
|
|
|
Ta informacja świadczy że masz za duży plik większy niż 2kB czy aby napewno masz ustawiony kwarc na 1MHz a nie np. 4
|
|
| Back to top |
|
 |
mirekk36 Poziom 25

Joined: 17 Jun 2006 Posts: 8154 Location: Szczecin
|
#32
03 Sep 2007 10:20 Re: 4x DS18b20 +LCD = Termometr |
|
|
|
tak kwarc mam dobrze ustawiony a jeśli chodzi o plik - to skopiowałem dokładnie te linijki które podałeś powyżej w swoim poście - kompiluje się to tylko że pokazuje jakby się nie chciało zmieścić do procka - a u ciebie rozumiem się zmieściło?
więc próbuję dociec czy może coś mam inaczej ustawione w Bascomie - może jakąś opcję bootloadera trzeba wyłączyć czy co?
pozdr
|
|
| Back to top |
|
 |
Robstar Poziom 14

Joined: 14 Oct 2003 Posts: 158
|
#33
03 Sep 2007 12:06 Re: 4x DS18b20 +LCD = Termometr |
|
|
|
U mnie ustawienia są standardowe LCD 16x2 kwarc 1000000 ale i tak w programie ustawiony i zajmuje 98%.
Skróć np. nazwy w Lcd "" może to coś pomoże.
Ale faktycznie jest to dziwne jezeli tobie sie nie ładuje.
|
|
| Back to top |
|
 |
Duch__ Poziom 22

Joined: 12 Dec 2004 Posts: 1911 Location: Opole
|
#34
03 Sep 2007 14:35 Re: 4x DS18b20 +LCD = Termometr |
|
|
|
Ja skompilowałem tak na próbę i zajmuje 100% pamięci. Wywaliłem znak stopnia i zastąpiłem go oznaczeniem "st", bo przed tą operacją zajmował 102%.
| Code: |
$regfile = "2313DEF.dat"
$crystal = 1000000
Config 1wire = Portd.5
Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.4 , Rs = Portb.5
Dim Dsid1(8) As Byte
Dim Dsid2(8) As Byte
Dim I1 As Integer , Ss As String * 6
Dim I2 As Integer
Cursor Off
Cls
Dsid1(1) = 1wsearchfirst()
Dsid2(1) = 1wsearchnext()
Do
1wreset
1wwrite &H55
1wverify Dsid1(1)
1wwrite &HBE
I1 = 1wread(2)
'---------------------------------
1wreset
1wwrite &H55
1wverify Dsid2(1)
1wwrite &HBE
I2 = 1wread(2)
'---------------------------------
1wreset
1wwrite &HCC
1wwrite &H44
Wait 1
I1 = I1 * 10
I1 = I1 / 16
'If I1 > 0 Then Cls
Ss = Str(i1)
Ss = Format(ss , " 0.0")
Locate 1 , 1
Lcd "Temp.wew " ; Ss ; Chr(0) ; "stC"
I2 = I2 * 10
I2 = I2 / 16
'If I2 > 0 Then Cls
Ss = Str(i2)
Ss = Format(ss , " 0.0")
Locate 2 , 1
Lcd "Temp.zew " ; Ss ; Chr(0) ; "stC"
Loop |
Proszę poprawić deklarację portów od wyświetlacza (ja go tutaj dodałem) bo go nie daliście wcześniej!!!! Nie wiem czy moje ustawienia są kompatybilne z ATtiny2313 bo skopiowałem je od Atmegi8
|
|
| Back to top |
|
 |
mirekk36 Poziom 25

Joined: 17 Jun 2006 Posts: 8154 Location: Szczecin
|
#35
03 Sep 2007 14:50 Re: 4x DS18b20 +LCD = Termometr |
|
|
|
o no właśnie mi też zajmował 102% ;) ok spróbuję to dzisiaj wieczorkiem
|
|
| Back to top |
|
 |
Robstar Poziom 14

Joined: 14 Oct 2003 Posts: 158
|
#36
03 Sep 2007 14:57 Re: 4x DS18b20 +LCD = Termometr |
|
|
|
Tylko teraz nie zmieści się w 16 o jeden za duzo na wyświetlaczu ale można dać tylko C :)
Sprawdziłem i u mnie ładuje się bez problemu.
W ustawieniach Bascoma Options mam:
chip - Attiny2313.dat
communication - frequency-1000000
LCD - LCD type - 16*2
98%.
|
|
| Back to top |
|
 |
Andy74 Poziom 18

Joined: 07 Jan 2003 Posts: 470 Location: U3pjemVyY293
|
#37
03 Sep 2007 21:44 Re: 4x DS18b20 +LCD = Termometr |
|
|
|
Podejrzewam że kolega Robstar używa starszej wersji Bascoma niż my (też sprawdziłem - 102% na v1.11.8.1 full). Już raz Bascoma na tym przyłapałem i to właśnie przy kompilacji programu z obsługą 1Wire. Po aktualizacji z v1.11.7.4 do v1.11.8.1 plik wynikowy z dokładnie tego samego programu (pod AT90S2313) zwiększył się o jakieś 70 bajtów... Nie dociekałem dlaczego tak się dzieje, ale ustawienia miałem dokładnie takie same.
A to moja propozycja optymalizacji kodu:
| Code: |
$regfile = "ATtiny2313.dat"
$crystal = 1000000
Config 1wire = Portd.5
Dim Dsid1(8) As Byte
Dim Dsid2(8) As Byte
Dim I1 As Integer , Ss As String * 6
Dim I2 As Integer
Deflcdchar 0 , 14 , 17 , 17 , 14 , 32 , 32 , 32 , 32
Cursor Off
Cls
Dsid1(1) = 1wsearchfirst()
Dsid2(1) = 1wsearchnext()
Do
1wreset
1wwrite &H55
1wverify Dsid1(1)
1wwrite &HBE
I1 = 1wread(2)
'---------------------------------
1wreset
1wwrite &H55
1wverify Dsid2(1)
1wwrite &HBE
I2 = 1wread(2)
'---------------------------------
1wreset
1wwrite &HCC
1wwrite &H44
Wait 1
I1 = I1 * 10
I1 = I1 / 16
'If I1 > 0 Then Cls
Ss = Str(i1)
Gosub Format 'Ss = Format(ss , " 0.0")
Home 'Locate 1 , 1
Lcd "Temp.wew: " ; Ss ; Chr(0) ; "C"
I2 = I2 * 10
I2 = I2 / 16
'If I2 > 0 Then Cls
Ss = Str(i2)
Gosub Format 'Ss = Format(ss , " 0.0")
Lowerline 'Locate 2 , 1
Lcd "Temp.zew: " ; Ss ; Chr(0) ; "C"
Loop
End
Format:
Ss = Format(ss , " 0.0")
Return |
Ta sama fonkcjonalność, a jeszcze całe dwa bajty zostają wolne :)
Pozdrawiam
Andy
|
|
| Back to top |
|
 |
mirekk36 Poziom 25

Joined: 17 Jun 2006 Posts: 8154 Location: Szczecin
|
#38
03 Sep 2007 22:43 Re: 4x DS18b20 +LCD = Termometr |
|
|
|
Andy74 -> no teraz twoja wersja mi się skompilowała ;) czyli nie chodzi jednak o jakiś bootloader z tego komunikatu o jakim pisałem tylko o jak widać wersję Bascoma i o sprawną własną hmm że tak powiem optymalizację kodu - to ciekawe
( w tym przypadku jak widzę optymalizacja polegała na "wyrżnięciu" procedury format do której był oddawany skok gosub ) ;)
|
|
| Back to top |
|
 |
Robstar Poziom 14

Joined: 14 Oct 2003 Posts: 158
|
#39
03 Sep 2007 23:10 Re: 4x DS18b20 +LCD = Termometr |
|
|
|
Wersja 1.11.8.3 to raczej nowsza :) i na to wychodzi że lepsza :)
Ale ciekawa informacja na przyszłość :).
|
|
| Back to top |
|
 |
Google

|
#
03 Sep 2007 23:10 |
|
|
|
|
|
| Back to top |
|
 |
Andy74 Poziom 18

Joined: 07 Jan 2003 Posts: 470 Location: U3pjemVyY293
|
#40
03 Sep 2007 23:11 Re: 4x DS18b20 +LCD = Termometr |
|
|
|
Tak, ten komunikat o błędzie który dostałeś miał świadczyć (jak sądzę ;)) o przekroczeniu pojemności pamięci programu.
| Quote: |
| ( w tym przypadku jak widzę optymalizacja polegała na "wyrżnięciu" procedury format do której był oddawany skok gosub ) |
...i dodatkowo zmieniłem 'Locate' na mniej ROM-o-żerne 'Home' i 'Lowerline' skoro i tak wyświetlamy od pierwszego znaku na LCD. To tak na szybkiego. Ten programik dało by się jeszcze z pewnością odchudzić, trzeba by tylko przysiąść i troszkę pogłówkować :)
PZDR
PS. Cieszę się, że dałeś się w końcu przekonać do Bascoma. Gdy trzeba coś na szybkiego zrobić na uC - nie ma w/g mnie lepszej opcji na dzień dzisiejszy. A czas kosztuje...
Zrobił się mały OT chyba... Mam nadzieję, że autor tematu na nas nie nakrzyczy
edit:
| Quote: |
| Wersja 1.11.8.3 to raczej nowsza i na to wychodzi że lepsza |
No to w każdym razie inna niż moja. Trzeba by pomyśleć o update w takim razie.
|
|
| Back to top |
|
 |
mirekk36 Poziom 25

Joined: 17 Jun 2006 Posts: 8154 Location: Szczecin
|
#41
03 Sep 2007 23:32 Re: 4x DS18b20 +LCD = Termometr |
|
|
|
| Andy74 wrote: |
PS. Cieszę się, że dałeś się w końcu przekonać do Bascoma. Gdy trzeba coś na szybkiego zrobić na uC - nie ma w/g mnie lepszej opcji na dzień dzisiejszy. A czas kosztuje... |
.... taaak zgadzam się teraz z kolegą w całej rozciągłości i popieram - dlatego już jestem szczęśliwym posiadaczem pełnej wersji Bascoma.
a nie jest to chyba OT bo tak naprawdę to właśnie teraz dla prób majstruję tego typu projekciki w Bascomie, m.inn pomiary temperatury i bardzo interesuje mnie to własnie zagadnienie autora całego tematu, pomijając to że fajnie to zrobił i przedstawił - ale zdaje się wcześniej już pisałem w jakimś poście o tym.
Natomiast cała dyskusja która tu się toczy pozwala mi zasysać również wiedzę n/t programowania w Bascomie - więc chyba i autor nie ma nic przeciwko temu
pozdrawiam
|
|
| Back to top |
|
 |
Duch__ Poziom 22

Joined: 12 Dec 2004 Posts: 1911 Location: Opole
|
#42
04 Sep 2007 05:38 Re: 4x DS18b20 +LCD = Termometr |
|
|
|
| Andy74 wrote: |
A to moja propozycja optymalizacji kodu:
| Code: |
$regfile = "ATtiny2313.dat"
$crystal = 1000000
Config 1wire = Portd.5
Dim Dsid1(8) As Byte
Dim Dsid2(8) As Byte
Dim I1 As Integer , Ss As String * 6
Dim I2 As Integer
Deflcdchar 0 , 14 , 17 , 17 , 14 , 32 , 32 , 32 , 32
Cursor Off
Cls
Dsid1(1) = 1wsearchfirst()
Dsid2(1) = 1wsearchnext()
Do
1wreset
1wwrite &H55
1wverify Dsid1(1)
1wwrite &HBE
I1 = 1wread(2)
'---------------------------------
1wreset
1wwrite &H55
1wverify Dsid2(1)
1wwrite &HBE
I2 = 1wread(2)
'---------------------------------
1wreset
1wwrite &HCC
1wwrite &H44
Wait 1
I1 = I1 * 10
I1 = I1 / 16
'If I1 > 0 Then Cls
Ss = Str(i1)
Gosub Format 'Ss = Format(ss , " 0.0")
Home 'Locate 1 , 1
Lcd "Temp.wew: " ; Ss ; Chr(0) ; "C"
I2 = I2 * 10
I2 = I2 / 16
'If I2 > 0 Then Cls
Ss = Str(i2)
Gosub Format 'Ss = Format(ss , " 0.0")
Lowerline 'Locate 2 , 1
Lcd "Temp.zew: " ; Ss ; Chr(0) ; "C"
Loop
End
Format:
Ss = Format(ss , " 0.0")
Return |
Ta sama fonkcjonalność, a jeszcze całe dwa bajty zostają wolne :)
Pozdrawiam
Andy |
Andy!!! Nie ma deklaracji do jakich portów podpięty jest LCD!!! Pare postów wcześniej pisałem o tym!!!:!:
| mirekk36 wrote: |
...cała dyskusja która tu się toczy pozwala mi zasysać również wiedzę n/t programowania w Bascomie - więc chyba i autor nie ma nic przeciwko temu
pozdrawiam |
Nie mam :)
Co do optymalizacji kodu to uważam że szło by podpiąć pod Attiny więcej niż 2 czujniki gdyby na stałe wpisało się do programu numery ID czujników, zmniejszyło by to rozmiar kodu i pozwoliło na troszkę więcej. No ale coś za coś.
|
|
| Back to top |
|
 |
Robstar Poziom 14

Joined: 14 Oct 2003 Posts: 158
|
#43
04 Sep 2007 07:06 Re: 4x DS18b20 +LCD = Termometr |
|
|
|
Co do wyświetlacza to umyślnie w listingu go nie umieściłem Czy ma to jakieś znaczenie ? - ustawione w Bascomie (oprócz jasności :) )
Czy wiecie dlaczego nie chce chodzić na kwarcu 4Mhz.
|
|
| Back to top |
|
 |
mirekk36 Poziom 25

Joined: 17 Jun 2006 Posts: 8154 Location: Szczecin
|
#44
04 Sep 2007 07:35 Re: 4x DS18b20 +LCD = Termometr |
|
|
|
| Robstar wrote: |
Czy wiecie dlaczego nie chce chodzić na kwarcu 4Mhz. |
a ustawił kolega prawidłowo FuseBity w samym procku odpowiedzialne za taktowanie na kwarc zewnętrzny albo oscylator wewn o wartości 4MHz prawidłowo?
|
|
| Back to top |
|
 |
Łysacz Poziom 13

Joined: 17 Mar 2005 Posts: 128 Location: KIELCE
|
#45
04 Sep 2007 12:28 Re: 4x DS18b20 +LCD = Termometr |
|
|
|
Witam. Właśnie popelniłem termometr na attiny2313. Do softu andy'ego74 dopisałem tylko obsługe wyświetlacza i wszystko ok. Program zajmuje 98%.
P.S. wlasnie porównuje sobie odczyty 2 czujników w tym samym miejscu. Różnica wacha sie miedzy 0,2 a 0,3 stopnia :D
|
|
| Back to top |
|
 |
Andy74 Poziom 18

Joined: 07 Jan 2003 Posts: 470 Location: U3pjemVyY293
|
#46
04 Sep 2007 12:35 Re: 4x DS18b20 +LCD = Termometr |
|
|
|
| Quote: |
| Andy!!! Nie ma deklaracji do jakich portów podpięty jest LCD!!! Pare postów wcześniej pisałem o tym!!! |
No tak, nie ma i nie zwróciłem na to uwagi, ale to nie powód by na mnie od razu wrzeszczeć :puppydogeyes:
;)
Przecież konfiguracja LCD w kodzie programu nie jest obowiązkowa. Można to równie dobrze zrobić w opcjach kompilatora. No ale przyznaję Ci rację. Przed chwilą sprawdziłem i rzeczywiście gdy dodałem config LCD - kod wynikowy zmniejszył się, ale nie ma to związku z przypisaniem PIN-ów, ani z tym czy robimy to w treści programu, czy w opcjach, tylko z wybranym typem wyświetlacza. Ja miałem w opcjach ustawiony 16*1a i akurat tylko dla niego kod wynikowy wychodzi większy. Ponieważ w swoich programach zawsze konfiguruję LCD w kodzie, i nigdy nie korzystałem z typu 16*1a - nawet nie wiedziałem, że taka zależność istnieje.
To nie zmienia faktu, że po mojej modyfikacji - wprowadzonej bez głębszego zastanowienia - plik wynikowy będzie lżejszy o kolejne 34 bajty. Dla małych atmelków to ma znaczenie - przyznasz chyba.
Ważne, że sprawa się wyjaśniła - człowiek uczy się przez całe życie...
I proszę na mnie więcej nie krzyczeć, bo użyję jeszcze większej liczby wykrzykników i dopiero będzie :)
PZDR
Andy
Aha. Mój program, o którym wspomniałem, że po kompilacji w nowszej wersji Bascoma dawał większy plik wynikowy nie korzystał w ogóle z LCD, więc podtrzymuję to co tam napisałem.
|
|
| Back to top |
|
 |
Wersik Poziom 10

Joined: 15 Sep 2004 Posts: 53
|
#47
04 Sep 2007 16:21 Re: 4x DS18b20 +LCD = Termometr |
|
|
|
| VC wrote: |
| Wersik wrote: |
| Jak projekt radzi sobie z temperaturami ujemnymi? |
Zajrzyj do noty katalogowej. |
Nie pytam sie jaki zakres pomiaru ma DS, tylko jak układ sobie radzi z wyświetlaniem ujemnych temperatur.
|
|
| Back to top |
|
 |
janik_89 Poziom 18

Joined: 31 Oct 2005 Posts: 598 Location: Okolice Lublina
|
#48
05 Sep 2007 20:55 Re: 4x DS18b20 +LCD = Termometr |
|
|
|
Jestem początkujący w tej dziedzinie i mam małe pytanie... czy można to jakoś przerobić(zmienić program) zeby odczytywał temp. tylko z dwóch czójników??
|
|
| Back to top |
|
 |
Duch__ Poziom 22

Joined: 12 Dec 2004 Posts: 1911 Location: Opole
|
#49
06 Sep 2007 05:40 Re: 4x DS18b20 +LCD = Termometr |
|
|
|
Można...
| Code: |
$regfile = "m8def.DAT" 'deklaracja procesora, w tym wypadku Atmega8
$crystal = 1000000 'deklaracja cześtotlwiości pracy (wew oscylator 1MHz w zupełności wystarcza)
'Deklaracja portów od wyświetlacza LCD
Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.4 , Rs = Portb.5
Config Lcd = 20 * 2 'ustawiamy typ wyświetlacza (soft jest dostosowany do pracy z wyświetlaczem 2x20, przy pracy z innym wyświetlaczem trzeba będzie skorygować wyświetlanie znaków)
'*************************************WAŻNE**********************************************
'Pamiętać o podłączeniu rezystora podciągającego o wartości 4.7kohm między linią DQ a VCC
Config 1wire = Portd.5 'deklaracja portu na którym będą podpięte DS18b20
Dim I1 As Integer , Ss As String * 6
Dim I2 As Integer
Dim Dsid1(8) As Byte
Dim Dsid2(8) As Byte
Dim B As Byte 'deklaracja zmiennej do odczytu kodów ID
Dim W As Byte 'deklaracja zmiennej do odczytu ilośc czujników
Deflcdchar 0 , 8 , 20 , 11 , 4 , 4 , 4 , 3 , 32 'znak stopnia Celsjusza
Cursor Off 'Wyłącza kursor
Cls 'Funkcja CLS czyści ekran
Lcd " Termometr by Duch " ; 'ekran startowy (pojawia się tylko podczas włączania urządzenia)
Lowerline
Lcd " 2007 "
Wait 5
Cls
W = 1wirecount()
Lcd "Ilosc czujnikow:" 'Informuje ile czujników jest podpiętych do układu (pojawia się tylko podczas włączania urządzenia)
Waitms 500
Lcd W
Wait 3
Cls 'Znajdź pierwszy czujnik podpięty do portu
Dsid1(1) = 1wsearchfirst() 'Znajdź kolejny czujnik podpięty do portu
Dsid2(1) = 1wsearchnext() 'Znajdź kolejny czujnik podpięty do portu
'*******************Odczyt numerów ID czujników temperatury*********************
If Dsid1(8) = Crc8(dsid1(1) , 7) Then 'ta opcja pojawia się tylko przy włączaniu urządzenia
Locate 1 , 1
Lcd "CRC OK Czujnik 1 ID"
Wait 1
Locate 1 , 1
For B = 1 To 8
Lcd Hex(dsid1(b))
Next
End If
Wait 2
If Dsid2(8) = Crc8(dsid2(1) , 7) Then
Locate 2 , 1
Lcd "CRC OK Czujnik 2 ID"
Wait 1
Locate 2 , 1
For B = 1 To 8
Lcd Hex(dsid2(b))
Next
End If
Wait 2
Cls
'*******************koniec odczytu ID czujników temperatury*********************
Do
1wreset
1wwrite &H55
1wverify Dsid1(1) 'wysyłamy adres pierwszego czujnika
1wwrite &HBE
I1 = 1wread(2)
'---------------------------------
1wreset
1wwrite &H55
1wverify Dsid2(1) 'wysylam adres drugiego czujnika
1wwrite &HBE
I2 = 1wread(2)
'--------konwersja temp dla wszystkich dsow
1wreset
1wwrite &HCC
1wwrite &H44
Wait 1
'****Jeśli pracujesz z wyświetlaczem innym niż 2x20 to tutaj trzeba wprowadzić zmiany w LOCATE********
I1 = I1 * 10
I1 = I1 / 16
'If I1 > 0 Then Cls 'korekta przesuniecia znaku st C przy przejściu z temp ujemnej na dodatnią
Ss = Str(i1)
Ss = Format(ss , " 0.0")
Locate 1 , 1 'Pozycja wyświetlania nazwy i temperatury (1.1 -> 1 linia 1 kolumna, 2.10 -> 2 linia 10 kolumna itd)
Lcd "Zew" ; Ss ; Chr(0) ;
I2 = I2 * 10
I2 = I2 / 16
'If I2 > 0 Then Cls
Ss = Str(i2)
Ss = Format(ss , " 0.0")
Locate 2 , 1
Lcd "Wew" ; Ss ; Chr(0) ;
Loop |
|
|
| Back to top |
|
 |
Google

|
#
06 Sep 2007 05:40 |
|
|
|
|
|
| Back to top |
|
 |
gothye Poziom 22

Joined: 12 Dec 2003 Posts: 2390
|
#50
07 Sep 2007 22:35 Re: 4x DS18b20 +LCD = Termometr |
|
|
|
dlaczego twój program niedziała z czujnikiem DS1820 ?
cały czas mam temperature 2C :(
|
|
| Back to top |
|
 |
mariuz Poziom 22

Joined: 15 Aug 2004 Posts: 1652 Location: Konstancin-Jeziorna
|
#51
08 Sep 2007 11:27 Re: 4x DS18b20 +LCD = Termometr |
|
|
|
DS18b20 i DS1820 to zupełnie inne czujniki. DS1820 ma mniejszą rozdzielczość pomiarową oraz wymaga innego algorytmu przeliczającego.
Poszukaj na elektrodzie, było wiele projektów na ds1820
|
|
| Back to top |
|
 |
Robstar Poziom 14

Joined: 14 Oct 2003 Posts: 158
|
#52
09 Sep 2007 12:39 Re: 4x DS18b20 +LCD = Termometr |
|
|
|
Nie wiem jak u was ale wydaje mi się że Formatowanie trzeba zmienić ponieważ przy pomiarze poniżej 10 C wszystko znika i ja zrobiłem tak że z tego:
Ss = Format(ss , " 0.0")
zrobiłem tak
Ss = Format(ss , "00. ") i chyba teraz jest OK ale trzeba by dokładnie sprawdzić przy minusie.
Jeśli się myle to proszę o poprawkę :)
|
|
| Back to top |
|
 |
Łysacz Poziom 13

Joined: 17 Mar 2005 Posts: 128 Location: KIELCE
|
#53
12 Sep 2007 20:53 Re: 4x DS18b20 +LCD = Termometr |
|
|
|
Ja mam
Ss = Format(ss , " 0.0") i temperature mi ostatnio normalnie wyświetlało 9,9 st C i 9,6 st C. Nie wiem jak sie zachowuje z ujemnymi temp bo jeszcze nie sprawdzałem.
|
|
| Back to top |
|
 |
akanaf Poziom 12

Joined: 04 Dec 2005 Posts: 109 Location: Chybie
|
#54
19 Sep 2007 20:38 Re: 4x DS18b20 +LCD = Termometr |
|
|
|
Co to jest KTR na schemacie, i czego mam podłączyć? Bo w moim wyświetlaczu nie ma takiego pinu o tej nazwie.
|
|
| Back to top |
|
 |
Duch__ Poziom 22

Joined: 12 Dec 2004 Posts: 1911 Location: Opole
|
#55
19 Sep 2007 21:01 Re: 4x DS18b20 +LCD = Termometr |
|
|
|
| akanaf wrote: |
| Co to jest KTR na schemacie, i czego mam podłączyć? Bo w moim wyświetlaczu nie ma takiego pinu o tej nazwie. |
Oznacza to kontrast. Jest to pin 3 w wyświetlaczu.
|
|
| Back to top |
|
 |
SebaOK Poziom 10

Joined: 02 Apr 2003 Posts: 46 Location: Strzelin, Wrocław
|
#56
24 Sep 2007 21:26 Re: 4x DS18b20 +LCD = Termometr |
|
|
|
I uważajcie na pin 5 wyświetlacza ( R/W). Trzeba podać stan niski, aby wyświetlacz pracował w trybie write. Nie ma tego na schemacie, a ja straciłem trochę czasu, zanim doszedłem, dlaczego niby wszystko ok, a nic nie wyświetla
|
|
| Back to top |
|
 |
AccessDenied Poziom 3

Joined: 02 Sep 2004 Posts: 7
|
#57
25 Sep 2007 14:14 Re: 4x DS18b20 +LCD = Termometr |
|
|
|
Witam, to i ja dodam sowje trzy grosze odnośnie formatowania wyświetlania temperatury ujemnej. Metoda sprawdzona w zakresie -40 do +99, brak przesunięć cyferek, wersja dla wyświetlacza 2x16 i 4 ds18b20 (2 wewnętrzne i 2 zewnętrzne)
| Code: |
$regfile = "m8def.DAT" 'deklaracja procesora, w tym wypadku Atmega8
$crystal = 1000000 'deklaracja cześtotlwiości pracy (wew oscylator 1MHz w zupełności wystarcza)
'Deklaracja portów od wyświetlacza LCD
Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.4 , Rs = Portb.5
Config Lcd = 16 * 2 'ustawiamy typ wyświetlacza (soft jest dostosowany do pracy z wyświetlaczem 2x20, przy pracy z innym wyświetlaczem trzeba będzie skorygować wyświetlanie znaków)
'*************************************WAŻNE**********************************************
'Pamiętać o podłączeniu rezystora podciągającego o wartości 4.7kohm między linią DQ a VCC
Config 1wire = Portd.5 'deklaracja portu na którym będą podpięte DS18b20
Dim I1 As Integer , Ss As String * 6
Dim I2 As Integer
Dim I3 As Integer
Dim I4 As Integer
Dim Dsid1(8) As Byte
Dim Dsid2(8) As Byte
Dim Dsid3(8) As Byte
Dim Dsid4(8) As Byte
Dim B As Byte 'deklaracja zmiennej do odczytu kodów ID
Dim W As Byte 'deklaracja zmiennej do odczytu ilośc czujników
Deflcdchar 0 , 8 , 20 , 11 , 4 , 4 , 4 , 3 , 32 'znak stopnia Celsjusza
Deflcdchar 1 , 4 , 21 , 14 , 27 , 14 , 21 , 4 , 32 'znak zewnętrzna
Deflcdchar 2 , 16 , 0 , 23 , 21 , 21 , 21 , 21 , 32 'znak wewnętrzna
Cursor Off 'Wyłącza kursor
Cls 'Funkcja CLS czyści ekran
Lcd " Termometr " ; 'ekran startowy (pojawia się tylko podczas włączania urządzenia)
Lowerline
Lcd " 2007 "
Wait 5
Cls
W = 1wirecount()
Lcd "Ilosc czujnikow:" 'Informuje ile czujników jest podpiętych do układu (pojawia się tylko podczas włączania urządzenia)
Waitms 500
Lcd W
Wait 3
Cls 'Znajdź pierwszy czujnik podpięty do portu
Dsid1(1) = 1wsearchfirst() 'Znajdź kolejny czujnik podpięty do portu
Dsid2(1) = 1wsearchnext() 'Znajdź kolejny czujnik podpięty do portu
Dsid3(1) = 1wsearchnext() 'Znajdź kolejny czujnik podpięty do portu
Dsid4(1) = 1wsearchnext()
'*******************Odczyt numerów ID czujników temperatury*********************
If Dsid1(8) = Crc8(dsid1(1) , 7) Then 'ta opcja pojawia się tylko przy włączaniu urządzenia
Locate 1 , 1
Lcd "CRC OK Termo1 ID"
Wait 1
Locate 1 , 1
For B = 1 To 8
Lcd Hex(dsid1(b))
Next
End If
Wait 2
If Dsid2(8) = Crc8(dsid2(1) , 7) Then
Locate 2 , 1
Lcd "CRC OK Termo2 ID"
Wait 1
Locate 2 , 1
For B = 1 To 8
Lcd Hex(dsid2(b))
Next
End If
Wait 2
If Dsid3(8) = Crc8(dsid3(1) , 7) Then
Locate 1 , 1
Lcd "CRC OK Termo3 ID"
Wait 1
Locate 1 , 1
For B = 1 To 8
Lcd Hex(dsid3(b))
Next
End If
Wait 2
If Dsid4(8) = Crc8(dsid4(1) , 7) Then
Locate 2 , 1
Lcd "CRC OK Termo4 ID"
Wait 1
Locate 2 , 1
For B = 1 To 8
Lcd Hex(dsid4(b))
Next
End If
Wait 2
Cls
'*******************koniec odczytu ID czujników temperatury*********************
Do
1wreset
1wwrite &H55
1wverify Dsid1(1) 'wysyłamy adres pierwszego czujnika
1wwrite &HBE
I1 = 1wread(2)
'---------------------------------
1wreset
1wwrite &H55
1wverify Dsid2(1) 'wysylam adres drugiego czujnika
1wwrite &HBE
I2 = 1wread(2)
'---------------------------------
1wreset
1wwrite &H55
1wverify Dsid3(1) 'wysylam adres trzeciego czujnika
1wwrite &HBE
I3 = 1wread(2)
'---------------------------------
1wreset
1wwrite &H55
1wverify Dsid4(1) 'wysylam adres czwartego czujnika
1wwrite &HBE
I4 = 1wread(2)
'--------konwersja temp dla wszystkich dsow
1wreset
1wwrite &HCC
1wwrite &H44
Wait 1
'****Jeśli pracujesz z wyświetlaczem innym niż 2x20 to tutaj trzeba wprowadzić zmiany w LOCATE********
I1 = I1 * 10
I1 = I1 / 16
If I1 > 0 Then 'korekta przesuniecia znaku st C przy przejściu z temp ujemnej na dodatnią
Ss = Str(i1)
Ss = Format(ss , " 0.0")
Locate 1 , 1 'Pozycja wyświetlania nazwy i temperatury (1.1 -> 1 linia 1 kolumna, 2.10 -> 2 linia 10 kolumna itd)
Lcd Chr(1) ; Ss ; Chr(0) ;
Else
Ss = Str(i1)
Ss = Format(ss , " 0.0")
Locate 1 , 1 'Pozycja wyświetlania nazwy i temperatury (1.1 -> 1 linia 1 kolumna, 2.10 -> 2 linia 10 kolumna itd)
Lcd Chr(1) ; Ss ; Chr(0) ;
End If
I2 = I2 * 10
I2 = I2 / 16
If I2 > 0 Then
Ss = Str(i2)
Ss = Format(ss , " 0.0")
Locate 1 , 10
Lcd Chr(2) ; Ss ; Chr(0) ;
Else
Ss = Str(i2)
Ss = Format(ss , " 0.0")
Locate 1 , 10
Lcd Chr(2) ; Ss ; Chr(0)
End If
I3 = I3 * 10
I3 = I3 / 16
If I3 > 0 Then
Ss = Str(i3)
Ss = Format(ss , " 0.0")
Locate 2 , 1
Lcd Chr(1) ; Ss ; Chr(0) ;
Else
Ss = Str(i3)
Ss = Format(ss , " 0.0")
Locate 2 , 1
Lcd Chr(1) ; Ss ; Chr(0) ;
End If
I4 = I4 * 10
I4 = I4 / 16
If I4 > 0 Then
Ss = Str(i4)
Ss = Format(ss , " 0.0")
Locate 2 , 10
Lcd Chr(2) ; Ss ; Chr(0) ;
Else
Ss = Str(i4)
Ss = Format(ss , " 0.0")
Locate 2 , 10
Lcd Chr(2) ; Ss ; Chr(0) ;
End If
Loop
|
Pozdrawiam Robert
|
|
| Back to top |
|
 |
zozur Poziom 2

Joined: 13 Feb 2007 Posts: 2 Location: Poznań
|
#58
28 Sep 2007 19:16 Re: 4x DS18b20 +LCD = Termometr |
|
|
|
Witam
Czy projekt będzie działał również z czujnikami ds18s20?
Pozdrawiam
|
|
| Back to top |
|
 |
akanaf Poziom 12

Joined: 04 Dec 2005 Posts: 109 Location: Chybie
|
#59
30 Sep 2007 15:47 Re: 4x DS18b20 +LCD = Termometr |
|
|
|
Jak się podaje Niski stan?
|
|
| Back to top |
|
 |
Duch__ Poziom 22

Joined: 12 Dec 2004 Posts: 1911 Location: Opole
|
#60
30 Sep 2007 20:47 Re: 4x DS18b20 +LCD = Termometr |
|
|
|
| akanaf wrote: |
| Jak się podaje Niski stan? |
Pin R/W z wyświetlacza podepnij do masy.
|
|
| Back to top |
|
 |
Google

|
#
30 Sep 2007 20:47 |
|
|
|
|
|
| Back to top |
|
 |