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

[Atmega8][Bascom] Problem ze sterowaniem fazowm

Belialek 27 Lut 2010 21:26 2324 9
REKLAMA
  • #1 7760540
    Belialek
    Poziom 22  
    Witam,

    Mam problem ze sterowaniem fazowym - konkretnie to winnym jest najprawdopodobniej układ detekcji zera (programowy bądź sprzętowy).

    Poniżej fragment schematu:

    [Atmega8][Bascom] Problem ze sterowaniem fazowm

    Testuję na żarówce 25W - jedyne co udało mi się uzyskać to proste włączenie/wyłączenie żarówki, tak więc układ załączający (oparty na MOC 3021) jest sprawny.

    Oprócz własnych bojów z Bascomem, próbowałem również korzystać z programów innych forumowiczów (oczywiście numery portów itd pozmieniałem aby pasowały do mojego układu), i tak:

    Post 1

    Po wrzuceniu powyższego programu układ nie działał...

    Post 2

    A tutaj żarówka cały czas świeciła się z maksymalną jasnością.

    Ponieważ nie mam dostępu do oscyloskopu, nie mam możliwości sprawdzenia czy na wyjściu układu detekcji zera mam odpowiednie sygnały... Jednak bardzo "łopatologicznymi" metodami (próba zliczania + dioda LED) doszedłem do wniosku iż na tym wyjściu cały czas jest stan wysoki...

    Po próbie zliczania stanów niskich:
    
    $regfile = "m8def.DAT"                                      
    $crystal = 8000000 
    Config Pind.2 = Input     'Port INT0
    Config Pind.0 = Output   'Port diody LED
    
    Dim Licznik As Byte 
    
    Do 
    If Pind.2 = 0 Then 
         Incr Licznik 
         If Licznik = 200 Then 
              Licznik = 0 
              Toggle Portd.0 
         End If 
    End If   
    Loop
    

    Diody są ciągle zapalone, co świadczyć może albo o braku impulsów z układy detekcji, albo o mojej marnej znajomości elektroniki :) Zdaję sobie sprawę, że int0 można ustawić w tryb detekcji zbocza opadającego bądź rosnącego - ale pomysłu jak zliczyć te skoki nie mam (jak pisałem wyżej programy które wykorzystywały własności int0 które działały u autorów, u mnie nie działają).

    Nie mam pojęcia co jeszcze mogę zrobić i sprawdzić - schemat układu wydaje się być poprawny, przebić nigdzie nie ma. Będę wdzięczny za każdą pomoc.

    Z góry dziękuję i pozdrawiam!
  • REKLAMA
  • Pomocny post
    #2 7760624
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • Pomocny post
    #3 7760707
    alien_audio
    Poziom 21  
    Witam.
    Przede wszystkim należy ustalić czy następuje prawidłowo detekcja
    zbocza. Więc w pierwszym warunku po detekcji zera wstaw waitms 5.
    W przeciwnym wypadku przy tej częstotliwości kwarcu nie zauważysz działa programu czyli migania led.
  • Pomocny post
    #4 7760723
    janbernat
    Poziom 38  
    Pind.2=0 to chyba masz prawie cały czas- przy przejściu przez 0 diody w transoptorach przestają świecić, tranzystory się zatykaja i przez chwilę na kolektorach- czyli na wejściu procesora masz 1.
    Może licz jedynki.
  • Pomocny post
    #5 7760730
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • #6 7760787
    Belialek
    Poziom 22  
    atom1477 napisał:
    R4 może mieć za dużą wartość.
    A R3 to po co?


    Przeglądałem kilka tematów na temat detekcji zera i u innych się sprawdzały te wartości :)

    alien_audio napisał:
    Witam.
    Przede wszystkim należy ustalić czy następuje prawidłowo detekcja
    zbocza. Więc w pierwszym warunku po detekcji zera wstaw waitms 5.
    W przeciwnym wypadku przy tej częstotliwości kwarcu nie zauważysz działa programu czyli migania led.


    Tak zrobiłem - nie widać żadnej różnicy

    janbernat napisał:
    Pind.2=0 to chyba masz prawie cały czas- przy przejściu przez 0 diody w transoptorach przestają świecić, tranzystory się zatykaja i przez chwilę na kolektorach- czyli na wejściu procesora masz 1.
    Może licz jedynki.


    Przy liczeniu jedynek momentalnie się licznik przekręcał - przy liczeniu do 10000 dioda mrugała częściej niż raz na sekundę... Z moich obliczeń wynika, że w ciągu sekundy, licznik powinien dojść zaledwie do 100. Tak więc wynika z tego, iż na Pind.2 mam ciągle stan wysoki.

    gromleon napisał:
    Wywal R3 , używam tego samego sposobu detekcji i oprócz tego r3 cała reszta jest tak samo jak u mnie i działa to dobrze. A r2 daj 100 K


    Spróbuję.

    EDIT: Żeby nie było niedomówień - u mnie VCC = 5V.
  • REKLAMA
  • Pomocny post
    #7 7760922
    janbernat
    Poziom 38  
    W zasadzie co ten program robi?
    Bascom jest wolny- ale procesor wykonuje instrukcje co 0.125us przy tym zegarze.
    Załóżmy 1000 cykli w pętli- zajmie mu 125us policzenie stanów 0 na wejściu i co dalej?
    Od wykrycia 0 powinien zblokować na jakiś czas zmianę stanu, odliczyć czas w ms a nie w us i zmienić stan wyjścia.
    Timer i ewentualnie przerwanie.
  • Pomocny post
    #8 7760939
    danthe
    Poziom 30  
    Witam.

    Ja detekcję robiłem prościej - sieć przez rezystor 47k / 3W podaję na mostek prostowniczy a wyjście mostka na diodę CNY17. Tranzystor transoptora podłączałem kolektorem do wejścia INT1 atmegi, a emiter do masy. Rezystor podciągający kolektor do +5V miał wartość 4,7k lecz uważam że równie dobrze można było go nie stosować. W programie korzystałem z przerwania INT1 - przejście przez zero gasiło diodę optotriaka i ładowało wartość do timera T1, a przepełnienie timera T1 powodowało włączenie optotriaka.
  • #9 7761038
    Konto nie istnieje
    Poziom 1  
REKLAMA