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

[Attiny13][Bascom] Sterowanie zasilaniem końcówki mocy

maly.borkowo 10 Cze 2009 23:36 2626 9
REKLAMA
  • #1 6641112
    maly.borkowo
    Poziom 15  
    Witam,

    :arrow: Na wstępie chciałbym zaznaczyć iż jest to mój pierwszy samodzielny program w tym języku a jednocześnie pierwsze dwie godziny nauki ;)
    [pisałem z otwartym helpem :)]. Moim drugim hobby oprócz elektroniki jest nagłośnienie (co w sumie po części wiąże się z elektroniką ;P), dziś udało mi się zakończyć pracę nad regeneracją rack'a (odmalowany itp.) i postanowiłem zabrać się za pewne "zabezpieczenie", które kiedyś chodziło mi po głowie. Przy sprzęcie nagłośnieniowym mówi się o takiej złotej zasadzie: "Last on, first off" co tyczy się końcówki mocy, którą zawsze załączamy na końcu i wyłączamy jako pierwszą, dlaczego chyba nie muszę tłumaczyć. Chodzi mi o zabezpieczenie, aby przypadkiem nie załączyć jej przed załączeniem wcześniejszych urządzeń. Urządzenia są w racku i są rzadko wyjmowane i wiem, że mógłbym zrobić dodatkowe wyjścia sterujące i załączenie pierwszego mogło by załączyć z pewnym opóźnieniem urządzenie kolejne, które zrobiło by podobnie aż do końca, ale co z wyłączaniem? Już rodzą się komplikacje, chociaż wiem że nie jest to wcale trudne to postanowiłem jednak użyć do tego TINY13 (chcę się nauczyć nieco programowania więc tu mogę zacząć i mam pewność że mam elementy potrzebne do budowy w domu :)).
    :arrow: Całość ma się tak:
    Dwa piny będą wejściami - do jednego (p b.3) będzie podłączony przełącznik bistabilny, a do drugiego (p b.4) podłączony będzie przełącznik mono stabilny. Zwykły przełącznik będzie odpowiedzialny za włączenie i wyłączenie sprzętu, a µswitch będzie odpowiadał za zapalenie oświetlenia w racku (taki bajer, ale przydatny). Porty 0 i 1 będą to wyjścia od załączania 0-wzmacniacza i 1 urządzeń wcześniejszych, jest jeszcze port 2 który będzie sterował oświetleniem.
    :arrow: Chodzi o to, że napisałem programik, ale nie wiem czy tak to może być, dlatego PROSZĘ WAS O SPRAWDZENIE poprawności poniższego kodu:

    $regfile = "attiny13.dat"
    $crystal = 1000000
    Config Pinb.0 = Output                                      'Konfiguracja portów
    Config Pinb.1 = Output
    Config Pinb.2 = Output
    Config Pinb.3 = Input
    Config Pinb.4 = Input
    
    Wzmacniacz Alias Portb.0
    Mixery Alias Portb.1
    Swiatlo Alias Portb.2
    Do                                                          'Pętla główna
       Do                                                       'Pętla gdy wyłączone
          If Portb.3 = 1 Then                                   'Sprawdzenie przełącznika jeśli 1 to
          Set Mixery                                            'Ustawienie portu B.0 i wyjście z pętli gdy włączone
          Wait 2
          Set Wzmacniacz
          Exit Do
          Elseif Portb.4 = 1 Then                               'Sprawdzenie switcha jeśli 1 to
          Toggle Swiatlo                                        'Zmiana stanu portu B.1 na przeciwny
          End If
       Loop
    
       Do
          If Portb.3 = 0 Then
          Reset Wzmacniacz
          Wait 2
          Reset Mixery
          Exit Do
          Elseif Portb.4 = 1 Then
          Toggle Swiatlo
          End If
       Loop
    Loop
    
    End 



    P.S. Mam nadzieję że to dobry dział, jeżeli nie to przepraszam i proszę o przeniesienie.

    Z góry dziękuję za pomoc!
    Pozdrawiam,
    Mały :D
  • REKLAMA
  • Pomocny post
    #2 6641461
    dawid512
    Poziom 32  
    Jak już to pin. Po za tym mam nadzieję że masz zew. rezystory podciągające bo avr-y pull-down nie mają. IMHO to 3 pętle na taki program to o wiele za dużo. Proponuję skorzystać z opcji "compile" żeby zobaczyć czy program jest poprawny.
  • REKLAMA
  • #3 6641492
    maly.borkowo
    Poziom 15  
    Jeżeli dobrze Cię zrozumiałem, to powinienem dać rezystory podciągające do masy? rozumiem, że chodzi o wejścia tak? Sprawdzałem (opcja syntax check - nie trzeba kompilować ;)) I wyszło, że wszystko ok. Jeszcze takie pytanie - czego można by użyć zamiast pętli, żeby działało to w taki sam sposób?

    -----------------------------------------------------------------------------------
    Może być taki układ jak na obrazku czy jeszcze coś dodać? (te rezystory?)
    [wyprowadzenia w tiny są połączone jak pisałem pb0 wyjście na jeden przekaźnik pb1 na drugi pb2 na diody pb3 wejście na przełącznik i pb4 wejście na µswitch, u góry stabilizator 7805, resztę widać.]
    [Attiny13][Bascom] Sterowanie zasilaniem końcówki mocy
  • REKLAMA
  • Pomocny post
    #4 6642410
    dawid512
    Poziom 32  
    Możesz zrobić sobie podprogramy i w nich np. umieścić pętle, wg. mnie będzie poprawniej ale to kwestia gustu. Jeśli chodzi o przyciski to lepiej będzie jeśli końcówki uc będziesz zwierał do masy bo wtedy możesz użyć wew. rezystorów podciągających (pull-up).
  • REKLAMA
  • #5 6642570
    maly.borkowo
    Poziom 15  
    Ok, w takim razie rozumiem że w kodzie będę musiał jeszcze ustawić Pinb.3 i Pinb.4 (co powinno włączyć rezystory podciągające tak?). A co do tych podprogramów, chciałem właśnie, ale nie wiedziałem do końca jak to działa. Wpisuję jakąś etykietę i wtedy jeśli warunek zostanie spełniony to daję jakiś skok do etykiety?
    Aha jeszcze nie wiem czym się różni PinX od PortX, tzn rozumiem, że jeżeli napiszę SET PORTB to ustawi caly port od 0-7 ale widziałem, że pisze się róweniż SET PORTB.X nie mogę pojąć dlaczego ;/ Czy to jest zależne od tego czy jest to wejście czy wyjście?

    Poniżej kod z załączaniem przy zwarciu do masy. Jeżeli jest poprawny (??) to niedługo przedstawię gotowe urządzenie :)

    
    $regfile = "attiny13.dat"
    $crystal = 1000000
    Config Pinb.0 = Output                                      'Konfiguracja portów
    Config Pinb.1 = Output
    Config Pinb.2 = Output
    Config Pinb.3 = Input
    Config Pinb.4 = Input
    
    Set Portb.3
    Set Portb.4
    
    Wzmacniacz Alias Portb.0
    Mixery Alias Portb.1
    Swiatlo Alias Portb.2
    Do                                                          'Pętla główna
       Do                                                       'Pętla gdy wyłączone
          If Pinb.3 = 0 Then                                    'Sprawdzenie przełącznika jeśli 1 to
          Set Mixery                                            'Ustawienie portu B.0 i wyjście z pętli gdy włączone
          Wait 2
          Set Wzmacniacz
          Exit Do
          Elseif Pinb.4 = 0 Then                                'Sprawdzenie switcha jeśli 1 to
          Toggle Swiatlo                                        'Zmiana stanu portu B.1 na przeciwny
          End If
       Loop
    
       Do
          If Pinb.3 = 1 Then
          Reset Wzmacniacz
          Wait 2
          Reset Mixery
          Exit Do
          Elseif Pinb.4 = 0 Then
          Toggle Swiatlo
          End If
       Loop
    Loop
    
    End


    Proszę jeszcze o odpowiedź i jeżeli wszystko będzie ok to myślę, że można zamknąć temat :)
  • Pomocny post
    #6 6642590
    gothye
    Poziom 33  
    Nie co Ci pomogę , poprawiłem deklaracje portów oraz cześć programu ,wystarczy napisac wlasne procedury ;)

    Config Portb.0 = Output                                     'Konfiguracja portów
    Config Portb.1 = Output
    Config Portb.2 = Output
    Config Pinb.3 = Input
    Config Pinb.4 = Input
    
    Wzmacniacz Alias Portb.0
    Mixery Alias Portb.1
    Swiatlo Alias Portb.2
    
    Declare Sub Wlacz
    Declare Sub Wylacz
    
    Sw_on Alias Pinb.3    'pin podciagniety przez rezystor 4.7k do +5V
    Sw_off Alias Pinb.4                                         'pin podciagniety przez rezystor 4.7k do +5V
    
    Do
    
       If Sw_on = 0 Then
          Call Wlacz
          Waitms 100
       End
    
       If Sw_off = 0 Then
          Call Wylacz
          Waitms 100
       End If
    
    Loop
    
    Sub Wlacz
    
    End Sub
    
    Sub Wylacz
    
    End Sub
  • #7 6642667
    maly.borkowo
    Poziom 15  
    Hmm.. Może się mylę, ale:
    -chyba w tej opcji trzeba dołączać zewnętrzne rezystory, bo nie widzę, żeby wejścia były skonfigurowane z podciąganiem.
    -Czy na końcu pierwszego If'u nie powinno być End If podobnie jak w drugim? Bo samo end chyba kończy program tak?
    -I chyba nie wziął kolega pod uwagę, że nie mają to być dwa przyciski - włącz i wyłącz tylko jeden bistabilny jako włącznik całego sprzętu a drugi właśnie monostabilny jako włącznik samego światełka ;]

    Nie mniej jednak dzięki, właśnie się chyba nauczyłem robić podprogramy ;] (rozumiem że działa to na zasadzie "jeżeli coś to zrób podprogram xxx i wroc do petli") :)
  • #8 6642722
    dawid512
    Poziom 32  
    Kolego gothye troszkę namieszałeś :|

    Po co zewnętrzne rezystory jak tiny ma swoje wewnętrzne?
    Po za tym skoro już dajesz opóźnienie do warunku to wg mnie powinno to wyglądać mniej więcej tak:

    If Sw_on = 0 Then
    Waitms 100      'w celu eliminacji drgań
    If Sw_on = 0 Then
    Call Wlacz
    End if     
    End if
  • #9 6642764
    gothye
    Poziom 33  
    >> maly.borkowo Tak ale to w sumie tylko kosmetyka ,ponieważ pisałem to na szybko ;) .Sam jestem zwolenikiem podciągania pinów przez rezystor do +5V ,powoduje to że układ nie wariuje w przypadku trudnych warunków pracy .
  • #10 6643322
    maly.borkowo
    Poziom 15  
    Dziękuję kolegom, już testowałem całość ;) Tzn na płytce stykowej, doszedłem do wniosku, że elminacja drgań jest konieczna (nawet sam na to wpadłem ;P) i na początku dałem 20ms okazało się za mało, nawet przy 100 było ciężko, dlatego dałem aż 300 i naprawdę wygodnie to teraz działa :) Ostatecznie jednak zostawiłem 3 pętle i kod teraz wygląda tak:
    
    $regfile = "attiny13.dat"
    $crystal = 1000000
    Config Portb.0 = Output                                     'Konfiguracja portów
    Config Portb.1 = Output
    Config Portb.2 = Output
    Config Pinb.3 = Input
    Config Pinb.4 = Input
    
    Set Portb.3
    Set Portb.4
    
    Wzmacniacz Alias Portb.0
    Mixery Alias Portb.1
    Swiatlo Alias Portb.2
    Do                                                          'Pętla główna
       Do                                                       'Pętla gdy wyłączone
          If Pinb.3 = 0 Then                                    'Sprawdzenie przełącznika jeśli 1 to
          Set Mixery                                            'Ustawienie portu B.0 i wyjście z pętli gdy włączone
          Wait 2
          Set Wzmacniacz
          Exit Do
          Elseif Pinb.4 = 0 Then                                'Sprawdzenie switcha jeśli 1 to
          Toggle Swiatlo
          Waitms 300                                            'Zmiana stanu portu B.1 na przeciwny
          End If
       Loop
    
       Do
          If Pinb.3 = 1 Then
          Reset Wzmacniacz
          Wait 2
          Reset Mixery
          Exit Do
          Elseif Pinb.4 = 0 Then
          Toggle Swiatlo
          Waitms 300
          End If
       Loop
    Loop
    
    End


    Mam nadzieję, że niedługo przedstawię gotowe urządzenie :) A jeszcze później pomyślę nad czymś takim, że gdy będziemy chcięli wyłączyć, będzie trzeba oprócz przełączenia przełącznika potwierdzić to wciśnięciem przycisku włączania i wyłączania światełka :)

    W każdym bądź razie dziękuję jeszcze raz za pomoc :)
    Pozdrawiam,
    Mały.
REKLAMA