Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[atmega8][Bascom]Sterowanie fazowe - sterownik kotła

17 Wrz 2010 10:02 2575 4
  • Poziom 13  
    Witam. Robię sterownik (do teściowej :) ) do kotła z możliwością regulacji prędkości dmuchawy i jest drobny problem, stosuję wyświetlacz led który wyświetla róże parametry (multipleksowany jest i wykorzystuje do tego celu timer0), jak uruchomię przerwanie zewnętrzne INT0 to zaczyna mi strasznie migotać,tzn. wyświetlacz jest taktowany częstotliwością sieci... doczytałem się na necie że przerwania mają priorytety i pierwszy jest obsługiwany o najwyższym a potem kolejny. I mam pytanko, czy da się to jakoś pogodzić lub inną metodę zastosować?
    Programuję w bascomie, wszystko związanie z INT0 mam zaremowane, jak usunę rem to się robią jaja.

    Pozdrawiam

    Bardzo by mi na tym zależało aby jak najszybciej go uruchomić...
    Code:


    Config Timer0 = Timer , Prescale = 64
    Enable Timer0
    On Timer0 Prztimer0
    'Config Int0 = Low Level
    'Enable Int0
    'On Int0 Zero

    Enable Interrupts



    Config Adc = Single , Prescaler = Auto , Reference = Internal
    Start Adc

    Config Watchdog = 2048        'uruchamiamy układ watchdog






    Do
    '***********************************                           
          'If Flaga_2ms = 1 Then
          Flaga_2ms = 0

          If Licznik_buzzer > 0 Then
          Decr Licznik_buzzer
          Buzzer = 1
          Else
          Buzzer = 0
          End If

          Gosub Wyswietlanie



          Gosub Przyciski
          'End If

    '***********************************                            ' co 1 s
          'If Flaga_1s = 1 Then
          Flaga_1s = 0

          If Licznik_wyjscia > 0 Then
          Decr Licznik_wyjscia
          End If

          If Poz_wysw <> 0 And Licznik_wyjscia = 0 Then         ' wychodzenie z emnu jeśli czas wyjścia = 0
          Poz_wysw = 0
          End If



          Mig = Not Mig
         ' If Czas_pomiaru < 20 Then                             'ma być 20 s
          'Incr Czas_pomiaru
          'If Czas_pomiaru = 20 Then
          'Czas_pomiaru = 0
          Gosub Pomiar
          'End If
          'End If


          'Gosub Sterowanie
          'End If


    Loop
    End


    '*********************************************************************************


    Prztimer0:
    Timer0 = 6

          Flaga_2ms = 1
          Incr Dzielnik
          If Dzielnik = 500 Then
          Dzielnik = 0
          Flaga_1s = 1
          End If


    Return

    '(
    Zero:

    Disable Int0

    End If

    Enable Int0


    Return
    ')

    Darmowe szkolenie: Ethernet w przemyśle dziś i jutro. Zarejestruj się za darmo.
  • Poziom 22  
    Nie działa bo przerwania int0 masz od poziomu a nie od zbocza.
  • Poziom 13  
    Czyli mam kolego zmienić na falling i wszystko będzie ok? Teraz niestety nie mogę tego sprawdzić bo jestem poza domem :)
  • Pomocny post
    Poziom 22  
    Czy wszystko będzie ok. trudno wyczuć. Zależy jaki zastosowałeś układ wykrywania przejścia przez zero. Jeżeli stan niski utrzymuje się przez większą część przebiegu i tylko w okolicach zera jest wysoki to dopóki jest stan niski
    to jest zgłaszane przerwanie. Jeżeli dodać do tego że przerwanie int0 ma najwyższy priorytet poza reset to przerwanie od timera ma szansę wykonać się tylko w tych momentach w których pin int0 ma stan wysoki. Czyli w praktyce
    100 razy na sekundę. Ale to tylko teoria być może całkowicie głupia i pozbawiona wszelkich podstaw ( co by nie było na mnie że teściowa nie chce działać ).
  • Poziom 13  
    Układ ruszył bez problemu, wszystko działa poprawnie. Dzięki za pomoc i uważam że temat można zamknąć.
    Pozdrawiam