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



Teraz jest 23 sty 2025, o 07:50


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
Autor Wiadomość
PostNapisane: 8 mar 2015, o 19:16 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 lis 2012
Posty: 35
Lokalizacja: Jaworzno
Pomógł: 0

Witam

Mam taki problem, ze chcę odczytywać temperaturę wewnętrzną procesora co sekundę (bo nie potrzebuję a nawet nie chcę robić tego częściej).
Wiec ustawiam MUX'y ADCSRA i nic tylko pierwszy pomiar jest realizowany a potem ciszaaa....

kod poniżej:

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


P.S. W różnych manualach od ATMEL'a są różne definicje jak ustawić MUX aby odczytywać temperaturę wewnętrzną. Dlatego dałem to w komentarzach.
Jak w końcu ma być?

_________________
Trochę tu, trochę tam.



Ostatnio edytowano 8 mar 2015, o 21:45 przez niemy, łącznie edytowano 2 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 mar 2015, o 19:56 

Pomógł: 0

Chyba czegoś zabrakło w pierwszym zdaniu ;) bo teraz to wychodzi na to, że odczytujesz temperaturę co sekundę a nie chcesz i nie potrzebujesz tego robić :shock:
Co masz na myśli mówiąc "różne manuale od atmela"? Do różnych mikrokontrolerów? Czy różne wersje tej samej noty?
Według noty at-tinka44 ze strony atmela: MUXy na 100010.
Zamiast tych przesunięć w przerwaniu możesz odczytać naraz cały rejestr ADC (bez sufiksu L/H).
Skąd wiesz, że działa tylko raz?



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 8 mar 2015, o 20:30 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 lis 2012
Posty: 35
Lokalizacja: Jaworzno
Pomógł: 0

Wielkie dzięki za zwrócenie uwagi. Już poprawiłem pierwsze zdanie.
Co do noty to mam do attiny 44 i tam jest faktycznie napisane MUX 100010, ale w drugim ogólnym o używaniu ADC w attiny jest napisane tylko MUX 100000.

Co do dalszej treści mojego postu to przepraszam za składnie, ale trudno jest pisać jak jeden młody inżynier (2 lata) "pomaga" tacie a drugi młody inżynier (2 miesiące) nawet nie stara się pomagać ;)

Ale do rzeczy.
Opuściłem oczywiście aby nie rozwlekać kodu część dotyczącą obsługi timera co sekundę.
Idąc dalej. Nie wiem czy pomiar jest tylko raz wykonany ale potem w warunku mam zmianę stanu jak widać na przeciwny i dzieje się to ciągle, a powinno ustać po ostygnięciu uC.
Ustaje dopiero wtedy jak oczywiście uC się ochłodzi i zresetuje go. Co za tym idzie jeżeli nie mam zmiany stanu i zaczynam grzać uC wyszukanym skomplikowanym narzędziem laboratoryjnym (suszarką od żony) do efekt zmiany stanu nie następuje. Dzieje się to znowu dopiero wtedy kiedy uC jest jeszcze ciepły i go zrestartuję.

Myślę, że teraz w pełni przekazałem swoje problemy.

Dodam tylko, że we free running mode wszystko działa pięknie. A w single mode o którym mowa gdzieś, coś, nietegest, i jakoś takoś....no nie działa.

_________________
Trochę tu, trochę tam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 mar 2015, o 21:04 

Pomógł: 0

Co do MUX'ów - trzymałbym się tej wartości z noty tiny44 (byleby najnowszej wersji ze strony atmela).

Ok teraz rozumiem. Coś się nie zgadza z nawiasami przy ifie (za dużo "(" ):
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Nic mądrzejszego nie widzę. Jeśli to nie tajemnica to wrzuć całość.

Młodego inżyniera proszę pozdrowić :)



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 8 mar 2015, o 21:51 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 lis 2012
Posty: 35
Lokalizacja: Jaworzno
Pomógł: 0

To nie tajemnica, ale cały kod ma już 2,5 kB i nie zawsze jest nazwijmy to "poprawny politycznie" zaraz by mnie Mirek przywołał do porządku ;) albo któryś z moderatorów (nawiasem mówiąc "Dzieki ci Boże za Moderatorów)

Poprawiłem już wszystkie nawiasy z tej części kodu.

Tak żeby poprawić nastrój to wrzuciłem to do AtmelStudio do symulatora i też kiepsko chodzi. Nie odświeża się flaga ADIF.

_________________
Trochę tu, trochę tam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 mar 2015, o 18:12 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 lis 2012
Posty: 35
Lokalizacja: Jaworzno
Pomógł: 0

Dobra sierota ze mnie jakich mało ;-(

Problemem okazał się ten zapis.

if(((ADCH << 8) | ADCL) > 310) temperatura=1;
if(((ADCH << 8) | ADCL) < 310) temperatura=0;

Odczytywać z rejestrów ADC należy tylko raz i to najlepiej w całości. Wychodzi brak doświadczenia niestety.
Teraz przepisuję tylko wartość rejestrów do zmiennej i potem na niej robię to co chce i już wszystko pięknie działa :D

_________________
Trochę tu, trochę tam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 mar 2015, o 18:19 

Pomógł: 0

Cieszę się z happy endu :) Niby głupota, ale ciężko takie rzeczy znaleźć jak się od razu nie zauważy.



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