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

[atmega8][bascom]Nie mogę odebrać kodu RC5

tomson5 28 Gru 2009 18:34 3634 25
  • #1 7448206
    tomson5
    Poziom 16  
    Witam
    Mam problem z banalnie prostą rzeczą, jaką jest odbiór kodów RC5
    Robię wszystko jak należy (przynajmniej tak myślę)

    Odbiornik który użyłem to TSOP 1736
    Sprawdzałem go na oscyloskopie i na wyjściu out wychodzi sygnał w postaci impulsów

    wgrałem do procka książkowy kod zamieszczony poniżej.
    Po uruchomieniu na LCD pokazuje mi:
    adres = 0
    komenda = 0

    po wysłaniu kodu z pilota mam:
    adres = 255
    komenda = 17
    jaki bym klawisz nie nacisnął jest to samo

    
    'Odbieranie kodu RC5
    $regfile = "m8def.dat"
    $crystal = 8000000
    
    
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portd.0 , E = Portc.4 , Rs = Portc.5
    Config Int0 = Low Level
    Config Rc5 = portd.2
    On Int0 Pobranie
    Dim Address As Byte , Command As Byte
    Dim Odebrany As Bit
    Enable Interrupts
    Enable Int0
    Set Odebrany
    
    Do
    If Odebrany = 1 Then
    Cls
    Lcd "Adres:" ; Address
    Lowerline
    Lcd "komenda:" ; Command
    Waitms 100
    Reset Odebrany
    Enable Int0
    End If
    Loop
    
    Pobranie:
    Disable Int0
    Enable Interrupts
    Getrc5(address , Command)
    Command = Command And $b01111111
    Set Odebrany
    Return
    


    Co takiego robię źle że poległem na takiej głupocie.
    Przepisuje już nawet żywcem z książki i nic.
    Próbuje kilku pilotów z czego jeden jest na 100% w standardzie RC5

    EDIT wersja Bascoma 1.11.9.0
  • Pomocny post
    #2 7448431
    mario166
    Poziom 14  
    Witam.
    A może tak prościej?

    'Odbieranie kodu RC5 
    $regfile = "m8def.dat" 
    $crystal = 8000000 
    
    
    Config Lcd = 16 * 2 
    Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portd.0 , E = Portc.4 , Rs = Portc.5 
    
    Config Rc5 = portd.2 
    
    Dim Address As Byte , Command As Byte 
    
    Enable Interrupts 
     
    Do 
    Getrc5(Address , Command)
    Command = Command And &B01111111
    
    Cls 
    Lcd "Adres:" ; Address 
    
    Lowerline 
    Lcd "komenda:" ; Command 
    
    Waitms 100 
     
    Loop 
  • #3 7448627
    tomson5
    Poziom 16  
    Oczywiście twój przykład jest dokładnie taki jak w książce
    Ja się przymierzałem do wiekszego projektu stąd u mnie taki kod.

    To co mi podałeś oczywiście sprawdzałem już i nic nie działa
    na LCD mam tylko
    Adres = 255
    Komenda = 127

    Podpiąłem sobie dodatkowo LEDa do wejścia procesora aby mieć sygnalizację stanu
    Widzę że przy odebraniu sygnału z pilota dioda pulsuje
  • Pomocny post
    #4 7448744
    mario166
    Poziom 14  
    To musi być cos z elektronika albo odbiornik coś szwankuje albo jakieś dziwne zwarcie czy coś, program z ksiażki powinien byc dobry ja ten co ci napisałem sam próbowałem i działał bez zarzutu.
  • #5 7448833
    Freddy
    Poziom 43  
    Czy ustawiłeś fusebity ?
    Może zadam głupie pytanie, podaj numer pinu do którego podpiąłeś RC5.
    Jaka jest obudowa procesora DIP, czy TQFP ?
  • #6 7448938
    tomson5
    Poziom 16  
    Fusbity mam ustawione Ok. inne moje programy działają na tych samych ustawieniach

    Miałem pod PD2 PIN4 obudowa DIP
  • #7 7449325
    Freddy
    Poziom 43  
    OK, pamiętasz oczywiście że piny PD2 i INT0 to ta sama nóżka.
    Pytałem o obudowy bo TQFP i DIP mają inne numeracje i ilości pinów.
  • Pomocny post
    #8 7450248
    M. S.
    Poziom 34  
    $regfile = "m8def.dat"
    $crystal = 1000000
    
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portd.6 , Db5 = Portd.5 , Db6 = Portb.7 , Db7 = Portb.6 , E = Portd.7 , Rs = Portb.0
    
    $lib "mcsbyte.lbx"
    
    Cursor Off
    Config Pinb.2 = Input
    Portb.2 = 1
    Config Rc5 = Pinb.2
    Dim A As String * 2                                         'Deklaracja umożliwiająca działanie komendy GETRC5 !?
    
    Dim Address As Byte
    Dim Command As Byte
    
    Enable Interrupts
    
    Cls
    Do
    
    Getrc5(address , Command)
    
    Command = Command And &B01111111
    Locate 1 , 1 : Lcd "A= " ; Address ; "  "
    Locate 2 , 1 : Lcd "K= " ; Command ; "  "
    
    Loop
    End


    Zmień końcówki i spróbuj powyższego. Nie wiem dla czego, ale bez stringa (nigdzie nie używanego) mi nie chciał działać.

    A w przerwaniu:
    $regfile = "m8def.dat"
    $crystal = 1000000
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portd.6 , Db5 = Portd.5 , Db6 = Portb.7 , Db7 = Portb.6 , E = Portd.7 , Rs = Portb.0
    Cursor Off
    Config Int0 = Low Level
    Config Rc5 = Pind.2
    On Int0 Pobr_rc5
    
    Dim Address As Byte
    Dim Address1 As Byte
    Dim Command As Byte
    Dim Command1 As Byte
    
    
    Enable Interrupts
    Enable Int0
    Address1 = 255
    Command1 = 255
    Cls
    Do
    
    Locate 1 , 1
    Lcd "Adres:   " ; Address1 ; "        "
    Locate 2 , 1
    Lcd "Komenda: " ; Command1 ; "        "
    
     Enable Int0
    
    Loop
    End
    
    Pobr_rc5:
     Disable Int0
     Enable Interrupts
     Getrc5(address , Command)
     Command = Command And &B01111111
       If Address < 255 Then
          Address1 = Address
          Command1 = Command
       End If
    Return
  • #9 7450405
    tomson5
    Poziom 16  
    Poległem dzisiaj niestety.
    Może to jednak coś jest z tym oczkiem
    Jutro w pracy zmontuje cały układ od początku dam kondensator i rezystor 330 na zasilaniu oczka, oraz tak jak w nocie podają ok. 10k miedzy Vdd a OUT
    Wymienie oczko na nowe i zobaczę.

    Walczyłem dzisiaj na moich dwóch płytach testowych jedna dla AT8 druga dla AT2313
    efekt ten sam
    5 godzin siedzenia na marne


    dzięki za poświęcenie czasu
  • #10 7451094
    Freddy
    Poziom 43  
    Jesteś pewny, że pilota masz RC5 ?
  • #11 7451255
    tomson5
    Poziom 16  
    pewności nie mam sugeruje się tym że to philips
    Zrobiłem dla testu generator kodu
    Podpiołem diode ir przez tranzystor pod wyj. OC1
    Generuje komende 12
    Odbiornik reaguje ale odbiera
    Adres - 0
    Komenda - 0


    sprawdziłem również pilota thomson, lg, i kilka od tunerów sat.
  • Pomocny post
    #13 7451330
    kamyczek
    Poziom 38  
    Jaką masz częstotliwość oscylatora bo problem może polegać na tym że Twój program nie działa a przykład kolegi nie działa bo kompilujesz go dla częstotliwości 1MHz...
  • #14 7451429
    tomson5
    Poziom 16  
    Tak jak pisałem wcześniej inne moje programy działają po wgraniu
    do tego procesora, fusbity mam ustawione na crystal 16k +64ms
    pisze z pamięci bo nie mam komputera przy sobie
    kwarc jest ok sprawdzałem na dwóch zestawach uruchomieniowych jeden dla at8 drugi at2313
  • Pomocny post
    #15 7451457
    Freddy
    Poziom 43  
    Kolego, chcemy Ci pomóż, a Ty nas olewasz.

    To, że inne programy działają, nie znaczy, że masz dobrze ustawione fusy.
    Możesz mieć ustawiony oscylator wewnętrzny 1MHz, a w programie zmieniasz na $Crystal 8000000 i sporo programów będzie działać.

    Jak wrócisz do komputera, proszę podać dokładne ustawienie fusebit - odczytane z układu i narysować schemat, tylko "z natury, a nie teoretyczny", albo przestaniemy pomagać.!
  • #16 7451765
    tomson5
    Poziom 16  
    Broń Boże nikogo nie olewam
    programy o których pisałem to generator częstotliwości lub obrotomierz z licznikiem czasu pracy
    więc muszą mieć fusbity ustawione jak należy
    oczywiście jak wróce do domu to wkleje zrzuty
    teraz pisze z telefonu więc mam problem
    wykonałem dodatkowo płytke do testowania aby
    wykluczyć kłopoty z zestawem uruchomieniowym


    Edit:

    Sprawdziłem właśnie w domu
    Znalazł się winny zamieszania
    Moja wina zawierzyłem ślepo że wszystkie telewizory Philipsa mają piloty w standardzie RC5
    Widać ten co mam teraz taki nie jest
    Wydobyłem starego pilota od magnetowidu Philipsa i z nim wszystko działa
    na 9 pilotów które sprawdziłem ten jeden działa
    Koledzy wyżej sugerowali mi czy to aby napewno pilot RC5 ale nie miałem pewniaka i sprawdzałem wszystkie jak leci .
    Moja wina przepraszam za zamieszanie i oczywiście dziękuje za okazaną cierpliwość i pomoc

    Teraz chciałbym wyciągnąć jakieś wnioski z tego ponieważ mój projekt wali w łeb z tego powodu.
    Czy to że te piloty nie działają oznacza że nadają w RC6 lub SONY ?? a może to tylko kwestia częstotliwości.
    Wrazie czego mam oczka na 38, 40 i 56kHz
  • #17 7453635
    Freddy
    Poziom 43  
    Tak, to że nie działają, oznacza, że nadają w innym systemie.
  • #18 7471948
    arktik1
    Poziom 27  
    Ja na twoim miejscu zrobił bym własnego pilota RC5.
    Wbrew pozorom jest to bardzo proste.
  • #19 7484779
    tomson5
    Poziom 16  
    Wiem że pilot jest prosty do zrobienia, to jedna z wielu lekcji zawarta w książce.

    Ja natomiast potrzebuje odebrać sygnał z pilota (bez jego dekodowania) i wysłać go ponownie na wyj. OC1A.
  • #20 7487499
    zymen
    Poziom 10  
    Kolego a co to za książka, z której masz przykłady?

    Wyglądają interesująco, a akurat uderzam w mikroprocesory.

    pozdrawiam,
  • #21 7488771
    tomson5
    Poziom 16  
    Mikrokontrolery dla początkujacych - Piotr Górecki
    Programowanie mikrokontrolerów AVR w języku Bascom - Marcin Wiązania

    Dla początkujących w Bascom to lektura moim zdaniem niezbędna
    Chyba że jest coś jeszcze czego nie znalazłem
  • #22 7489434
    zymen
    Poziom 10  
    OKey, dzięki za namiary!

    Ja niestety jeszcze jestem na etapie wyboru programatora.

    Programować umiem (pracuję jako programista c#, miałem styczność z wieloma językami), ale elektronika to jeszcze trochę takie czarne pudełko. Muszę uderzyć ze strony, którą znam i później w kierunku analogówki ;-)

    A wracając do głównego tematu: da się jakoś rozpoznać piloty z RC5? Czy są jakoś charakterystycznie oznaczone? Jeśli za jakiś czas zacznę sobie tworzyć odbiornik, to skąd mam wiedzieć, którym pilotem testować ?:)

    pozdrawiam,
  • #23 7644550
    marmat
    Poziom 20  
    Mam problem z odbiornikiem RC5 na Tiny 3213 :'Odbieranie kodu RC5
    
    'Odbieranie kodu RC5
    $regfile = "attiny2313.dat"
    $crystal = 8000000
    
    
    Config Lcd = 16 * 1
    Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.3 , Rs = Portb.2
    
    Config Rc5 = Pind.2
    
    Dim Address As Byte , Command As Byte
    
    Enable Interrupts
    
    Do
    Getrc5(Address , Command)
    Command = Command And &B01111111
    
    Cls
    
    Lcd "komenda:" ; Command
    
    Waitms 100
    
    Loop
    
    


    Zaczynam dopiero zabawę z Bascomem i nie wiem czy ten program powinien działać , czy coś jest nie tak ?
    Nie rozumiem co robi (And &B01111111) w programie po odebraniu i wyświetleniu komendy ustawia 0 na PinB.0 ?

    Dodano po 1 [godziny] 41 [minuty]:

    Mam LCD 1*16 i jak wpiszę :
    Lcd "komenda:" ; Command - to na LCD mam komenda i tyle
    jak zmienię na :
    Lcd "Adres:" ; Address
    to mam Adres:25 i jak nadaję to zmienia się na 00 czyli działa
    Ale dlaczego nie pokazuje mi komendy ?
  • #24 7646570
    marmat
    Poziom 20  
    Wiem już , że jest to wyzerowanie najbardziej znaczącego bitu odebranej komendy - tylko nie wiem w jakim celu to się robi ?
    Dalej nie odbiera mi komendy na LCD Komenda : i dalej pusto ?
  • #25 7647891
    tomson5
    Poziom 16  
    Jeżeli masz LCD 1*16 to pewnie musisz go obsługiwać jako 2*8
    Konfigurujesz oczywiście jako
    config lcd = 16*1

    Pierwsze osiem Liter jako
    locate 1 , 1
    Drugie osiem jako
    locate 2 , 9
  • #26 7648081
    marmat
    Poziom 20  
    Dzięki tego nie wiedziałem podłączę 2*16 i zobaczę czy działa ok .
    Tak mi wyglądało ,że jest problem z wyświetleniem treści .
REKLAMA