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



Teraz jest 3 mar 2026, o 04:21


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 12 ] 
Autor Wiadomość
PostNapisane: 22 sty 2016, o 01:25 
Offline
Użytkownik

Dołączył(a): 30 sie 2012
Posty: 226
Pomógł: 11

Witam,
chcę zrobić pomiar temperatury na 3 czujnikach DS18B20.
Wykorzystuję procesor Atmega 8A.

Po skompilowaniu i wgraniu programu nie wiem, gdzie popełniam błąd, ponieważ mam podłączony jeden czujnik w trybie NORMAL i wyświetlają się błędy:
error7
error1 error2

A jeden czujnik powinien pokazywać temperaturę, a na dwóch pozostałych powinien być błąd (ponieważ brak pozostałych 2 czujników).
Czujnik mam podpięty do portu PD0 (nóżka 2).

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


Nie jestem pewien ustawienia timerów...

Dziękuję za pomoc



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 sty 2016, o 08:18 
Offline
Nowy

Dołączył(a): 22 sty 2016
Posty: 21
Pomógł: 1

Jak kolega wyżej napisał TIMER0 nie ma CTC.
Polecam poczytać 'Table 21-5 Waveform Generation Mode Bit Description' bo nie widze u CIebie wyboru trybu pracy licznika.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 sty 2016, o 09:55 
Offline
Użytkownik

Dołączył(a): 30 sie 2012
Posty: 226
Pomógł: 11

Zapis OCR1A = 108 jako preskaler.
Wcześniej używałem procesora Atmega 88P dla 3 czujników.

Sprawdzę konfigurację Timera1 i wyślę poprawiony kod.
Dziękuję za pomoc ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 sty 2016, o 17:24 
Offline
Użytkownik

Dołączył(a): 30 sie 2012
Posty: 226
Pomógł: 11

Próbuję ustawić Timer1, jednak dalej robię coś niezgodnie z datasheetem Atmegi 8...
Chcę ustawić tryb licznika:
Obrazek

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



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



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


Procek to Atmega 8A-PU.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 sty 2016, o 22:54 
Offline
Użytkownik

Dołączył(a): 30 sie 2012
Posty: 226
Pomógł: 11

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


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

Jednak nadal brak wyświetlonej temperatury..



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 sty 2016, o 00:01 
Offline
Nowy

Dołączył(a): 22 sty 2016
Posty: 21
Pomógł: 1

'TCCR1A |= (1<<WGM12); /* tryb CTC */'

Pierwsza linijka kodu i już błąd - czytaj opis dokładnie, nie na pałę. Rozwiązanie akurat tego problemu masz na stronie 135.

Poza tym mam pewną radę jako od osoby, która od tygodnia uczy się avrów z internetu i książki Mirka. Zamiast pisać cały kod i próbować go rozkminiać, podziel go sobie na części. Zrób sobie osobny projekt, gdzie spokojnie, od podstaw ogarniesz sobie liczniki. Dopiero wtedy, małymi krokami, rozbudowuj je o kolejne części projektu. W moim wypadku to zawsze działa.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 sty 2016, o 00:52 
Offline
Moderator
Avatar użytkownika

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

michalf napisał(a):
Zamiast pisać cały kod i próbować go rozkminiać, podziel go sobie na części. Zrób sobie osobny projekt, gdzie spokojnie, od podstaw ogarniesz sobie liczniki. Dopiero wtedy, małymi krokami, rozbudowuj je o kolejne części projektu. W moim wypadku to zawsze działa.

Bardzo słusznie kolega prawi ;)

_________________
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: 23 sty 2016, o 08:56 
Offline
Użytkownik

Dołączył(a): 30 sie 2012
Posty: 226
Pomógł: 11

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

zgodnie ze str. 135 w datasheet:
Obrazek

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

zgodnie ze str. 145 w datasheet:
Obrazek

Jednak wyświetlacz nadal nie pokazuje temperatury.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 sty 2016, o 10:33 
Offline
Moderator
Avatar użytkownika

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

piotr8605 napisał(a):
Jednak wyświetlacz nadal nie pokazuje temperatury.

Panowie - no panowie .... proszę .... powtarzam, wyjaśniam .... podpowiadam, powtarzam .... a ty wciąż to samo

Jeśli mnie wyświetlacz nie pokazywałby temperatury - to bym przede wszystkim NIGDY nie zadał komuś pytania

"dlaczego mi wyświetlacz nie pokazuje temperatury?"

No panie kochany to tak jakbyś na forum serwisowo motoryzacyjnym zadał pytanie

"dlaczego mi samochód nie jedzie ?"

No proszę, że spróbuj zwrócić uwagę, że ten wyświetlacz czy samochód to jest już dużo bardziej skomplikowany mechanizm niż np gdyby zadać takie pytania:

"dlaczego mi nie świeci dioda LED?"

albo

"dlaczego mi młotek nie wbija gwoździa?"


w przypadku tych ostatnich pytań bez zastanowienia można próbować podpowiedzieć, że np:

"dioda ci nie świeci bo podłączyłeś ją odwrotnie"
"dioda ci nie świeci bo nie podłączyłeś zasilania"
"dioda ci nie świeci bo jest uszkodzona"

"młotek ci nie wbija gwoździa bo nie trafiasz"
"młotek ci nie wbija gwoździa bo jest z gumy"
"młotek ci nie wbija gwoździa bo bo wbijasz go w beton"
"młotek ci nie wbija gwoździa bo gwóźdź jest gumowy"

żartuję trochę no ale pokazuję pewną rzeczywistość - gdy mówimy o prostym mechanizmie to może być zaledwie kilka niedopatrzeń i kilka podpowiedzi - nie ważne, że oczywistych - każdy kiedyś zaczyna i może na jedną z nich nie zwrócić uwagi.

No ale jak odpowiedzieć na pytanie

"dlaczego mi samochód nie jedzie?"

Pomyślałeś kiedyś o tym .... przecież tu mógłbyś napisać kilka tysięcy odpowiedzi i nadal to nie byłyby wszystkie albo chociażby połowa - bo to może zależeć od setek czynników .... No więc co?

Ano trzeba w końcu kiedyś zrozumieć, że aby uzyskać najszybciej i najlepszą nie tylko odpowiedź ale i konkretną pomoc na swoje pytanie - to trzeba wziąć się w garść i:

1. Poświęcić trochę swojego czasu na zbadanie wszystkimi środkami i wiedzą jaka ci jest dostępna aby zejść o kilka pięter niżej jeśli chodzi o problem - rozpoznać tyle ile możesz, zrobić własne testy chociażby mega podstawowe np:

- zbadać czy masz paliwo w baku
- zbadać czy ktoś ci w nocy kół nie odkręcił
- zbadać czy akumulator w ogóle działa a przez to rozrusznik
- sprawdzić czy daje się przełożyć bieg w skrzyni biegów

2. Bodajże najważniejsze - szanując i swój czas ale i czas tych którym zadajesz pytanie - poświęcić trochę czasu na dobre opisanie problemu i tego co zrobiłeś aby zbadać obecny stan rzeczy i być może zadać dużo bardziej precyzyjne pytanie nawet jeśli będzie trzeba napisać o wiele więcej zdań, czyli zadać pytanie np tak:

"dlaczego mi samochód nie jedzie, pomimo, że: mam paliwo, rozrusznik ruszył i słychać że silnik pracuje, wciskam sprzęgło i ustawiam pierwszy bieg, dodaję lekko gazu a samochód nie rusza do przodu. Nie znam się na autach ale czy może być tak - że np uszkodzona jest skrzynia biegów albo sprzęgło albo jeszcze coś innego o czym już nie mam pojęcia ?"


ROZUMIESZ .... więc teraz odnośnie twojego pytania i problemu - przede WSZYSTKIM obejrzyj sobie ten poradnik:
http://mirekk36.blogspot.com/2014/04/pu ... ednej.html

i za pomocą jednej diody LED cuda zdziałasz i sam sobie być może nawet pomożesz ale .... !!!

ale przede wszystkim panie kochany - no bez przesady no wykonaj tych kilka czynności samemu aby sprawdzić podstawy - bo wydaje się, że uruchamiasz tak "na szybko" jakiś większy projekt ale bez poczytania i co gorsze zrozumienia jak działają jego poszczególne składniki .....

więc żeby ktokolwiek mógł ci pomóc rozwiązać problem to pokaż że sam potrafisz najpierw sprawdzić czy masz paliwo w baku

w tym celu załóż oddzielny projekt - w Eclipse to 1 sekunda .... i postaraj się odpalić przerwanie timera! Jak wiesz trzeba ustawić jego konfigurację pracy, włączyć przerwanie .... no ale jak sprawdzić czy ono działa

i tu wracamy do jednej cudownej diody LED jako debugera - co za problem podłączyć sobie ją do jakiegoś pinu żeby migała w przerwaniu - oczywiście ustawić je tak aby częstotliwość była na tyle niska abyśmy widzieli okiem to miganie

a nie tak jak ty - że piszesz:

- zezwolenie na przerwanie mam ustawione zgodnie z notą
- ustawiłem tryb CTC zgodnie z notą

i tu ręce opadają bo dalej zadajesz znowu pytanie

"dlaczego samochód mi nie jedzie?" czyli "dlaczego mi wyświetlacz nie pokazuje temperatury?"

Rozumiesz ? nie piszę tego - żeby się z ciebie śmiać, żebym był zdenerwowany - aż tyle się rozpisałem - żeby pokazać ci DROGĘ - jaką należy iść w rozwiązywaniu problemów .... Jak to zastosujesz to sam zobaczysz że ci się to spodoba - bo sam rozwiążesz kupę z nich we własnym zakresie. I będzie dużo większa radocha ...

Jak widzisz aby wyświetlał wyświetlacz temperaturę to tak jak w tym samochodzie musisz sprawdzić nie tylko czy masz paliwo w baku ale jeszcze kupę innych rzeczy - a masz taką możliwość we własnym zakresie i pokazałem jak (przypominam obejrzyj ten poradnik do którego link podałem)

a na końcu - zapewniam cię - albo sam rozwiążesz problem albo zadasz już całkiem inne i konkretne pytanie

wbrew pozorom uczenie się zadawania pytań to też niezmiernie ważna rzecz - i jak widać też w tym staram się pomagać

_________________
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: 23 sty 2016, o 12:27 
Offline
Użytkownik

Dołączył(a): 30 sie 2012
Posty: 226
Pomógł: 11

Panie Mirku,
Ja już raz uruchamiałem program z 3 czujnikami temperatury (dodatkowo był wykorzystany przetwornik ADC do pomiaru napięcia), jedyna różnica to teraz inny procesor (wcześniej był Atmega 88, a teraz jest Atmega 8) i brak ADC.
Obecnie usunąłem kod programu dotyczący przetwornika ADC, ponieważ teraz potrzebuję tylko pomiar temperatury.
Niestety miałem długą przerwę w programowaniu i stąd problemy z timerami i przerwaniami.
A Pan wspominał w niejednym poradniku, że datasheet jest bardzo ważny i dlatego dzięki pomocy kolegów z forum chciałem zmienić parametry timera analogicznie na procesor Atmega 8.
Dziękuję za poradnik, z pewnością oglądnę.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 sty 2016, o 13:03 
Offline
Moderator
Avatar użytkownika

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

piotr8605 napisał(a):
wcześniej był Atmega 88, a teraz jest Atmega 8

Ja powiem tak - uwierz mi, że to nie tylko twój problem - gdy ja np długo robię jakiś projekt na ATmega32 i nagle przesiadam się na np ATmega328 to mam podobnie, że eeeeh nagle mi coś nie działa - no i zaczyna się główkowanie

ale ja ROBIĘ DOKŁADNIE to co opisałem wyżej - czyli zaczynam dzielić problem na mniejsze kawałki i jak już dojdę że jakiś timer mi nie działa a często tak się zdarza to co? ... no to zaczynam próbę wyizolowania problemu - albo komentuję wszystko inne albo wydzielam kod z timerem do osobnego projektu i testuję z jedną diodą LED - nie ma że boli - MUSI ruszyć - i wtedy najczęściej i jak zwykle dochodzę do sedna problemu - bo się okazało np że zapomniałem że np w procki m328 jest inna nazwa rejestru czy bitu albo bit w innym rejestrze - czyli to - czego kompilator nie pokaże .... a człowiek się zagapił

więc to nie jest tylko spowodowane przerwą w pracy czy że ktoś jest początkujący

nauka programowania to również albo przede wszystkim nauka poszukiwania problemu, testowania kodu i debugowania

tylko że wielu osobom wydaje się, że to będzie długo trwało ten podział na mniejsze kawałki, sięganie po tą diodę LED (po ten sposób) ... no i tak walczą i tracą czas - aż później się okazuje że i tak trzeba po to sięgnąć i wtedy EUREKA - błąd znaleziony w trymiga

_________________
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 sty 2016, o 19:24 
Offline
Użytkownik

Dołączył(a): 30 sie 2012
Posty: 226
Pomógł: 11

Zmieniłem wartość rejestru OCR i zmieniłem ustawienia timera na Timer2.
Teraz działa prawidłowo.

Rozwiązanie mojego problemu znalazłem tutaj:
topic4466.html

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


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



Dziękuję wszystkim za pomoc :)



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 3 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