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

[Atmega8][BASCOM] Nauka kodów pilota przez uC.

zzenonn 07 Gru 2008 16:40 3091 10
REKLAMA
  • #1 5829306
    zzenonn
    Poziom 10  
    Witam

    Nie mogłem nic znaleźć. Jestem początkujący i nie wiem jakiego słowa kluczowego użyć.
    Chodzi o to, że mamy np Atmega8 i pilot RC5.

    Teraz chcę żeby procek po np wstawieniu zworki mogł się uczyć kodów z pilota sam, a poźniej po jej odłączeniu pamiętał już "bindy" na stałe.
    Tak że jak np LEDa zaprogramowałem pod 1 to żeby już tak zostało, a kolei jak mnie się znudzi to żeby zaś "z bindować" LED pod jakiś inny klawisz bez potrzeby flashowania.

    Jakiś hint? Czego mam szukać?

    Dzięki.
  • REKLAMA
  • Pomocny post
    #2 5829476
    dawid512
    Poziom 32  
    Zapisuj sobie to do eeproma wtedy zapamiętasz na stałe. Jak wykonać? Hmm za pewne wykorzystując jakiś warunek :)
  • REKLAMA
  • #3 5829488
    zzenonn
    Poziom 10  
    dawid512 napisał:
    Zapisuj sobie to do eeproma wtedy zapamiętasz na stałe. Jak wykonać? Hmm za pewne wykorzystując jakiś warunek :)


    Aha, czyli mam sobie przyswoić wiedze na temat zapisu/odczytu z eeprom.
    Tego mi brakowało :)

    Dzięki za odpowiedź.
  • REKLAMA
  • Pomocny post
    #4 5830261
    sp3ots
    Poziom 38  
    Witam !
    Oto program napisany w Bascom AVR na ATtiny2313.
    Myślę zę sobie poradzisz ze zmianą na Megę8.
    Odczytuje on Adres i Rozkaz kodu Rc5 i wyświetla na wyświetlaczu LCD.
    
    $regfile = "attiny2313.dat"
    $crystal = 10000000
    Config Lcdpin = Pin , Db7 = Pb.2 , Db6 = Pb.3 , Db5 = Pb.4 , Db4 = Pb.5 , E = Pb.6 , Rs = Pb.7
    
    'Config Lcd = 16 * 1a
    Config Lcd = 16 * 2
    
    Config Rc5 = Pind.2
    
    Enable Interrupts
    Dim Adres As Byte , Rozkaz As Byte
    Cls
    Lcd " dekoder RC5..."
    Cursor Off
    Do
      Getrc5(adres , Rozkaz)
        If Adres = 0 Then
         Rozkaz = Rozkaz And &B01111111
      Cls
         Lcd "Adr= " ; Adres ; " Roz= " ; Rozkaz
    end if
    loop
     End
    

    Pozdrawiam. Stefan
  • #5 5830539
    zzenonn
    Poziom 10  
    sp3ots napisał:
    Witam !
    Oto program napisany w Bascom AVR na ATtiny2313.
    Myślę zę sobie poradzisz ze zmianą na Megę8.
    Odczytuje on Adres i Rozkaz kodu Rc5 i wyświetla na wyświetlaczu LCD.

    $regfile = "attiny2313.dat"
    $crystal = 10000000
    Config Lcdpin = Pin , Db7 = Pb.2 , Db6 = Pb.3 , Db5 = Pb.4 , Db4 = Pb.5 , E = Pb.6 , Rs = Pb.7

    'Config Lcd = 16 * 1a
    Config Lcd = 16 * 2

    Config Rc5 = Pind.2

    Enable Interrupts
    Dim Adres As Byte , Rozkaz As Byte
    Cls
    Lcd " dekoder RC5..."
    Cursor Off
    Do
    Getrc5(adres , Rozkaz)
    If Adres = 0 Then
    Rozkaz = Rozkaz And &B01111111
    Cls
    Lcd "Adr= " ; Adres ; " Roz= " ; Rozkaz
    end if
    loop
    End
    Pozdrawiam. Stefan


    hehe dzieki, to juz mam dawno rozpracowane, pytalem w tym poscie na temat operacji EEPROM :)
  • #6 5830602
    sp3ots
    Poziom 38  
    Do odbioru kodu Rc5 nie jest potrzebny Eeprom.
    Chyba że to nowa sprawa ? która Ciebie interesuje.

    odczyt z eepromu - Readeeprom zmienna , 1
    zapis do eepromu - Writeeeprom zmienna , 1
    te rozkazy dotyczą eepromu wbudowanego w ATtiny2313
  • #7 5831361
    zzenonn
    Poziom 10  
    Mnie w ogóle nie chodziło o RC5, to był przyklad.

    Chce nauczyć się obsługiwać eeprom poto żeby zrobić układ/napisać program, dzięki któremu procek bedzie mógł uczyć się kodów sam, bez ponownej rekompilacji oprogramowania.

    Dzięki.
  • #8 5831378
    sp3ots
    Poziom 38  
    czy odbiór kodu Rc5 już Tobie działa ?
    Jestem na GG6293398
    Jeśli kod ma być zapamiętany po wciśnięciu przycisku, to najpierw trzeba
    skonfigurować port:
    np.

    Config Pinb.0 = input
    Portb.0 = 1

    readeeprom rozkaz, 0

    w istniejącej pętli do...loop wpisać:
    if pinb.0 = 0 then writeeeprom rozkaz, 0
    readeeprom rozkaz, 0
    to fragment programu, niestety nie mam możliwości sprawdzenia.

    2008.12.08--------------------------------------------------------------------
    
    'zapis do Eepromu
    $regfile "attiny2313.dat"
    Config Lcdpin = Pin , Db7 = Pb.2 , Db6 = Pb.3 , Db5 = Pb.4 , Db4 = Pb.5 , E = Pb.6 , Rs = Pb.7
    Config Lcd = 16 * 2
    $crystal = 8000000
    Cls  'wyczyść LCD
    Cursor Off       'Wyłącz kursor
    Config Pinb.0 = Input       'konfiguracja wejścia
    Portb.0 = 1        'wymuszenie 1 na wejściu (podciągnięcie Portb.0 do +5V)
    Dim Zmienna_x As Byte            'konfiguracja zmiennej X, byte max 255
    Do                               'początek pętli
    Readeeprom Zmienna_x , 0       'odczyt zmiennej X z komórki 0 Eepromu
    Locate 1 , 1            'zapisz obraz na LCD w pierwszej linii, od lewej strony
    Lcd "zmienna X = " ; Zmienna_x       'pokaż  Zmienną X na LCD
    If Pinb.0 = 0 Then                     'jeśli Pinb.0 do masy to
    Incr Zmienna_x                        'zwiększ  zmienną X o 1
    Waitms 500                              'zaczekaj 500ms
    Cls  'wyczyść LCD
    Locate 1 , 1
    Lcd "zmienna X = " ; Zmienna_x
    Writeeeprom Zmienna_x , 0       'zapis zmiennej X do komórki 0 Eepromu
    End If                                       'koniec warunku IF
    Loop                                         'koniec pętli
    End                                           'koniec programu
    


    Ten program działa. Jest to przykład zapisu i odczytu zmiennej_x z i do EEpromu, program działa.
    Wchodzi do pętli Do ...loop
    Odczytuje zmienną_X z Eepromu
    Po wymuszeniu zera na Pinb.0 zmienna_X zwiększa swoją wartość, po
    wymuszeniu jedynki automatycznie zapisuje zmienną_X do eepromu,
    wyświetla na LCD, opuszcza "warunek" IF...End IF.
    i tak w kółko pętli Do...Loop
    Po wyłączeniu zasilania pamięta zmienną_X.

    Pozdrawiam. Stefan
  • #9 5833296
    dawid512
    Poziom 32  
    Cytat:
    Jeśli kod ma być zapamiętany po wciśnięciu przycisku, to najpierw trzeba
    skonfigurować port:
    np.

    Config Pinb.0 = Output
    Portb.0 = 1

    readeeprom rozkaz, 0

    w istniejącej pętli do...loop wpisać:
    if pinb.0 = 0 then writeeeprom rozkaz, 0


    Jeżeli chcesz sprawdzać stan za pomocą PINX to port musi być jako wejście...
  • REKLAMA
  • #10 5834067
    sp3ots
    Poziom 38  
    Witam !

    Output = wyjście
    input = wejście

    Pozdrawiam. Stefan
  • #11 5834107
    dawid512
    Poziom 32  
    sp3ots napisał:
    Witam !

    Output = wyjście
    input = wejście

    Pozdrawiam. Stefan


    To akurat wie chyba każdy. Chodzi o to że każesz autorowi ustawić port jako wyjście o potem sprawdzać stan na jego końcówkach za pomocą PINx.
REKLAMA