Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 23 kwi 2024, o 20:11


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 12 ] 
Autor Wiadomość
PostNapisane: 9 kwi 2013, o 16:50 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lip 2012
Posty: 306
Pomógł: 0

Witam. Próbuję zrobić warunek który ma sterować mocą grzałki zależną od różnicy temperatury zadanej a aktualnej.
Inaczej mówiąc chcę osiągnąć taki efekt:
Gdy różnica temperatur między zadaną a aktualną jest 0,2deg to ma przypisać do zmiennej moc_g 10.
Gdy różnica między 0,2 a 0,4 to ma być 20. I tak dalej.
Napisałem taki warunek ale on zupełnie nie działa :(
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 kwi 2013, o 17:14 
Offline
Użytkownik

Dołączył(a): 14 sty 2013
Posty: 36
Pomógł: 2

Warunek działa ale tylko dla (temp_z - temp_a) > 35 bo w każdym innym przypadku moc_g jest zerowana.

spróbuj tak

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 kwi 2013, o 17:41 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lip 2012
Posty: 306
Pomógł: 0

Tak też nie działa.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 kwi 2013, o 17:53 
Offline
Użytkownik

Dołączył(a): 14 sty 2013
Posty: 36
Pomógł: 2

a jakie wartości masz w cel, cel_fract_bits, cel_z, cel_z_ulamek?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 kwi 2013, o 18:02 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lip 2012
Posty: 306
Pomógł: 0

cel i cel_fract_bits to dane z czujnika DS18B20 a cel_z i cel_z_ulamek to sam ustawiam z klawiatury.
Sprawdzałem co kryje się pod zmienną temp_z i temp_a i gdy ustawie np temperaturę 21 z klawiatury dla zmiennej temp_z to ma 210
a czujnik jak wskazuje temp 23,4 C to zmienna temp_a ma 234.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 kwi 2013, o 18:58 
Offline
Użytkownik

Dołączył(a): 14 sty 2013
Posty: 36
Pomógł: 2

sprawdziłem i w tym programie wszystko działa prawidłowo, więc chyba błąd jest w innym miejscu.
Poniżej przykładowy kod na którym testowałem

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


no i wyszło jeszcze jedno małe ale! Warunek brzegowy w pętli for. Tablicę masz 10 elementową a dla zapisu x<9 ostatnią wartością x będzie 8 czyli źle, bo nie sprawdzisz ostatniego elementu. Powinno być tak jak powyżej x<10 lub x<=9.

I jeszcze jedno. wyświetl sobie wynik (temp_z - temp_a) czy czasem nie jest ujemny.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 kwi 2013, o 19:14 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lip 2012
Posty: 306
Pomógł: 0

No muszę przeanalizować wszystko:(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 kwi 2013, o 20:41 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 20 gru 2012
Posty: 72
Pomógł: 6

Może zamiast trzymać temperaturę w dwóch zmiennych zastosuj liczbę stało przeciekową np. gdy temperatura 32,7*c to liczba stało przecinkowca by była 327, do wyświetlenia to już tylko rozbijanie na dwa człony przez operacje dzielenia dla liczby całkowitej (327/10) oraz dla liczby po przecinku dzielenie nodulo (327%10).

Gdy przychodzi pora porównania temperatury to nie ma potrzeby pisania dwóch warunków a co za tym idzie około 10 bajtów kodu np:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
wystarczy
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

to tak w odniesieniu do całości projektu i innhych tematów z nim związanych.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 kwi 2013, o 21:02 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lip 2012
Posty: 306
Pomógł: 0

to porównania mam w postaci całkowitej.
Coś działa ale mam problem z mocą grzania, A dokładniej że jak podłączę zamiast grzałki żarówkę do testów to ona miga.
Problem leży po stronie inicjalizacja timera. Ponieważ jeden timer jest wykorzystany do sterowania mocy grzania i do regulacji obrotów wentylatora. Nie ma możliwości by pracowała grzałka i wentylator razem. Pracuje albo jedno albo drugie.
Wcześniej jak dostosowałem kod do mojego projektu, to moc zgrzania zmieniałem z klawiatury. I w zależności co włączyłem to albo grzało albo wiało. Jeden timer włączał a 2 wyłączał. coś takiego:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Wcześniej jak testowałem to przy podłączonej żarówce też migało. Lecz po wprowadzeniu zmiennej: grzanie_chlodzenie = 0; świeciła równo. Teraz funkcja wygląda tak:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


I działa w pętli głównej. Co powoduje delikatne miganie. Oczywiście nie będzie to odczuwalne dla grzałki ale jak już coś takiego robię to interesuje mnie czy da się ten efekt w moim przypadku usunąć. Próbowałem już sam coś wykombinować ze zmienną moc_g_temp , troszkę polepszyło ale nie w 100%.

A tak wyglądają funkcje :
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 kwi 2013, o 17:12 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lip 2012
Posty: 306
Pomógł: 0

Odkryłem ze za migotanie odpowiedzialna jest funkcja:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


To chyba sporo by trzeba było przerobić w programie obsługi pomiaru temp.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 kwi 2013, o 17:59 
Offline
Użytkownik

Dołączył(a): 14 sty 2013
Posty: 36
Pomógł: 2

Pierwsze co się rzuca to po co 2 razy wykonywać funkcję DS18X20_read_meas

można tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 kwi 2013, o 19:32 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lip 2012
Posty: 306
Pomógł: 0

No można, Lecz to wiele nie dało :(
Ale że to będzie regulować grzałką niema sensu rozgrzebywać tego problemu.

Mam za to problem z którym se nie mogę poradzić. Próbuję teraz zrobić tak że jak mam już wartość procent jaką ma grzać lub chłodzić to ma załączyć timera i z odpowiednią mocą pracować. Mam taki warunek który załącza albo regulacje mocy grzania albo chłodzenia:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Wartość zmiennej grzanie_chlodzenie jest inicjalizowane z tej funkcji:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


I efekt mam taki że na LCD ładnie pokazuje z jaką mocą ma grzać lub chłodzić ale praca układu nie działa do końca.
Gdy załączę jako pierwsze grzanie_chlodzenie == 2 czyli chłodzenie to działa. Jest regulacja mocy wiania od 0 do 100% Jak włączę grzanie_chlodzenie == 1 czyli regulacje mocy grzania to regulacja mocy grzania też jest. Jednak jak ponownie mam wrócić do grzanie_chlodzenie == 2 czyli chłodzenia to już nie ma regulacji wiania. :(

Plik:
grzanie.c:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


grzanie.h:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


chlodzenie.c:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


chlodzenie.h:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


I nie wiem co mogę z tym zrobić :(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 12 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 6 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO