Pytanie o synchronizacje czasu w Atmega...

Feb 03, 2006 20 Replies

Witam!



Chcialem sobie zrobic uklad wlaczajacy i wylaczajacy swiatlo w akwarium na uC (Atmega8) i moje pytanie czy można to smialo zrobic za pomoca Timera (jesli tak to czy 8-bitowy starczy) czy lepiej za pomoca gotowego zegara np. pod I2C? Chodzi o to abym np. co jakis czas nie musial go ‘synchronizowac’.



Pozdrawiam Rafal K.



Witam

To nie ma znaczenia na czym to zrobisz. Je¶li to ma dzia³aæ bez przerwy(bezawaryjnie) musisz daæ zasilanie(akumulator, baterie) dla uk³adu który bêdzie sterowa³ zegarem po zaniku sieci(230V). Je¶li Ci zniknie sieæ, grza³ki nie bêd± dzia³aæ, ale zegar zasilany z baterii bêdzie pamiêta³ wszystkie nastawy i w³±czy to co potrzeba po powrocie zasilania podstawowego. Zegar i proste sterowanie zmie¶ci Ci siê w najprostszym Atmelku np. 2051. ¯yczê powodzenia.

-- Pozdrowienia Zbych

‘synchronizowac’.

Mo¿na zrobiæ na procesorze - dok³adno¶æ zale¿y od jako¶ci kwarca. Musia³by¶ jednak zapewniæ dla procesora zasilanie w trakcie zaników napiêcia i odpowiedni, energooszczêdny sposób pracy. Jest to niezbyt k³opotliwe, ale trzeba zrobiæ. Do sterowania o¶wietlenia choinki u¿y³em timer mechaniczny z marketu za 15 z³.

U¿ytkownik "ToR" <ToR snipped-for-privacy@o2.pl napisa³ w wiadomo¶ci news: snipped-for-privacy@newsgate.onet.pl...

&#8216;synchronizowac&#8217;.

Wystarczy prawie dowolny procesor ze stabilnym kwarcem, wygodniej taki co ma dwa timery :), program mo¿e chodziæ na wewnêtrznym oscylatorze a drugi timer np. na stabilnym kwarcu segarkowym. Najpro¶ciej i najtaniej to kupisz w jakim¶ markecie gotowy programator z wy¶wietlaczem i rozdzielczo¶ci± do minuty o innych bajerach nie wspominaj±c. Piotr

Najlepiej to poszukaj na starych p³ytach g³ównych uk³adu DS12887. Jest to zegar czasu rzeczywistego z wbudowanym akumulatorem który pozwala na podtrzymanie czasu przez (wg danych producenta) 10lat. Ten uk³ad to hybryda z symbolem budzika. Do tego we¼miesz jakiego¶ 89Cx051, LCD i masz elegancki sterownik. Polecam zaimplementowaæ do tego funkcjê budzika :).

Pozdrawiam!

U¿ytkownik "Marcin" snipped-for-privacy@ble.pl napisa³ w wiadomo¶ci news:drv5vd$5b2$ snipped-for-privacy@opal.icpnet.pl...

No tak tylko z tym scalakiem robili z 10 lat temu wiêc ju¿ po baterii :)

Do tego LCD powiedzmy 20, trafo ko³o 10, procesor ko³o 4, klawisze, p³ytka, przeka¼nik, programowanie, nie ma zmi³uj wyjdzie dro¿ej, niedawno w Lidlu by³y sterowniki z podzia³em na dni tygodnia co¶ ko³o 25 zeta. Pozdrawiam

Dziêki, sprawdzê ten uPD7225. Procek nie wchodzi w grê, wy¶wietlacz ma byæ podpiêty do istniej±cego uk³adu.

Dziêki, pozdrawiam... Mariusz

Te scalaki bez problemów chodz±. Ja sobie zrobi³em zegar na tym scalaczku i bez problemów podtrzymuje przez 7 dni (wiêcej nie testowa³em).

Zgadza siê, ale tego sterownika nie mo¿na rozbudowaæ. Buduj±c sterownik samemu mo¿na sobie dobraæ ilo¶æ wyj¶c steru±cych Np.: o¶wietlenie, napowietrzanie, automatyczne karmienie, sterowanie temperatur± wody. Wszystko zale¿y od pomys³ów konstruktora. Koszt w³asnej konstrukcji nie powinien przekroczyæ 50z³ czyli dwukrotnie wy¿sza ni¿ w Lidlu, ale za to mamy dynamiczne urz±dzenie które programowo mo¿emy sobie dostosowaæ do w³asnych potrzeb.

Marcin SQ3LMK

>

Witam ;)!

Dziekuje wszytkim za help'a ;).Sterownik chce zrobic na procku Atmega8,ale czytajac powyzsze posty pojawilo mi sie pytanie. Gdyz ja ten program widzialem tak :

najperw za pomoca Timera T0 odmierze sobie jedna sekuna a potem odpowiednio ja zlicajac dodam minuty i sek...A tu powiedziane zostalo o 2-timerach czy mozna prosic o rozwiniecie tego watku?

(Atmega8,WinAVR,AVR Studio 4.0)

Pozdarwiam, Rafal k.

U¿ytkownik "ToR" <ToR snipped-for-privacy@o2.pl napisa³ w wiadomo¶ci news: snipped-for-privacy@newsgate.onet.pl...

Wypowiedzia³em sie niejednoznacznie, nie chodzi³o mi o drugi timer tylko o RTC z separowanym zegarem od zegara procesora, zerknij np. do PDFa od Atmegi32, je¶li u¿ywasz Atmega8 to niestety on tego nie ma. W ksi±¿ce o Bascomie wydanej przez BTC jest fajny uk³ad, Atmega z kwarcem zegarkowym 32kHz... Pozdrawiam

ToR napisał(a):

Hmm, to jak zamierzasz użyć ATmega8 i WinAVR to może zainteresuje Cię ten wątek:

formatting link
w nim opisane jak na ATmega8 zrobić prosty zegarek, odmierzanie czasu na T2 taktowanym asynchronicznie z kwarca 32 kHz. Zegar został pomyślnie przetestowany przez VSS, ma niedługo wrzucić wszystko na stronę - póki co mogę Ci przesłać kod źródłowy - miałbyś jakiś punkt zaczepienia. Jeśli chodzi o to czy będzie chodził wystarczająco dokładnie to kwarce zegarkowe mają zazwyczaj koło 20 ppm, ew. możesz dostroić konkretny egzemplarz trymerkiem albo dołożyć korekcję programową.

Piotr Pitucha napisał(a):

Jak nie ma jak ma... T2 możesz taktować asynchronicznie z kwarca 32kHz.

U¿ytkownik "Darek R." snipped-for-privacy@poczta.onet.pl> napisa³ w wiadomo¶ci news:drvjl9$cr4$ snipped-for-privacy@news.onet.pl...

Miêdzy RTC a timerem T2 jest ró¿nica.... Mo¿na ró¿ne sztuki robiæ na procesorach ale prawda jest taka ¿e Atmega32 jak wynika z PDFa producenta ma RTC a Atnega8 nie. Pozdrawiam

Piotr Pitucha napisał(a):

Tak sobie dla pewności jeszcze raz zajrzałem w pdfy do tych procków czy nic mi nie umknęło, ale nie. Zarówno w ATmega32 jak i ATmega8, na pierwszej stronie pdfa jest wzmianka o RTC (Real Time Counter with Separate Oscillator). W dodatku ten RTC na ATmega32 jest TAKI SAM jak na ATmega8 - napisz dokładnie gdzie Ty widzisz różnicę.

U¿ytkownik "Darek R." snipped-for-privacy@poczta.onet.pl> napisa³ w wiadomo¶ci news:drvlgo$ic0$ snipped-for-privacy@news.onet.pl...

Atmega32 ma oddzielne nogi do TOSC i XTAL, w Atmega8 to te same koñcówki, czyli nie musisz przy u¿ywaniu TOSC pracowaæ na wewnêtrznym zegarze, pewnie w tym zastosowaniu to nie problem, ale czasami wymagany jest stabilny szybki oscylator a ten wewnêtrzny p³ywa zale¿nie od temperatury jak i zasilania w sposób okrutny. Nie wg³êbia³em siê czu nie ma ró¿nic w pracy RTC w zale¿no¶ci od trybu bo dotychczas tego nie musia³em stosowaæ. Piotr

Piotr Pitucha napisał(a):

Masz rację.

I tu również masz rację. Tutaj nie ma powodu dla którego procek nie mógłby być taktowany wbudowanym generatorem RC, mimo jego niskiej stabilności, więc spokojnie ATmega8 wystarczy.

Bylbym Ci bardzo wdzieczny gdyz jestem poczatkujacy i dopiero zaczynam w pisniau oprogramwoania dla sterownikow.

Moj mail jest taki jak w loginie ale jeszce raz podam ToR snipped-for-privacy@o2.pl

Pozdarwiam, Rafa k.

Do wymagan mojego sterownika nalezy odmierzanie czasu oswietlenia -podanego przez urzytkownka za pomoca wprowadzenia danych poprzez 2 przyciski (1-start,2- ilosc przycisniec rownoznaczna z iloscia godzin i potem znow 1-jako start dzialania)

Moj pomysl na prosty zegarek jest nastepujacy jak w kodzie ponizej mam tylko pytanie jak zrobic aby wprowadzic jeszcze obsluge przyciskow? Bo zapewne nie moze to byc zaimplementowane w fukncji SIGNAL (SIG_OVERFLOW0)??

//---------------------------------------------------

unsigned int Licznik_sekund = 0; unsigned int Licznik_minut = 0; unsigned int Licznik_godzin = 0; unsigned int licznik=4000;

SIGNAL (SIG_OVERFLOW0) { TCNT0=tau0; DDRD=0xFF; if (--licznik==0) { PORTD=Licznik_sekund; licznik=4000; //aby odmierzyc 1 sek Licznik_sekund++;

if (Licznik_sekund==60) { Licznik_sekund = 0; Licznik_minut++; } if (Licznik_minut==60) { Licznik_minut = 0; Licznik_godzin++; } if ((Licznik_godzin==23)&&(Licznik_minut==60)) { Licznik_minut = 0; Licznik_godzin = 0; } //np wlazcanie pzrekanzika u mnie narazie diody... if (Licznik_minut==1) { LED_ON; } } TIFR = (1<<TOV0); }

void main () { TIMSK=1<<TOIE0; //zezwolenie na przerwanie od TC0 TCNT0=tau0; //od kad ma zliczac czyli 250 TCCR0=2; //pleskaler sei(); DDRD=0xFF; PORTD=0XFF; while(1) { } }

-------------------

Co o tym myslicie?

pozdarwiam, Rafal k.

ToR napisał(a):

A czemu nie? Może też być wywoływane np. w przerwaniu od naciśnięcia - zależy gdzie masz te przyciski. Może być też w głównej pętli. Kolejne pytanie jak często wywoływane jest to przerwanie - nie napisałeś z jakim zegarem działasz. Tak na oko z kodu programu wynika że 8 Mhz - tak? Jeśli tak to:

1) Czemu to przerwanie jest tak często wywoływane? Potrzebujesz 4 tys przerwań na 1 sek? Nie prościej zwiększyć preskaler, wywoływać przerwanie i nie zliczać licznika aż do 4 tys? 2) Te 8 MHz to jest z kwarcu czy z wewnętrznego RC? Jeśli to drugie to będzie Ci pływało - a chciałeś stabilnie :/ Może jednak wykorzystasz T2 i taktowanie asynchroniczne z kwarca 32kHz? Będziesz mógł ustawić przerwanie co 1 sek (lub nawet rzadziej).

Potrzebujesz aż inta? Char nie starczy?

Użyj timerka z trybem CTC (Clear Timer on Compare Match) - nie będziesz musiał każdorazowo w przerwaniu ładować zawartości timerka.

A po co Ci to w przerwaniu?

Tego if-a możesz zagnieździć w poprzednim.

A ten się nigdy nie wykona - bo jak będzie 23:60 to poprzedni if to zamieni na 24:00. No i też go możesz zagnieździć.

Zerowanie tej flagi jest robione automatycznie sprzętowo podczas wywołania przerwania - nie musisz tego robić ręcznie.

Pamiętasz o tym że T0 liczy zawsze w górę? Na pewno chcesz zliczać 6 cykli czy 250? Bo coś mi się wydaje że to drugie :/

Jeszcze trzeba trochę doszlifować i parę kwestii przemyśleć, ale na początek nie jest źle.

Tak na oko z kodu programu wynika że 8 Mhz -

Tak mam zewnerzny kwarc 8MHz. Jesli chodzi o wywolywanie przerwan to po prostu za pomoca PDF'a od tej atmegi policzylem sobie odpowiednie wspolczyniki i tak mi jakos wyszlo ale widze ze niezbyt szczesliwie je dobralem ;) ,a wiec szybko to poprawie ;)

Slyszalem cos o tym CTC ale na razie nie rozumiem jego ideii..Mozesz cos wiecej na ten temat?

No wlasnie chce zliczac 250 cykli,bo tak wyszlo mi z obliczen...I w T0 ustawiam wartosc 6 aby 250 = 256 - 6;

Pozdrawiam, Rafal k.

Join the Discussion

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

Didn't find your answer?

Ask the community — no account required