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

Jak uruchomić analizator RC5 w Bascom? Problemy z kompilacją i pilotami

Requan 14 Lut 2003 11:01 7241 47
Najlepsze odpowiedzi

Jak poprawnie uruchomić analizator RC5 w Bascomie na AT90S8515, skoro kompilator zgłasza błąd przy `Reset Tcon.0` i program nie reaguje na pilota?

Na AT90S8515 trzeba użyć właściwego bitu przerwań, czyli `Reset GIMSK.6`, a do tego włączyć samo przerwanie `INT1` przed `Enable Interrupts`, bo `Reset Tcon.0` dotyczy innego układu [#102515][#103788][#110449] Jeśli program się kompiluje, ale nie reaguje na pilota, to bardzo możliwe, że pilot nie nadaje w RC5 — w wątku zadziałał dopiero stary pilot Philipsa na układzie SAA3010, a większość innych pilotów używała innego kodowania [#5346727][#5348214][#5353114] Warto też sprawdzić odbiornik IR: dla RC5 powinien pasować odpowiedni demodulator, np. TSOP1736, bo zła częstotliwość nośnej albo błędne podłączenie wyprowadzeń powodują brak odbioru [#5346268][#5346282]
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA
  • #1 100785
    Requan
    Poziom 11  
    Posty: 66
    Witam!
    W wykladzie 3 (cwiczenie 3:"Analizator kodu RC5") byl napisany program:
    Dim Kod As Bit
    Dim Command As Byte , Subaddress As Byte
    Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.3 , Rs = Portc.2 'konfiguracja wyprowadzeń wyświetlacza LCD
    Config Lcd = 16 * 2
    $crystal = 8000000
    reset Tcon.0
    On Int1 Rc5
    Enable Interrupts
    Cls
    Lcd "Waiting for RC5"
    Cursor Off
    Do
    If Kod = 1 Then
    Disable Int1
    Cls
    Lcd "Com: " ; Command ; ",Adr:" ; Subaddress
    Kod = 0
    Enable Int1
    End If
    Loop

    Rc5:
    Getrc5(subaddress , Command)
    Kod = 1
    Return

    Nie da sie go skompilowac bo kompilator(i slusznie) przyczepia sie do linijki: reset Tcon.0
    Zamienilem ta linijke na :Config Rc5 = Pind.3,program sie skompilowal ale nie reaguje na piota.Teraz nie wiem czy moje dwa piloty(tv i video) nie pracuja w kodzie RC5 czy to wina programu.Jesli komus dzialal ten program to prosze o uwagi.
    pozdrawiam
  • REKLAMA
  • #2 102515
    Sind
    Poziom 16  
    Posty: 182
    Pomógł: 9
    Ocena: 3
    jak chcesz to moge ci podeslac w pelni dzialajacy program do analizatora RC5, ale zwroc uwage ze w twoim jest maly blad poniewaz nie zalaczyles przerwania int1, przed Enable Interrupts wpisz Enable int1 i sprobuj wtedy
  • #3 102826
    Requan
    Poziom 11  
    Posty: 66
    Witaj!!!
    Fakt nie zauwazylem.
    Powiem Ci jednak smieszna rzecz-po wlaczeniu przerwania program laduje sie z bledami (napis wyglada tak:"Wai_") nie wiem skad sie to bierze ale nieraz jak cos jest nie tak w programie to mi cuda wychodza.
    Jesli mozesz to bardzo bym prosil o ten program: tektrom(_at_)poczta.fm
    pozdrawam
  • #4 103164
    Sind
    Poziom 16  
    Posty: 182
    Pomógł: 9
    Ocena: 3
    jeszcze jedno pytanie jakiego wyswitlacza uzywasz? chodzi mi o ilosc kolumn i wierszy
  • #6 103411
    Sind
    Poziom 16  
    Posty: 182
    Pomógł: 9
    Ocena: 3
    wiesz co opublikuj tu jeszcze raz swoj poprawiony listing, to zobaczymy co sie da zrobic
  • REKLAMA
  • #7 103788
    Requan
    Poziom 11  
    Posty: 66
    Dim Kod As Bit
    Dim Command As Byte , Subaddress As Byte
    Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.3 , Rs = Portc.2 'konfiguracja wyprowadzeń wyświetlacza LCD
    Config Lcd = 16 * 2
    $crystal = 8000000
    $regfile = "8515def.dat"
    Config Rc5 = Pind.3

    On Int1 Rc5
    Enable Int1
    Enable Interrupts


    Cls
    Lcd "Waiting for RC5"
    Cursor Off
    Do
    If Kod = 1 Then
    Disable Int1
    Cls
    Lcd "Com: " ; Command ; ",Adr:" ; Subaddress
    Kod = 0
    Enable Int1
    End If
    Loop

    Rc5:
    Getrc5(subaddress , Command)
    Kod = 1
    Return


    Nie wiem czy nie trzeba zdefiniowac poziomu przerwania
  • #8 106824
    Veteran
    Poziom 16  
    Posty: 224
    Ocena: 5
    Mialem ten sam problem. Wszystko jest w porzadku, jezeli korzysta sie z Bascoma wersja: Spetial Edition for Elektronika Praktyczna. W nowszych w miejscu o ktorym mowisz kompilator wskazuje blad, ale nie wiem dlaczego tak sie dzieje.

    Bascom w tej wersji jest do sciagniecia ze strony Elektroniki Praktycznej. Powinno dzialac.

    Pozdrawiam
  • #9 110346
    jasiekz
    Poziom 15  
    Posty: 128
    Pomógł: 5
    Ocena: 2
    A może byście się zastanowili nad kupnem pełnej wersji bascoma i znikna wasze kłopoty z oprogramowaniem.Jak kupujecie procki to przecież wydatek na pełna wersję nie jest duży w porównaniu do reszty. i mozecie cały czas aktualizowac za darmo.
  • #10 110449
    Requan
    Poziom 11  
    Posty: 66
    Dzieki za wszystkie posty.
    W programie brakowalo : Reset Gimsk.6 ,bo zapomnialem dodac ze chodzi tu o 8515.
    Jeszcze raz dziekuje
  • #11 111724
    Yoshi_80
    Poziom 21  
    Posty: 536
    Pomógł: 4
    Ocena: 9
    Witam !!!

    Podłacze sie do tematu bo też mam mały problem z RC5 . Mianowicie po wywołaniu przerwania wykonywana jest procedura w której wywołuje funkcję Getrc5 (ardes,kod) . I tu się zaczyna lipa ,procesor się zatrzymuje na tym poleceniu. Co prawda traktuję go pilotem który nie nadaje w kodzie RC5 ale to nie powinno mieć znaczenia (w sumie chcialem sprawdzić czy mi odbiornik dobrze działa). Dlaczego on się zawiesza na tej komendzie ,przecież to bez sensu ,żeby on mógł odbierać tylko i wyłacznie w kodzie RC5 ,bo przecież zawsze się może zdarzyć ,że dotrze do odbiornika sygnał z innego pilota .

    HELP!
  • #12 111924
    jasiekz
    Poziom 15  
    Posty: 128
    Pomógł: 5
    Ocena: 2
    Niektóre komendy w bascomie są komendami oczekującymi na zdarzenie i jeżeli nic nie będzie to tak jakby procesor się zawieszał i się pętli w danej procedurze. Należy w takich przypadkach stosować jakiś timer aby jeżeli coś nie wystąpiło w żądanym przez ciebie czasie to wyszedł z tej procedury. w przerwaniu jak najkrócej napisz program możesz np. w zależności od wartości jakiejś zmiennej wykonać odpowiedni skok do podprogramu i sprawa załatwiona. tylko pilnuj stosu bo te procedury odkładają na niego tymczasowe dane. Czyli przed ta procedurą odczytaj stos i po skoku przepisz go ponownie ale musisz uważać jeżeli masz jeszcze inne przerwania żeby go nie wywalić.
  • #13 113434
    Yoshi_80
    Poziom 21  
    Posty: 536
    Pomógł: 4
    Ocena: 9
    :arrow: jasiekz jakoś nie moge soebie tego wyobrazić z tym timerem. Jeżeli nawet zostanie wywołane przerwanie timera to wykona sie jakaś tam funkja a potem program powróci do tego miejsca gdzie był przed przerwaniem czyli do pętlenia się. Nie wiem jakim sposobem funkcja wywoływana przerwaniem timera miałaby przenosić działanie programu w inne miejsce ... jeżeli nawet no to jeszcze ten stos ...
    Jeżeli możesz to powiedz coś więcej na ten temat bo nie wiem na razie jak to napisać.
  • #14 113613
    jasiekz
    Poziom 15  
    Posty: 128
    Pomógł: 5
    Ocena: 2
    ...
    dim funkcja_zegar as byte
    On Ovf1 zegar1 ' adres procedury timera
    Enable Ovf1
    ...
    ...

    zegar1:
    if funkcja_zegar=1 then ' jeżeli skok zadany1 to wykonaj skok do labela
    rjmp skok1 ' skok1
    end if '
    if funkcja_zegar=2 then
    rjmp skok2
    end if
    return

    Tcnt1h = 110 ' ustawienia zegara
    Tcnt1l = 0 '
    Tccr1a = 0 '
    Tccr1b = 3 '
    funkcja_zegar=1
    'twoja procedura

    skok1:
    ' dalsza część programu

    *******************************************
    tylko pamiętaj że maksymalny skok rjmp to 4k pamięci jeżeli twoja procedura jest dalej to musisz wykonać dodatkowy podskok

    rjmp dalej i możesz umieścić taką wstawkę w dowolnym miejcu programu
    i nie zabuży ci go. tylko zamień w timerze rjmp skok1 na rjmp skok1_1
    *******************************************
    rjmp dalej
    skok1_1:
    rjmp skok1
    dalej:


    i jeżeli jesteś pewny że nie uruchamia ci się w tym czasie inna procedura lub nie przechowujesz czegoś na stosie to mozesz wykasować stos
    wstawką Sph = 4 Spl = $5f ( dla 16k flash, dla 8k sph=2 .. dla 4k sph=1 ...)

    ja stosuję to w swoich programach i wszystko działa dobrze. (piszę programy na procesory zawodowo)
    Jak jeszcze jakieś pytania to pisz :idea:
  • REKLAMA
  • #15 113680
    Yoshi_80
    Poziom 21  
    Posty: 536
    Pomógł: 4
    Ocena: 9
    Dzięki jasiekz :D .Ja jestem jeszcze początkowym userem bascoma i z tego niewiele rozumiem ale na spokojnie to wezme po wypiciu kawy :) . Na pewno dam znać jak mi coś nie wyjdzie.
  • #16 113996
    jasiekz
    Poziom 15  
    Posty: 128
    Pomógł: 5
    Ocena: 2
    zapomniałem ci napisać że ieżeli używasz procedury sub to lepiej przed uruchomieniem twojej funkcji odczytać stos i po skoku zapisać tę wartość przed dalszą częścią programu abyś mógł wrócić z niej do normalnej pracy programu

    ...
    call procedura 'skok programowy do podprogramu i po wykonaniu powrót
    ... ' bo jeżeli wykasujesz to nie wróci do tego miejsca
  • #17 5323491
    mario832
    Poziom 17  
    Posty: 321
    Ocena: 9
    Co by trzeba było zmienić w programie by działał pod wyświetlacz z jedną linijką, a konkretnie pod LCD1601 ???
  • REKLAMA
  • #19 5330802
    mario832
    Poziom 17  
    Posty: 321
    Ocena: 9
    nie pomogło wyświetla tylko jedną linijkę, a konkretnie non stop 255 ,nie podaje adresu ;( Sprawdzałem podłączenie kilka razy i jest wpożądku. Może cza by jakoś mu kazać żeby najpierw wyświetlił 255, zmazał wartość i potem wyświetlił adres i tak w kółko??? ,nie wiem.
  • #21 5333323
    mario832
    Poziom 17  
    Posty: 321
    Ocena: 9
    Jeszcze jedno pytanko ,dużo by trzeba zmienić w programie by działał pod ATTINY2313.
  • #23 5345017
    mario832
    Poziom 17  
    Posty: 321
    Ocena: 9
    Udało się ,zrobiłem swój pierwszy analizator RC5 ,coprawda na AT89C2051 ,bo było mi łatwiej ,ale zrobiłem ,oto kod:

    $crystal = 11059000
    $regfile = "89c2051.dat"
    
    Dim Kod As Bit
    Dim Command As Byte , Subaddress As Byte
    Config Lcd = 16 * 1a
    Reset Tcon.0
    On Int0 Receiverc5
    Enable Int0
    Enable Interrupts
    Cls
    Lcd "Waiting for RC5"
    Cursor Off
    Do
     If Kod = 1 Then
       Disable Int0
          Cls
    Lcd "Com:" ; Command ; ",Adr:" ; Subaddress
      Kod = 0
      Enable Int0
      End If
    
    Loop
    
    Receiverc5:
     Getrc5(subaddress , Command)
     Kod = 1
    Return


    Mam tylko pytanko do ekspertów ;) ,czy to normalne jak naciskam na pilocie przykładowo 5 to adress jest 0 ,potem jeszcze raz 5 to adress 32 i tak przy wszystkich guzikach raz adress ma 0 ,raz 32 ,na przemian to czhyba normalne, no chyba że sie walłem w programie.

    Może mi ktoś wyjaśnić dlaczego tak jest z tm 0 i 32??? ;)
  • #24 5346177
    ZbeeGin
    Poziom 39  
    Posty: 4329
    Pomógł: 605
    Ocena: 463
    Kod RC5 przewiduje tzw. Toggle Bit. Jeśli ponownie naciskasz ten sam klawisz to bit 6 zmienia stan na przeciwny by odróżnić, że kod nie jest wysyłany stale tylko jest to kolejne naciśnięcie klawisza.

    Dlatego w helpie w przykładach jest napisana instrukcja maskująca ten bit.
  • #25 5346189
    ciapciok
    Poziom 20  
    Posty: 503
    Pomógł: 3
    Ocena: 109
    :arrow: mario832
    Jakiego czujnika podczerwieni użyłeś ? Ja próbuję w Bascom AVR z czujnikiem TSOP1730 i nic mi nie wychodzi. W helpie wspominali o TSOP1736(SFH506/7), może to dlatego.

    Pozdrawiam
  • #26 5346268
    ZbeeGin
    Poziom 39  
    Posty: 4329
    Pomógł: 605
    Ocena: 463
    Nie ta częstotliwość filtra. Ty masz 30kHz a potrzebna jest 36kHz. Tam są dość strome zbocza.

    Jak uruchomić analizator RC5 w Bascom? Problemy z kompilacją i pilotami
  • #27 5346282
    mario832
    Poziom 17  
    Posty: 321
    Ocena: 9
    Mam TSOP1736, ale tu UWAGA:

    on ma na 1 nóżce mase , 2 noga +5V ,a 3 to OUTPUT

    (w przeciwieństwie do TFMS5360, gdzie wszędzie widziałem że podłączali go na odwrót ,czyli 2 masa ,a 1 +5V )

    Też się na tym przejechałem, pozdrawiam. ;)
  • #28 5346444
    ciapciok
    Poziom 20  
    Posty: 503
    Pomógł: 3
    Ocena: 109
    W sklepie kupiłem TSOP1736, a teraz, po dwóch dniach odczytałem na obudowie co innego. Szkoda, bo straciłem w takim razie 4zł, a czujnika nie wymienie, bo w tym już powyginałem wyprowadzenia.

    Ale w tym temacie wwwmajor użył TSOP1730 i mu działało:
    https://www.elektroda.pl/rtvforum/topic255537.html

    Pozdrawiam
  • #29 5346468
    Balu
    Poziom 38  
    Posty: 4397
    Pomógł: 323
    Ocena: 48
    Bo to zależy od nośnej w pilocie...To raz, dwa one mają te filtry nie takie znów strome, więc może i coś łapało, ale na pewno nie dzialało to tak jak by można chcieć...
  • #30 5346503
    ciapciok
    Poziom 20  
    Posty: 503
    Pomógł: 3
    Ocena: 109
    Podłączyłem diode LED pod wyjście TSOPa i mruga ona po naciśnięciu przycisku ;) Coś tam odbiera. Jutro zacisnę zęby i z bólem kupię poprawną wersję.

    Pozdrawiam

