Aktyw Forum

Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.

Sprawdź punkty Zarejestruj się

Problem z programem do obsługi termometru

Fuhu
-
-
Posty:6
Rejestracja:19 sty 2006, o 21:19
Lokalizacja:Cieszyn
Problem z programem do obsługi termometru

Postautor: Fuhu » 25 sty 2006, o 21:00

Witam,
napisałem prosty programik do obsługi ds18b20, który miałby mierzyć temperaturę i według zadanych kryteriów włączać ew. wyłączać urządzenia (narazie to tylko diody, ale docelowo będą to przekaźniki).
Po uruchomieniu programu napotkałem na następujący problem: diody które są podłączone do wyjść migają a mają świecić. W przedziale od 10 do 20 miga jedna dioda, a powyżej 20 migają dwie czyli temperatura jest mierzona i sygnał jest podawany na wyjścia zgodnie z moimi zamierzeniami.
I teraz prośba jak zrobić aby diody świeciły, a nie migały??
Poniżej listing programu

ps. programuję dopiero od paru dni więc proszę o wyrozumiałość

Pozdrawiam Fuhu

Kod: Zaznacz cały

$crystal = 8000000 Config Pinc.5 = Output ' piny jako wyjścia Config Pinc.4 = Output Config 1wire = Portd.0 ' termometr ds18b20 Dim I As Integer 'zmienne do odczytu temp. Dim S As Single Pomiar: 'pomiar temp. na termometrze ds18b20 1wreset 1wwrite &HCC 1wwrite &H44 Waitms 750 1wreset 1wwrite &HCC 1wwrite &HBE I = 1wread(2) S = I / 16 Select Case S ' wybór diody Case 0 To 10 : Goto Zero ' obie diody zgaszone Case 10 To 20 : Goto Jedna 'jedna dioda świeci Case 20 To 30 : Goto Dwie 'obie diody świecą End Select Zero: Reset Portc.5 'zgaś obie diody Reset Portc.4 Goto Pomiar: ' zmierz temp. Jedna: Set Portc.5 'dioda 1 świeci Reset Portc.4 ' dioda 2 zgaszona Goto Pomiar: Dwie: Set Portc.5 'dioda 1 świeci Set Portc.4 'dioda 2 świeci Goto Pomiar:

szymel
-
-
Posty:212
Rejestracja:16 sty 2005, o 16:42
Lokalizacja:Włocławek

Re: Problem z programem do obsługi termometru

Postautor: szymel » 25 sty 2006, o 21:57

Kod: Zaznacz cały

$crystal = 8000000 Config Pinc.5 = Output ' piny jako wyjścia Config Pinc.4 = Output Config 1wire = Portd.0 ' termometr ds18b20 Dim I As Integer 'zmienne do odczytu temp. Dim S As Single Pomiar: 'pomiar temp. na termometrze ds18b20 Do 1wreset 1wwrite &HCC 1wwrite &H44 Waitms 750 1wreset 1wwrite &HCC 1wwrite &HBE I = 1wread(2) S = I / 16 Select Case S ' wybór diody Case 0 To 10 : Gosub Zero ' obie diody zgaszone Case 10 To 20 : Gosub Jedna 'jedna dioda świeci Case 20 To 30 : Gosub Dwie 'obie diody świecą End Select Loop Zero: Reset Portc.5 'zgaś obie diody Reset Portc.4 Return Jedna: Set Portc.5 'dioda 1 świeci Reset Portc.4 ' dioda 2 zgaszona Return Dwie: Set Portc.5 'dioda 1 świeci Set Portc.4 'dioda 2 świeci Return
Sprawdź teraz.
Dobra rada ;) Zapomnij o istnieniu instrukcji GoTo, przynajmniej na początku nauki :D

Piotrek

Fuhu
-
-
Posty:6
Rejestracja:19 sty 2006, o 21:19
Lokalizacja:Cieszyn

Postautor: Fuhu » 26 sty 2006, o 07:41

Sprawdź teraz.
No cóż,
niestety program dalej nie działa tak jak powinien
Teraz objawy są następujące
diody nie migają ale ogrzanie czujnika nie powoduje zapalenia następnej diody.
Natomiast gdy ogrzeję czujnik i wyłączę i włączę układ zapalają się dwie diody, ale gdy czujnik ochłodzi się to diody nie gasną.

Proszę o pomoc :567:

szymel
-
-
Posty:212
Rejestracja:16 sty 2005, o 16:42
Lokalizacja:Włocławek

Postautor: szymel » 26 sty 2006, o 20:11

Sprawdź teraz.
No cóż,
niestety program dalej nie działa tak jak powinien
Teraz objawy są następujące
diody nie migają ale ogrzanie czujnika nie powoduje zapalenia następnej diody.
Natomiast gdy ogrzeję czujnik i wyłączę i włączę układ zapalają się dwie diody, ale gdy czujnik ochłodzi się to diody nie gasną.

Proszę o pomoc :567:
Zmień sekcję Case jak poniżej i zmienną "S" na typ Integer i zapomnij również (na początku) , o typie SINGLE :D

Kod: Zaznacz cały

Select Case S ' wybór diody Case 0 To 9 : Gosub Zero ' obie diody zgaszone Case 10 To 19 : Gosub Jedna 'jedna dioda świeci Case 20 To 30 : Gosub Dwie 'obie diody świecą Case Else 'to na wypadek , gdyby pomiar "szwankował" Toggle Portc.5 Toggle Portc.4 End Select
Piotrek

Fuhu
-
-
Posty:6
Rejestracja:19 sty 2006, o 21:19
Lokalizacja:Cieszyn

Postautor: Fuhu » 26 sty 2006, o 21:09

Pozmieniałem tak jak radziłeś i teraz diody migają naprzemian
czyli zadziałała chyba instrukcja

Kod: Zaznacz cały

Case Else 'to na wypadek , gdyby pomiar "szwankował" Toggle Portc.5 Toggle Portc.4
czy dobrze rozumuję?
Jakie mogą być przyczyny takiego stanu ?
Czujnik jest zasilany pasożytniczo. Zmieniłem na inny i to samo.
Rezystor podciągający próbowałem 4,7k a także 2,2k.
Już mi ręce opadają, przecież to są podstawy.
Jak to nie będzie działać to nie ma co się brać za poważniejsze rzeczy.
Może trzeba jeszcze "coś gdzieś" podciągnąć. HELP!

szymel
-
-
Posty:212
Rejestracja:16 sty 2005, o 16:42
Lokalizacja:Włocławek

Postautor: szymel » 26 sty 2006, o 23:04

Taki obiaw oznacza , że kolejne pomiary dają wartośc , z poza oczekiwanego zakresu , czyli <0 lub >30.Ciekawym , czy zwarłeś ze sobą linię VCC i GND jeśli zasilasz układ pasożytniczo :?: Spróbuj wydłużyć czas pomiaru do 1 sekundy i sprawdź czy zadeklarowana częstotliwość uC jest równa faktycznej.Czy zmieniłeś typ zmiennej "S" :?: Jeśli tak , to dopisz jeszcze taką linię:

Kod: Zaznacz cały

Select Case S ' wybór diody Case 0 To 9 : Gosub Zero ' obie diody zgaszone Case 10 To 19 : Gosub Jedna 'jedna dioda świeci Case 20 To 30 : Gosub Dwie 'obie diody świecą '------------ Case 80 To 90 :Toggle Portc.4 jeśli będzie pulsować dioda na portc.4 , to znaczy , że za krótki czas na pomiar(DS zwraca wartość fabryczną - 85 C) . '------------ Case Else 'to na wypadek , gdyby pomiar "szwankował" Toggle Portc.5 Toggle Portc.4 End Select
Piotrek

Fuhu
-
-
Posty:6
Rejestracja:19 sty 2006, o 21:19
Lokalizacja:Cieszyn

Postautor: Fuhu » 27 sty 2006, o 11:28

Witam
Nareszcie zaczęło działać :D
Na początku muszę przeprosić wszystkich, a szczególnie kol. Piotrka,
gdyż wina tkwiła w zasilaniu całego układu.
Zasilałem go 12v przez stabilizator 7805, ale jak widać nie potrafił on dostarczyć
odpowiedniego prądu. Wpadłem więc na pomysł (po przeprowadzeniu 195 prób i tyluż zaprogramowaniach procka)
żeby zasilić układ 5v z zasilacza od komputera i wszystko zaczęło pięknie działać.
No cóż nauka kosztuje (mnie 2 dni siedzenia przed komputerem i trochę nerwów) no ale wkońcu się udało.

Dziękuję za zainteresowanie
Pozdrawiam
Sławek

Awatar użytkownika
Futrzaczek
-
-
Posty:782
Rejestracja:4 gru 2005, o 17:48
Lokalizacja:Piotrków Tryb
Kontaktowanie:

Postautor: Futrzaczek » 27 sty 2006, o 20:45

Witaj Fuhu

Wina najprawdopodobniej leżała w filtrowaniu zasilania z 7805. Ja robię tak: przed wejściem 100nF oraz 100uF. Za wyjściem 100nF i 100uF. Na tym działa mi wszystko co jest wybredne w zasilaniu

Jonnik
-
-
Posty:5
Rejestracja:27 maja 2003, o 19:17
Kontaktowanie:

Postautor: Jonnik » 29 sty 2006, o 12:19

$crystal = 8000000

A to tak można?

Config Pinc.5 = Output ' piny jako wyjścia
Config Pinc.4 = Output


Czy powinno być tak:

Config Portc.5 = Output
Config Portc.4 = Output

Wróć do „Projektowanie PCB, programy EDA, CAD, narzędziowe”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 24 gości