Atmega zegar/temperatura

Nov 06, 2013 15 Replies

Mam pewien problem...



Otóż - wg. dataszita częstotliwość wbudowanego zegara rośnie ze spadkiem temperatury (dziwne...). Ale - nie ma informacji, jak się z kolei zachowuje zegar w przypadku napędzania zewnętrznym kwarcem. Bo z pomiaru (na razie wstępnego - od momentu uruchomienia systemu do wystąpienia pewnego sygnału) wychodzi mi, że odwrotnie - z spadkiem temperatury ten czas się wydłuża minimalnie - czyli zegar spowalnia.



Chłodzę sam chip (zamrażaczem w aerozolu).



Czyli jak to jest w końcu ?


Nie pomogê, ale z ciekawo¶ci chcia³em zapytaæ nad czym ciekawym pracujesz, ¿e bardzo wa¿na jest czêstotliwo¶æ taktowania mikrokontrolera?

Pozdrawiam, Robbo

W dniu 2013-11-06 20:35, Robbo pisze:

No pewnie w każdej aplikacji korzystającej chociażby do odliczania czasu byłby to ważne, ale w moim przypadku, w układzie zawierającym 2 MCU (atmega128 i atmega8), w sytuacji kiedy jeden MCU może resetować drugi (nadzorują się wzajemnie, i jeśli któryś nie odpowiada, wyedu kolega go resetuje), nastąpiło nieprzewidziane "resetowanie" podczas startu systemu w niskiej temperaturze - po prostu zmienił się czas uruchamiania MCU, i zaczęło się "niekontrolowane restartowanie".

Ale tam naprawdę problemem głównym jest co innego ;

formatting link
Natomiast w temperaturze pokojowej wszystko było ok. Przy testach w temperaturze poniżej zera nagle okazało się, że system nie wstaje - przy czym "wyzwalaczem" problemu jest wydłużenie czasu startu procesorów.

Taka ciekawostka :)

W dniu 2013-11-06 22:06, sundayman pisze:

Ale w fusebitach masz przecież tryby startu, nie dawaj tego najdłuższego-przedłużonego-plus odliczanie 65k cykli F_CPU, tylko włącz szybki start i brown-out.

Tak, ale jak opisałem w wątku na elektrodzie , ten problem "czasowy" jest tylko pobocznym zjawiskiem - sam kłopot pochodzi z czego innego. Żeby nie powtarzać tutaj wszystkiego - podczas deklarowania pinu procesora jako wyjście, pojawia się na tym pinie przez chwilkę stan "0", zanim zostanie ostawiony przez program na "1" (program jest w Bascomie).

Czyli chodzi o to, jak w bascomie zadeklarować pin jako wyjściowy tak, aby ze stanu wysokiej impedancji natychmiastowo przeszedł w stan "1".

sundayman snipped-for-privacy@poczta.onet.pl> napisał(a):

Nie da się. Pin przecież ustawiasz programowo, a program potrzebuje pewnego czasu na wykonanie. Choćby to była pierwsza instrukcja w całym kodzie. Układ współpracujący musi to uwzględniać.

No ale - wartość na pinie to jeden rejestr, a kierunek - drugi. Powinno się chyba dać ustawić najpierw ten od wartości, a dopiero potem

- wskazać, że to wyjście.

Tyle, że pewnie używając poleceń config tak po prostu może być problem. Chyba trzeba zapisywać do rejestrów - a tego mi się nie bardzo chce robić :) Myślałem, że może ktoś to ma już obcykane...

sundayman snipped-for-privacy@poczta.onet.pl> napisał(a):

Oczywiście. Ale to też z głową. Wejście z wpisaną jedynką to wejście podciągnięte wenętrznym rezystorem do plusa.

Nie wiem jak Bascom tłumaczy to na asm.

Dawno nie pisałem w Bascomie, zwykle używam C.

No właśnie, siedzę właśnie nad dataszitem, zobaczymy czy operujące rejestrami da się to zrobić poprawnie.

Jak nie - to kit mu w oko, obejdę to bez tej deklaracji (znaczy robiąc ją tuż przed potrzebnym wygenerowaniem sygnału) - ale to jest mocno nieestetyczne...

A rejestr tris tego pina (czy jak tam się on nazywa w atmedze) nie ma domyślnego stanu input po resecie? Na pic tak jest, wtedy ustawiasz port lat na 1 a po tym dopiero tris na output. Wtedy jest "bezhazardowe" przejście ze stanu hZ do 1.

Marek snipped-for-privacy@fakeemail.com napisał(a):

Tak, rejestr kierunku jest wyzerowany po resecie, czyli pin jest wejściem.

Są dwa rejestry. Rejestr kierunku i rejestr wartości wyjściowej. Jeśli rejestr kierunku ma bit danego pinu ustawiony na zero, wówczas są dwie możliwości zależne od wartości bitu wartości wyjściowej. Jeśli ten bit to zero, wówczas mamy HZ. Jeśli ten bit to 1, wówczas mamy pull-up.

Innymi słowy (zakładając że po resecie/power up piny sa input - bo to chyba standard) najpierw wpisujesz do portu 1 a później go przestawiasz na output, wtedy zatrzask wyjsciowy mający już wpisaną 1 jest dołączany do pina.

Marek snipped-for-privacy@fakeemail.com napisał(a):

Tak. Jeśli nie ma czegoś ściągającego pin do masy (rezystancji mniejszej niż wewnętrzny pullup), wówczas ładnie się nam jedynka pojawi, bez jakichś dziwnych przejść.

formatting link
na dole opisałem rozwiązanie.

W dniu 2013-11-06 23:52, sundayman pisze:

Przecież możesz dać najpierw PINA.1 = 1 (w przypadku bycia wejściem - włączenie pullupa = słaba 1ka na wejściu) a opiero po tym przełączenie na bycie wyjściem DDRA.1 = 1 (i robi się mocna 1ka).

A nawet warto podci±gn±æ zewnêtrznie do vcc na ten moment, kiedy bêdzie jeszcze HiZ.

"zanim nastala era internetu, kazdy wiejski glupek siedzial w swojej wiosce" http://www.chmurka.net/

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required