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



Teraz jest 21 lip 2026, o 08:23


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 21 ] 
Autor Wiadomość
PostNapisane: 17 maja 2013, o 01:33 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 maja 2013
Posty: 41
Lokalizacja: Zielona Góra
Pomógł: 1

Witam, jako młody padawan, sztuki zwanej programowaniem, postanowiłem pewnego poranka iż podszkolę swe umiejętności w owej dziedzinie i postawiłem sobie za cel termometr + 3 7-segmentowe wyświetlacze led. Kiedy już wygrałem bitwę z wyświetlaczami jak nasi z krzyżakami pod Grunwaldem, okazało się iż moja następną bitwą będzie DS1820. A więc po podłączeniu go do portu PB0, nie wyświetla się żadna temperatura tylko error (Err), poza szybkim dochodzeniu, doszedłem do wniosków iż on nawet nie chce wejść w pętlę tylko cały czas jest poza nią. Do tego wyświetlacze migają w odstępach 0,5s, wszystkie równomiernie. Moim głównym podejrzanym jest tutaj Timer1 w trybie CTC skonfigurowany tak żeby otrzymywać 1 ms, tak jak w książce. Jednakże nie mogę znaleźć motywu dla tegoż przestępstwa. Może nie rozwijając się dalej, wrzucę tutaj zdjęcia z miejsca zbrodni.

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


Bibliotek nie chcę udostępniać gdyż widziałem pewny opór ze strony autora w innym wątku, a są one nie przerobione, tylko dodanych jest kilka moich funkcji wyświetlających na wyświetlaczu Err i Er. Korzystam z kosteczki pod dźwięczną nazwą Atmega8 karmionej wewnętrznym oscylatorem 8MHz



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 maja 2013, o 06:30 
Offline
Moderator
Avatar użytkownika

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

Wielki napisał(a):
Moim głównym podejrzanym jest tutaj Timer1 w trybie CTC skonfigurowany tak żeby otrzymywać 1 ms, tak jak w książce


A pokaż mi przykład w książce gdzie byłaby mowa że po pierwsze ma w tym przypadku być wykorzystany Timer1 ? a po drugie żeby otrzymywać 1ms ???? :(

Wielki napisał(a):
OCR1A =  78125000;


to też było w książce ? Gdyby nie charakterystyczny kod z main to pomyślałbym, że nie chodzi o moją książkę ... zastanawiałeś się jednak nad tą liczbą którą tu wpisujesz do OCR1A ??? przecież to rejestr 16-bitowy - więc jaką liczbę można byłoby do niego wpisać ? czy przypadkiem nie 65535 ??? Powiedz mi jaką drogą szedłeś konfigurując ten timer ? i dlaczego wybrałeś armatę jaką jest 16-bitowy timer do tak błahego celu ?

Wielki napisał(a):
Bibliotek nie chcę udostępniać gdyż widziałem pewny opór ze strony autora w innym wątku, a są one nie przerobione, tylko dodanych jest kilka moich funkcji wyświetlających na wyświetlaczu Err i Er


A uważasz że to słuszne publikować biblioteki na forach ? .... ale oczywiście tak czy inaczej dziękuję za taką postawę, że ich nie udostępniasz ...

Przy okazji podpowiem, że takich gotowych bibliotek nie warto przerabiać tzn w takim sensie żeby dodawać do nich jakieś specyficzne rzeczy dla danego projektu bo tracą one swoją uniwersalność i to kompletnie. Podpowiem, że takie funkcje robi się w dodatkowych plikach własnego projektu i wtedy biblioteka jest zawsze pięknie integralną częścią, którą można w razie czego spokojnie skopiować z projektu i użyć wprost w innym (kolejnym) ... a po takiej przeróbce jak skopiujesz - to okaże się że w nowym projekcie wygeneruje się setka błądów i warningów bo np nie używasz takich albo żadnych wyświetlaczy no i będzie trzeba co bibliotekę znowu przerabiać ? ....

Wielki napisał(a):
Korzystam z kosteczki pod dźwięczną nazwą Atmega8 karmionej wewnętrznym oscylatorem 8MHz


oczywiście da radę spokojnie przeportować ten kod z książki na tego procka, tylko jednak proszę doczytaj tam troszkę bo przerwanie o wiele lepiej odpalać na 8-bitowym timerze i powinno się ono wykonywać powiedzmy co 10 ms (akurat w tym przykładzie) bo spójrz na tą linię i komentarz:

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


przy okazji zapytam czy korzystasz / sprawdzasz kody na dołączonej płycie DVD ? czy oglądałeś lekcje Video na DVD ? jeśli nie to polecam ....

------------------------ [ Dodano po: 5 minutach ]

Wielki napisał(a):
Jednakże nie mogę znaleźć motywu dla tegoż przestępstwa


Reasumując - jak widzisz ta zła konfiguracja timera może być powodem tego przestępstwa ;) pewnie nie zamierzonego ... ale kto pyta nie błądzi ... spróbuj więc to poprawić a jak coś wyda się nadal niezrozumiałe to śmiało pytaj.

_________________
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: 17 maja 2013, o 06:54 

Pomógł: 0

PS. Zobacz sobie mój temat o termoparze, tam jest pomiar zimnego końca za pomocą DS18X20 działa bez żadnych wielkich przeróbek, timery masz skonfigurowane, tylko poszukać na forum, skopiować i tyle.


Autor postu otrzymał pochwałę


Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 17 maja 2013, o 13:28 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 maja 2013
Posty: 41
Lokalizacja: Zielona Góra
Pomógł: 1

mirekk36 napisał(a):
Powiedz mi jaką drogą szedłeś konfigurując ten timer ? i dlaczego wybrałeś armatę jaką jest 16-bitowy timer do tak błahego celu ?


Gdyż Timer2 który także obsługuje CTC został już wykorzystany do multipleksowania wyświetlacza.
Cytuj:
przy okazji zapytam czy korzystasz / sprawdzasz kody na dołączonej płycie DVD ? czy oglądałeś lekcje Video na DVD ? jeśli nie to polecam ....


Zadaną pokutę odmówiłem, poza tym jeżeli chodzi o 1wire to niestety nie ma takiej lekcji Video. A płyta oraz książka są nieodłącznymi kompanami w tej nierównej walce, poza tym jak już wspomniałem dopiero zaczynam, staram się opanować podstawy, a potem dopiero będę myślał o czymś poważniejszym, jak np następne projekty ;) Dziękuje za pomoc, będę dalej walczyć, ale to po maturze. Odezwę się znów jeżeli nic nie zadziała.





Cytuj:
A uważasz że to słuszne publikować biblioteki na forach ? .... ale oczywiście tak czy inaczej dziękuję za taką postawę, że ich nie udostępniasz ...


Ależ Panie Mirku, ja nie miałem na celu urazić Pana, tylko chciałem wyjaśnić dlaczego nie udostępniam bibliotek, a robię to ze względu na szacunek do Pańskiej pracy włożonej w tą książkę ;)

Poza tym poszukałem poszukałem i znalazłem. Jeszcze raz prześledziłem dział o przerwaniach, teraz już mniej więcej wiem jak je skonfigurować. Fragment kodu zaczerpnięty z tematu o termoparze kolegi kilka postów wyżej ;)

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


Teraz działa, przechodzi ładnie do pętli i wgl, ale jednak nie znajduje mojego czujnika. Czujnik w trybie normalnym, nóżka środkowa do Vcc poprzez rezystor 4.7 Ohm. Może mam zepsuty czujnik, a może po prostu to że jest to 1820 a nie 18b20.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 maja 2013, o 16:49 
Offline
Moderator
Avatar użytkownika

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

Wielki napisał(a):
do Vcc poprzez rezystor 4.7 Ohm


