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



Teraz jest 3 lut 2025, o 23:45


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
Autor Wiadomość
PostNapisane: 28 mar 2013, o 23:32 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 mar 2013
Posty: 333
Pomógł: 10

Witam,
Przede wszystkim witam wszystkich użytkowników tego forum,, a szczególnie moderatorów i proszę na wstępie o wyrozumiałość i cierpliwość :) .

Mam problem z przyciskiem do mojego termometru.
Założenia: Dwa przyciski, dwie czujki, dwie diody. Przycisk 1 ma sprawić ze wyświetli się temperatura z czujnika 1, i analogicznie drugi z czujnika drugiego. I do tego zapalają się odpowiednie diody, mające sygnalizować która czujka podaje aktualnie temperaturę na wyświetlacz 2x 7segm.

Ni by działa wszystko tylko temperatura jest pobierana raz tzn. nacisnę przycisk i pobierze np 20 stopni... i więcej nie mierzy mimo zmiany temperatury. jak nacisnę drugi raz to się "odświeży" - tylko trzymając wciśnięty przycisk podaje temperaturę na bieżąco... kluczowe tu są zmienne odpowiadające za drgania styków... bez nich temp. jest odświeżana cały czas. wiem ze coś się blokuje, wiem co ale nie wiem jak zmienić kod... próbowałem rożnie i ciągle brak takiego efektu jaki chce osiągnąć.

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


[ na przyszłość proszę zajrzeć do tego posta i zobaczyć jak się umieszcza kod w znacznikach [ syntax = c ] zamiast [ code ] ok? to taka prośba - już poprawiłem ;) - mirekk36]



Ostatnio edytowano 28 mar 2013, o 23:38 przez Atmegowiec, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 mar 2013, o 23:37 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27352
Lokalizacja: Szczecin
Pomógł: 1042

Ja bym na początek radził dla testu wywalić z tego kodu obsługę DS18x20 i sprawdzić samo działanie IFów na samych diodach LED - bo teraz jest duży miszmasz niepotrzebnie, a szczególnie to sprawdzania czujników w IF'ach sprawdzających stany klawiszy - to tworzy taki chaos i dlatego też kolega się na razie przez to gubi - nawet mi z samego kodu trudno się domyśleć co kolega ma na myśli.

Ale jak wywalisz w testowej wersji obsługę DS'ów to powinno się zrobić od razu jaśniej ok?

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 mar 2013, o 23:52 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 mar 2013
Posty: 333
Pomógł: 10

po wyrzuceniu sprawdzania DS18B20 z ifów sprawdzalnych stan przycisków jest taka sama dokładnie sytuacja.

Diody przełączają się prawidłowo. Tylko dziwna sprawa bo gdy wyciągnę jeden czujnik to diody sie przelaczaja, a jak wymienie go na inny DS to juz nie przełączają... jakies zwarcie w czujniku?.... temperature pokazuje

co do efektu to dalej trzeba trzymac wciśnięty przycisk by na bierzaco odswiezał temperature


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


Może napisze jak ja rozumiem ten kod. Na poczatku podciągniecie VCC do klawiszy oraz ustawienie wyjścia na diodach LED pokazujacych ktora czujka aktualnie działa. Potem inicjuje globalne przerwania poprzez sei();. Wchodzimy do petli głównej, gdzie nastepuje inicjacja 2 zmiennych do obsługi drgan styków (bo dwa klawisze wiec 2 zmienne), sprawdzenie ilosci czujników podpietych do Atmegi. Następnie jest rozpoczęcie pomiaru
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Dochodzimy do pierwszego IF-a:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Jesli pierwsza zmienna ma wartość 0 oraz przycisk pierwszy wciśnięty oraz jesli prawidłowo pobrany został pomiar to czekamy 30 ms, zmieniamy zmienna na 1 i potem uruchamiamy procedurę wyświetlenia wyniku na wyświetlaczu.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

W przeciwnym razie jeśli pierwsza zmienna jest różna od zera oraz przycisk nie jest wciśnięty ustaw zmienna pierwszą na 0.
Analogicznie z drugim czujnikiem.:)



Ostatnio edytowano 29 mar 2013, o 00:14 przez Atmegowiec, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 mar 2013, o 00:13 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27352
Lokalizacja: Szczecin
Pomógł: 1042

przede wszystkim zauważ, że:

1. w ogóle nie pilnujesz czasu konwersji :( .... gdzie u ciebie odczekanie 750ms ?

2. wciąż w pętli głównej atakujesz czujniki rozkazem pomiaru

3. wciąż w pętli głównej sprawdzasz ile czujników na magistrali

tak więc w ogóle że odczytuje się jakaś temperatura co jakiś czas to raczej toto lotek

przerobiłeś program z książki ale niestety nie zrozumiałeś tam jeszcze - co było NAJWAŻNIEJSZE czyli taki ala timer programowy do odmierzania czasów. Tam czujniki były cyklicznie co 1 sekundę czy co 2 odpytywane ... może dokładniej tak że co 3 sekundy

w pierwszej - rozkaz pomiaru do wszystkich
w drugiej - pomiar z pierwszego
w trzeciej - pomiar z drugiego

ty to w ogóle wyrzuciłeś i wstawiłeś sobie klawisze niefrasobliwie ;) ale kwestię czasów TOTALNIE pominąłeś jak widzę w tym kodzie

no i skoro dalej zostawiłeś sprawdzanie temperatury w IF'ie sprawdzającym stan klawisza (tak nie powinieneś robić) to nie dziw się że gdy trzymasz klawisz to coś się dzieje a gdy go puszczasz to nie...

ja na twoim miejscu zostawiłbym kod tak jak z książki - a klawiszami sterował tylko i wyłącznie samym wyświetlaniem - natomiast w TLE działałoby sobie spokojnie mierzenie temperatury

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 mar 2013, o 00:39 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 mar 2013
Posty: 333
Pomógł: 10

Panie Mirku, przerwanie ISR(TIMER0_COMP_vect) u mnie steruje wyświetlaczem led - bo zamieniłem wyswietlacz LCD na diodowy bo nie miałem HD4470. Tu by trzeba było uzyc dwóch przerwan, a to nie chciało przejść za bardzo... Oczywisnie pewnie da sie to zrobic tylko ze nie moglem jakos tego ogarnac i usunąłem przerwanie służące za taki timer programowy zebym mogl obsłużyć wyświetlacz diodowy



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 mar 2013, o 00:52 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27352
Lokalizacja: Szczecin
Pomógł: 1042

no ja rozumiem ;) ale jeszcze raz powtarzam - trzeba zacząć jednak od podstaw - a tą podstawą w przypadku DS'ów jest ścisła procedura pomiarów czyli

1. wysłanie rozkazu pomiaru
2. odczekanie min 750ms
3. odczyt temperatury
4. jakaś mała zwłoka
5. leć do pkt.1

a ty likwidując timer programowy rozłożyłeś to na łopatki dlatego nie działa dobrze - więc nie ma co się dziwić

nawet jak potrzebowałeś timera sprzętowego do obsługi LED to nie koliduje to ani z tym żeby w tym samym timerze sprzętowym zrobić podstawę czasu dla timera programowego albo użyć po prostu drugiego timera sprzętowego - przecież ATmega każda ma co najmniej 2 timery 8-bitowe

wiem wiem - to może brzmieć o tych timerach programowych jak czary-mary na razie dla ciebie - i myślisz pewnie że mi łatwo mówić ....

nie nie - rozumiem cię doskonale ale po prostu moim zdaniem troszkę wykonałeś za daleki skok w przód nie trenując wcześniejszych prostszych rzeczy i stąd braki w poradzeniu sobie z tym na razie

dlatego cofnij się może troszkę w przerabianiu materiału w książce i na tą chwilę więcej różnych ćwiczeń z samymi diodami LED i timerami programowymi podziałaj najpierw - to łatwiej to pójdzie ok?

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 mar 2013, o 00:58 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 mar 2013
Posty: 333
Pomógł: 10

no ok poczytam jeszcze raz, zobaczymy, tylko ze strasznie według mnie jest skomplikowane to wyswietlanie temperatury... wdl mnei powinno byc coś znacznie prościej bo fakt jak nie ma przycisków tylko ustawie żeby samo sie zmieniały czujniki np co 5 sekund to działa oki.... dlatego jakoś dziwnie ze dodanie przycisków tak strasznie komplikuje.

No ale rozumiem z e malo wiem i to tego wina, wiec poczytam



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: 7 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 4 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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO