forum.mcontrollers.com - hlavní stránka forum.mcontrollers.com - fórum

 

.: fórum - hlavní stránka :.
Technology Stronghold by Rudolf Vesely
How to build Microsoft System Center hosted cloud series
FAQFAQ HledatHledat Seznam uživatelůSeznam uživatelů Uživatelské skupinyUživatelské skupiny RegistraceRegistrace
ProfilProfil StatistikaStatistika Soukromé zprávySoukromé zprávy PřihlášeníPřihlášení

 
Přerušení 16F84A - Kdy, jak a proč ho používat?

 
Přidat nové téma   Zaslat odpověď    Obsah fóra mcontrollers.com -> Microchip
 
Velda
Anonymní





PříspěvekZaslal: 23 prosinec 2014, 22:58    Předmět: Přerušení 16F84A - Kdy, jak a proč ho používat? Citovat

Potřebuji zasvetit do přerušení. Kdy, jak proč ho používat? prosíl bych o nějaké informace... a nějaké příklady použití.

ps: programuji v C v asm se nevyznam

Arrow administrator: přejmenováno z "Přerušení 16f84a"
Návrat nahoru
 

 
Radius
Profesionál
Profesionál


Založen: 22.2.2013
Příspěvky: 506

PříspěvekZaslal: 23 prosinec 2014, 23:36    Předmět: Citovat

Typicky: čtení stavůvstupů (tlačítka), generování timeoutu, sheduling událostí. Tohle všechno v přerušení od časovače. Od jiných zdrojů přerušení podle toho co potřebuješ. 84 toho zas tak moc neumí. Pokud programuješ v C, kompilátor se ti postará o zachování kontextu při přerušení.
_________________
x51 , ARM , XILINX
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail Zobrazit autorovy WWW stránky
 

 
Balů
Profesionál
Profesionál


Založen: 29.10.2012
Příspěvky: 753

PříspěvekZaslal: 23 prosinec 2014, 23:54    Předmět: Citovat

Přerušení je velice praktická a hojně používaná věc. Například zobrazování na multiplexovaných LED displejích. K tomu se využívá přerušení od časovače. S PICama nedělám, nádledující příklad je pro AVRko, ale jako příklad použití přerušení nebude špatný.

Zobrazení nějakého údaje na 4-místném LED displeji s řízením jasu na základě okolního osvětlení :

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

Start MCU :
Kromě nastavení portů a ostatních používaných věcí potřebuješ :
1) Vyhradit 4 byty v SRAM pro 7-segmentové zobrazovače.
2) Nastavit rychlost časovače tak, aby refresh celého displeje byl alespoň 100Hz => časovač musí přetéct alespoň 400x za sekundu.
3) Nastavit pro časovač přerušení pro OVF a OCR (Přetečení a Output Comapre = přerušení při překročení nastavené hodnoty časovače)
4) Nastavit AD převodník na Free-running mód nebo spouštět převod při každém přetečení časovače.
5) Pro AD převodník nastavit přerušení po ukončení převodu.
AD převodník snímá hodnotu okolního osvětlení na děliči odpor/fotoodpor a výsledek předává do proměnné pro zhasnutí disleje.

Plus to, co ještě další potřebuješ.

Pak už následuje hlavní smyčka programu.

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

A teď, co dělají jednotlivá přerušení :

1) Přetečení časovače : Vezme data k rozsvícení následující segmentovky, pošle data na port a aktivuje příslušnou společnou anodu/katodu - tím rozsvítí příslušný zobrazovač. Vezme hodnotu načtenou z AD převodníku a uloží ji do registru pro OCR přerušení. V případě, že AD převodník neběží ve Free-running módu (po ukončení převodu se automaticky spustí znova), tak spustí nový AD převod.

2) OCR přerušení časovače - nastává v každém cyklu časovače, dříve, než časovač přeteče. Jeho hodnota závisí na načtené hodnotě z AD převodníku. V tomto přerušení se deaktivují společné anody/katody (není třeba zjišťovat která se má zhasnout) a na datové piny se pošle hodnota pro zhasnutí segmentů (tím se odstraní případné duchy v případě použití pomalejších tranzistorů pro spínání jednotlivých segmentů).

3) Přerušení od AD převodníku po ukončení převodu. Zajišťuje načtení hodnoty z AD převodníku pro uložení do OCR registru. Nic víc není potřeba.

Pro jednoduchost můžeš klidně třeba AD převodník a OCR vypustit (nevím, jestli OCR nebo jeho ekvivalent PICy umí). Displej bude fungovat stejně, jenom přicházíš o řízení jasu v závislosti na okolním osvětlení. V tom případě musí přerušení od přetečení časovače vypadat takto :

Deaktivovat společné anody/katody (není třeba zjišťovat která se má zhasnout) a na datové piny se pošlat hodnotu pro zhasnutí segmentů (tím se odstraní případné duchy v případě použití pomalejších tranzistorů pro spínání jednotlivých segmentů). Vzít data k rozsvícení následující segmentovky, pošat data na port a aktivovat příslušnou společnou anodu/katodu - tím rozsvítit příslušný zobrazovač.

V tomto okamžiku máš kompletně hotové zobrazování na LED displeji. Data na displeji v hlavním programu měníš tak, že zapisuješ data na 4 místa v paměti. O další věci kolem obsluhy displeje se v hlavním programu nestaráš.

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

Jak funguje přerušení jsem vystětloval B0sc0vi tady : http://forum.mcontrollers.com/viewtopic.php?t=3082
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
Velda
Anonymní





PříspěvekZaslal: 26 prosinec 2014, 21:31    Předmět: RB0/INT Citovat

Jak mam napsat přerušení v C pro pin RB0 /INT?
Návrat nahoru
 

 
Radius
Profesionál
Profesionál


Založen: 22.2.2013
Příspěvky: 506

PříspěvekZaslal: 26 prosinec 2014, 22:25    Předmět: Citovat

http://saeedsolutions.blogspot.cz/2012/10/pic16f84a-external-interrupt-code.html
_________________
x51 , ARM , XILINX
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail Zobrazit autorovy WWW stránky
 

Zobrazit příspěvky z předchozích:   
Zobrazit předchozí téma :: Zobrazit následující téma  
Přidat nové téma   Zaslat odpověď    Obsah fóra mcontrollers.com -> Microchip Časy uváděny v GMT + 2 hodiny
 
Strana 1 z 1
Přejdi na:  
Můžete přidat nové téma do tohoto fóra.
Můž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.
Můžete k příspěvkům připojovat soubory
Můžete stahovat a prohlížet přiložené soubory
 



Num Lock Holder - app to hold Numlock
Copyright © 2018 Rudolf Veselý, mcontrollers.com.
Je zakázáno používat části tohoto webu bez souhlasu autora. || Powered by phpBB © 2001, 2002 phpBB Group - with RedSquare DoubleJ(Jan Jaap)