Vítejte na Elektro Bastlírn?
Nuke - Elektro Bastlirna
  Vytvořit účet Hlavní · Fórum · DDump · Profil · Zprávy · Hledat na fóru · Příspěvky na provoz EB

Vlákno na téma KORONAVIRUS - nutná registrace


Nuke - Elektro Bastlirna: Diskuzní fórum

 FAQFAQ   HledatHledat   Uživatelské skupinyUživatelské skupiny   ProfilProfil   Soukromé zprávySoukromé zprávy   PřihlášeníPřihlášení 

PIC - přerušení přesně každých 10ms

 
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Programování PIC, ATMEL, EEPROM a dalších obvodů
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
petrfilipi



Založen: Sep 13, 2005
Příspěvky: 2703

PříspěvekZaslal: ne červenec 04 2010, 20:31    Předmět: PIC - přerušení přesně každých 10ms Citovat

Dobrý den, dámy a pánové.
Prosím o radu s přerušením u PICu 16F877A. Mám už (na stole) hotové a funkční stopky pro hasičské závody (dva procesory(jeden u terčů předává po lince 232/485 info o sepnutých terčích do hlavního časoměrného procesoru), hlavní časoměrný procesor měří časy pro 4 dráhy, přesnost 0,01s). A právě s přesným měřením času mám problém. Používám samozřejmě přerušení (TMR0), krystal mám 7,9996 MHz, předděličku 1:16 (Option reg = 10000011), TMR0=9. To mi dává přerušení každých 200ms, každé 5. přerušení mi inkrementuje setiny sekundy. Nejpřesněji k požadovaným 10ms se dostanu na 10,0045ms.
Neznáte někdo nějaký způsob, jak pomocí SW nadefinovat přerušení přesně po 10,0000ms, pokud je to vůbec možné?

Děkuji za Vaše rady a nápady.

Petr Filipi
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
procesor



Založen: Oct 02, 2009
Příspěvky: 5286
Bydliště: PO

PříspěvekZaslal: ne červenec 04 2010, 20:55    Předmět: Citovat

Použi Timer1 s modulom COMPARE.
Potom budeš môcť generovať interrupt s krokom 500ns/1us/2us/4us až do času cca 32ms/64ms/128ms/256.
Nechápem ten kryštáľ.... prečo nie 8,000MHz?
Timer0 sa na generovanie a dolaďovanie hodím nehodí.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
petrfilipi



Založen: Sep 13, 2005
Příspěvky: 2703

PříspěvekZaslal: po červenec 05 2010, 5:28    Předmět: Citovat

Díky za námět.
Krystal je samozřejmě 8 MHz, ve skutečnosti (změřeno) kmitá na 7,996 MHz.
Když dostanu přerušení 8ms, co mám pak dělat, abych měl 10ms?
Jinak nastavené hodnoty mi dělají přerušení každé 2ms, nikoli 200ms.

Petr Filipi
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
petrfilipi



Založen: Sep 13, 2005
Příspěvky: 2703

PříspěvekZaslal: po červenec 05 2010, 5:48    Předmět: Citovat

Ještě jsem dostal jeden námět na řešení - co takhle nechat přerušení třeba na 9,985 ms a tech zbývajících 15us nechat v přerušovací proceduře odčasovat pomocí NOP. Asi to není systémové řešení, ale v mém případě by to mohlo být plně funkční. Pak bych mohl ladit na přesných 10ms. Budu muset ale optimalizovat tuto proceduru, aby probíhala stále po stejném množství instrukcí.
Potřebuji to udělat rychle a co možná nejpřesněji (asi by teď stačilo i 10,005ms - letos to budou používat jen naši chlapci na trénink), přes zimu to budu moci doladit - stejně chci zkusit bezdrátový přenos tak jako milý Marconi, velký elektromagnetický (LEDkový) display apod.
Petr
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
eljaro



Založen: Dec 03, 2004
Příspěvky: 441
Bydliště: Krnov

PříspěvekZaslal: po červenec 05 2010, 6:04    Předmět: Citovat

to že krystal kmitá na 7,996 je podivné pokud jsi jej umslně neodladil ! Ted nedávno jsem stavěl čítak použil jsem jako zdroj 20.000 krystal a bez problému a nastavování rovnou tato frekvence !
Ten časovač moc to komplikujěš použij bud TMR1 a Compare , anebo pokud chceš zustat u TMR0 pak je kousek urychli v přerušní udělej smyčku 5 a dolad to nejakým tím NOPem , nevím jestli má ten procesor i TMR2 pokud ano použij rovnou ten mužeš dělit před a po a nastavit čitač - tohle používám raději to bez problému lze aplikovat na 8MHz 100ms i 10ms mám to běžně jako hodiny a ostatní moduly mi zustavají na práci volné .
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail Zobrazit autorovy WWW stránky AOL Instant Messenger MSN Messenger
procesor



Založen: Oct 02, 2009
Příspěvky: 5286
Bydliště: PO

PříspěvekZaslal: po červenec 05 2010, 7:18    Předmět: Citovat

Pomocou Timer0 sa nedá presne generovať IT. TRM0reg je krátky. Musí sa použiť veľký prescaler prípadne postscaler, v každom prípade sa chyba násobí. Predlžovanie cyklu je prakticky nemožné.

edit:
Druhá možnosť je použiť kryštál s takou frekvenciou, aby po prescaleri vyšiel incremet pre TMR0reg celočiselný čas.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Chenzee



Založen: Jun 26, 2007
Příspěvky: 464
Bydliště: Vysočina

PříspěvekZaslal: po červenec 05 2010, 7:39    Předmět: Citovat

Před asi rokem jsem TMR0 použil pro počítání času hodin. Bylo to jen na zkoušku, takže nic jiného než hodiny a výstup na LCD to nedělalo. Za 1 den se to zpožďovalo o 1,5s. Hodnoty pro nastavení najdeš na připojeném obrázku i s poznámkami. Netvrdím, že je to nejlepší cesta, ale je to jedna z cest možných. Program bude samozřejmě potřeba poskládat tak, aby to mohlo fungovat i s dalšími funkcemi.


10ms_s_Q_8MHz.JPG
 Komentář:

Stáhnout
 Soubor:  10ms_s_Q_8MHz.JPG
 Velikost:  87.51 kB
 Staženo:  221 krát


_________________
Žádnej učenej z nebe nespadl ...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
procesor



Založen: Oct 02, 2009
Příspěvky: 5286
Bydliště: PO

PříspěvekZaslal: po červenec 05 2010, 9:02    Předmět: Citovat

Tak-tak, to vychádza na 9,984ms + 32 inštrukcčných cyklov aby sa pri zápise do TMR0 aj resetoval rescaler.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
ZdenekHQ
Administrátor


Založen: Jul 21, 2006
Příspěvky: 25741
Bydliště: skoro Brno

PříspěvekZaslal: po červenec 05 2010, 9:25    Předmět: Citovat

V těchto aplikacích se dá místo kondíku u krystalu kapacitní trimr a krystal se "posadí" čítačem na požadovanou hodnotu.

Na druhou stranu, pokud se vyžaduje větší stabilita, nezbývá, než použít externí oscilátor buď v "plechovce", nebo třeba toto : http://www.hq-elektronic.eu/ref_osc.html

_________________
Pro moje oslovení klidně použijte jméno Zdeněk
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?
]
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovy WWW stránky
petrfilipi



Založen: Sep 13, 2005
Příspěvky: 2703

PříspěvekZaslal: po červenec 05 2010, 11:23    Předmět: Citovat

Pánové, děkuji za rady.
1. Krystal je 8 MHz, skutečně je na 7,9996MHz (chyběla mi tam jedna devítka), tj. chyba 400Hz na 8 000 000Hz, tj. 50Hz na 1 000 000Hz, tj. 50ppm, což není sice skvělé, ale ani nemožné (ještě jednou se omlouvám za tu devítku).
2. Ještě jsem našel článek pana Vonáška, KTE 2/2005, str. 25. Popisuje tam použití TMR0 i TMR2, včetně chybových konstant. Tak se na to mrknu. Nějak jsem zapomněl, že když mi program skočí na přerušení tak že musím počítat s tím, že instrukce v přerušení taky nějakou chvíli zaberou - to je právě ten řádek "kolik ins. cyklů je do nastavení TMR0" v excelovském příkladu od Chenzee. Vycházel jsem z popisů výpočtu přerušení, které jsem našel na webu, ale tam právě nebyly zapracované instrukce v přerušení. Takže to byl jen teoretický výpočet funkční pouze tehdy, kdyby v přerušení nebyla žádná instrukce, a navíc kdyby se TMR0 rozbíhal okamžitě. Proto jsem dostával různé hodnoty periody když v přerušení byla jedna instrukce, resp. jeden příkaz (portb.0:=not (portb.0) - inverze bitu 0 port B - program píšu v MikroPascalu od spol. Mikroelektronika) a když v přerušení bylo celé zpracování 4 časů, kontrola přetečení setin do sekund, sekund do minut apod. Navíc tam mám i čtení seriového portu (posílá se po něm info od terčů, který terč je sepnut) a ten se buď provádí (když je co číst) nebo neprovádí (což je většina času - takže s tím zatím počítat nebudu). Musel bych asi použít další procesor, který by linku RS232ku monitoroval a předával by info hlavnímu časoměrnému procesoru po klasických bitových portech, protože pak mohu jednoduše určit dobu trvání instrukce.
3. Ale jinak si myslím, že není důvod nepoužívat TMR0, že je stejně přesný jako TMR2 - když pominu nutnost skákat do přerušení jen proto abych vyhodnotil až každé 5. přerušení. Takže přepíšu program na použití TMR2 a postděličku 1:5 (tím se mi nebude 4x zbytečně provádět spousta kontrol v přerušení), tím zlepší se chyba "sama od sebe" a když doplním ty NOPy, tak to musí běžet bez problémů.

Chenzee - nebylo by možné poslat celý excelovský sešit s výpočtem?

Ještě jednou všem díky moc.

Petr Filipi
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
Chenzee



Založen: Jun 26, 2007
Příspěvky: 464
Bydliště: Vysočina

PříspěvekZaslal: po červenec 05 2010, 21:12    Předmět: Citovat

sedět na tom by asi nic nepřineslo takže ... (xls nelze vložit, tak jsem změnil příponu na TXT, po uložení na disk ji zase změň na xls Wink )


Výpočet přerušení od TMR0.txt
 Komentář:

Stáhnout
 Soubor:  Výpočet přerušení od TMR0.txt
 Velikost:  27.5 kB
 Staženo:  261 krát


_________________
Žádnej učenej z nebe nespadl ...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
petrfilipi



Založen: Sep 13, 2005
Příspěvky: 2703

PříspěvekZaslal: čt červenec 08 2010, 10:54    Předmět: Citovat

Díky moc za zaslaný výpočet.

Petr Filipi
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
Zobrazit příspěvky z předchozích:   
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Programování PIC, ATMEL, EEPROM a dalších obvodů Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra.
Nemůžete odpovídat na témata v tomto fóru.
Nemůžete upravovat své příspěvky v tomto fóru.
Nemůžete mazat své příspěvky v tomto fóru.
Nemůžete hlasovat v tomto fóru.
Nemůžete připojovat soubory k příspěvkům
Můžete stahovat a prohlížet přiložené soubory

Powered by phpBB © 2001, 2005 phpBB Group
Forums ©
Nuke - Elektro Bastlirna

Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.


PHP-Nuke Copyright © 2005 by Francisco Burzi. This is free software, and you may redistribute it under the GPL. PHP-Nuke comes with absolutely no warranty, for details, see the license.
Čas potřebný ke zpracování stránky 0.28 sekund