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

[atmega16][bascom]generowanie nośnej 36kHz

pier 11 Sty 2010 18:28 4028 26
  • #1 7520414
    pier
    Poziom 24  
    Witam

    Mam problem z prawidłowym wygenerowaniem nośnej 36kHz dla diody IR.
    Otóż mam taki prościutki programik który powinien taką nośną generować:
    
    $regfile = "M16def.dat"
    Pwm1a = 55
    Config Timer1 = Timer , Prescale = 1 , Compare A = Toggle , Clear Timer = 1

    ale tego nie robi. Na wyjściu OC1A (portd.5) nie występuje żaden przebieg, dlaczego?
  • #2 7520481
    daniel6662
    Poziom 21  
    nie jestem pewien bo dawno porzuciłem bascoma ale aby coś wygenerować timer musi być chyba skonfigurowany jako pwm a nie timer
    pozdrawiam
  • #3 7520499
    pier
    Poziom 24  
    Wpisanie pwm nic nie zmienia, dziwne że program ten nie działa bo jest on przepisany z książki tylko pozmieniane wartości.
  • #4 7520524
    ZbeeGin
    Poziom 39  
    Natrafiłeś na "byk" kompilatora. Instrukcja Pwm1a = 55 została przetłumaczona na dwa rozkazy maszynowe STS z błędnymi adresami OCR1H/OCR1L.
    Zgłoś to jako błąd do MCS Electronics.

    Jest rozwiązanie tej sytuacji: zamiast Pwm1a = 55, napisz Compare1a = 55 i zostanie to przetłumaczone jako dwa rozkazy OUT, a wartość trafi w dobre miejsce.
  • #5 7520596
    pier
    Poziom 24  
    Niestety to nie to. Nawet jak nie ma załadowanej żadnej wartości to i tak brak przebiegu.
  • #6 7520651
    ZbeeGin
    Poziom 39  
    Kolego. Od tego mam AVR Studio by sobie programik krok po kroku prześledzić. Kompilator BASCOM-AVR 1.11.9.8 kompiluje pierwszy wariant z błędem - symulacja wszystko ładnie pokazuje. Wariant drugi z Compare1a kompilator kompiluje odmiennie i działanie programu jest poprawne: odpowiednia liczba trafia do OCR1AH/OCR1AL, licznik rusza i dolicza do tych 55, po czym ładnie się kasuje i znowu liczy, a wraz z tym zdarzeniem zmienia się stan portu - to też symulator ładnie pokazuje.

    Brak wartości oznacza brak przebiegu, z prostej przyczyny: wartość OCR1A wynosi 0, a licznika też 0. Zatem o żadnym liczeniu i kasowaniu licznika nie może być mowy. Czytaj ze zrozumieniem noty katalogowe!
  • #8 7520982
    pier
    Poziom 24  
    Nic z tego nie rozumię, pewnie mi trzeba wszystko łopatologicznie tłumaczyć.
    Myślałem że w książce prawdę piszą.
    Wpisywałem zamiast pwm1a=55, compare1a=55 i dalej nic na wyjściu. Wcześniej miałem inny programik i jakiś przebieg był ale TSOP1136 na niego nie reagował ale przebieg był bo świecenie diodą IR w kamerkę było widoczne a teraz nic nie widać.
    Może nie pod ten port podłączam diodę?

    Ten programik coś generował:

    $regfile = "attiny2313.dat"
    $crystal = 4000000
    Config Portb = Output
    Config Timer0 = Timer , Prescale = 1
    On Timer0 Ir
    
    Enable Interrupts
    Enable Timer0
    Load Timer0 = 55
    
    Do
    Loop
    End
    
    Ir:
    Load Timer0 = 55
    Toggle Portb.3
    Return
  • #9 7521165
    arktik1
    Poziom 27  
    Jeśli chcesz generować impuls z PWM ,to musisz podłączyć się do pinu (OC1A).
    A jeśli chcesz to zrobić przy pomocy TOGGLE ,to nie ważne który pin użyjesz.

    Dodano po 2 [minuty]:

    Jeśli użyjesz tego:
    
    Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Disconnect , Prescale = 1
    Pwm1a = 55 
    

    to końcówką będzie OC1A.

    Czyli przy ATTINY2313--PORTB.3

    Z resztą po co generować nośną bez kodu??
  • #10 7521740
    pier
    Poziom 24  
    Kod będzie później jak uda się to opanować.
    Nadal układ nie generuje nośnej nawet z Twoim kodem.
    A ten programik co wcześniej podałem działa i tsop odbiera sygnał bez problemu (wcześniej miałem walniętego tsop-a), ale mnie ten program nie pasuje, chyba że dało by się w odpowiednim momencie włączać i wyłączać nośną i dodatkowo raz na jednym porcie a raz na drugim. Czy da się to jakoś w prosty sposób zrealizować?
  • #11 7522347
    arktik1
    Poziom 27  
    Najprościej to jest użyć RC5SEND, tylko chyba nie da się użyć z 2 kanałami.
    Gdy budowałem pilota to też początkowo nie mogłem odebrać sygnału.
    Okazało się że problem był w konfiguracji oscylatora.
    Jeśli chcesz żeby to wszystko działało wystarczy użyć gotowych komend z RC5
    Możesz zbudować nadajnik, odbiornik lub kilka i żaden nie będzie miał problemu z rozpoznaniem komendy mimo, że będzie nadawało jedno urządzenie.
    Możesz zbudować jeden nadajnik i dowolną liczbę odbiorników lub na odwrót .
  • #12 7522907
    wader_669
    Poziom 28  
    pier napisał:

    
    $regfile = "M16def.dat"
    Pwm1a = 55
    Config Timer1 = Timer , Prescale = 1 , Compare A = Toggle , Clear Timer = 1


    jak to jest twoj kod pokazany od poczatku to brakuje $crystal
  • #13 7523342
    arktik1
    Poziom 27  
    Najpierw to niech się zdecyduje jakich Uc chce używać i co chce właściwie zrobić.
    Bo z tego co widzę to są różne Uc i programy.
  • #14 7523518
    mirekk36
    Poziom 42  
    Po pierwsze to ze zgrozą patrzę na to co się dzieje w Bascomie z tymi błędami o których pisał ZbeeGin. Dawno temu korzystałem z Bascoma i chwaliłem go sobie ale jakoś zawsze gdy potrzebowałem coś robić ze sprzętowymi PWM'ami to przypadkiem robiłem to za pomocą bezpośredniego ustawiania odpowiednich rejestrów bądź jako wstawki asm. Teraz programując w C już nie mam takich problemów - bo wszystko jest jasne jak drut i nie trzeba stosować "tajemniczych" zaklęć typu

    Compare1a = 55 
    Pwm1a = 55 
    Config Timer1 = Timer , Prescale = 1 , Compare A = Toggle , Clear Timer = 1


    dlatego jeszcze raz szczerze polecam ci "przesiąść" się na C - wbrew pozorom to wcale nie takie trudne.

    A odnośnie twojego pytania

    pier napisał:
    ...., chyba że dało by się w odpowiednim momencie włączać i wyłączać nośną i dodatkowo raz na jednym porcie a raz na drugim. Czy da się to jakoś w prosty sposób zrealizować?


    pewnie, że dałoby radę i to w bardzo prosty sposób, wystarczy wykorzystać dwa kanały PWM na jednym Timerze oraz dwa wyjścia OCxA oraz OCxB. A później tylko odpowiednio w kodzie zatrzymywać i startować odpowiedni kanał. Z tym, że jak to zrobić w Bascomie - to nawet nie może mi się przyśnić. Trzeba chyba jakoś "wachlować" tymi linijkami w kodzie:

    Config Timer1 = Timer , Prescale = 1 , Compare A = Toggle , Clear Timer = 1


    tylko czy to polecenie Config nie jest wykonywane JEDEN raz tylko na etapie kompilacji w Bascomie??? a potem to już chyba by i tak trzeba było "miąchać" po odpowiednich rejestrach.

    koniec końców i tak wygląda na to, że warto się nauczyć tego w detalach ale poprzez pryzmat programowania albo w asemblerze albo w C ...... wtedy wszystko pójdzie ci z górki. Tym bardziej, że jak pisałem wyżej, Bascom potrafi dostać jakiejś "niestrawności" czy "czkawki" i źle przetłumaczyć do asemblera swoje własne magiczne polecenie

  • #15 7524997
    pier
    Poziom 24  
    Dzięki za odpowiedzi.
    A czy dobrym pomysłem było by generowanie jednego przebiegu i podanie go na anody trzech diod IR a załączanie poszczególnych diod odbywało by się poprzez podawanie niskiego stanu przez procek na poszczególne katody tychże diod? Jak uważacie czy jest to zjadliwy pomysł?
  • #16 7525040
    mirekk36
    Poziom 42  
    Pomysł zjadliwy - i będzie działać - pewnie - czemu nie?

    Tylko że ty chcesz chyba w spoób hardwarowy troszkę sterować tymi diodami zamiast programowy. Mówię to dlatego, że w takim wypadku musisz poświęcić 4piny procka a dla programowego zrobienia tego samego - można użyć tylko 3 pinów dla 3 diod. Z drugiej strony to nie problem - procki zwykle mają wiele nie wykorzystanych pinów w układach ;)
  • #17 7525354
    arktik1
    Poziom 27  
    Dalej się zastanawiam po co 3 Diody ??
    Wyjaśnij po co ci 3 LEDy.
  • #18 7525458
    pier
    Poziom 24  
    Trzy diody Ir potrzebne są po to by zbudować radar do wykrywania przeszkód do robota.
    Na razie uruchomiłem dwie i wszystko jest ok jak poradzę sobie z wykrywaniem obiektu pośrodku to zrezygnuje z trzeciej diody.
  • #19 7525793
    arktik1
    Poziom 27  
    To nie lepiej wysyłać z 3 LED, 3 kody RC5 i odbierać je 3 czujnikami??
    LEDy podłączasz wtedy do 1 tranzystora a kody odbierasz poszczególnymi czujnikami.
    Układ jest wtedy nie wrażliwy na inne nadajniki IR ,takie jak np PILOTY.
  • Pomocny post
    #20 7525870
    mirekk36
    Poziom 42  
    arktik1 napisał:
    To nie lepiej wysyłać z 3 LED, 3 kody RC5 i odbierać je 3 czujnikami??
    LEDy podłączasz wtedy do 1 tranzystora a kody odbierasz poszczególnymi czujnikami.
    Układ jest wtedy nie wrażliwy na inne nadajniki IR ,takie jak np PILOTY.


    hyhyhy teraz to kolega zaszalał ;) - 3 diody nadawcze i aż 3 czujniki ;) szok. Toż już by można było sobie w głowie pomysł uprościć i dać jeden odbiornik a odbierać różne kody z każdej diod ...... gdyby to było w ogóle możliwe i dla zrobienia czujnika odbiciowego, który z natury rzeczy - musi sprawdzać odbity sygnał. A skoro odbity to często zniekształcony i to mocno (w zależności jeszcze od rodzaju obiektu) - jeśli chodzi np o modulację RC5. Tak więc pomysł w ogóle z przesyłaniem RC5 jakichś kodów na potrzeby takiego czujnika - pali na panewce. Nie mówiąc już o innch powodach jak chociażby jeden z nich - czas nadawania ramki itp
  • #21 7525890
    pier
    Poziom 24  
    W końcu udało mi się zrobić ten czujnik. Działa wyśmienicie! Nie wiem tylko jak z zakłóceniami ale wszystko się poprawi.
    Wielki dzięki Mirekk36 za wszelkie wskazówki.
  • #22 7525977
    arktik1
    Poziom 27  
    Skoro RC5 jest tak podatny na zniekształcenia to jak jest możliwe że zrobiłem układ zapalający światła ,włączający komputer i telewizor do tego zasłaniający żaluzje jednym przyciskiem, nie celując bezpośrednio w te urządzenia w pokoju 165 m².
  • #23 7525981
    mirekk36
    Poziom 42  
    pier napisał:
    W końcu udało mi się zrobić ten czujnik. Działa wyśmienicie! Nie wiem tylko jak z zakłóceniami ale wszystko się poprawi.


    ano widzisz - czyli rozumiem że ładnie 2 diodami wykrywasz 3 strefy już ?

    Zakłócenia jak sobie to potestujesz w różnych warunkach i na różnych obiektach to też spokojnie wyeliminujesz. Tak na prawdę pozostałe rzeczy to już tylko taka jakby kalibracja całości dla swoich potrzeb.

    Dodano po 2 [minuty]:

    arktik1 napisał:
    Skoro RC5 jest tak podatny na zniekształcenia to jak jest możliwe że zrobiłem układ zapalający światła ,włączający komputer i telewizor do tego zasłaniający żaluzje jednym przyciskiem, nie celując bezpośrednio w te urządzenia w pokoju 165 m².


    165m no no no ;) ładny mały pokoik ;)

    Kolega zajmie się zabawą z takim czujnikiem odbiciowym to zrozumie o co chodzi. A to że działa w takich warunkach o jakich piszesz to normalne - nic w tym dziwnego.
  • #24 7526053
    arktik1
    Poziom 27  
    :D czy wielkość pokoju ma znaczenie??
    A tak przy okazji:
    Nie widział ktoś jakiegoś elektrycznego mechanizmu do uchylania okien?
  • #25 7535417
    ZbeeGin
    Poziom 39  
    mirekk36 napisał:
    Po pierwsze to ze zgrozą patrzę na to co się dzieje w Bascomie z tymi błędami o których pisał ZbeeGin.

    Błąd już zgłoszony i ma zostać poprawiony:
    Cytat:
    Thanks for reporting this. The entry for PWM1 is missing in the dat file. If You add it under [WIO] section it will be correct. But I will fix this in the compiler as well.
    Best regards,
    Mark Alberts


    mirekk36, obecnie szykują się poważne zmiany w BASCOMie. Powoli dodawane są układy XMEGA, tworzone jest nowe IDE (Wreszcie mają być projekty!). Chodzą też słuchy o BASCOM-ARM, choć osobiście sobie tego jakoś nie wyobrażam.
    A wszystko to robi jedna osoba, i ma na głowie swoją firmę, rodzinę i ten nieszczęsny kompilator (A może też psa i kota :D ). Zatem wpadki są i będą, choć ich skala wydaje się nie być aż tak duża. W ciągu tych 8 lat może zgłosiłem 10 błędów, a w pierwszym okresie dość sporo przemieliłem kodu "od wewnątrz".
  • #26 7589162
    pier
    Poziom 24  
    Tak za pomocą dwu diod IR wykrywam strefy lewa prawa i środek. Mam tylko problem z zakłóceniami od pilotów RTV i nie wiem jak to wyeliminować ale aż tak bardzo mi to nie przeszkadza i nie będę na razie tego zmieniał.
  • #27 7589299
    mirekk36
    Poziom 42  
    ZbeeGin napisał:
    mirekk36, obecnie szykują się poważne zmiany w BASCOMie. Powoli dodawane są układy XMEGA, tworzone jest nowe IDE (Wreszcie mają być projekty!). Chodzą też słuchy o BASCOM-ARM, choć osobiście sobie tego jakoś nie wyobrażam.


    Ja o tych "słuchach" szłyszę już od wielu miesięcy ;) .... i nadal nic. Przypomina mi to sytuację z próbą wyprodukowania przez http://www.mikroe.com/ nowej wersji IDE i lepszych kompilatorów dla procków AVR. Też trwało to i trwało miesiącami aż w końcu nic nie powstało. Nie żbym był malkontentem bo bardzo dobrze rozumiem co to znaczy produkcja takiego sporego projektu i to jeszcze w pojedynkę ale.....

    ..... ale ja bym tam nie rozsiewał plotek o produkcie, który może dopiero powstanie za X czasu, z prawdopodobieństwem Y, że będzie jeszcze opóźnienie Z. Bo wychodzi z tego tylko "marmolada" informacyjna. ;) .... Dla mnie to o tyle dobrze się skończyło, ze dzięki tym opóźnieniom i ograniczeniom itp - zacząłem się uczyć języka C - co wyszło mi tylko na dobre i w zasadzie już nie wyobrażam sobie żeby znowu przesiadać się na Bascoma. Co nie oznacza, żebym nie doceniał tego produktu. Bo na prawdę widać, że jego stwórca wkłada wiele pracy w niego i na pewno jest on dobry m.inn dla wielu początkujących adeptów, którzych na początku odstrasza od mikroklocków sama nazwa asembler czy język C ;) .... Dobrze żeby jakkolwiek ale zaczynali bo coraz mniej programistów się rodzi na świecie a także hobbystów jeśli chodzi o tę dziedzinę. Niestety coraz więcej ludzi wybiera drogę typu: szalik, bejzbol i piwko - a szkoda ;) (sorki, że tak trochę odbiegłem od tematu)

    Dodano po 1 [minuty]:

    pier napisał:
    Tak za pomocą dwu diod IR wykrywam strefy lewa prawa i środek. Mam tylko problem z zakłóceniami od pilotów RTV i nie wiem jak to wyeliminować ale aż tak bardzo mi to nie przeszkadza i nie będę na razie tego zmieniał.


    No i super, a co do zakłóceń od pilotów to w końcu nie jest to jakiś super krytyczny parametr w końcu - robot nie będzie jeździł wkółko przed jakimś telewizorem gdzie z kolei ktoś w kółko bawi się przełączaniem kanałów ;)
REKLAMA