Podsumowanie tematu

✨ Dyskusja dotyczy problemów z uruchomieniem analizatora kodu RC5 w Bascom AVR, zwłaszcza kompilacji i obsługi pilotów na różnych mikrokontrolerach. Głównym problemem była niekompatybilność instrukcji "reset Tcon.0" w nowszych wersjach Bascom, którą zastąpiono "Config Rc5 = Pind.3". Wskazano konieczność włączenia przerwania INT1 przed "Enable Interrupts" oraz dodania "Reset Gimsk.6" dla mikrokontrolera ATmega8515. Użytkownicy zgłaszali, że program nie reaguje na piloty, co może wynikać z użycia pilotów niekodujących w standardzie RC5 lub nieodpowiedniego czujnika podczerwieni (np. TSOP1730 zamiast TSOP1736). Omówiono także problem zawieszania się procesora podczas wywołania funkcji Getrc5, sugerując stosowanie timerów i ostrożne zarządzanie stosem w procedurach przerwań. Wskazano, że wersja Bascom Special Edition dla Elektroniki Praktycznej lepiej obsługuje ten kod. Poruszono kwestie dostosowania programu do różnych wyświetlaczy LCD (np. 16x2 vs 16x1) oraz przeniesienia kodu na inne mikrokontrolery, jak ATtiny2313 czy AT89C2051. Wskazano, że wiele popularnych pilotów nie używa kodu RC5, co utrudnia testy. Omówiono także znaczenie bitu toggle w kodzie RC5 oraz różnice w podłączeniu i częstotliwości filtrów czujników podczerwieni TSOP1730 (30 kHz) i TSOP1736 (36 kHz). Użytkownicy polecali użycie odbiornika do komputera i programu Girder do analizy sygnałów pilotów. Ostatecznie potwierdzono, że poprawne działanie uzyskano na ATtiny2313 z odbiornikiem TSOP1730 i pilotem na układzie SAA3010.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA