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í

 
PIC16F84A maticova klavesnice

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





PříspěvekZaslal: 28 leden 2008, 9:13    Předmět: PIC16F84A maticova klavesnice Citovat

Mam problem chtel jsem pomoci maticove klavesnice ovladat vystupy. Nejspis bude problem v RA4 kde je otevrenej kolektor pripojil jsem na nej odpor 10k k napeti. A da se rict ze to funguje. Jen kdyz mam tento program
kód:

   LIST P=16F684A, R=DEC
   INCLUDE<P16F84A.INC>

   __CONFIG   _CP_OFF & _WDT_OFF & _PWRTE_OFF & _XT_OSC

      org    0

      BSF     STATUS,RP0
      movlw    b'00101111'   ; portb(0) vstup
      movwf    TRISB       
      movlw   b'00000000'
      movwf    TRISA       ; porta jako výstupy
      BCF     STATUS,RP0
   
      CLRF   PORTA
      CLRF    PORTB

      movlw    b'11010000'
      movwf   PORTB

keyboard
   
    BTFSC    PORTB,5            ; tlačítko 1
         BSF     PORTA,3
         BTFSC    PORTB,1            ; tlačitko 6
         BCF     PORTA,3
         BTFSC    PORTB,2            ; tlacitko F
         CALL     zapni
         BTFSC    PORTB,3            ; tlačítko S
         CLRF     PORTA
   
        GOTO     keyboard

zapni   MOVLW    b'11111111'
   MOVWF    PORTA
   RETURN
   END


tak pri stiknuti treba vypnuti nebo zapnuti na portu RA3, tak se mi treba vypina nebo zapina i port RA4 v programu to snad neni kdyz s portem RA4 nic nedelam. Poradte prosim jak to je s tim otevrenym kolektorem. Diky



img.jpg
 Komentář:
schéma zapojeni

Stáhnout
 Soubor:  img.jpg
 Velikost:  239.24 kB
 Staženo:  360 krát

Návrat nahoru
 

 
jankop
moderátor
moderátor


Založen: 24.10.2007
Příspěvky: 336
Bydliště: Brno

PříspěvekZaslal: 28 leden 2008, 11:20    Předmět: Citovat

Myslím, že otevřený kolektor máš ošetřen správně. Řekl bych, že jde o běžný tzv. read-write problém. Při použití bitově orientovaných instrukcí na portech, třeba BSF PORTA,3 se nejprve přečte celý port, provede se bitová operace a pak se celý port zase zapíše zpět. Jenže se nečte registr PORTA nebo PORTB, nýbrž stav výstupních pinů. Pokud tedy provedeš rychle po sobě bitovou operaci na portu, může dojít k tomu, že stav portu po první operaci se ještě nestačí ustálit dík parazitním kapacitám obvodu. Pak se jednotlivé bity portu chovají zdánlivě nevyzpytatelně. Řešení jsou v podstatě dvě. Vložením nějaké prodlevy mezi bitové operace na portech nebo prováděním bitové operace na pomocném registru a ten pak celý vkládat na port. Ovšem v tvém programu s RA4 manipuluješ:


kód:
    CLRF   PORTA
     ...........
zapni   
   MOVLW    b'11111111'
   MOVWF    PORTA
   RETURN
 
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovy WWW stránky
 

 
Technik
Anonymní





PříspěvekZaslal: 28 leden 2008, 19:54    Předmět: Re: PIC16F84A maticova klavesnice Citovat

Ten program funguje tak, jak si ho napsal, není to žádným otevřeným kolektorem. Takže uvádím instrukce, které to způsobují.

kód:


keyboard
        ...
        ...
        BTFSC    PORTB,3            ; tlačítko S
         CLRF     PORTA              ;CHYBA - manipuluje se vsemi bity
   
        GOTO     keyboard

zapni   MOVLW    b'11111111'
   MOVWF    PORTA  ;CHYBA - manipuluje se vsemi bity
   RETURN
   END
Návrat nahoru
 

 
Zarubik
Anonymní





PříspěvekZaslal: 28 leden 2008, 23:08    Předmět: Citovat

nene to tam je schvalne ze by to zaplo vsechny nebo vyplo vsechny...

kód:

   LIST P=16F684A, R=DEC
   INCLUDE<P16F84A.INC>

   __CONFIG   _CP_OFF & _WDT_OFF & _PWRTE_OFF & _XT_OSC

;- Proměnné ----------------------------------------------------
c1      EQU     h'12'              ;proměnné pro cykly
c2      EQU     h'13'
PA      equ      h'14'
PB      EQU      h'15'
   
      org    0

      BSF     STATUS,RP0
      movlw    b'00101111'   ; portb(0) vstup
      movwf    TRISB       
      clrf    TRISA       ; porta jako výstupy
      BCF     STATUS,RP0
   
      CLRF   PORTA
      CLRF    PORTB
      CLRF   PA

keyboard
            
        BSF     PORTB,7            ; testovani 1 a posledniho sloupce   
   BTFSC   PORTB,5            ; tlačítko 1
        BSF     PORTA,3
        BTFSC   PORTB,1            ; tlačitko 6
        BCF     PORTA,3
        BTFSC   PORTB,2            ; tlacitko F
        CALL   zapni
        BTFSC   PORTB,3            ; tlačítko S
        CALL   vypni
   BCF   PORTB,7

CALL cekej
      
        BSF      PORTB,6           ; testovani 2 a 4 sloupecek 
   BTFSC    PORTB,5           ; tlačítko 2
        BSF    PA,4
        BTFSC    PORTB,1           ; tlačitko 7
        BCF    PA,4
        BTFSC    PORTB,2           ; tlacitko 4
        BSF    PORTA,1
        BTFSC    PORTB,3           ; tlačítko 9
        BCF    PORTA,1
        BCF      PORTB,6    
   
CALL cekej
   
       BSF      PORTB,4            ; testovani 3 a 5 sloupecek 
   BTFSC    PORTB,5            ; tlačítko 3
        BSF    PORTA,2
        BTFSC    PORTB,1            ; tlačitko 8
        BCF    PORTA,2
        BTFSC    PORTB,2            ; tlacitko 5
        BSF    PORTA,0
        BTFSC    PORTB,3            ; tlačítko 0
        BCF    PORTA,0
        BCF      PORTB,4
   
CALL cekej

      BTFSC PA,4
      GOTO hihi
      BCF PORTA,4
      GOTO hoho

hihi    BSF   PORTA,4
hoho    GOTO    keyboard


;- podprogramy -------------------------------------------------
zapni   MOVLW   b'11111111'
      MOVWF   PORTA
      BSF      PA,4
      RETURN
 
vypni   BCF PA,4
      CLRF PORTA
      RETURN
    
cekej    MOVLW    50                 
         MOVWF    c2               
wait2    MOVLW    100
         MOVWF    c1
wait1    DECFSZ   c1,1
         GOTO     wait1
         DECFSZ   c2,1
         GOTO     wait2
         RETURN                 
   END


Tak jsem to sesmolil takhle.. neni to dokonaly ale uz to trochu funguje, pouzil jsem tam jeste registr, ale jakmile zapnu RA4 a macknu na jine tlacitko na zapnuti jineho vystupu tak mi ledka na RA4 blika (podle toho jak mam nastaveny to zpozdeni) a kdyz macknu 1 (PORTB,5) tak blika ledka strasne rychle ze sotva svítí. Pri ostatnich sviti hodne a blika pri tlacitku 1 nesviti skoro vubec. Nenapada vas neco? [/code]
Návrat nahoru
 

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 © 2017 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)