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 režim SLEEP
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
sewerman_cz



Založen: Feb 13, 2011
Příspěvky: 289
Bydliště: Brno

PříspěvekZaslal: st červen 06 2012, 22:35    Předmět: PIC režim SLEEP Citovat

Učím se programovat PIC v asm.
A narazil jsem na zajímavý problém na PIV 16F630 jsem udělal jednoduchý program kde se pomocí přerušení přepíní 7 podprogramů blikání 10 x led.
Osmý program uspává mcu a po dlouhém stisku tlačítka na RA5 mcu probudí a začne od programu 1.
Když jse zkoušel měřit spotřebu tak my měřák po uspání ukázal 0 mikroA, po krátkém stisku (po kterém by se mcu měl znovu uspat) už je spotřeba cca 600 mikroA.
Je to normální chování nebo je chyba v kódu?
kód:
PROG8
   movlw    0x00        ; vypnutí všech led
   MOVWF   PORTC          ; a přesunutí na PORT C
   MOVWF   PORTA          ; a přesunutí na PORT A
USPANI
    BCF      INTCON,GIE            ;zakázání všech přerušení
   SLEEP                   ; přepne procesor do režimu SLEEP
    CALL      DELAY1         ;čekací smyčka pro kontrolu dlouhého stisku
    CALL      DELAY1         ;čekací smyčka pro kontrolu dlouhého stisku
    BTFSC      PORTA,5          ;kontrola zda je opravdu stisknuto tlačítko
   GOTO      USPANI        ;pokud je na RA5 log 1 (není stisknuto) uspi
    BSF      INTCON,GIE            ;povolení všech přerušení
   MOVLW     0x01          ;pokud byl probuzen
   MOVWF     PROGRAM        ;skok na první program
   GOTO   PROG1
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovy WWW stránky
procesor



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

PříspěvekZaslal: čt červen 07 2012, 0:45    Předmět: Citovat

Hm, nevidím inicializáciu a isr, ťažko povedať čo to robí iba z takéhoto úryvku.
Najlepšie dať celý zdroj. Zrejme si to lieta kade sa mu chce.

Tlačidlo RA5 pripájaš na VSS/VDD?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
sewerman_cz



Založen: Feb 13, 2011
Příspěvky: 289
Bydliště: Brno

PříspěvekZaslal: čt červen 07 2012, 6:13    Předmět: Citovat

NA RA5 je nopojený interní pullup a tlačítkem se připojuje na VSS.

Inicializace a přerušení:

kód:

; === OBSLUHA PŘERUŠENÍ === 
    ORG     0x004             ; nastavení vektoru přerušení
      movwf   w_temp            ; uložení aktuálního hotnoty registru W do w_temp
      swapf   STATUS,w            ; přesun registru STATUS do registru W
      movwf   status_temp         ; záloha registru STATUS
    BCF STATUS,RP0            ;banka 0 nezávisle na aktuální bance
   
    BCF      INTCON,GIE            ;zakázání všech přerušení (po návratu z přerušení se nastaví samo zpět)
      
; kontrola zda je opravdu stisknuto tlačítko
     CALL    DELAY02          ; čekací smyčka (odstranění zákmitů tlačítka)
    BTFSC      PORTA,5         ;kontrola zda je opravdu stisknuto tlačítko
      GOTO      PRERUS_KON   ;pokud je na RA5 log 1 ukonči přerušení
      BCF      STATUS,C
      RLF        PROGRAM,1      ;pokud je na RA5 log 0 přičte jedničku do proměnné program
   
   
PRERUS_KON
    BCF      INTCON,RAIF            ;smazání příznaku přerušení
      swapf    status_temp      ; přesun zálohy registru
      movwf   STATUS              ; zpět do registru STATUS
      swapf   w_temp,f          ; přesun záohy registru W do f
      swapf   w_temp,w          ; a uložení do restru W
      retfie                    ; návrat z přerušení 
 
MAIN     
; Inicializace portů             
   BCF      STATUS,RP0   ; výběr banky 0
   CLRF   PORTA      ; inicializace PORTA
   CLRF   PORTC      ; inicializace PORTB
;   movlw    05h       ;konfigurace RA2-RA0
;   movwf    CMCON       ;jako digitální vstupy/výstupy
   BSF      STATUS,RP0   ; výběr banky 1
   MOVLW   B'11101000'   ; nastavení piny RA <0,1,2,4> jako výstupy
   MOVWF   TRISA      ; přesun f do W
   BCF    OPTION_REG,7   ; povolení pull-up
   BSF      WPUA,5     ; nastavení RA5 Pull-up rezistor
  BSF      IOCA,5     ; nastavení povolení přerušení na portu RA5
   CLRF   TRISC      ; Piny RC<5:0> jako výstupy
; Nastavení přerušení
   MOVLW   b'10001000'
   MOVWF   INTCON         ; povoleno přerušení pouze od PORT A
    BCF      STATUS, RP0      ; výběr banky 0
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovy WWW stránky
Niki31
Zablokován


Založen: Jul 05, 2008
Příspěvky: 131

PříspěvekZaslal: čt červen 07 2012, 20:42    Předmět: Citovat

Mas to nejake rozsypane a poprehadzovane.Vytrhnute z kontextu.
Tak iba niekolko postrehov narichlo:

-Mas hrozny styl,miesas velke a male pismena.
-Inicializacia portov sa musi vykonat na zaciatku programu a nie
v hlavnej slucke.To sa potom stale dokola inicializuje.
-Init portov je lepsie zacat nast. registrov tris a az potom vkladat hodnoty
do portov.
-Ovplyvnujes priznaky v registri STATUS,to netreba(mimo obnovy po
preuseni) bolo to asi na riadku 16. Priznaky sa nastavuju automaticky
-Na riadku 17 je pripocitavanie pomocou instr. RLF ,ta vykona len posun
do lava,co je vlastne nasobenie dvoma nie sucet.Ak chces zvysit
obsah reg. o 1 pouzij instrukciu INCF reg. .
- ... atd.
Tolko v skratke.
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: pá červen 08 2012, 3:56    Předmět: Citovat

No a uC vykonává co má nebo ne? Řešíš spotřebu uC nebo nefunkčnost programu?
_________________
Žádnej učenej z nebe nespadl ...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
sewerman_cz



Založen: Feb 13, 2011
Příspěvky: 289
Bydliště: Brno

PříspěvekZaslal: pá červen 08 2012, 6:30    Předmět: Citovat

Jde o můj první projekt, který je trochu poslepovaný z různých studijních materiálů (proto ty malé a velké písmena).
Inicializaci mám sice v hlavní smyčce ale inicializuje se pouze po restartu ...
...
Děkuji za připomínky a v příštím projektu se polepším Smile

Program je však plně funkční šlo mi pouze o tu spotřebu v režimu SLEEP.

Díky za reakce.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovy WWW stránky
procesor



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

PříspěvekZaslal: pá červen 08 2012, 6:46    Předmět: Citovat

Iba k RAIF...to sa s BCF INTCON, RAIF nedá zmeniť.
Na to sa musí použiť prečítanie PORTA
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
sewerman_cz



Založen: Feb 13, 2011
Příspěvky: 289
Bydliště: Brno

PříspěvekZaslal: pá červen 08 2012, 8:14    Předmět: Citovat

Vycházel jsem z popisu v datasheetu

Přerušení změnou stavu na vstupu

...V obslužné rutině přerušení musí uživatel ukončit žádost
o přerušení následujícím způsobem:
a) Provést jakékoli čtení nebo zápis do registru PORTA. Tím dojde k ukončení změnového stavu, který generuje žádost o přerušení.
b) Nulovat příznak přerušení RAIF.
Pokud nedojde po detekované změně úrovně na bráně PortA k uvedené proceduře, změnový stav neustále nastavuje příznak přerušení
RAIF a jeho nulování nezpůsobí jeho trvalé uvedení do stavu log.0.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovy WWW stránky
Chenzee



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

PříspěvekZaslal: pá červen 08 2012, 10:05    Předmět: Citovat

no a hned bod a)
_________________
Žádnej učenej z nebe nespadl ...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
sewerman_cz



Založen: Feb 13, 2011
Příspěvky: 289
Bydliště: Brno

PříspěvekZaslal: pá červen 08 2012, 10:29    Předmět: Citovat

Já jsem to pochopil, že musím udělat a) i b).
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovy WWW stránky
procesor



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

PříspěvekZaslal: ne červen 10 2012, 8:35    Předmět: Citovat

Zrušiť RAIF sa dá iba s vygenerovaním RDPORTA.
V obsluhe mi chýba "dobré" spracovanie nabežnej a dobežnej hrany RA5 a filtrovanie zákmitov. Na to filtrovanie by som použil čas a 100 ms.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Andrea



Založen: Sep 07, 2007
Příspěvky: 9340

PříspěvekZaslal: ne červen 10 2012, 9:39    Předmět: Citovat

procesor napsal(a):
Zrušiť RAIF sa dá iba s vygenerovaním RDPORTA.

A instrukce BTFSC PORTA,5 to neprovede?
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: ne červen 10 2012, 19:37    Předmět: Citovat

Však píšem... vygenerovať RDPORTA...
...to je signál, ktorým sa otvorí port A na vnútorný databus,
takže RAIF by sa resetol aj pri inštrukcii BTFSC PORTA,0
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Andrea



Založen: Sep 07, 2007
Příspěvky: 9340

PříspěvekZaslal: ne červen 10 2012, 20:15    Předmět: Citovat

Tak co se ti teda na tom programu nelíbí?
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: ne červen 10 2012, 20:40    Předmět: Citovat

kód:

BCF      INTCON,RAIF            ;smazání příznaku přerušení


iba táto instrukcia
a počas režimu mimo SLEEP neošetrený-ošetrený druhý interrupt pri pustení tlačidla
a že to bude so zákmitmi aj na konci tlačidla.
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.17 sekund