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í 

Emulace bistabilního KO pomocí PIC
Jdi na stránku 1, 2  Další
 
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
Kixx
Neregistrovaný





PříspěvekZaslal: ne duben 20 2008, 23:14    Předmět: Emulace bistabilního KO pomocí PIC Citovat

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.

Díky za jakoukoliv pomoc.
Návrat nahoru
Stan3
Neregistrovaný





PříspěvekZaslal: po duben 21 2008, 5:01    Předmět: Citovat

A co použít 555ku v CMOS verzi?
Návrat nahoru
mihal



Založen: Apr 06, 2005
Příspěvky: 1839
Bydliště: Zilina

PříspěvekZaslal: po duben 21 2008, 7:45    Předmět: Citovat

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. Wink
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 duben 21 2008, 10:15    Předmět: Citovat

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[?
]
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovy WWW stránky
Kixx
Neregistrovaný





PříspěvekZaslal: út duben 22 2008, 11:23    Předmět: Citovat

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.
Návrat nahoru
ZdenekHQ
Administrátor


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

PříspěvekZaslal: út duben 22 2008, 11:42    Předmět: Citovat

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[?
]
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovy WWW stránky
jankop



Založen: Apr 04, 2007
Příspěvky: 679

PříspěvekZaslal: út duben 22 2008, 12:22    Předmět: Citovat

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í.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail Zobrazit autorovy WWW stránky
Kixx
Neregistrovaný





PříspěvekZaslal: út duben 22 2008, 12:53    Předmět: Citovat

to Jankop.
Oh, díky velice za ochotu. Určitě upřesním a budu velkým vděčníkem Surprised)
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ěť Surprised)
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..
Návrat nahoru
ZdenekHQ
Administrátor


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

PříspěvekZaslal: út duben 22 2008, 12:54    Předmět: Citovat

Co asi znamená slůvko latch v popisu 7475 Question

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[?
]
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovy WWW stránky
jankop



Založen: Apr 04, 2007
Příspěvky: 679

PříspěvekZaslal: út duben 22 2008, 14:17    Předmět: Citovat

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í.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail Zobrazit autorovy WWW stránky
ZdenekHQ
Administrátor


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

PříspěvekZaslal: út duben 22 2008, 15:00    Předmět: Citovat

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.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovy WWW stránky
jankop



Založen: Apr 04, 2007
Příspěvky: 679

PříspěvekZaslal: út duben 22 2008, 16:44    Předmět: Citovat

Takhle nějak by vypadal program:

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     FROM_W          0x06
;--------- VARIABLE DEFINITIONS ---------------------------------------
    CBLOCK  RAM_Start
TMP0
TMP1
TMP2
    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 FROM_W     ; nastaveni V/V portu
    btfsc GPIO,GP0  ; test nastavovaciho vstupu GP0, 'H'=hlida, 'L'= reset
    call active     ; hlidani zapnuto, testuj vstup
    btfss GPIO,GP0  ; test nastavovaciho vstupu GP0, 'H'=hlida, 'L'= reset
    bcf GPIO,GP2    ; hlidani vypnuto, proved reset vystupu
    movf GPIO,W   
    sleep
active
    btfss GPIO,GP1  ; test hlidaciho vstupu 'H'=klid, 'L'= alarm
    bsf GPIO,GP2    ; doslo k alarmu nastav vystup GP2 do 'H'
    retlw 0x00
    ;org 0xff
    ;movlw B'10101010'
    end
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail Zobrazit autorovy WWW stránky
Kixx



Založen: Apr 22, 2008
Příspěvky: 4

PříspěvekZaslal: st duben 23 2008, 9:52    Předmět: Citovat

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
...
..

Kixx
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
jankop



Založen: Apr 04, 2007
Příspěvky: 679

PříspěvekZaslal: st duben 23 2008, 19:47    Předmět: Citovat

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
   
    end

Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail Zobrazit autorovy WWW stránky
Kixx



Založen: Apr 22, 2008
Příspěvky: 4

PříspěvekZaslal: čt květen 15 2008, 0:00    Předmět: Citovat

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 Very Happy

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 Laughing

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 ?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
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
Jdi na stránku 1, 2  Další
Strana 1 z 2

 
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.16 sekund