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



Teraz jest 19 kwi 2024, o 22:14


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 12 ] 
Autor Wiadomość
PostNapisane: 10 wrz 2012, o 18:19 
Offline
Użytkownik

Dołączył(a): 17 lip 2012
Posty: 105
Pomógł: 0

Żeby nie wałkować wszystkich problemów w jednym wątku założyłem drugi. :lol: Postanowiłem, że powalczę z uruchomieniem w/w termometru jednak bez skutku. Używam zmodyfikowanego kodu z książki Mikrokontrolery AVR Język C Podstawy programowania a oto on:

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


Mimo wszystko temperaturę jaką otrzymuje to 0 *C. Nie mam pojęcia czy to problem sprzętowy czy coś w kodzie dlatego prosił bym o pomoc mądrzejszych. ;)

W pliku ds18x28.h mam ustawione MAXSENSORS 4, natomiast w onewire.h mam tak:

Kod:
 /* Wybór PINu oraz PORTu na magistralę 1Wire */
#define OW_PIN  PC0
#define OW_IN   PINC
#define OW_OUT  PORTC
#define OW_DDR  DDRC


Czujnik znajduje się na pinie PC0. Procesor taktowany 1 MHz.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 wrz 2012, o 20:44 
Offline
Użytkownik

Dołączył(a): 17 lip 2012
Posty: 105
Pomógł: 0

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


Co prawda jest to jeszcze trochę prowizorka, bo np brak przerwań, ale działa.

Edit:

Funkcja sama w sobie działa prawidłowo, czy dasz 30 czy 58 to wyświetla prawidłowo. Natomiast próba wyświetlenia ilości znalezionych czujników kończy się pokazaniem 0. Także nie wiem czy mam problem z obsługą przerwań jak i samego timera czy to może coś ze sprzętem.

Edit:2

Odwrotne podłączenie czujnika skutkuje jego uszkodzeniem?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 wrz 2012, o 21:09 
Offline
Moderator
Avatar użytkownika

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

Odwrotne podłączenie DS18B20 pozwoli odejść mu do krainy wiecznych łowów, i wcale nie będzie mu wtedy zimno, wręcz odwrotnie - dostanie sporej gorączki ;) Mam tu na myśli 3-przewodowe połączenia. A wiem co mówię bo kiedyś jednego odesłałem do Winetou ;)

_________________
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: 10 wrz 2012, o 21:28 
Offline
Użytkownik

Dołączył(a): 17 lip 2012
Posty: 105
Pomógł: 0

Chyba odesłałem swojego ds18b20 w zaświaty. Zasugerowałem się widokiem button co skutkowało zamianą nóżek GND z VCC. :roll: Jak to mawiają, nauka kosztuje... Jutro przelutuje termometr, i jak wszystko pójdzie dobrze coś podreperuje tą bibliotekę do wyświetlacza segmentowego.

Panowie a co do kodu z pierwszego postu jest OK? Przerabiałem go według swojej wiedzy i być może gdzieś zrobiłem błąd.

Dziś już muszę iść spać, bo jutro czeka mnie Kampania Wrześniowa z Matematyki :| Trzymajcie kciuki :?

Edit:
Antystatyczny Każda wypowiedz coś wnosi do rozmowy i pomaga także dziękuje, że moje wątki nie lądują w koszu jak to bywa często na elektrodzie. Dodam jeszcze, że teorii programowania trochę się nasłuchałem. Najpierw 3 lata technikum potem rok na studiach. Coś napisać potrafię, ale czasami brakuje mi pomysłów jak rozwiązać większy problem.
Co do przerwań to masz racje. Lepiej zrobić multipleksowanie niż zaśmiecać sobie kod i przeciążać procesor. Już z obsługą tego termometru raz na kilka sekund wyświetlacz lekko przygasa, więc coś na rzeczy musi być.



Ostatnio edytowano 10 wrz 2012, o 21:33 przez paladyn, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 wrz 2012, o 21:40 
Offline
Moderator
Avatar użytkownika

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

paladyn napisał(a):
Co do przerwań to masz racje. Lepiej zrobić multipleksowanie niż zaśmiecać sobie kod i przeciążać procesor. Już z obsługą tego termometru raz na kilka sekund wyświetlacz lekko przygasa, więc coś na rzeczy musi być.


Ale masz przecież w książce i na DVD przykład z multipleksowaniem w przerwaniu, więc dlaczego od tego nie zaczniesz tylko tworzysz takiego potworka bez przerwania a potem się dziwisz, ze coś nie działa ? Tzn nawet doceniałbym bardziej gdybyś robił to w 100% inną metodą niż w książce (ale na przerwaniu jakimś oczywiście) bo widać byłoby że starasz się sam rozwiązać takie problemy. Tymczasem trzymając się tego pseudomultipleksowania w pętli głównej sam sobie totalnie komplikujesz sprawę - dlatego czekam aż sam dojdziesz że jednak przerwanie - wtedy łatwiej będzie ci pomóc.

