Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Atmega8 BAscom Avr Rc5 ponownie ZL2AVR

siwekyhy 30 Cze 2011 19:14 1831 2
  • #1 30 Cze 2011 19:14
    siwekyhy
    Poziom 14  

    Witam

    Chciałem sterować roletami przeciwsłonecznymi za pomocą pilota. Przetestowałem pare programów i schematów w sieci odnośnie nadawania i odbierania w RC5. Dobrałem pilota który działa tylko z jednym programem który był w książce "Programowanie mikrokontrolerów AVR w języku Bascom" Pytanie jak przerobić ten program by po naciśnięciu klawisza np 1 (adres 13 komenda 19 w moim pilocie) zmieniał się stan np pinu pb.5 ?


    Code:
     'Program odbierający sygnały nadawane w standardzie RC5
    
    'w przerwaniu Int0
    'Na LCD będą wyświetlane informacje o adresie oraz numerze komendy

    $regfile = "m8def.dat"                                      'informuje kompilator o pliku
           'dyrektyw mikrokontrolera
    $crystal = 1000000                                          'informuje kompilator
           'o częstotliwości oscylatora
           'taktującego mikrokontroler
    Config Lcd = 16 * 2                                         'konfiguracja typu wyświetlacza
           'LCD
    Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5       'konfiguracja linii
           'mikrokontrolera do których
           'dołączono wyświetlacz
           'LCD
    Config Int0 = Low Level                                     'konfigurowanie przerwania Int0,
           'które będzie wywoływane niskim
           'poziomem na wejściu INT0
    Config Rc5 = Pind.2                                         'konfiguracja linii, do której
           'dołączono odbiornik
           'podczerwieni
    On Int0 Pobr_rc5                                            'po wystąpieniu przerwania Int0
           'nastąpi skok do podprogramu
           'Pobr_rc5
    Dim Address As Byte , Command As Byte
           'definicje zmiennych dla
           'instrukcji Getrc5
    Dim Odebr_kod As Bit                                        'flaga wskazująca na odebranie




           'kodu danych w kodzie RC5
    Enable Interrupts                                           'odblokowanie przerwań
           'globalnych
    Enable Int0                                                 'odblokowanie przerwania Int0

    Set Odebr_kod                                               'ustawienie flagi Odebr_kod

    Do                                                          'początek nieskończonej pętli
     If Odebr_kod = 1 Then                                      'jeśli odebrano kod RC5, to
      Cls                                                       'czyszczenie LCD
      Lcd "Adres: " ; Address                                   'wyświetlenie w pierwszej linii
           'LCD otrzymanego adresu po
           'napisie Adres:
      Lowerline                                                 'kursor do drugiej linii LCD
      Lcd "Komenda:" ; Command                                  'wyświetlenie w drugiej linii
           'LCD otrzymanego numeru komendy
           'po napisie Komenda:
      Reset Odebr_kod                                           'wyzerowanie flagi Odebr_kod
      Enable Int0                                               'odblokowanie przerwania Int0
     End If
    Loop
    End                                                         'koniec programu

    Pobr_rc5:                                                   'podprogram przerwania Int0
     Disable Int0                                               'zablokowanie przerwania Int0
     Enable Interrupts                                          'odblokowanie przerwań
           'globalnych
     Getrc5(address , Command)                                  'pobranie adresu oraz komendy
           'nadanej z pilota podczerwieni
     Command = Command And &B01111111                           'wyzerowanie najbardziej
           'znaczącego bitu otrzymanej
           'komendy
     Set Odebr_kod                                              'ustawienie flagi odebrania kodu
           'RC5
    Return                                                      'powrót z przerwania

    0 2
  • #2 30 Cze 2011 20:24
    Mol
    Poziom 30  

    If Odebr_kod = 1 Then
    ...
    ...
    if address = 13 and command = 19 then
    set portb.5
    albo
    reset portb.5
    end if
    ..
    Enable Int0 'odblokowanie przerwania Int0
    End If

    (chyba powinno działać)

    0
  • #3 01 Lip 2011 00:26
    xury
    Poziom 38  

    Dodaj jeszcze między "Enable INT0", a "End If" linijkę: "Reset Odebr_kod"

    Moderowany przez _Robak_:

    Post edytowałem.

    0