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



Teraz jest 12 maja 2026, o 01:08


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 32 ]  Przejdź na stronę 1, 2  Następna strona
Autor Wiadomość
PostNapisane: 6 kwi 2013, o 17:38 
Offline
Użytkownik
Avatar użytkownika

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

Witam ponownie.
Po podziale Mojego kodu, dzięki Kolegą z tego fora chciałbym poprawić kod pomiaru temp.
W tej chwili w ogóle nic mi się nie wyświetla na LCD. Szukam przyczyny ale coś nie mogę znaleźć :(
Kod pliku 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.


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


termometr.h:
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: 6 kwi 2013, o 21:42 
Offline
Użytkownik
Avatar użytkownika

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

Zmieniłem F_CPU bo zapomniałem że zostawiłem 1MHz i teraz wyświetla mi ale jakąś nieprawdę bo 85.0 C :(



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

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

Coś dziwnego mi się stało:( po wyłączeniu zasilania i włączeniu niema nic na LCD :(
A chciałem tak sprawdzić bo wczoraj było tak że jak włączyłem to przez chwilę pojawiał się wynik 22.0 C a potem wskazywało 85.0 C a dziś już wszystko mi znikło :(
F_CPU Ustawione jest na 8MHz i mam zewnętrzny kwarc zegarkowy podłączony pod TOSC1 i 2.
Tak wygląda część zegarkowa:
zegar.c
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


zegar.h:
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: 7 kwi 2013, o 09:28 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 maja 2012
Posty: 233
Lokalizacja: Gdynia
Pomógł: 15

Uprościł bym procedurę obsługi pomiaru temperatury. Będzie aktualizowana co 1 sek ale to chyba nic nie szkodzi.

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: 7 kwi 2013, o 09:46 
Offline
Użytkownik
Avatar użytkownika

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

No zrobiłem zamieszanie, wybacz ale wczoraj wszystko śmigało :(
Częstotliwości się zgadzają z ustawionymi fusami i w eclipsie. To już wcześniej sprawdziłem i dla pewności jeszcze raz :)

Zrobiłem taki myk że inicjalizację LCD, timera zegara, ADC i SEI wstawiłem przed funkcje pierwszego pomiaru i po wgraniu programu i resecie zachowuje się tak że na LCD pojawia się dopiero po 14s wszystko.

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: 7 kwi 2013, o 10:36 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 maja 2012
Posty: 233
Lokalizacja: Gdynia
Pomógł: 15

Na początek. Z tego wynika, że chcesz żeby przerwania były generowane co 1 sek:

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


Przyjrzyj się temu czy tak rzeczywiście jest

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


Dodatkowa uwaga. Inicjalizuj timer tylko raz a w przerwaniu aktualizuj licznik TCNT2.



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

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

Taki wzór inicjalizacji timera zegara znalazłem w książce Tomasza Francuza.
Tz. że przerwanie nie jest wykonywane co 1s :(
???



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 kwi 2013, o 11:04 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 maja 2012
Posty: 233
Lokalizacja: Gdynia
Pomógł: 15

Dla formalności spytam na jakim mikrokontrolerze to odpalasz?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 kwi 2013, o 11:15 
Offline
Użytkownik
Avatar użytkownika

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

Atmega16



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 kwi 2013, o 11:27 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 maja 2012
Posty: 233
Lokalizacja: Gdynia
Pomógł: 15

Masz ustawiony preskaler 128 czy jeśli chcesz uzyskać przerwanie co 1 sek dla F_CPU 8MHz to:

F_CPU / preskaler / 1sek = 62500

Takiej wartości nie da się uzyskać w 8 bitowym liczniku TCNT2.

Jeśli masz blubooka to koniecznie przeczytaj sobie o trybie CTC (str 185->, 406 )



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 kwi 2013, o 11:35 
Offline
Użytkownik
Avatar użytkownika

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

Ale mam kwarc zegarkowy 32,768
i ASSR |=(1<<AS2); włącza go (taktowanie asynchronuczne) I przerwanie ma działać na przepełnienie licznika.
Czyli 32768 / 256 (tyle liczy licznik 8bitowy) daje 128 i dlatego preskaler dałem na 128.
I w rzeczywistości zegar działa dobrze, na tyle co wzrokowo idzie sprawdzić



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 kwi 2013, o 11:38 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 maja 2012
Posty: 233
Lokalizacja: Gdynia
Pomógł: 15

Nie zauważyłem, że masz podłączonego małego kwarca.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 kwi 2013, o 11:48 
Offline
Użytkownik
Avatar użytkownika

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

Nie ma problemu :)



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

Dołączył(a): 06 maja 2012
Posty: 233
Lokalizacja: Gdynia
Pomógł: 15

Jeżyk-1 napisał(a):
inicjalizację LCD, timera zegara, ADC i SEI wstawiłem przed funkcje pierwszego pomiaru i po wgraniu programu i resecie zachowuje się tak że na LCD pojawia się dopiero po 14s wszystko.


Spróbuj zakomentować poszczególne linie aż znajdziesz co wprowadza takie opóźnienie.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 kwi 2013, o 13:35 
Offline
Użytkownik
Avatar użytkownika

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

Po za komentowaniu: adc(); Uruchamiał się szybciej

Kod programu odpowiedzialnego za to klawiatura.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 klawiatura.c:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


------------------------ [ Dodano po: 7 minutach ]

Po wgraniu w takiej kolejności uruchamia się i po resecie na LCD pojawia się wynik od razu. Teraz widać tak jak było wcześniej że pojawia się temperatura 22C a po chwili wskakuje na 85C

Wykorzystałem ten kod który podałeś :

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


lecz po nim jest nadal to samo :(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 kwi 2013, o 16:30 
Offline
Użytkownik
Avatar użytkownika

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

Postanowiłem że ten kolegi kod i cały program pomiaru temp. skleję w jedno i wyszło mi 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.


I w jednym pliku to działa.

Ale po rozbiciu gdzieś musi być konflikt. Próbuję metodą prób coś osiągnąć ale nie wychodzi nic. Cały czas 85 C w osobnych plikach.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 kwi 2013, o 16:52 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 maja 2012
Posty: 233
Lokalizacja: Gdynia
Pomógł: 15

Zakomentuj jeszcze to

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

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

Nadal 85C :(



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

Dołączył(a): 06 maja 2012
Posty: 233
Lokalizacja: Gdynia
Pomógł: 15

To zakomentuj wszystko w pętli while(1) za wyjątkiem pomiaru temperatury i jej wyświetlania (pierwszy blok switch).



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

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

Nadal 85C

------------------------ [ Dodano po: 26 minutach ]

Ale po za komentowaniu funkcji adc() pomiar temp. zaczął działać.



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

Dołączył(a): 06 maja 2012
Posty: 233
Lokalizacja: Gdynia
Pomógł: 15

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


zamień na

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


i wlkej aktualny main.c



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

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

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



A co z tą funkcją adc(); ? Po za komentowaniu, działa pomiar temp.



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

Dołączył(a): 06 maja 2012
Posty: 233
Lokalizacja: Gdynia
Pomógł: 15

Jeżyk-1 napisał(a):
A co z tą funkcją adc(); ? Po za komentowaniu, działa pomiar temp.


A wcześniej pisałeś, że po za komentowaniu adc() nadal nie działa. Ja bym jeszcze raz spróbował za komentować wszystko dokładnie w while(1) i zostawił tylko

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

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

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

I wszystko w pętli głównej poza pomiarem temp.

A adc() jest przed pętlą główną.

Po za komentowaniu całej pętli głównej nadal to samo.
Jedynie jak wywalę tą funkcję adc() to działa pomiar :(
coś tu miesza mi ta funkcja :(



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

Dołączył(a): 06 maja 2012
Posty: 233
Lokalizacja: Gdynia
Pomógł: 15

to spróbuj jeszcze taki myk

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: 7 kwi 2013, o 18:29 
Offline
Użytkownik
Avatar użytkownika

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

Teraz działa. Ale gdzieś czytałem że nie powinno się tej funkcji stosować :(



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

Dołączył(a): 06 maja 2012
Posty: 233
Lokalizacja: Gdynia
Pomógł: 15

To teraz spróbuj zwiększyć preskaler dla ADC. (pdf str 220, tablea 85)



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

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

Zwiększyłem z 2 na 4 preskaler ADC i usunąłem cli() i sei() i pomiar temperatury działa :)
Tylko nie rozumiem dlaczego tak się stało :(



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

Dołączył(a): 06 maja 2012
Posty: 233
Lokalizacja: Gdynia
Pomógł: 15

Bo ADC napierdziela tak szybko przerwania, że jest problem z komunikacją one wire. Myślę, że możesz go bardziej zwiększyć.



Ostatnio edytowano 7 kwi 2013, o 18:51 przez nixie, łącznie edytowano 2 razy

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

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

jak miałem ostatnio 128 to mi klawiatura nie działała :(
więc jak na razie działa dobrze to bym tak zostawił.
Ale one wire to pomiar cyfrowy a nie analogowy?



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: 32 ]  Przejdź na stronę 1, 2  Następna strona

Strefa czasowa: UTC + 1


Kto przegląda forum

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


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