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

[attiny2313][bascom] 3-kanałowy regulator oświetlenia

09 Lis 2010 19:13 7490 28
  • Poziom 12  
    Witam!
    Zacząłem projektować 3-kanałowy regulator oświetlenia w oparciu o uP attiny2313 ze sterowanie IR (rc5).

    Część wykonawcza (jeden kanał) w oparciu o MOC3020 i BTA16/600.
    Sterowanie IR na przykładowo TFMS5360.

    W załączniku schemat jaki na razie udało mi się opracować. Na schemacie nie jest przedstawiony zasilacz (zbuduję stabilizowany 5V na 7805).

    Zastanawiam się na załączaniem poszczególnych kanałów. Czy może być przeprowadzone w następujący sposób: mikrokontroler załącza przekaźnik, który podaje 230V na BTA16/600 (na schemacie opisane jako "230" przy każdym kanale) ?

    A największy problem to program. Nie wiem zbyt dobrze jak się do tego zabrać. O programowaniu ogólnie pojęcie mam, samego bascoma trochę "liznąłem" z wł/wył bym sobie poradził bez problemu ale jak ma wyglądać regulacja jaśniej ciemniej poszczególnych żarówek?
  • Relpol przekaźniki
  • Poziom 28  
    Cytat:
    jak ma wyglądać regulacja jaśniej ciemniej poszczególnych żarówek
    Na PWM-ie. W 2313 jest.
  • Poziom 26  
    jak chcesz zrobić dimmer, to musisz zastosować detekcję zera w sieci, oraz traiki "nie załączające w zerze". Sam PWM nie da tutaj Tobie dużo. Taki ściemniacz jest o kilka rzędów bardziej złożony niż sterowanie jasnością LED'a.

    Musisz zrobić coś na kształt pętli PLL i odmierzać odcinki czasu do następnego przejścia przez zero w sieci. Jeżeli chcesz ustawić żarówkę na niską moc załaczasz triak zaraz przed przejściem przez zero. Jeżeli chcesz połowę mocy załączasz go dokładnie w połowie między przejściami przez zero. Jeżeli chcesz prawie pełną moc to załączasz go zaraz po przejściu przez zero. Tylko pamiętaj że tutaj nie ma liniowości, tutaj by pewnie trzeba było jakąś całkę policzyć i wrzucić do tablicy np z krokiem co 100%.

    Pamiętaj że takim ściemniaczem możesz praktycznie ściemniać tylko klasyczne żarówki.

    Poniżej masz schemat takiego dimmera, był on kiedyś na tej stronie, ale już ona nie istnieje. Dimmer ma dodatkowo wyjście do zewnętrznego konwertera na RS'a.

    [attiny2313][bascom] 3-kanałowy regulator oświetlenia
  • Poziom 38  
    bezpieczny ten schamat
  • Poziom 26  
    I pamiętaj że traiaki to nie przekaźniki. Mają tą wadę że przestają przewodzić tylko przy przejściu przez zero i braku potencjału na wejściu sterującym Gate. Ogólnie to cały projekt nie jest może nie wiadomo jak trudny, ale jak tylko liznąłeś bascoma to możesz mieć problem. Też wątpię że program w bascomie wejdzie w te 2KB flasha, ale polemizował na ten temat nie będę.

    Dodano po 2 [minuty]:

    tadzik85 napisał:
    bezpieczny ten schamat


    A co tu istnieje za niebezpieczeństwo? Spalenie procesora za 6zł?
  • Relpol przekaźniki
  • Poziom 38  
    braku separacji , przede wszystkim. Ale jeśli ktoś ma doświadczenie proszę bardzo droga wolna.
  • Poziom 38  
    Ten zewnętrzny konwerter do RS podłączony do tego układu i komputera może (musi) być żródłem sporych niespodzianek.
    Za nieco więcej niż 6zł.
    Dobrze że strona z takim schematem już nie istnieje.
  • Poziom 26  
    Chcesz dać 8+1 transoptorów (8 na traiaki + 1 na cross zero det.)? Moim zdaniem to przerost formy. Jak byś chciał to podpiąć pod PC'ta przez ten zewnętrzny RS to dobrze by było jak miałby on tą separację dodaną (czyli na liniach RX i TX transoptory). Ale tutaj nikt takiej funkcji chyba realizować nie chce.

    Układ IMO powinien pracować długo i bez awaryjnie, oczywiście można by dodać separację jak pisze kolega tadzik85, ale ja bym sobie w przypadku autora tematu takową odpuścił.
  • Poziom 28  
    hotdog napisał:
    Chcesz dać 8+1 transoptorów

    Nie doczytałeś pierwszego postu. Wyjdzie połowa :D ale ja tez mimo wszystko bym zabezpieczył.
  • Poziom 26  
    No jasne każdy zrobi tak jak uważa. Swoje zdanie już wyraziłem.

    Pamiętaj tylko żeby dołożyć jeszcze jeden na Cross zero det, bo inaczej te na triakach nawet jak spełnią swoją funkcję, to i tak będzie niebezpieczeństwo przebicia. Musiał byś poeksperymentować tutaj. Tutaj masz cały dokument na ten temat (bez izolacji)
    http://www.avrfreaks.net/modules/FreaksFiles/files/346/doc2508.pdf
  • Poziom 12  
    Dobra, układ złożony.

    Zmieniłem procka na ATMEGA8-16PU.
    Układ zasilany z zasilacza stabilizowanego 5V.
    Na schemacie nie ma odbiornika IR (TFMS5360).

    Teraz muszę napisać program - on/off sobie poradzę. Jak zrealizować ściemnianie? Detekcja zera + PWM nie pomoże? Hotdog, jak miało by to wyglądać z tą pętlą PLL?
  • Poziom 12  
    Code:
    $regfile = "m8def.dat"                                     
    
    $crystal = 4000000                                         

    Config Timer1 = Timer , Prescale = 8
    Config Portd = Input      ;podlaczony TFMS5360
           Portd = &B00000000
    Config Portc = Output      ;podlaczone przekazniki i uklady wykonawcze na MOC3020 i BTA16/600
                ;pc5-zalaczanie zarowki1
                ;pc4-regulacja zarowki1
                ;pc3-zalaczanie zarowki2
                ;pc2-regulacja zarowki2
                ;pc1-zalaczanie zarowki3
                ;pc0-regulacja zarowki3
           Portc = &B11111111
    Config Rc5 = Pind.3      ;TFMS5360
    Config Int1 = Low Level      

    Enable Interrupts
    Enable Int1
    Dim Komenda As Byte , Adres As Byte
    Dim Odebrano As Bit
    On Int1 ODBR_RC5
    Set Odbr_kod

    Do
    If Odebrano = 1 Then   ;zalaczenie zarowki1
    Reset Pinc.5
    Reset Odbr_kod
    Enable Int1

    If Odebrano = 2 Then   ;zalaczenie zarowki2
    Reset Pinc.3
    Reset Odbr_kod
    Enable Int1

    If Odebrano = 3 Then   ;zalaczenie zarowki3
    Reset Pinc.1
    Reset Odbr_kod
    Enable Int1

    If Odebrano = 4 Then   ;wylaczenie zarowki1
    Set Pinc.4
    Reset Odbr_kod
    Enable Int1

    If Odebrano = 5 Then   ;wylaczenie zarowki2
    Set Pinc.2
    Reset Odbr_kod
    Enable Int1

    If Odebrano = 6 Then   ;wylaczenie zarowki3
    Set Pinc.0
    Reset Odbr_kod
    Enable Int1
    Loop

    End

    PWM_Table:
    Data 4681% , 4548% , 4446% , 4359% , 4282% , 4212% , 4148% , 4087% , 4030% , 3976%
    Data 3924% , 3874% , 3826% , 3779% , 3734% , 3690% , 3647% , 3605% , 3564% , 3524%
    Data 3485% , 3446% , 3408% , 3370% , 3333% , 3297% , 3261% , 3225% , 3190% , 3155%
    Data 3120% , 3086% , 3052% , 3018% , 2985% , 2952% , 2919% , 2886% , 2853% , 2820%
    Data 2788% , 2756% , 2724% , 2691% , 2659% , 2627% , 2596% , 2564% , 2532% , 2500%
    Data 2468% , 2436% , 2404% , 2373% , 2341% , 2309% , 2276% , 2244% , 2212% , 2180%
    Data 2147% , 2114% , 2081% , 2048% , 2015% , 1982% , 1948% , 1914% , 1880% , 1845%
    Data 1810% , 1775% , 1739% , 1703% , 1667% , 1630% , 1592% , 1554% , 1515% , 1476%
    Data 1436% , 1395% , 1353% , 1310% , 1266% , 1221% , 1174% , 1126% , 1076% , 1024%
    Data 970% , 913% , 852% , 788% , 718% , 641% , 554% , 452% , 319% , 0


    Napisałem coś takiego. Nie wiem czy to załączanie dobrze, a nie mam dzisiaj akurat możliwości sprawdzenia tego w praktyce. Ściemnianie ma być wg. tej tabeli PWM_Table (wygenerowana z programu "Podział Mocy" autorstwa Jaca, gdzieś na elektrodzie znaleziony), tylko nie wiem jak ma być zrealizowane przez kod RC5 (czy jakkolwiek)
  • Poziom 28  
    Zrób najpierw 1 kanał. Wraz z programem do obliczania tablicy opóźnień jest też kod w BASCOM'ie obsługujący regulację fazową. Tam jest pokazane jak korzystać z tej tabeli w przerwaniu od INT i TIMER'a. Później zastanowimy się jak za pomocą 1 TIMER'a obsłużyć 3 kanały regulacji.
  • Poziom 26  
    O bascomie wiem tyle że to język programowania, dużo nie pomogę. Nigdy nie robiłem takiego układu, ale powiem jak ja bym to zrobił.

    Po pierwsze konfigurujesz timer tak że będziesz miał przerwanie co 10kHz (50Hz z sieci *2 *100 krok). Timer synchronizujesz siecią energetyczną, czyli zerujesz go za każdym razem jak wykryjesz zero. W tym zerze też chyba najbezpieczniej jest zawsze wyłączyć wszystkie wyjścia, bo inaczej mogło by się to rozjechać. Ewentualnie w ostatnim cyklu timera jeżeli nie działało by to poprawnie.

    Przerwanie od licznika wyglądać będzie mniej więcej tak w pseudokodzie:

    Code:
    if (ustawiona_wartosc1 >= tabela[licznik])
    
       Wlacz_triaka1;
    if (ustawiona_wartosc2 >= tabela[licznik])
       Wlacz_triaka2;
    if (ustawiona_wartosc3 >= tabela[licznik])
       Wlacz_triaka3;
    licznik = licznik+1


    Przerwanie od detekcji zera:
    Code:
    Wylacz_triaka1;
    
    Wylacz_triaka2;
    Wylacz_triaka3;
    licznik = 0;
    zresetuj_timer
    ;

    Przynajmniej ja bym do tego tak podszedł. W tabeli znajdują się wartości ile w danym kroku jest %. Czyli dla tabela[0] masz 100%, dla tabela[1] trochę mniej. Dla tabela[49] masz dokładnie 50%, dla tabela[99] masz 0. Aby dokładnie wyznaczyć te wartości musisz albo policzyć całkę, albo je sobie przepisać z jakiegoś źródła.
  • Poziom 12  
    Coś nie mogę sobie poradzić z tą RC5.

    Do attiny2313 podłączyłem, w celu sprawdzenia programu:
    PD2 = TFMS5360
    PB0 = dioda LED przez rezystor do gleby
    XTAL1, XTAL2 = kwarc 4MHz + 2x 33p

    Code:
    $regfile = "2313def.dat"
    
    $crystal = 4000000                                          ' used crystal frequency
    $baud = 19200                                               ' use baud rate
    $hwstack = 32                                               ' default use 32 for the hardware stack
    $swstack = 10                                               ' default use 10 for the SW stack
    $framesize = 40                                             ' default use 40 for the frame space
    $lib "mcsbyte.lbx"

    Config Rc5 = Pind.2
    Config Pind.2 = Input
    Config Pinb.0 = Output
    Dim Address As Byte , Command As Byte
    Enable Interrupts
    Set Pinb.0

    Do

    Getrc5(address , Command)
    If Address = 0 Then
    Command = Command And &B01111111
    Reset Pinb.0
    End If

    Loop
    End


    Co może być nie tak?
    Jak to ogarnę, zacznę męczyć ten PWM
  • Poziom 29  
    gustaff88 napisał:
    Co może być nie tak?


    Code:
    Set Pinb.0 

    Code:
    Reset Pinb.0 
  • Poziom 12  
    Domyślnie set - dioda świeci
    If Address = 0 Then Reset Pinb.0

    nie tak?
  • Poziom 29  
    gustaff88 napisał:
    nie tak?


    Nie tak. Ma być PORT a nie PIN.
  • Poziom 14  
    A ja mam z kolei inne pytanie?
    Czy układy modemów z Praktyczny Elektronik 1/99 nie zakłócą obwodów przejścia przez zero w układzie regulacji fazowej?
    Po za tym nie mogę zrozumieć, czemu opisują tam, że transmisja odbywa się z prędkością 1200bit/s, a później piszą, że jest to 1200 bod/sekundę- takie coś znalazłem też w specyfikacji tego układu.

    Chciałbym po prostu zrobić sterowanie oświetleniem w domu za pomocą komputera. Do komunikacji używałbym sieci energetycznej z tym scalakiem, Jako element odbiorczy stosowałbym właśnie układ PWM.

    Nie wiem też, czy przerwanie od detekcji zera nie będzie konsolidowało z przerwaniem od UART-a(gdy przyjdzie znak, ma go odebrać, ale i nie chcę, aby na ten czas mi przygasła żarówka)- czy jest możliwe zastosowanie tych układów razem?
    Chciałbym zrobić program do PWM-a na podstawie skryptu z EdW 3/2005, aby móc sterować dwoma żarówkami- dwa triaki. Układ miałby być montowany przy puszcze rozdzielczej w pokoju lub włączniku światła, mam tam na dwa włączniki rozdzielone światła(na pół pokoju jeden i na drugie pół drugi).
  • Poziom 12  
    Co jest nie tak? Nie reaguje na pilota (RC5, chinczyk)

    [attiny2313][bascom] 3-kanałowy regulator oświetlenia
    Code:

    $regfile = "2313def.dat"
    $crystal = 4000000                                         


    Config Rc5 = Pind.2
    Config Pind.2 = Input
    Config PortB = Output
    Dim Address As Byte , Command As Byte
    Enable Interrupts
    Set PortB

    Do

    Getrc5(address , Command)
    If Address = 0 Then
    Command = Command And &B01111111
    Reset PortB
    End If

    Loop
    End


    Jak to jest z Adress = 0, tzn 0 w RC5 to który przycisk na pilocie itd. ?

    Jak to jest z wyprowadzeniem reset? Na niektórych schematach widziałem, że "w powietrzu", więc tak zostawiłem.

    Przy okazji, gdzie znaleźć w Eaglu TFMS5360 (czy pochodne) oraz masa, zasilanie?
  • Poziom 36  
    Witam !
    Schemat nie zgodny ze programem !
    Schemat: Rc5 - Pind.4
    Kod - Config Rc5 = Pind.2
    Pin reset podłącz przez rezystor np. 4,7k do +5V
    Dodaj kondensator 100nF ( ceramiczny ) pomiędzy pinami 10 i 20
    Ten fragment kodu:
    Code:

    Do
    Getrc5(address , Command)
    If Address = 0 Then
    Command = Command And &B01111111
    Reset PortB
    End If
    Loop

    zmień na:
    Code:

    Do
    Getrc5(address , Command)
    If Address = 0 Then
    Command = Command And &B01111111
    toggle PortB
    End If
    Loop

    08 Gru 2010 16:18 napisałeś:
    Do attiny2313 podłączyłem, .....

    Czyli masz Attiny2313 a nie AT89S2313,
    a to wynika z kodu:
    Code:

    $regfile = "2313def.dat" 

    tą linie zmień na:
    Code:

    $regfile = "attiny2313.dat"

    Pozdrawiam. Stefan
  • Poziom 12  
    W wolnych chwilach próbuję to wymęczyć, ale nic z tego...

    do PD2 podłączony tfms jak w helpie bascoma (z kondensatorem i rezystorem)
    do PB podłączona dioda przez rezystor
    100n na zasilaniu
    4,7k reset do masy
    kwarc 4MHz z dwoma 33p
    poniższy program:

    Code:
    $regfile = "attiny2313.dat"
    
    $crystal = 4000000
    Config Pind.2 = Input
    Config Portb = Output
    Config Rc5 = Pind.2
    Dim Address As Byte , Command As Byte
    Enable Interrupts
    Set Portb

    Do

    Getrc5(address , Command)
    If Address = 0 Then
    Command = Command And &B01111111
    Toggle Portb
    End If

    Loop
    End


    i teraz tak. Z podłączonym kwarcem nie działało, ale nie ustawione były fusebity. W PonyProgu domyślnie zczytało
    DWEN 0
    EESAVE 0
    SPIEN 1
    WDTON 0
    BODLEVEL2 0
    BODLEVEL1 0
    BODLEVEL0 0
    RSTDISBL 0
    CKDIV8 1
    CKOUT 0
    SUT1 0
    SUT0 1
    CKSEL3 1
    CKSEL2 0
    CKSEL1 1
    CKSEL0 0

    Wyczytałem, że muszę zmienić CKSEL2 na 1 dla zewnętrznego rezonatora 4MHz ale wywaliło błąd i procek się zablokował.

    Wziąłem kolejnego tiny'ego, wywaliłem kwarc i dalej nie działa. Domyślnie jest wew taktowanie 8MHz dzielone na 8, tak?

    Co może być źle?
    Podmieniałem odbiorniki IR. Sprawdzałem na chińskiej rc5 i rc5 z bqs'a
  • Poziom 36  
    Witam !
    Po niżej działający program odbiornika RC5, dowolnym klawiszem pilota RC5 z adresem 0 można włączyć i wyłączyć diodę LED podłączoną do pinu3 ATTiny2313
    Czujnik RC5 należy podłączyć do pinu 6 tego procesora. Fuse bity ustawione fabrycznie.
    Code:
     
    
    $regfile = "attiny2313.dat"
    $crystal = 1000000
    Config Rc5 = Pind.2
    Config Pind.1 = Output
    Led Alias Portd.1
    Enable Interrupts
    Dim Adres As Byte , Rozkaz As Byte
    Do
    Getrc5(adres , Rozkaz)
    If Adres = 0 Then
    Rozkaz = Rozkaz And &B01111111
    Toggle Led
    Waitms 500
    End If
    Loop
    End

    Pozdrawiam. Stefan
  • Poziom 12  
    Nadal nic.
    Nie reaguje na żaden przycisk pilota.
    Nie mam podłączonego kwarcu, wewnętrzny oscylator jest domyślnie na 1MHz, tak?

    Jak napisałem program typu
    do
    toggle portb
    waitms 500
    loop

    to dioda miga, więc oscylator działa poprawnie. Dobrze myślę?
  • Poziom 19  
    Sprawdź dwie sprawy, czy pilot którym się posługujesz pracuje w standardzie RC5 i czy odbiornik podczerwieni, który zastosowałeś na pewno pracuje na częstotliwości 35khz-36khz, bo wiem że z innymi może być problem. Jak masz możliwość podłącz sobie lcd do procesora i obserwuj co wysyła pilot jaki adres i komendę.
  • Poziom 12  
    Odbiornik RC5 działa. 1 na pilocie wyłącza diodę, 2 włącza
    Code:
    $regfile = "attiny2313.dat"
    
    $crystal = 1000000

    Config Rc5 = Pind.2
    Config Pind.2 = Input
    Config Portb = Output

    Dim Address As Byte , Command As Byte
    Enable Interrupts

    Do
       Getrc5(address , Command)
       If Address = 0 Then
          Command = Command And &B01111111
          Select Case Command
          Case 1:
             Set Portb
          Case 2:
             Reset Portb
          End Select
       End If
    Loop

    End


    Teraz muszę zrobić PWM. W załączniku jest program z obsługą regulacji fazowej od Jacy, ale za bardzo nie wiem jak to ugryźć.
    Próbuję rozpracować ten kod, podopisywałem sobie komentarze. Pomoże ktoś wyjaśnić jak o działa?

    Code:

    Stop Timer1 //timer1 jest zatrzymany
    On Timer1 Irq_t1 //  skacze do Irq_t1 gdy wystąpi przerwanie ?
    On Int1 Irq_int1 //  skacze do Irq_int1 gdy wystąpi przerwanie ?
    Enable Timer1 //włącza timer1
    Enable Int1 // włącza przerwanie int1
    Enable Interrupts //włącza przerwania
    Do //nie bardzo rozumiem co się dzieje w tej pętli
       If Ischarwaiting() = 1 Then
          Command = Inkey()
          Select Case Command
             Case "#":
                Print "2";
             Case "@":
                Timeout = 50 //zapewne związane z 50Hz prądu, tak?
                Inputbin Temp_w
                If Err = 0 Then
                   Printbin Temp_w
                   Moc = Temp_w
                End If
          End Select
       End If
    Loop
    '-----------------------------------------------------------------------------------------------
    Irq_t1:
       Bramka = 1
       Stop Timer1
    Return

    '-----------------------------------------------------------------------------------------------
    Irq_int1:
       If Moc >= 500 Then // jeśli moc jest >= 500...
          Bramka = 1         // po co zmienna bramka?
          Goto Int1_end    //...skok
       End If
       Bramka = 0
       If Moc > 0 Then //jeśli moc jest większe od 0
          Table = Lookup(moc , Pwm_table) table przyjmuje wartość o indeksie moc z tablicy Pwm_table
          Load Timer1 , Table // jak to load dokładnie działa ?
          Start Timer1 //włącza timer1
       End If
       Int1_end:
       If Timeout > 0 Then
          Decr Timeout //dekrementacja zmiennej Timeout
       End If
    Return
  • Poziom 12  
    zamiast tych "MOC3020" można spokojnie podmienić na 4N33 albo 6N137?
  • Poziom 22  
    Można podmienić BTA16 na BT136 ??