4,7 ohm ???????? o jo joj :( .... to mogłeś zgotować męki piekielne nie tylko czujnikowi ale prockowi

więc albo literówkę zrobiłeś i dałeś rezystor 4,7K albo jeśli rzeczywiście dałeś tak mały rezystor ???? to niedobrze :(

daj albo 4,7K a najlepiej 2,2K (polecam ten drugi)

_________________
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: 17 maja 2013, o 17:16 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 maja 2013
Posty: 41
Lokalizacja: Zielona Góra
Pomógł: 1

Istotnie, jest to rezystok 4,7 Kom. Już nie wiem co mam źle :( Chyba mam zepsuty czujnik...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 maja 2013, o 17:55 
Offline
Moderator
Avatar użytkownika

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

warto miec dwa tak dla porownania. i daj rezystor 2.2k jak pisalem

_________________
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: 17 maja 2013, o 22:59 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 maja 2013
Posty: 41
Lokalizacja: Zielona Góra
Pomógł: 1

Witojcie, dołożyłem drugi rezystorek równolegle i nic, dalej nie znajduje czujnika. Czuje że problem leży w tym że mam DS1820 a w bibliotece znajduje się 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.


co sugeruje, przynajmniej mi, że ta biblioteka obsługuje tylko DS18S20 i DS18B20 :(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 maja 2013, o 05:46 
Offline
Moderator
Avatar użytkownika

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

ta biblioteke rowniez ds1820 wiec nie szukaj tu przyczyny :( musisz miec cos zle podlaczone albo babolka gdzies w kodzie. co za problem sprawdzic kod z dvd i zobaczyc ze dziala

_________________
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: 18 maja 2013, o 15:50 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 maja 2013
Posty: 41
Lokalizacja: Zielona Góra
Pomógł: 1

Kiedy to jest kod z płyty, nic nie zmieniałem. Podłączyłem nóżkę DQ do PB0 z pull-up, jedyne co to tylko usunąłem wyświetlanie temp. Wszystko widać w kodzie który zresztą jest tam wyżej..



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 maja 2013, o 15:53 
Offline
Moderator
Avatar użytkownika

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

Tzn zobacz , na początku pokazujesz kod z użyciem Timer1, a tego na DVD ani w książce nie ma - więc nie mów że to jest kod z płyty DVD :( bo nie jest ... więc masz dwie dodatkowe NIEWIADOME

1. błąd w kodzie
2. błąd w sprzęcie

zatem jeśli odpaliłbyś kod z DVD a coś by nie działało to wiedziałbyś że pozostaje ci już tylko błąd sprzętowy i o połowę mnie roboty z szukaniem.

_________________
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: 18 maja 2013, o 15:58 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 maja 2013
Posty: 41
Lokalizacja: Zielona Góra
Pomógł: 1

Odpalając kod z płyty nie widział bym czy działa czy nie.. bo musiałbym odpalić go z LCD którego nie posiadam. Proszę sprawdź kod który podałem potem. Tam jest już poprawna inicjalizacja Timera0, z częstotliwością 10 ms.... Skorzystałem z niego gdyż korzystam z bibliotek z płyty do multipleksowania, a tam korzystam z Timera2. Poza tym czysty kod jest na ATmega32 :(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 maja 2013, o 16:17 
Offline
Moderator
Avatar użytkownika

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

jeśli to ATmega8 to przecież ona nie ma trybu CTC, tylko NORMAL dla Timer0 a ty sobie na początku zrobiłeś:

TCNT0 = 178; // przerwanie porównania co 10ms (100Hz)

i myślisz że dzięki temu będzie zliczał co tyle czasu ? :(

przecież timer w trybie NORMAL trzeba jeszcze przeładowywać w przerwaniu

_________________
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: 18 maja 2013, o 17:34 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 maja 2013
Posty: 41
Lokalizacja: Zielona Góra
Pomógł: 1

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


Teraz jest dobrze ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 maja 2013, o 17:58 
Offline
Moderator
Avatar użytkownika

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

skoro chcesz podzielić przez 178, to:

TCNT0 = 178;

źle :(

przecież po przeładowaniu timer będzie w trybie NORMAL teraz zliczał od 178 do 256 czyli ile ? ....... 78

więc będziesz miał podział częstotliwości po preskalerze przez 78 a nie 178 - a chyba nie o to ci chodziło ?

_________________
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: 19 maja 2013, o 01:13 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 maja 2013
Posty: 41
Lokalizacja: Zielona Góra
Pomógł: 1

Czyli jeżeli w przepełnieniu dam TCNT0 = 78;
To znaczy że będzie mi zliczał tylko 178 razy, czyli tak jak chciałem. Przepraszam że zadaje tak banalne pytania ale dla mnie są to rzeczy nowe.. :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 maja 2013, o 04:59 
Offline
Moderator
Avatar użytkownika

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

Wielki napisał(a):
Czyli jeżeli w przepełnieniu dam TCNT0 = 78;
To znaczy że będzie mi zliczał tylko 178 razy, czyli tak jak chciałem. Przepraszam że zadaje tak banalne pytania ale dla mnie są to rzeczy nowe.. :D


Dokladnie TAK ;) i poczytaj tez to co napisal wyzej kolega Anystatyczny ;) bo fajnie podsumował


Autor postu otrzymał pochwałę

_________________
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: 19 maja 2013, o 13:15 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 maja 2013
Posty: 41
Lokalizacja: Zielona Góra
Pomógł: 1

Panowie, dziękuje wam :) Zabieram się teraz za ten czujnik, program mam ogarnięty, więc w poniedziałek skoczę po DS18B20 i wtedy sprawdzę :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 maja 2013, o 02:53 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 maja 2013
Posty: 41
Lokalizacja: Zielona Góra
Pomógł: 1

A więc tak, dla potomnych. Sprawdzajcie połączenia 100x, oraz jak coś nie działa na jednym porcie, to zmieńcie i sprawdźcie czy na innym jest taka sama sytuacja. Bo mój czujnik ruszył po zmianie z PB0 na PB1. Magia!! :D

Nie mniej jednak, dziękuje wszystkim którzy zaangażowali się w pomoc ;) Dzięki wam mam ochotę na dalszą zabawę z programowaniem

Pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 maja 2013, o 07:22 

Pomógł: 0

Miałem podobnie, bo nie zrobiłem clean, przed wgraniem po ponownej kompilacji, a zmieniałem wyprowadzenie 1wire by na płytce był porządek ;) i też siedziałem z dzień nad tym........bo przecież wczoraj jeszcze działało, a dziś, już nie.

Na takie "problemy" najlepsze są gotowce, albo od Mirka, albo zrobione własnoręcznie, czyli jakiś podstawowy program bez dodatków, sprawdzony, okazuje się potem najczęściej, że prosty błąd, a czasu zmarnowane, jak by co najmniej wahadłowiec człowiek składał ;).



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 28 lut 2014, o 09:22 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 sty 2012
Posty: 131
Lokalizacja: Kraków
Pomógł: 2

kolego Wielki czy mógłbyś pokazać funkcję :

d_led_temp



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

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:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO