Práce s časem v C pro Atmega8 – Mikrokontroléry – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Práce s časem v C pro Atmega8 – Mikrokontroléry – Fórum – Programujte.comPráce s časem v C pro Atmega8 – Mikrokontroléry – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
x
~ Anonymní uživatel
4 příspěvky
4. 6. 2009   #1
-
0
-

ahoj, existuje nějaká knihovna pro Atmega8 v Céčku, která by třeba napojena na časovač emulovala práci s datem a časem? nebo alespoň s časem? Zejména porovnání dvou časových úseků, start, stop. ještě proč to potřebuji - primárně potřebuji něco udělat jednou za cca 15 minut či půl hodiny a časovač 1 už mám obsazený:( /navíc jej programově vypínám a zapínám/ .

Nahlásit jako SPAM
IP: 193.165.16.–
Reklama
Reklama
KIIV+42
God of flame
4. 6. 2009   #2
-
0
-

To x : a co casovac 0 ? jestli je volnej tak ma prescaler a tak

Nahlásit jako SPAM
IP: 80.188.94.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Anonymní uživatel
~ Anonymní uživatel
0 příspěvků
4. 6. 2009   #3
-
0
-

jenže časovač nula je 8bit, což i při nejnižší možné frekvenci je cca 30 x do sekundy přerušení:(

Nahlásit jako SPAM
IP: 193.165.16.–
Anonymní uživatel
~ Anonymní uživatel
0 příspěvků
4. 6. 2009   #4
-
0
-

napadá mne něco jako odečet od počtu tiků od startu mcu, ale nic takového jsem nenašel:( přece jen třeba v linuxu jde o 32bit proměnnou, nepletu-li se.

Nahlásit jako SPAM
IP: 193.165.16.–
KIIV+42
God of flame
4. 6. 2009   #5
-
0
-

To Anonymní uživatel : jenze ve vetsine z nich muzes jen pripocist k dalsi promenny a az kdyz dosahne promenna urcite hodnoty (napriklad 30x/s -> 30*60s*15min) tak provest tu cinnost nebo jen nastavit flagy pro provedeni cinnosti v hlavni smycce

Nahlásit jako SPAM
IP: 80.188.94.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Anonymní uživatel
~ Anonymní uživatel
0 příspěvků
4. 6. 2009   #6
-
0
-

to chapu, jenže 30x za sekundu se zvýšením proměnné je docela dost (ano, můžu tam dát nějaký longtyp++) a testovat v hlavnís myčce, zda není překročena hodnota, jenže pak procesor pořád něco dělá a zbytečně to žere. ach jo. dávat třeba NE555 se mi tam nechce:)

Nahlásit jako SPAM
IP: 193.165.16.–
KIIV+42
God of flame
4. 6. 2009   #7
-
0
-

To Anonymní uživatel : pokud nemas nahozeny sleep tak zere tak jak tak cas v hlavni smycce...
toho bych se tolik zase nebal..

Nahlásit jako SPAM
IP: 80.188.94.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Anonymní uživatel
~ Anonymní uživatel
0 příspěvků
4. 6. 2009   #8
-
0
-

myslíš, že náročnost na energii je stejná - smyčka a obsluha přerušení? tam toho přece dělá mnohem víc. ale je fakt, že do sleep modu ho nedávám.

ještě se tedy zeptám s dovolením na jednu věc (a díky za předchozí i následující odpovědi:) ). Jak je to se souběhem přerušení od časovačů? Obsluhu v přerušení řeším tak, že:

1. zakážu ostatní přerušení
2. zapamatuji registry (to zatím nedělám, ale asi by se mělo:-) )
3. udělám obsaluhu daného časovače
4. obnovím registry
5. povolím ostatní přerušení


co se stane, když obsluhuji jeden časovač, jsem tedy v bodě (3) a najednou dojde k přetečení časovače druhého? Nebo k němu nedojde, protože je zakázané přes cli přerušení? Snad jsem to napsal srozumitelně. Díky.

Nahlásit jako SPAM
IP: 193.165.16.–
KIIV+42
God of flame
4. 6. 2009   #9
-
0
-

nemyslim.. instrukce jako instrukce...
at uz je to mul nebo nop tak stejne se musi vykonat
pokud neuspavas tak muzes spotrebu snizit snad jen vypnutim nepotrebnejch periferii... urcite to umi mega88 tam to pouzivam..
pokud mas hlavni smycku jen while (1) { } tak se da vyuzit toho uspani uplne v klidu a dost to pomuze ...
ja daval treba:

set_sleep_mode(SLEEP_MODE_IDLE); // ci nejak tak - hlavne si nevypnout casovace :D

while (1) {
sleep_mode(); // probudi se po preruseni nebo timeoutu wdt
}


spis otestuj spotrebu proudu tim atmelem ... se sleep a bez nej

Nahlásit jako SPAM
IP: 80.188.94.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Anonymní uživatel
~ Anonymní uživatel
0 příspěvků
4. 6. 2009   #10
-
0
-

zkusím, testnu to. dík. jo a jak tedy ty souběhy přerušení?

Nahlásit jako SPAM
IP: 193.165.16.–
avr0
Duch
4. 6. 2009   #11
-
0
-

Anonymní uživatel napsal:
zkusím, testnu to. dík. jo a jak tedy ty souběhy přerušení?



Kdyz nastane preruseni, tak se nastavi patricny bit v patricnem Interrupt Flag Registru a provede se program preruseni a po nem se teno bit vynuluje.

Kdyz je nastaveno vice techto flag bitu(nastane vice preruseni), tak se preruseni vykonaji postupne, dle priority.

Nahlásit jako SPAM
IP: 85.207.200.–
AB
~ Anonymní uživatel
40 příspěvků
5. 6. 2009   #12
-
0
-

Obsluhu v přerušení řeším tak, že:
1. zakážu ostatní přerušení
2. zapamatuji registry (to zatím nedělám, ale asi by se mělo:-) )
3. udělám obsaluhu daného časovače
4. obnovím registry
5. povolím ostatní přerušení



V céčku stačí bod 3. Body 1. a 5. dělá procesor automaticky (zakáže všechna přerušení, ne jen ostatní) a body 2., 4. udělá překladač.

co se stane, když obsluhuji jeden časovač, jsem tedy v bodě (3) a najednou dojde k přetečení časovače druhého?



Pokud během obsluhy přerušení vznikne další jedno nebo více přerušení, budou postupně obsloužena po skončení právě probíhajícího. Žádné přerušení se neztratí, procesor si všechny pamatuje (pomocí příznaků přerušení). Pokud čeká na obsluhu více přerušení, přijde první na řadu to s nejvyšší adresou.

Nahlásit jako SPAM
IP: 217.115.249.–
Nykodym
~ Anonymní uživatel
6 příspěvků
26. 7. 2009   #13
-
0
-

Co takhle použít přímo "Real Time Counter with Separate Oscillator"? na mega16 mi to chodí dobře a na mega8 by myslím mělo taky. Stačí připojit krystal 32 768Hz na příslušné piny a pak použít druhý 8-bitový časovač. Díky nízké frekvenci krystalu se dá generovat přerušení přesně jednou za sekundu, což se ideálně hodí pro programování použitelných hodin a následně třeba vytvoření nějakého odpočtu.

Nahlásit jako SPAM
IP: 85.70.248.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 5 hostů

Podobná vlákna

Zjištění a práce s časem — založil hejnallukas

MySQL, PHP, práce s časem — založil Jiří

C# - problém s časem — založil jadus

Funkce s časem v mssql — založil ench

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý