Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[atmega16][bascom] Dziwne zachowanie programu z przerwaniem.

pier 21 Feb 2010 23:03 4295 35
Tespol
  • #31
    janbernat
    Level 38  
    A mi z czegoś takiego:
    Code:

    $regfile "m32def.dat"
    $crystal = 8000000
    Config Portb.3 = Output
    Set Tccr0.wgm01
    Set Tccr0.com00
    Set Tccr0.cs00
    Ocr0 = 113

    wychodzi 36.06kHz.
    Rezonator wewnętrzny.
  • Tespol
  • Tespol
  • #33
    janbernat
    Level 38  
    A wyłączanie nośnej.
    Jak ma tylko nie wychodzić na zewnątrz to trzeba wpisać:
    reset Tccr.0 com00
    Wtedy PortB.3 jest normalnym wyjściem.
    A jak trzeba zatrzymać licznik:
    reset Tccr0.cs00
    Wtedy nośnej nie ma ale wyjście PortB.3 jest dalej zajęte.
    Ja zresetujemy oba bity to Timer nie chodzi i wyjście jest dostępne.
  • #34
    pier
    Level 23  
    W końcu sukces. Dzięki koledze Mirekk36 procek generuje piękną nośną na portb.3.
    Wielkie dzięki.
    A tak na marginesie to sposób kolegi Atom1477 nie chce się kompilować, wyskakuje błąd w tym miejscu:
    Code:

    ICR1 = 222
    OCR1A = 22          '0...222
    .

    Dodano po 3 [godziny] 52 [minuty]:

    Nie długo trwała moja radość że wszystko działa. Mam dwie diody IR na które podaję przebieg 36kHz a z drugiej strony steruje nimi procesor. Załączam sobie w programie co pewien czas raz jedną raz drugą diodę a TSOP odbiera odbitą od przeszkód podczerwień. I wszystko jest ok fala odbita jest wykrywana od przeszkody znajdującej się już w odległości ok 400mm. Ale gdy przeszkoda pojawi się przed obydwoma diodami to czujnik już nie reaguje, chyba że pojawi się ona nagle tzn jak przesłonię z góry kartką to czujnik przez chwilę widzi podczerwień z obu diod i zaraz znów brak reakcji. A jak najeżdża na przeszkodę to za nic nie może jej zobaczyć.
    Może zerkną koledzy na ten kod, może ktoś coś doradzi :
    Code:


    $crystal = 4000000

    Config Porta = Output
    Set Porta.0                                                 'dioda IR
    Set Porta.1                                                 'dioda IR

    Set Porta.2                                                 'dioda sygnalizacyjna
    Set Porta.3                                                 'dioda sygnalizacyjna

    Config Pind.1 = Output                                      'głosniczek piezo
    Speaker Alias Portd.1

    Config Portc = Output                                       'sterowanie mostkiem H
    Reset Portc.0
    Reset Portc.1
    Reset Portc.2
    Reset Portc.3

    Config Pinb.0 = Input                                       'wejście TSOP-a


    'Config Lcdpin = Pin , Db4 = Portd.7 , Db5 = Portb.4 , Db6 = Portb.5 , Db7 = Portb.6 , E = Portb.2 , Rs = Portb.1
    'Config Lcd = 24 * 2

    'Config Adc = Single , Prescaler = Auto , Reference = Avcc   'konfiguracja przetwornika ADC
    'Start Adc


    Ddrb.3 = 1                                                  'konfiguracja timera1
    Tccr0 = &B00011001
    Ocr0 = 113



    Do

    Reset Porta.0                                               'włączam diodę IR
     Waitms 6                                                   'czekam
      If Pinb.0 = 0 Then                                        'jeśli czujnik odebrał sygnał to
       Reset Porta.2                                            'zapalam diodę sygnalizacyjną
       Set Portc.3                                              'skręcam
       Else                                                     'inaczej
      Set Porta.2                                               'gaszę diodę sygnalizacyjną i
      Reset Portc.3                                             'nie skręcam
     End If
    Set Porta.0                                                 'gaszę diodę IR

    Waitms 1                                                    'czekam

    Reset Porta.1                                               'druga strona
     Waitms 6
      If Pinb.0 = 0 Then
       Reset Porta.3
       Set Portc.2
       Else
      Set Porta.3
      Reset Portc.2
     End If
    Set Porta.1

    Waitms 1

    Loop
    End


    Moim zdaniem w przedstawionej tu sytuacji gdy przeszkoda znajduje się na wprost TSOP odbiera tak jakby za dużo podczerwieni (jakby nośna była za mało modulowana) i przestaje reagować. Bo jak wiadomo te czujniki reagują tylko na modulowaną częstotliwość.
  • #35
    mirekk36
    Level 42  
    Chciałbym ci pomóc, ale żeby to zrobić to trzeba by było sobie zbudować taki układ jak ty i nad nim posiedzieć, potestować, popróbować, poanalizować, dopasować wiele czynników i czasów - generalnie podłubać, żeby coś z tego zaczęło wychodzić.

    Generalnie pamiętam gdy pisałem program, że ja wykonywałem cyklicznie po kilka pomiarów, zapamiętywałem ich wyniki potem to wszystko uśredniałem i dopier na tej podstawie poprzez porównania dało się stabilnie oceniać w której strefie znajduje się obiekt. Jak pisałem kiedyś wyszedł z tego troszkę zagmatwany algorytm ale przy tej okazji uzyskałem efekt odporności na przypadkowe zakłócenia ale te pochodzące od niechcianych odbić od ścian i pozostałego otoczenia a nie tylko od wykrywanego obiektu. Na prawdę żeby to analizować programowo i dobrze to trzeba wziąć wiele czynników pod uwagę.

    Ale jedno co mi się rzuca w oczy - to, to że piszesz iż u ciebie wykrywa już odbicia z 400mm - czyli aż 40cm. To widzę, że zaszalałeś z prądem diod i mocą nadawanej nośnej. A to niestety też ma ogromny wpływ na badanie całości. Mi dobre wyniki zaczęły wychodzić dopiero gdy skoncentrowałem się na wykrywaniu obiektów w odległości od ok powiedzmy 4cm do 20cm max

    Bo przy zbyt dużym prądzie diod odbiornik IR wyłapywał sporo odbić od ścian pokoju nawet a nie tylko obiektu co wprowadzało często przekłamania.

    Tak więc czeka cię teraz troszkę pracy nad kalibracją całości.
  • #36
    pier
    Level 23  
    Zmieniłem zegar z 8 na 4MHz i teraz jest super, wszystko działa jak należy. Dzisiaj złożyłem częstościomierz i na portb.3 jest teraz ok 18kHz przy zegarze 4MHz a przy zegarze 8MHz jest ok 36kHz. Jeśli odbiornik podczerwieni mam TSOP1736 to dlaczego reaguje on prawidłowo dopiero na nośną ok 18kHz ?!. Może mi to ktoś wytłumaczyć?