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

[bascom] pilot rc5 nie działa program

Chester11-86 22 Gru 2010 22:44 4732 18
REKLAMA
  • #1 8902597
    Chester11-86
    Poziom 16  
    Witam!

    Posiadam schemat pilota rc5 (poniżej)

    [bascom] pilot rc5 nie działa program

    Staram się to wszystko oprogramować. Program znajduję się poniżej i powiedzcie mi dlaczego to nie działa?? :( Już nie wiem jak sobie z tym poradzić :(

    
    '****Program na ATtiny2313****'
    '*** Program pod pilot RC5****'
    
    $regfile = "attiny2313.dat"
    $crystal = 4000000
    
    Config Pind.0 = Input : Portd.0 = 0
    Config Pind.1 = Input : Portd.1 = 0
    Config Pind.2 = Input : Portb.2 = 0
    Config Pind.3 = Input : Portb.3 = 0
    Config Pind.4 = Input : Portb.4 = 0
    Config Pinb.3 = Output : Portb.3 = 0
    
    Dim Togbit As Byte , Command As Byte , Address As Byte
    
    Do
    
    Debounce Pind.0 , 1 , P1 , Sub
    Debounce Pind.1 , 1 , P2 , Sub
    Debounce Pind.2 , 1 , P3 , Sub
    Debounce Pind.3 , 1 , P4 , Sub
    Debounce Pind.4 , 1 , P5 , Sub
    
    Loop
    
    End
    
    P1:
    
    Command = 1
    Togbit = 0
    Address = 1
    
    Do
    
    Waitms 500
    Rc5send Togbit , Address , Command
    
    Loop Until Pind.0 = 0
    
    Return
    
    P2:
    
    Command = 2
    Togbit = 0
    Address = 1
    
    Do
    
    Waitms 500
    Rc5send Togbit , Address , Command
    
    Loop Until Pind.1 = 0
    
    Return
    
    P3:
    
    Command = 3
    Togbit = 0
    Address = 1
    
    Do
    
    Waitms 500
    Rc5send Togbit , Address , Command
    
    Loop Until Pind.2 = 0
    
    Return
    
    P4:
    
    Command = 4
    Togbit = 0
    Address = 1
    
    Do
    
    Waitms 500
    Rc5send Togbit , Address , Command
    
    Loop Until Pind.3 = 0
    
    Return
    
    P5:
    
    Command = 5
    Togbit = 0
    Address = 1
    
    Do
    
    Waitms 500
    Rc5send Togbit , Address , Command
    
    Loop Until Pind.4 = 0
    
    Return
    


    Proszę o pomoc!
    Z góry dziękuję!
    Pozdrawiam!
  • REKLAMA
  • #2 8903563
    piotrva
    VIP Zasłużony dla elektroda
    nie działa w jakim sensie?
    masz możliwość podłączenia pod rs232 do debugowania?
    dlaczego te switche masz tak dziwnie podłączone?
    nie prościej do masy + pull-upy w procesorze?
  • REKLAMA
  • #3 8903602
    Chester11-86
    Poziom 16  
    Porównując do zwykłego pilota nadającego w rc5 uznałem że nie działa ponieważ dioda ir w zwykłym pilocie świeci dopiero jak się naciśnie jakiś przycisk a u mnie jest tak że świeci się cały czas :( po naciśnięciu przycisku dioda mruga lub w ogóle gaśnie :( switche są tak podpięte ponieważ chce aby baterie dłużej pożyły i napięcie powinno być dopiero pobierane gdy nacisnę jakiegoś switcha, ale gdy nic nie naciskam cały czas jest 1V na procku i tu też jest problem, podejrzewam że napięcie przechodzi poprzez tranzystor :(
    Niestety nie mam możliwości podpięcia pod rs232.
  • #4 8903873
    piotrva
    VIP Zasłużony dla elektroda
    1. spróbuj na początku dać Portb.3=1
    2. jeśli masz jakąś diodę led lub wyświetlacz lcd to sprawdź jak program działa na sucho.
    3. sprawdź na urządzeniu docelowym czy wogóle odbiera sygnały lub zmontuj sobie analizatorek kodu rc5
  • REKLAMA
  • #5 8904076
    Chester11-86
    Poziom 16  
    1. Nic się nie zmieniło dalej dioda non stop nadaje
    2. Zamieniłem diodę IR na diodę Led i świeci cały czas po naciśnięciu przycisku gaśnie a gdy dłużej przytrzymam to mruga
    3. Posiadam odbiornik według schematu poniżej:
    [bascom] pilot rc5 nie działa program

    I oprogramowanie:
    
    '************* Konfiguracja uC *****************
    '***********************************************
    $regfile = "attiny2313.dat"
    $crystal = 16000000
    
    Config Portb = Input
            Portb = &B11111111
    Config Portd = Input
            Portd = &B0000000
    
    Config Rc5 = Pind.2
    Dioda Alias Portd.6
    
    Enable Interrupts
    '********** Konfiguracja uC Koniec  ************
    
    '******************  Zmienne *******************
    '***********************************************
    Dim Komenda As Byte , Adres As Byte
    '*************  Zmienne Koniec  ****************
    
    '**************  Petla glowna ******************
    '***********************************************
    Do
      Getrc5(adres , Komenda)
      Komenda = Komenda And &B01111111
    
      If Adres = 1 Then
        Reset Dioda
    
        Select Case Komenda
          Case 1:
              Toggle Portb.0
          Case 2:
              Toggle Portb.1
          Case 3:
              Toggle Portb.2
          Case 4:
              Portb.0 = 0
              Portb.1 = 0
              Portb.2 = 0
          Case 5:
              Portb.0 = 1
              Portb.1 = 1
              Portb.2 = 1
        End Select
    
        Waitms 100
        Set Dioda
        Waitms 100
      End If
    
    Loop
    End
    '************ Petla glowna Koniec **************
    


    Nic nie reaguję :(
    Nawet zmieniłem tranzystor PNP na BC516 jak jest w helpie bascoma.
    Nic nie działa już się meczę z tym 2 miesiące :(
    Co robię źle??
  • #6 8904325
    ugh123
    Poziom 13  
    Cześć :)

    Na moje oko program nie działa z powodu źle ustawionych portów wejściowych przez co program nie rozróżnia czy dany "guzik" jest wciśnięty czy nie . Po mojemu konfiguracja portów jako wejściowych powinna wyglądać tak
    Config Portd.5 = Input
    Reset Pind.5                                                ' guzik S1
    S1 Alias Pind.5
    '-------------------------------------------------------------------------------
    Config Portd.4 = Input
    Reset Pind.4                                                ' guzik S2
    S2 Alias Pind.4

    A co do ustawienia wyjścia dla diody IR to ja to robiłem tak
    '-------------------------------------------------------------------------------
    Config Portb.3 = Output                                     ' dioda IR
    Reset Pinb.3
    '-------------------------------------------------------------------------------
    .

    Jak kolega jest zainteresowany mogę wstawić kod do pilota IR który działał i jest sprawdzony . Pozdrawiam , Wesołych Świąt ;) Bartek
  • #7 8904615
    Chester11-86
    Poziom 16  
    Oczywiście że jestem zainteresowany :) zaraz wprowadzę poprawki zaproponowane przez Ciebie i napiszę jaki jest tego efekt :)
    Pozdrawiam!
    Również życzę Wesołych Świąt :) Mariusz

    Niestety nic to nie zmieniło dalej jest ten sam efekt :( taki mam program:

    
    '****Program na ATtiny2313****'
    '*** Program pod pilot RC5****'
    
    $regfile = "attiny2313.dat"
    $crystal = 4000000
    
    Config Portd.0 = Input
    Reset Pind.0
    S1 Alias Pind.0
    
    Config Portd.1 = Input
    Reset Pind.1
    S2 Alias Pind.1
    
    Config Portd.2 = Input
    Reset Pind.2
    S3 Alias Pind.2
    
    Config Portd.3 = Input
    Reset Pind.3
    S4 Alias Pind.3
    
    Config Portd.4 = Input
    Reset Pind.4
    S5 Alias Pind.4
    
    Config Portb.3 = Output
    Reset Pind.3
    
    Dim Togbit As Byte , Command As Byte , Address As Byte
    
    Do
    
    Debounce S1 , 1 , P1 , Sub
    Debounce S2 , 1 , P2 , Sub
    Debounce S3 , 1 , P3 , Sub
    Debounce S4 , 1 , P4 , Sub
    Debounce S5 , 1 , P5 , Sub
    
    Loop
    
    End
    
    P1:
    
    Command = 1
    Togbit = 0
    Address = 1
    
    Do
    
    Waitms 500
    Rc5send Togbit , Address , Command
    
    Loop Until S1 = 0
    
    Return
    
    P2:
    
    Command = 2
    Togbit = 0
    Address = 1
    
    Do
    
    Waitms 500
    Rc5send Togbit , Address , Command
    
    Loop Until S2 = 0
    
    Return
    
    P3:
    
    Command = 3
    Togbit = 0
    Address = 1
    
    Do
    
    Waitms 500
    Rc5send Togbit , Address , Command
    
    Loop Until S3 = 0
    
    Return
    
    P4:
    
    Command = 4
    Togbit = 0
    Address = 1
    
    Do
    
    Waitms 500
    Rc5send Togbit , Address , Command
    
    Loop Until S4 = 0
    
    Return
    
    P5:
    
    Command = 5
    Togbit = 0
    Address = 1
    
    Do
    
    Waitms 500
    Rc5send Togbit , Address , Command
    
    Loop Until S5 = 0
    
    Return
    
  • REKLAMA
  • Pomocny post
    #8 8906842
    ugh123
    Poziom 13  
    A więc na życzenie kolegi wstawiam kod pilocika IR który zrobiłem z myślą o sterowaniu nim piórnikiem elektronicznym który mam zamiar wykonać . W moim pilocie w celu oszczędzania baterii która jest "pastylka" taka jak ta na płytach głównych to po wciśnięciu jednego bądź drugiego guzika zostawało podawane plus albo minus zasilania procesora i od razu dany stan na port wejściowy procka . Myślę że wyjaśniłem dość jasno o co chodzi schematu narazie nie mogę znaleźć ale jak tylko znajdę to wstawię niżej daje kod mojego programu , aha zapomniał bym dodać ze w mojej wersji prockiem był attiny2313 na wew oscylatorze 8 Mhz a dioda nadawcza IR została podłączona bezpośrednio do portu układu bez żadnych tranzystorów

    $regfile = "attiny2313.dat"
    $crystal = 8000000
    '-------------------------------------------------------------------------------
    Config Portb.3 = Output                                     ' dioda IR
    Reset Pinb.3
    '-------------------------------------------------------------------------------
    Config Portd.5 = Input
    Reset Pind.5                                                ' guzik S1
    S1 Alias Pind.5
    '-------------------------------------------------------------------------------
    Config Portd.4 = Input
    Reset Pind.4                                                ' guzik S2
    S2 Alias Pind.4
    '-------------------------------------------------------------------------------
    Buzzer Alias Pinb.7                                         ' buzzerek
    '-------------------------------------------------------------------------------
    
    Dim Togbit As Byte , Command As Byte , Address As Byte
    
    
    Do
    
    If S1 = 1 Then Rc5send Togbit , Address , 100
    Waitms 10
    If S2 = 1 Then Rc5send Togbit , Address , 200
    
    
    Loop
    
    End



    a niżej wstawiam zdjęcia mojego pilocika ;)

    [bascom] pilot rc5 nie działa program

    [bascom] pilot rc5 nie działa program


    Schemat postaram się odszukać i wstawić ;)
  • #9 8908149
    piotrva
    VIP Zasłużony dla elektroda
    ugh123
    kolega miał dobrze zadeklarowane porty, a ty kazałeś mu poprawić na błędny zapis!!
    dla jasności (ostatnio pisałem to na forum w różnych tematach ze 100 razy):
    
    Config PORTn = Input / Output / &Bxxxxxxxx
    Config PINn.x = Input / Output
    'czyli:
    Config Pinb.3 = Output
    

    i dla jasności:
    rejestr PINn to rejest odczytu
    rejest PORTn to rejestr zapisu / ustawienia podciągania
    polecam lekturę dokumentacji jakiegokolwiek procka, choćby at90s2313
  • #11 8909707
    piotrva
    VIP Zasłużony dla elektroda
    Ddlaczego działa nie wiem, ale ją podaje sposoby zgodne z dokumentacją bascoma
  • #12 8909942
    mirekk36
    Poziom 42  
    ugh123 napisał:
    Dziwne że to błędny zapis a jednak u mnie wszystko działa jak trzeba ;)


    Tak to jest jak się nie czyta helpa Bascoma bo tam jest właśnie opisane dokładnie z tym

    Coinfig Pin.x = Input/Output


    Ale tak to też jest z Bascomem, że wiele rzeczy działa niezgodnie z instrukcją, i dlatego nie wiedzieć czemu (bo nie ma o tym mowy dokumentacji) działa także:

    Coinfig Port.x = Input/Output


    Ot Bascom ;) jaki jest każdy widzi. Tyle, że nie trzymanie się helpa i robienie pewnych rzeczy wg własnego uznania nie zawsze działa i wychodzi na zdrowie ;)
  • #13 8912224
    Chester11-86
    Poziom 16  
    Proszę się nie sprzeczać :) Ponieważ to nie zmienia faktu że dalej nic nie działa :( gdzie jest problem??
  • #15 8919654
    Chester11-86
    Poziom 16  
    Co jest bezsensu w schemacie?? możesz to wszystko sprecyzować?? Bo Twój post nie wnosi nic pożytecznego więc chciałbym abyś się troszkę bardziej rozpisał. Jak widzisz procesor normalnie jest zasilany po naciśnięciu przycisku,więc nie wiem w dlaczego nie zależy mi na oszczędzaniu bateria:(
    Pozdro!
  • Pomocny post
    #16 8919750
    adambehnke
    Poziom 24  
    Zobacz jak ja to zrobiłem na Mega8

    [bascom] pilot rc5 nie działa program

    Program jaki zastosowałem korzysta z przerwania INT0 które po naciśnięciu klawisza wyprowadza procesor ze "śpiączki" , wysyła dane na IR i usypia go ponownie.Dla mnie takie rozwiązanie jest lepsze niż chwilowe zasilanie procesora poprzez diody.


    Poniżej wklejam kod jaki użyłem. Nie mogę znaleźć kodu finalnego i wklejam mój testowy ale działający.Popełniłem go na początku swojej przygody z AVR (wzorując się na kodach znalezionych na elektrodzie) więc nie szukajcie w nim ładu i składu :)

    $regfile = "m8def.dat"                                                                    'Konfiguracja modelu mikrokontrolera. (ATmega8)
    $crystal = 4000000                                                                        'Konfiguracja Częstotliwości taktowania procesora
    
    
    Dim Togbit As Byte , Command As Byte , Address As Byte                                    ' dekjaracje zmiennych komendy rc5send.
    Dim X As Integer
    
    Config Portb.2 = Output                                                                   'Ustawienie końcówki 1 Portu B jako wyjście sterowania diodą IR.
    
    Config Watchdog = 32
    
    
    
    'start procka z ustawieniem klawiszy jako wyjście a INT.0 jako wejście
    
    Config Portc = Output                                                                     'Konfiguracja Portu "C"
    Config Portd.2 = Input                                                                    'Ustawienie końcówki 2 Portu d jako wejście
    Set Portd.2
    
    
    Portc.0 = 0
    Portc.1 = 0
    Portc.2 = 0
    Portc.3 = 0
    Portc.4 = 0
    Portc.5 = 0
    
    'Przerwanie INT.0
    On Int0 Ir
    
    
    
    
    Enable Interrupts
    Enable Int0
    
    
    Start Watchdog
    
    Do
    
    
    Reset Watchdog
    
    
    
    
    Loop
    
    
    
    Tr:
    Portd.0 = 0
    
    Return
    
    
    
    Ir:                                                                                       'przerwanie INT.0
    'Disable Int0
    
    'zmiana konfiguracji portów na przeciwny czyli klawisze jako wejście a INT.0 jako wyjście
    
    Config Portc = Input                                                                      'Konfiguracja Portu "C"
    Config Portd.2 = Output                                                                   'Ustawienie końcówki 2 Portu d jako wejście
    
    Portd.2 = 0
    
    Set Portc.0
     Set Portc.1
      Set Portc.2
       Set Portc.3
        Set Portc.4
         Set Portc.5
    
    If Pinc.0 = 0 Then
    
       Command = 12                                                                           'kod włącz/wyłącz
       Togbit = 0                                                                             'wyzeruj toggle bit
       Address = 0
       Rc5send Togbit , Address , Command
       X = 0
       Waitms 1
       End If
    
    If Pinc.1 = 0 Then
    
       Command = 16                                                                           'kod włącz/wyłącz
       Togbit = 0                                                                             'wyzeruj toggle bit
       Address = 0
       Rc5send Togbit , Address , Command
       X = 0
       Waitms 1
       End If
    
    
    If Pinc.2 = 0 Then
    
       Command = 17                                                                           'kod włącz/wyłącz
       Togbit = 0                                                                             'wyzeruj toggle bit
       Address = 0
       Rc5send Togbit , Address , Command
       X = 0
        Waitms 1
       End If
    
    
    If Pinc.3 = 0 Then
    
       Command = 3                                                                            'kod włącz/wyłącz
       Togbit = 0                                                                             'wyzeruj toggle bit
       Address = 0
       Rc5send Togbit , Address , Command
       X = 0
    
       End If
    
    If Pinc.4 = 0 Then
    
       Command = 2                                                                            'kod włącz/wyłącz
       Togbit = 0                                                                             'wyzeruj toggle bit
       Address = 0
       Rc5send Togbit , Address , Command
       X = 0
    
       End If
    
    
    If Pinc.5 = 0 Then
    
       Command = 1                                                                            'kod włącz/wyłącz
       Togbit = 0                                                                             'wyzeruj toggle bit
       Address = 0
       Rc5send Togbit , Address , Command
       X = 0
    
       End If
    
    
    Config Portc = Output                                                                     'Konfiguracja Portu "C"
    Config Portd.2 = Input                                                                    'Ustawienie końcówki 2 Portu d jako wejście
    Set Portd.2
    
    
    Portc.0 = 0
    Portc.1 = 0
    Portc.2 = 0
    Portc.3 = 0
    Portc.4 = 0
    Portc.5 = 0
    Portc.6 = 0
    Portc.7 = 0
    
    Enable Interrupts
    Enable Int0
    Wait 1
    
    Powerdown
    
    Return


    PS. Nie pamiętam ale chyba dwa klawisze nie działały w tym pilocie gdyż podpięłem je nie pod te piny co trzeba. Ale nie pamiętam dokładnie.Patrząc na schemat to będą to S3 i S4.
  • #17 8920663
    Chester11-86
    Poziom 16  
    Dziękuję za przedstawienie swojej wersji :)
    Z tego co zrozumiałem radzisz abym normalnie zasilał procesor i usypiał go tak??
    Jest dużo komend o których nie mam pojęcia ale to muszę doczytać i mam nadzieję, że w późniejszym czasie dalej będę mógł liczyć na pomoc??
    Czy przerobienie programu pod procesor AT2313 jest trudne?? Czy wystarczy odpowiednio zmienić piny jak również zadeklarowanie procesora??
    Pozdrawiam!
  • #19 8935807
    Chester11-86
    Poziom 16  
    Witam!
    Mam pytanie co do schematu:)
    Czy te diody 1N4148 są poprawnie zamontowane??
    Jakie pełnią funkcję??
    Pozdrawiam!
REKLAMA