Zaslal: ne duben 20 2008, 23:14 Předmět: Emulace bistabilního KO pomocí PIC
Zdravím všechny.
Jsem v oblasti uProcesorů nováčkem.
Potřebuji sestrojit zařízení, jehož popis je níže. HW bych dal dohromady, ale SW nezvládnu.
Přesně vím, jak bych toto řešil např. s 555 (odběr cca 15-20mA), ale je tu požadavek napájení z baterií a dlouhé životnosti, tedy nutné použití uP a funkce Stand-by (1-5uA).
Obvod nejlépe s PIC, či jiným microprocesorem.
- využití módu SLEEP a Wake on pin change. (nutné pro úsporu energie pro napájení z BAT.)
Předpokládám využití obvodu se dvěma vstupy a jedním výstupem.
První vstup bude mít funkci nastavovací.
Druhý vstup bude mít funkci hlídací.
Výstup bude ativní v případě, že je obvod nastaven a následně aktivován vstup hlídací.
Je to vlastně obdoba bistabilního klopného obvodu
Podmínkou je reakce druhého vstupu na LOG0, případně nestandartní stav(mezi LOG0 a LOG1).
Další podmínkou je,že výstup zůstane aktivní při první změně vstupu 2 a žádná další, nebo opaovaná změna na tomto vstupu, výstup již nezmění.
Změna výstupu do LOG0 bude opětovným nastavením prvního vstupu.
podobne som riesil nahradu 555 s PIC10F200, zabral menej miesta na dps, mal neskonale mensiu spotrebu v sleep mode a bol lacnejsi - nakup asi 4.-kc/k. Ak nechces programovat tak sa poobzeraj na www.ti.com po obvodoch "litle logic" maju tam mnozstvo funkcii za par centov.
Založen: Jul 21, 2006 Příspěvky: 25741 Bydliště: skoro Brno
Zaslal: po duben 21 2008, 10:15 Předmět:
A co takhle 74HC75 ? _________________ 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[?]
to ZdenekHQ
Také jsem uvažoval o podobných obvodech, ale PIC má více zatížitelné výstupy. Pro jednodušší aplikace nemusím proto hlídat na výstupu každý mA, což bych musel u 74... posilovat. Dále mne láká ta spotřeba 1uA při spánku. Zařízení bude většinu času v neaktivním stavu... a teprve změnou na vstupu jej chci probudit a pak může mít krátkodobě větší odběr.
Pravda, 8uA u 74... také není k zahození, ale zpožďovací funkce budu muset řešit nějakými kapacitami, kdežto PIC by stačilo doprogramovat.
No, vzhledem k tomu, že programovat v ASM neumím, budu muset toto řešit klasickou cestou. Měl bych ale snahu se něčemu přiučit, stačí přinakopnout .
Díky i za takové rady.
Založen: Jul 21, 2006 Příspěvky: 25741 Bydliště: skoro Brno
Zaslal: út duben 22 2008, 11:42 Předmět:
Já osobně taky raději veškerou složitější logiku v přístroji nahrazuju procesorem - jednak to zabere míň místa, jednak se dá jednoduše měnit logika. Jde pouze o to, jestli ten program píšeš 20 minut nebo týden... _________________ 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[?]
74HC75 nemá paměť a jestli jsem dobře pochopil zadání, tak by se to s ní nedalo realizovat. 74HC74 už má odběr 40uA. Klidně ti program pro 10F200 napíšu, když mi upřesníš zadání.
to Jankop.
Oh, díky velice za ochotu. Určitě upřesním a budu velkým vděčníkem )
Ano, 74HC75 nemá paměť, ale právě zvolený obvod je ve své podstatě paměťí sám sobě. Vstupem D data "nahrát" (0,1) a pomocí LATCH, lze uvést obvod do výchozího stavu. Pro mne paměť )
Musím dát za pravdu Zdenkovi, že tím končíme a pro další věci to chce trochu vyšší dívčí.
Budu tedy velice vděčen za nabídnutou pomoc. Zadání je na začátku tématu. Určitě jej dopřesním do emailu.
Díky mnohokráte..
Založen: Jul 21, 2006 Příspěvky: 25741 Bydliště: skoro Brno
Zaslal: út duben 22 2008, 12:54 Předmět:
Co asi znamená slůvko latch v popisu 7475
V pdf k SN7475 je hned na první stránce nahoře funkční tabulka. _________________ 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[?]
Má paměť, nemá paměť.. Funkce je jasná. Jen mi není jasné, jak by s 74HC75 šla realizovat jednoduše požadovaná funkce, toť vše. Nejde to prostě udělat podle zadání.
Založen: Jul 21, 2006 Příspěvky: 25741 Bydliště: skoro Brno
Zaslal: út duben 22 2008, 15:00 Předmět:
Když to tak čtu, tak bych to dokázal i s 4-5 hradly NAND .
Vstupní LOG0 se přenese na výstup pouze v případě, že je povoleno hlídání a zůstane tam - to jsou 2 hradla jako KO a další 2 jako "gate".
Reset bude způsoben sestupnou či náběžnou hranou (edited) řídícího vstupu přes derivační kondík do druhýho vstupu KO.
Pokud by bylo nutný vyhodnotit "mezistav" jako LOG0, přidat 1x komparátor. _________________ 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[?]
Naposledy upravil ZdenekHQ dne út duben 22 2008, 16:49, celkově upraveno 1 krát.
to Jankop:
Díky moc, jsi nesmírně ochotný. Večer si to hodím na simulátor.
Nejlépe se totiž učí rozborem hotových věcí. Člověk se má čeho chytnout.
Mám pár dotazů, zda to chápu správně.
Řádek v podprogramu active:
"btfss GPIO,GP1 ; test hlidaciho vstupu 'H'=klid, 'L'= alarm"
pochopil jsem to tak, že když budu chtít obrátit logiku na 'L'=klid, 'H'= alarm, použiji instrukci BTFSC.
Mám dotaz k režimu SLEEP.
Někde jsem četl, že před přechodem do SLEEP je třeba načíst do paměti všechny stavy, aby nedocházelo k nedefinovaným stavům během spánku.
Jestli jsem to v dokumentaci někde přehlédel, ale nemohu to najít.
Předpokládám, že je to právě ta instrukce "movf GPIO,W".
Nevím jak, ale chtěl bych tam ještě zakomponovat časovač. Koukal jsem, že je tam Timer0, ale nevím jak jej použít. Vyčetl jsem nutnost nastavení v registru OPTION a intrukce pro registr TMR0. Je nutné současné hodnoty někam uložit do nějakého pomocného registru a pak vyvolat zpět? Další otazník zní, vrátí se po provedení časové fci zpět do hlavního programu na místo odkud odskočil, jak jsem to popsal níže, nebo začne vykonávat vše od začátku ?
Nebude spíše vhodnější použít nějakou inkrementaci registru ? Nějakým cyklem GOTO postupně provést 10.000.000 instrukcí ? Brr.
Funkce by měla být takováto:
Při nastavování může nastat situace, kdy bude i hlídací vstup v alarmu. Tento stav bych potřeboval oddálit o 10s. Potom by to vypadalo tak, že při nastavení GP0 bude na 1, bude zpožděné vykonávání dalších programů, včetně volání podprogramu active.
Nevím , jestli neuvažuji špatně z pohledu programování, ale představoval bych si to asi takto:
..
...
btfsc GPIO,GP0 ; test nastavovaciho vstupu GP0, 'H'=hlida, 'L'= reset
// zpožďovací fce
call active ; hlidani zapnuto, testuj vstup
...
..
Pochopitelně, změnou BTFSC na BTFSS změníš logickou podmínku. Jen pozor, těch podmínek v programu může být několik, stejně jako v přiložené ukázce. Před aktivací Sleep s WakeUp od změny vstupů je nutné přečíst GPIO. Použití TMR0 není u tohoto procesoru moc účelné. Asi lepší je programová smyčka. Obecně bych řekl, že řada PIC 10FXXX není moc šťastná. I pro ta nejjednodušší použití je vhodnější 12F629, což už je plnohodnotný MCU se vším všudy včetně přerušení. Existuje i v mrňavé SMD verzi a stojí o cca 5-6Kč víc než 10F200.
kód:
list p=10F200 ; list directive to define processor
#include <P10F200.INC> ; processor specific variable definitions
__CONFIG _WDT_OFF&_MCLRE_ON&_CP_OFF
;--------- CONSTANTS DEFINITIONS---------------------------------------
#define RAM_Start 0x10
#define MASK_Cal B'11111110'
#define PORT_Inp B'00001011'
#define del_hi d'241' ; konstanta pro cca 10s
;--------- VARIABLE DEFINITIONS ---------------------------------------
CBLOCK RAM_Start
TMP0
TMP1
TMP2
OLDP
ENDC
;----------------------------------------------------------------------
ORG 0x00
andlw MASK_Cal
movwf OSCCAL ; kalibrace interniho oscilatoru
movlw 0<<NOT_GPWU|0<<NOT_GPPU|0<<T0CS
option ; nastaveni PullUp a WakeUp
movlw PORT_Inp ; nastaveni V/V portu
tris GPIO ; nastaveni V/V portu
btfss OLDP,GP0 ; test predchoziho stavu aktivacniho vstupu
call delay ; predchozi stav byl'L'=reset
btfsc GPIO,GP0 ; test aktivacniho vstupu GP0, 'L'=reset, 'H'= aktivace
call alarm ; aktivace zapnuta, testuj hlidaci vstup
btfss GPIO,GP0 ; test aktivacniho vstupu GP0, 'L'=reset, 'H'= aktivace
bcf GPIO,GP2 ; aktivace vypnuta, proved reset vystupu alarmu GP2 do 'L'
movf GPIO,W
movwf OLDP ; uloz stav portu
sleep ; prechod do rezimu SLEEP
;----------------------------------------------------------------------
alarm
btfss GPIO,GP1 ; test hlidaciho vstupu 'H'=klid, 'L'= alarm
bsf GPIO,GP2 ; doslo k alarmu nastav vystup GP2 do 'H'
retlw 0x00
;----------------------------------------------------------------------
delay ; prodleva, kdyz je alarm uz pri aktivaci
btfsc GPIO,GP1 ; test hlidaciho vstupu 'H'=klid, 'L'= alarm
retlw 0x00 ; neni alarm pri zapnuti hlidani
btfss GPIO,GP0 ; test aktivacniho vstupu GP0, 'L'=reset, 'H'= aktivace
retlw 0x00 ; neni aktivace
clrf TMP0 ; casovaci konstanta
clrf TMP1 ; casovaci konstanta
movlw del_hi ; casovaci konstanta
movwf TMP2
loop ; casovaci smycka
incf TMP0,F
btfsc STATUS,Z ;
incf TMP1,F ;
btfsc STATUS,Z
incf TMP2,F
btfsc STATUS,Z
retlw 0x00 ; ukonceni casovaciho intervalu
btfss GPIO,GP0 ; test aktivacniho vstupu GP0, 'L'=reset, 'H'= aktivace
retlw 0x00 ; ukonceni delay pri prepnuti na reset
goto loop
Zdravím všechny.
Po delší pauze jsem se dostal k simulaci napsaných programů Jankopem.
Mám sw simulátor od Oshonsoft pro PIC10F. Narazil jsem na jeden problém a třeba budete někdo vědět co s tím. Při vykonávání programu vše běží jak má a dokonce se zastaví při SLEEP. Bohužel už nejde v simulaci dále pokračovat (změnou na "vstupu" probudit), protože se simulace zastaví úplně a lze ji pouze spustit od začátku.
Tento program se mi velice líbí, dá se zde hezky pochopit práce vlastního procesoru, ale zrovna zde (sleep) to bude asi neřešitelné.
Dokonce bych klesl tak hluboko, že si tento program koupím..... no řekněte €15.00 , nekupte to
Asi budu muset obvod postavit a testovat přímo. Ještě silně zvažuji zakoupení programátoru PICKIT-2DE a odladit aplikaci i takto. Ne že bych nezvládl postavit programátor, ale málo jich podporuje zrovna PIC10Fxxx a za čas co bych strávil prací nad tím si vydělám na již zmíněný debuger
to Jankop: kdysi jsi nabízel nějakému Brňákovi programátor ICD2 za pětikilo. Už jsi jej prodal, nebo bude pro mne lepší ten PICKIT ?
Časy uváděny v GMT + 1 hodina Jdi na stránku 1, 2Další
Strana 1 z 2
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
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.