logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Przerwanie wyzwalane zboczem opadajacym 2313

Yacek_64 12 Cze 2010 22:03 1283 3
REKLAMA
  • #1 8183680
    Yacek_64
    Poziom 11  
    Napisałem programik którego zadaniem ma być zliczanie impulsów, wydawało by się trywialne. gdy przeprowadzam symulacje działania programu wszystko dziala OK.
    Po podłączeniu wyświetlacza i klawisza juz nie jest tak różowo.
    wyświetlacz wyświetla zero i po wciśnięciu przycisku (zbocze opadające) wartość nie ulega zmianie(prawie ale o tym na końcu). co ciekawe gdy zmienię sposób wywoływania przerwania na wyzwalane poziomem niskim, wszystko dziala OK jak w bajce, tylko ze przytrzymanie klawisza powoduje ze wartość rośnie. Dlatego muszę mieć wyzwalanie zboczem.
    Klawisz podciągany zewnętrznie do plusa przez rezystor 22K. schemat zaczerpnięty z NOWEGO ELEKTRONIKA 4/2001 str 40.
    Dlaczego "prawie" - jak pomęczę przycisk tak kilka sekund poprzyciskam to wyświetlacz łaskawie zmieni wartość. Ponizej zamieściłem istotne fragmenty programu dotyczący deklaracji ustawień procesora.
    cli
    ldi A,low(RAMEND)
    out SPL,A
    WatchDog_Stop
    ldi A,$08
    out mcucr,A
    ldi A,$80
    out GIMSK,A
    Sei
    ldi R16,0xFF

    out DDRB,R16

    out PORTB,r16
    ldi R16,0x73
    out DDRD,R16
    ldi R16,0xFF
    out PORTD,r16
  • REKLAMA
  • #2 8186150
    hotdog
    Poziom 26  
    Ogólnie schematu nie mam bo tej gazety nie kupuje, a nawet jak bym kupował to raczej by mi się nie chciało go szukać :). Najlepiej jak byś go zamieścił. Nawet nie piszesz do którego portu jest ten przycisk podłączony.

    Skoro piszesz że działa wyzwalanie poziomem, to zrób softwarowe wykrywania zbocza (ustawiasz rejestr że już obsłużyłeś przycisk i w pętli głównej "kasujesz" go po wykryciu puszczenia przycisku). Wiem że to rozwiązanie na około, ale bez schematu ciężko coś więcej pomóc.

    Pozdr.
  • REKLAMA
  • #3 8187252
    Yacek_64
    Poziom 11  
    Witam!
    Oczywiście (INT1)PD3 noga 7- deklaracja " ldi A,$80 out GIMSK,A" mozliwosc generowanie przerwania przez urządzenie zewnętrzne .
    ldi A,$08 out mcucr,A deklaracja wyzwolenia zboczem opadającym dla sygnalu INT 1. Co do schematu to do nogi nr 7 PD3 (konfigurowane jako wejscie ) podłączony jest przycisk NO oraz rezysto 22K pociągajacy do plua , po zamknięciu zwiera do masy nogę i wymusza stan niski , gdy otwarty to stan wysoki. Podłączyłem dzisiaj jako źródło stanu niskiego uklad schmita i nic tzn to samo , procesor nie wykrywa zbocza opadającego , natomiast po zadeklarowaniu ze ma reagować na poziom dziala bezbłędnie. Nad propozycją zawartą w drugiej części popracuje jutro .
    Pozdrawiam
  • #4 8190673
    Yacek_64
    Poziom 11  
    Witam ponownie !
    Moze ktoś zerknie na to poniżej i powie dlaczego to nie dziala.?
    Programik napisany do testowania przerwania generowanego zboczem opadającym, efekt to dzialanie jako przełącznik bistabilny
    W avrstudio wszystko ok a w aplikacji zero , co jest nie tak ?

    .nolist
    .include "2313def.inc"
    .list
    .cseg
    .org 0
    rjmp ResetProcessora
    .org INT0addr
    reti
    .org INT1addr
    rjmp Impuls_A
    .org ICP1addr
    reti
    .org OC1addr
    reti
    .org OVF1addr
    reti
    .org OVF0addr
    reti
    .org URXCaddr
    reti
    .org UDREaddr
    reti
    .org UTXCaddr
    reti
    .org ACIaddr
    reti

    ResetProcessora:

    cli
    ldi r16,LOW(RAMEND)
    out spl,r16

    ldi r16,$08
    out mcucr,r16
    ldi r16,$80
    out GIMSK,r16

    ldi r16,0xFF
    out DDRB,r16
    out PORTB,r16

    ldi R16,0x73
    out DDRD,R16
    ldi R16,0xFF
    out PORTD,r16
    Sei


    start:

    nop

    rjmp start


    Impuls_A:

    in r16,portb
    andi r16,0x01
    cpi r16,0x00
    breq LED_ON
    cbi PORTB,0
    rjmp koniec
    LED_ON:
    sbi PORTB,0
    koniec:
    reti
    .exit
REKLAMA