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

Komparator jako czujnik światła.

07 Kwi 2011 19:49 2389 7
  • Poziom 10  
    Chcę wykorzystać komparator w AT89c2051 jako czujnik oświetlenia. Aby wyeliminować przypadkowe oświetlenie np przez przejeżdżający samochód i nagłą chwilową zmianę parametrów chciałem wykorzystać układ elektroniczny znaleziony w necie. Po podłączeniu do mikrokontrolera i uruchomieniu zmiany miały być sygnalizowane diodą led lecz okazuje się że dioda wcale nie chce się zaświecić. Czyżbym przekombinował z układem podłączonym do komparatora ?
    Komparator jako czujnik światła.
    Może jakieś sugestie.
  • Poziom 31  
    Chyba przekombinowałeś. Takie filtrowanie powinieneś zrobić programowo, np wprowadzając jakieś opóźnienie załączania/wyłączania. Łatwiej modyfikować program, niż układ elektroniczny.
  • Specjalista - oświetlenie sceniczne
    Nie żebym się znów wpierniczał, ale napisał byś może jakie w ogóle panują napięcia na wejściach komparatora...
  • Poziom 10  
    W większości schematów jakie znalazłem to jedno z wejść ma dzielnik napięcia na pół czyli 2,5V a druga część ma fotorezystor gdzie następuje różnica napięć. Na razie przerobiłem część tego schematu i zamiast potencjometru wstawiłem dzielnik z dwóch 10kOhm co daje 2,5V. Natomiast w drugiej części wywaliłem rezystor 150kOhm i zamiast niego wstawiłem potencjometr 100kOhm. Tutaj w tej chwili napięcie przy świetle wynosi około 0,8-0,9V przy żarówce oraz w ciemności około 3-3,2V. Jednak nadal led nie chce mi się zapalić. W razie czego podam kod jaki napisałem bo może tutaj strzeliłem byka. Układ co sekundę sprawdza stan komparatora.
    Code:
    ;*****************************************************************************************
    
    ;       Konfiguracja Wyjść
    ;*****************************************************************************************
    LED_N      EQU      P1.7         ;wyjście Noc
    ;*****************************************************************************************
    ;      Wektory Przerwań
    ;*****************************************************************************************
          ORG      0000h         ;RESET
          LJMP      START         ;Przerwanie startowe
          ORG      001Bh         ;Timer1
          MOV      TL1, #00h      ;ustawienie początku licznika
          MOV      TH1, #0DCh      ;ustawienie początku licznika
          LJMP      CZAS
    ;*****************************************************************************************
    ;      Główny Program
    ;*****************************************************************************************
    START:      MOV      IE, #88h      ;włączenie przerwań
          MOV      TCON, #00h      ;Sterowanie przerwań stanem niskim      
          MOV      TMOD, #15h      ;ustawienie Timerów
          MOV      TL1, #00h      ;ustawienie początku licznika
          MOV      TH1, #0DCh      ;ustawienie początku licznika
          SETB      TR1         ;start Timera1
          MOV      R7, #100      ;pętla 1s
          CJNE      R7, #00, $      ;pętla 1s
          SETB      LED_N         ;wygaszanie
          MOV      LED_N, #P3.6      ;wyjście komparatora
          LJMP      START
    ;*****************************************************************************************
    ;      Przerwanie T1 10ms   
    ;*****************************************************************************************
    CZAS:      DEC      R7         ;zmiana wartości o minus 1
          RETI               ;powrót do programu
    ;*****************************************************************************************
    ;      Koniec Programu
    ;*****************************************************************************************
          END
  • Specjalista - oświetlenie sceniczne
    Na pierwszy rzut oka problem będzie z

    Kod: asm
    Zaloguj się, aby zobaczyć kod


    # to się w ogóle daje gdy chcesz załadować bezpośrednio jakaś wartość, np dasz #4 to właduje ci 4, jeśli dasz bez # to wsadzi ci to co siedzi w RAMie pod tym adresem. Mniejsza z tym, ASM 51 nie przeniesie z bitu do bitu- zdaje się że jest to jakiś wewntrzny błąd. Najsampierw musisz władować to do C, czyli

    Kod: asm
    Zaloguj się, aby zobaczyć kod


    Ano, pętla główna w złym stylu, jeśli już chcesz skoczyć do jej początku to gdzieś za SETB TR1.
    Przy wektorze, tam gdzie ładujesz licznik. Można robić takie triki, ale zobacz ile bajtów jest wolnego pomiędzy wektorami które używasz.
    Reszcie kodu zbytnio się nie przyglądałem. Zainteresuj się rozkazem DJNZ
  • Poziom 10  
    Wiedziałem że jednak błąd jest w programie. Jeśli masz na myśli pętlę odliczającą 1s to w symulatorze i w praktyce to działa bez zastrzeżeń. Miałem ustawioną diodę aby na przemian świeciła i hulało. Chyba że proponujesz inne rozwiązanie. Przy okazji miałem jeszcze inną wersję i tylko z ciekawości czy tak też można było ?
    Code:

    KP   EQU   P3.6
    MOV   LED_N, KP
       

    Wielkie dzięki za pomoc !
    PS. Teraz zatrybiłem z pętlą. Miałem wcześniej tak jak wspominasz tylko to jest mała część programu i tam już siedzą inne rozkazy które są dla mnie istotne.
  • Pomocny post
    Specjalista - oświetlenie sceniczne
    Zapamiętaj, bit do bitu zawsze przenosisz przez C lub porównania.
  • Poziom 10  
    Przyznam się szczerze że o tym jeszcze nie wiedziałem. Dziękuję za cenną informację koledze "bolek". Uważam problem za rozwiązany i temat zamykam.