_________________
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: 12 wrz 2012, o 09:18 
Offline
Użytkownik

Dołączył(a): 17 lip 2012
Posty: 105
Pomógł: 0

Antystatyczny Bardzo dziękuje za słowa otuchy. Wczoraj bardzo długo zeszło mi na uczelni i brakło już czasu na pracę przy sterowniku, ale egzamin zaliczony ;) Także awansowałem na kolejny rok studiów ;) Przed chwilą przylutowałem poprawnie nowy czujnik i bardzo ładnie pokazuje temperaturę. Teraz zabieram się za przerobienie biblioteki do wyświetlacza segmentowego. :)


Edit:

Panowie rzućcie okiem na moje wypociny? Wygląda to trochę lepiej? Dodam, że nic nie mruga i pracuje bardzo dobrze.

Oto kod:

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: 12 wrz 2012, o 19:32 
Offline
Użytkownik

Dołączył(a): 17 lip 2012
Posty: 105
Pomógł: 0

Już chyba wiem o co Ci chodzi z tym licznikiem. Za pierwszym razem Timer zaczyna liczyć od 216 do 255, ale po przepełnieniu zaczyna od 0 zamiast 216. Stąd w przerwaniu ustawia się ponowie licznik na żądaną wartość.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 wrz 2012, o 09:35 
Offline
Użytkownik

Dołączył(a): 17 lip 2012
Posty: 105
Pomógł: 0

Mam jeszcze jeden problem... Potrzebuje przyciskami zmieniać wartość zmiennych MIN_T oraz MAX_T czyli zmienne muszą posiadać jakąś wartość, i muszą być zapisane w pamięci uC tak, żeby wyłączenie sterownika nie skutkowało skasowaniem poprzednio ustawionych wartości. W jaki sposób można to zrobić?

Z tego co wiem jeśli ustawie w programie ich wartość początkową na 0 to po ponownych uruchomieniu sterownika wartości ustawione przeze mnie zostaną zastąpione 0, jeśli nie ustawie wartości początkowej to nie będę mógł zwiększać jak i zmniejszać wartości tych zmiennych.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 wrz 2012, o 10:05 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

Pozostaje ci użycie pamięci eeprom + przestudiowanie tego wątku.

------------------------ [ Dodano po: 3 minutach ]

Musisz pamiętać o tym że pamięć eeprom ma ograniczoną ilośc zapsów, więc rozsądnie byłoby wykryć zanik zasilania i zapis do eeprom lub zapisywanie zmiennej po jej ustawieniu. Na pewno nie wchodzi w rachubę inkrementacja lub dekrementacja zmiennej zdefinowanej w eeprom



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 wrz 2012, o 12:59 
Offline
Użytkownik

Dołączył(a): 17 lip 2012
Posty: 105
Pomógł: 0

Ok już sobie poradziłem z problemem. Sterownik skończony i przeszedł pomyślnie testy na stole. Teraz czas na test przy piecu ;)
Późnym wieczorem zdam relacje jak wyszedł test. oraz wrzucę kilka zdjęć jeśli będą chętni ;)

EDIT:

Wracając do żywotności EEPROMu to przeczytałem w dokumentacji, że wynosi 100 000 zapisów, natomiast u mnie będzie około 100 zapisów w ciągu roku. Chyba jak napiszę, że życia mi braknie na zatyranie tego EEPROMu to się nie obrazicie ? :lol:



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 wrz 2012, o 20:13 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

Można dać jeszcze zewnętrznego eproma, albo jak jest tam zegarek to wykorzystać jego pamięć...
Z tym czy braknie to się okaże. Może być tak, że częściej będziesz zapisywał niż Ci się na początku wydawało ;)

Jak poszły testy :?: I pokaż jak wygląda zmontowana całość

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 wrz 2012, o 10:24 
Offline
Użytkownik

Dołączył(a): 17 lip 2012
Posty: 105
Pomógł: 0

http://odsiebie.pl/z9qkmxyvr79l/Sterownik_CWU.rar.html - Zdjecia

Testy przeszły prawie pozytywnie ;) Wczoraj kasowała mi się zawartość zmiennej w EEPROM odpowiadającą za przechowywanie temperatury załączenia pompy. Poczytałem coś i znalazłem info nt uszkodzonej pierwszej komórki pamięci w EEPROM czy dokładnie tam gdzie znajdowała się moja zmienna. Dziś zmodyfikowałem lekko kod i póki co działa prawidłowo.

Wcześniej zmienna kasowała mi się po około 20min. Przed chwilą sprawdzałem czekając 1,5 godziny i jest OK.



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