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

Resetowanie się atmega8, przy załączaniu przekaźnika

Mariojas 30 Wrz 2009 23:03 14198 60
  • #31
    Mariojas
    Poziom 17  
    to silnik Made in Romania od wycieraczek :)

    Freddie Chopin, ja napisałem, że przy procesorze jest, ale nie napisałem, że inne też są.
  • Computer ControlsComputer Controls
  • Pomocny post
    #32
    marco47
    Poziom 41  
    Witam kolegów!
    Kolego Chrobek.Zmieniłbym pomiar prądu na silniku.Powinieneś zastosować wzmacniacz operacyjny w typowym układzie pomiaru prądu
    +12V przed silnikiem(rezystor szeregowy).Diody LED z rezystorem ok.1k umieściłbym równolegle z cewkami przekażników -pokazuje stan właczenia PK jak i również stan tranzystora(czy jest dobry). Żadne układy gasikowe nie wyeliminują okrutnych szpilek i innego paskudztwa siejącego się po układzie.W samym programie zmieniłbym kod dotyczący wykrywania przycisków (Debounce precz!),z Sub'ów precz Waitms .Ogólnie program za bardzo wydumany.Zmień koncepcję ruchu bramy, wykrywania stopu i blokady.
    Pozdrawiam
  • #33
    Mariojas
    Poziom 17  
    marco47, nie rozumiem, po co zmierzyć prąd wkładając szeregowo rezystor przed silnikiem? Przecież to sie niczym nie różni tylko w Twoim zamyśle jest wyższe napięcie. Nie chce stosować dodatkowych układów skoro atmega to obsługuje. Jedynie te szpilki... Ale najpierw spróbuje coś co jest mniej inwazyjne, czyli wlutuje tą wymaganą armię kondensatorów.
    Dlaczego Debounce precz? Dlaczego Waitms precz? Musisz wiedzieć, że gdy powiesz A, musisz powiedzieć B, bo to pierwszy program w moim życiu ;)
    Koncepcje zmienić? To zaproponuj coś, naprowadź, bo jakoś nie mam pomysłu.
  • #34
    atom1477
    Poziom 43  
    marco47: właśnie pomiar od strony masy jest standardowym pomiarem, ze wzmacniaczem czy bez.
    chrobek: Dla testu rozłącz masy i PD6. Jak zadziała to podłącz masy, ale PD6 nie.
    Jak nawet rozłączenie mas nie pomoże, to będziemy myśleli dalej. Jak pomoże to też, ale już w kierunku PD6 a nie mas.
  • #35
    kordirko
    Poziom 21  
    chrobek napisał:
    http://www.atmel.com/dyn/resources/prod_documents/doc2486.pdf
    Akapit I/O Ports:
    "The pin driver is strong enough to drive LED displays directly." Chyba, że źle zrozumiałem ;)

    Źle zrozumiałeś.
    Wydajność jednego pinu portu procka jest max. 20-40mA (zależy jaki model procka - przeczytaj w nocie katalogowej).
    Ale jak podepniesz diodę wprost do pinu i do masy, to dioda jest w praktyce zwarciem i pociągnie tyle prądu ile się da do momentu kiedy jedno się spali (dioda lub procesor).
    Być może się nic nie pali, bo stabilizator w zasilaczu ogranicza prąd, albo zadziałało w nim termiczne zabezpieczenie - w tym momencie siada napięcie zasilania i procek się resetuje.

    Typowa mała dioda świecąca potrzebuje od 5 do 20mA żeby ją było widać że świeci.
    Trzeba wstawić szeregowo rezystor żeby ograniczyć prąd pinu do 10-20 mA.
    Liczy się to tak: od 5V na pinie odejmujesz napięcie przewodzenia diody (sprawdź w nocie diody albo podłącz przez rezystor min. 200 ohm do baterii 4,5V i zmierz miernikiem - w zależności od koloru diody od 1,2 do ponad 3 V)
    Tę różnicę dzielisz przez 10mA - dostajesz wartość rezystora.
    Jak chcesz żeby jaśniej świeciła - wylicz dla 20mA (byle nie przekroczyć max. prądu diody podanego w nocie).
  • #36
    Mariojas
    Poziom 17  
    OK, zrobiłem takie rzeczy:
    Przylutowałem za i przed stabilizatorem 100n, za stabilizatorem dodatkowo 220u, bo taki miałem pod ręką, 100n z AREF do masy, AVCC do Vcc, RESET przez 10k do Vcc, LEDy zgodnie z propozycją marco47, i odłaczyłem mase od silnika i kabelek od PD6 po czym połaczyłem je razem (PD6 do masy od uC). Układ dziala w miare. Nie widziałem większych problemów.

    Właśnie miałem rozmontować układ i zaktualizować program, ale mam pewne wątpliwości co do "uaktywniania" komparatora analogowego. A w notce atmegi8 jest napisane, że komparator jest ciągle uruchomiony, można go jedynie wyłączyć ustawiając "1" na bit ACD:
    "Bit 7 – ACD: Analog Comparator Disable
    When this bit is written logic one, the power to the Analog Comparator is switched off. This bit can be set at any time to turn off the Analog Comparator. This will reduce power consumption in Active and Idle mode."
    To jak z tym wkońcu jest? Trzeba właczać czy nie? Dodam, że komparator na symulacji działał należycie, a po podłaczeniu nie uruchamiał podprogramu Zabezpieczenie, jedynie wyłączał silnik.

    Dodano po 5 [minuty]:

    yy poprawka, komparator podłączyłem i działa dobrze. Program Zabezpieczenie sie uruchamia. Wszystko jest ok. Bynajmniej na razie :)
  • #37
    atom1477
    Poziom 43  
    No tak, nie zwróciłem uwagi. Komparator oczywiście jest domyślnie włączony. Bit ACD ma mieć wartość 0.
  • Computer ControlsComputer Controls
  • #38
    marco47
    Poziom 41  
    Kolego chrobek
    W programie zastosuj jedną pętle Do Loop i w niej umieść sprawdzanie przycisków,stycznika,komparatora,stanu przekażników.Uruchom programowy licznik i w pętli Do Loop wykorzystaj go do sprawdzania stanu przycisków i innych zewnętrznych urządzeń.Do podprogramów skacz tylko aby go wykonać (nie używaj Waitms a tym bardziej Wait 1 w tym czasie, przecież może wystąpić jakaś akcja a Ty czekasz 1 sekundę-program stoi w miejscu).
    Spróbuj napisać jeszcze raz program z tymi zmianami.
    Co do dodatkowego wzm.operacyjnego,chodzi o odizolowanie pomiaru prądu od elementu indukcyjnego (silnika),który sieje masę impulsów,takie zabezpieczenie procka.
  • #39
    Mariojas
    Poziom 17  
    Jak można użyć licznika do sprawdzania stanu? Wait wykorzystałem, ale po uruchomieniu silnika nie było sytuacji że szpilka prądowa wyłaczy silnik, a także, żeby był czas na odpadnięcie krańcówki, bo inaczej również silnik by się zatrzymał. Czym moge zastąpić wait i waitms?
  • #40
    marco47
    Poziom 41  
    Jak będziesz sprawdzał w pętli Do Loop stan np.komparatora to wykryjesz np.nagłe zatrzymanie bramy(przeszkoda).Możesz wtedy zastosować jakiś podprogram ochrony silnika(spalenie,przegrzanie,itp).
  • #41
    Mariojas
    Poziom 17  
    Przecież mam w ten sposób zrobione kolego. Pin Acsr.5 to wyjście komparatora (ACO) i jest on w pętli.
  • #42
    marco47
    Poziom 41  
    Zadeklaruj zmienną np.Drgania typu Byte(0-255)
    W petli Do Loop :
    If PinD.2=0 Then 'jeżeli naciśnięty przycisk to wykonaj
    incr Drgania 'zwiększ licznik o jeden,obiegnięcie pętli jeśli dalej naciśnięty-zwiększ o jeden itd.
    If Drgania=255 Then 'jeżeli dojdzie licznik do 255(może być liczba 1 do 255 zależna od szybkości pętli)
    Tu wpisz co chcesz wykonać np. PortD.5=1 'włącz diodę,przekażnik
    endIf 'zakończ warunek
    Jest to prosty kod sprawdzania stanu przycisku i wykonania jakiejś czynności
    Zastosuj jeden przekażnik do zmiany kierunku obrotów a drugi do włączenia lub wyłączenia silnika.Łatwiejsze sterowanie i inne funkcje w programie, który napewno napiszesz z lepszym skutkiem
  • #43
    Mariojas
    Poziom 17  
    Co do przycisku to niezły pomysł :)

    Wait i waitms wydaje mi się że też można w ten sposób wykluczyć. Pogłówkuję trochę i jeśli mi nic nie wyjdzie to wrócę :)

    Ale co do pomysłu z przekaźnikami to nie rozumiem. Przecież w zasadzie jest to to samo. K3 zasila silnik a K1 i K2 odpowiedzialne są za włączenie silnika przy odpowiednim kierunku wirowania.

    A co do problemów z układem to dziś rano układ znowu miał problemy z poprawnym działaniem. Blokował się uC i pomimo że dioda wskazywała działanie jednego z przekaźników K1, K2 to silnik nie działał. Więc przypomniało mi się o wyjściu "Zasilanie", gdzie zapomniałem dolutować opornik 22k do masy. Po dolutowaniu układ znowu działa poprawnie.
  • #44
    marco47
    Poziom 41  
    Sterujesz kierunkiem obrotów dwoma przekażnikami z dwóch wyjść procka,w takim razie po co przekażnik włączający drugie trafo?
    Tak na szybko po pracy napisałem szkielet programu do sterowania bramy,w którym umieściłem wszystkie podane wcześniej wskazówki.
    Narysowałem też skrócony schemat do tego programu

    Code:
    'Sterowanie bramą,LCD 2x16        ver.01  3.10.2009
    

    'Portd.0 = Zamkniete                               'stycznik końca zamykania
    'Portd.1 = Otwarte                                 'stycznik końca otwierania
    'Portd.2 = Start_stop                              'przekaznik uruchomienia silnika
    'Portd.3 = Kierunek                                'przekaznik kierunku ruchu bramy
    'Portd.4 = Otworz_zamknij                          'przycisk obsługi ruchu bramy
    'Portd.5 = Brama_optyczna                          'wejście czujnika optycznego bramy
    'Portd.6 = Led_amper                               'sygnalizacja pomiaru obciązenia
    'Portc.0 = Pom_amper                               'wejście pomiarowe obciązenia silnika


    '**************************   marco47@onet.eu  *********************************

    '************************  Konfiguracja procesora  *****************************

    $regfile = "m8def.dat "
    $crystal = 4000000

    '*************************  konfiguracja wyświetlacza  *************************

    Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5 , Rs = Portb.1 , E = Portb.0
    Config Lcd = 16 * 2

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

    Config Portb = &B11111111
            Portb = &B00000000
    Config Portc = &B00000000
            Portc = &B00000000
    Config Portd = &B00101100
            Portd = &B00010011


    Config Adc = Single , Prescaler = Auto , Reference = Avcc       'konfiguracja wewnętrznego przetwornika A/C


    Dim Drgania As Byte                               'zmienna eliminacji drgań przycisku
    Dim Pomiar As Word                                'zmienna pomiaru obciązenia
    Dim Linia_1 As String * 16                        'zmienna wyświetlająca górną linię na LCD
    Dim Linia_2 As String * 16                        'zmienna wyświetlająca dolną linię na LCD


    '*****************************    Powitanie   **********************************
    Cls
    Cursor Off

    Locate 1 , 1
    Lcd "STEROWNIK BRAMY"
    Wait 2
    Locate 2 , 1
    Lcd "marco47@onet.eu"
    Wait 2
    '**************************  Koniec powitania  *********************************
          'ekran wyświetlany na początku jeszcze przed startem głównego programu


    Do                                                'program główny
    '********************  Pomiar obciązenia  **************************************

     Pomiar = Getadc(0)                               'przetwornik AC0
       If Pomiar > 500 Then Portd.6 = 1               'włącz LED pomiaru prądu,silnik pracuje

       If Pomiar > 1000 Then
             Portd.2 = 0                              'jeśli pomiar prądu przekroczy MAX wyłącz silnik
             Linia_1 = " AWARIA SILNIKA "             'pokaz napis
         End If

    '********************   Sterowanie  ********************************************

    If Pind.4 = 0 Then                                'jeśli naciśnięty przycisk to wykonaj
      Incr Drgania                                    'zwiększ licznik eliminacji drgań styków
       If Drgania = 255 Then                          'jeśli licznik dojdzie do 255 to
           Drgania = 0                                'zeruj licznik i wykonaj
           Toggle Portd.3                             'zmiana kierunku przesuwu bramy
           Portd.2 = 1                                'start silnika
         End If
        End If

    '********************  Wyłączenie silnika   ************************************

    If Pind.0 = 0 Then                               'jeśli brama zamknie się do końca to wykonaj
       Portd.2 = 0                                    'wyłącz silnik
       Linia_1 = "BRAMA ZAMKNIETA "                   'pokaz napis
       Linia_2 = "  DO WIDZENIA   "                   'pokaz napis
      End If

    If Pind.1 = 0 Then                               'jeśli brama otworzy się do końca to wykonaj
       Portd.2 = 0                                    'wyłącz silnik
       Linia_1 = " BRAMA OTWARTA  "                   'pokaz napis
       Linia_2 = "     WITAJ      "                   'pokaz napis
      End If

    '*********************  Wyświetlanie pulpitów na LCD  **************************

     Locate 1 , 1
       Lcd ; Linia_1
     Locate 2 , 1
       Lcd ; Linia_2
    '*******************************************************************************


    Loop                                              'koniec pętli
    End                                                'powrót na górę i "apiat" od nowa


    Resetowanie się atmega8, przy załączaniu przekaźnika
  • #45
    atom1477
    Poziom 43  
    Przekaźnik wyłączający drugie trafo pewnie służy do zmniejszenia poboru prądu jałowego. I zresztą jest to słuszne rozwiązanie.
  • #46
    Mariojas
    Poziom 17  
    atom1477 napisał:
    Przekaźnik wyłączający drugie trafo pewnie służy do zmniejszenia poboru prądu jałowego. I zresztą jest to słuszne rozwiązanie.

    Właśnie tak. Wyjąłeś mi to z ust :)

    Dodano po 7 [minuty]:

    marco47, z tego co widze to dodałeś obsługe wyswietlacza (naprawde zbędne, bo to samo można wykonać na trzech diodach LED - funkcja ta sama, napisy zbędne, wydatek wyświetlacza zbędny), Zmieniłeś koncepcje pomiaru obciążenia silnika, czyt. mocno ją skomplikowałeś, nie potrzebnie wg mnie. Jedynie sposób na drgania przycisku mi sie podoba.
    Zrobiłeś na szybko - dzięki za poświęcony czas, ale zapomniałeś o fukcji, którą ja wykorzystałem, otóż gdy brama sie zamyka i napotka przeszkodę, to się zatrzymuje i cofa kawałeczek.

    Dodano po 1 [minuty]:

    I w dodatku u mnie można regulować potencjometrem prąd przy jakim zabezpieczenie się uruchamia. Jedynie Twój program wskazuje na to czy silnik działa, no ale ... po co? przecież to słychać i widać.
  • #47
    marco47
    Poziom 41  
    Kod na wyświetlacz dałem tylko poglądowo aby mieć możliwość podglądu działania programu w czasie testów.
    W takim razie bez wyświetlacza i z cofaniem sie bramy przy wykryciu przeszkody. Testuje przyciski , styczniki i pobór prądu cały czas około 100 razy /sek. w zależności od częstotliwości procka , i reaguje natychmiast . Przeszkody wykrywa przy zamykaniu jak i otwieraniu bramy. W Twoim programie np. Wait 2 powoduje przerwanie działania programu(procek jest bezczynny). U Ciebie jest wykrywane tylko zbocze impulsu prądu a nie rzeczywisty pobór prądu. Poziom zadziałania ograniczeń ustawiamy programowo. Zmieniłem też wykrywanie naciśniecia przycisku Otworz_zamknij . Czy pomiar prądu jest taki skomplikowany?
    Przecież to jest propozycja , jak można rozwiązać prościej i bardziej przejrzyście dany problem sterowania bramą. Od Ciebie zależy czy z niego skorzystasz.


    Code:
    'Sterowanie bramą        ver.02  3.10.2009
    

    'Portd.0 = Zamkniete                               'stycznik końca zamykania
    'Portd.1 = Otwarte                                 'stycznik końca otwierania
    'Portd.2 = Start_stop                              'przekaznik uruchomienia silnika
    'Portd.3 = Kierunek                                'przekaznik kierunku ruchu bramy
    'Portd.4 = Otworz_zamknij                          'przycisk obsługi ruchu bramy
    'Portd.5 = Brama_optyczna                          'wejście czujnika optycznego bramy
    'Portd.6 = Led_amper                               'sygnalizacja pomiaru obciązenia
    'Portc.0 = Pom_amper                               'wejście pomiarowe obciązenia silnika


    '**************************   marco47@onet.eu  *********************************

    '************************  Konfiguracja procesora  *****************************

    $regfile = "m8def.dat "
    $crystal = 4000000

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

    Config Portb = &B11111111
            Portb = &B00000000
    Config Portc = &B11111110
            Portc = &B00000000
    Config Portd = &B01101100
            Portd = &B01010011


    Config Adc = Single , Prescaler = Auto , Reference = Avcc       'konfiguracja wewnętrznego przetwornika A/C

    Dim Pomiar As Word                                'zmienna pomiaru obciązenia
    Dim S1 As Bit , S2 As Bit , S3 As Bit , S4 As Bit 'zmienne pomocnicze przerzutników ON/OFF

    Start Adc                                         'start przetwornika A/C

    Do                                                'program główny
    '********************   Sterowanie  ********************************************

    If Pind.4 = 0 Then                                'jeśli przyciśnięty swich SW3
          S1 = 1                                      'ustaw bit pomocniczy
       If S1 = 1 And S2 = 0 Then                      'jeśli nadal wciśnięty
           Toggle Portd.3                             'zmiana kierunku ruchu bramy
            Portd.2 = 1                               'start silnika
               S2 = 1                                 'zablokuj dalsze zmiany do czasu zwolnienia SW3
           End If
         Else
          S1 = 0 : S2 = 0                             'zeruj oba bity pomocnicze
       End If

    '********************  Pomiar obciązenia  **************************************

     Pomiar = Getadc(0)                               'przetwornik AC0

     '-------------------------------------------------------------------------------
     If Pomiar > 10 And Pomiar < 500 Then Portd.6 = 1 'włącz LED pomiaru prądu,silnik pracuje

    '-------------------------------------------------------------------------------
    If Pomiar > 601 Then                              'zwiększenie obciązenia silnika zmień kierunek obrotów
          S3 = 1                                      'ustaw bit pomocniczy
        If S3 = 1 And S4 = 0 Then                     'jeśli nadal zwiększone obciązenie
             Toggle Portb.3                           'zmiana kierunku ruchu bramy
             Portd.6 = 0                              'wyłącz LED pomiaru prądu,
                S4 = 1                                'zablokuj dalsze zmiany do czasu zmniejszenia obciązenia
              End If
           Else
             S3 = 0 : S4 = 0                          'zeruj oba bity pomocnicze
         End If

    '-------------------------------------------------------------------------------
    If Pomiar > 1000 Then
       Portb.2 = 0                                    'jeśli pomiar prądu przekroczy MAX wyłącz silnik
    End If

    '********************  Wyłączenie silnika   ************************************

    If Pinb.0 = 0 Then                                'jeśli brama zamknie się do końca to wykonaj
       Portb.2 = 0                                    'wyłącz silnik
      End If

    If Pinb.1 = 0 Then                                'jeśli brama otworzy się do końca to wykonaj
       Portb.2 = 0                                    'wyłącz silnik
      End If

    Loop                                              'koniec pętli
    End                                               'koniec programu głównego i powrót na początek pętli


    Pozdrawiam
  • #48
    Mariojas
    Poziom 17  
    Kolego ale wiesz, że przy starcie silnika jest szpilka prądowa jeśli chodzi o prace na beigu jałowym i duży pobór prądu szybko zmniejszający się (ok 0,5 - 1s) przy pracy? Moje Wait 2 nie jest zastąpione niczym w Twoim programie. To jest błąd, który poprawie innym sposobem. Tak jak Ty wyżej mi proponowałeś na liczniku zrobić przycisk. Zamierzam uruchomić licznik gdy silnika zaczyna pracować i gdy odliczy daną wartość to dopiero zabezpieczenie może zadziałać.
  • #49
    marco47
    Poziom 41  
    Korzystam z internetu w czytelni dlatego jestem tu tylko między 12 a 13
    Nie jest moim celem podanie Tobie na tacy końcowego produktu tylko nakierowanie na inny tor myślenia.Celowo podaję kod w wersji skróconej abyś sam mógł wykazać niedoskonałości programu. Jak wyżej wykazałeś brak jest opóżnienia w starcie silnika. Jeśli rozumiesz mój program to teraz dodaję opóżnienie w starcie silnika. Wcześniej też wspomniałeś że ustawiasz ograniczenie prądu (szpilki). Zresztą w Twoim kodzie brak jest konfiguracji komparatora. potencjometrem . Komparatorem możesz tylko stwierdzić czy jest impuls prądu(uruchomienie silnika) a nie zwiększenie poboru przy jakiejś blokadzie bramy np.człowiek. Myślałem że po analizie kodu domyślisz się jak to zrobić tutaj. Teraz podaję Tobie prawie kompletny kod do przemyślenia. Jeśli naprowadziłem Ciebie na dobre tory to się bardzo cieszę

    Code:
    'Sterowanie bramą        ver.03  6.10.2009
    

    'Portd.0 = Zamkniete                               'stycznik końca zamykania
    'Portd.1 = Otwarte                                 'stycznik końca otwierania
    'Portd.2 = Start_stop                              'przekaznik uruchomienia silnika
    'Portd.3 = Kierunek                                'przekaznik kierunku ruchu bramy
    'Portd.4 = Otworz_zamknij                          'przycisk obsługi ruchu bramy
    'Portd.5 = Brama_optyczna                          'wejście czujnika optycznego bramy
    'Portd.6 = Led_amper                               'sygnalizacja pomiaru obciązenia
    'Portc.0 = Pom_amper                               'wejście pomiarowe obciązenia silnika
    'Portc.1 = Ust_pomiar                              'ustawiania ograniczenia pomiaru obciązenia silnika

    '**************************   marco47@onet.eu  *********************************

    '************************  Konfiguracja procesora  *****************************

    $regfile = "m8def.dat "
    $crystal = 4000000

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

    Config Portb = &B11111111
            Portb = &B00000000
    Config Portc = &B11111100
            Portc = &B00000000
    Config Portd = &B01101100
            Portd = &B01010011


    Config Adc = Single , Prescaler = Auto , Reference = Avcc       'konfiguracja wewnętrznego przetwornika A/C

    Dim Pomiar As Word                                'zmienna pomiaru obciązenia
    Dim Ust_pomiar As Word                            'zmienna ustawiania pomiaru obciązenia
    Dim Opoznienie As Word                            'zmienna opóznienia przy starcie silnika
    Dim S1 As Bit , S2 As Bit , S3 As Bit , S4 As Bit 'zmienne pomocnicze przerzutników ON/OFF
    Dim Blokada As Bit                                'zmienna blokady wyłączania silnika przy starcie

    Start Adc                                         'start przetwornika A/C

    Do                                                'program główny
    '********************   Sterowanie  ********************************************

    If Pind.4 = 0 Then                                'jeśli przyciśnięty swich SW3
          S1 = 1                                      'ustaw bit pomocniczy
       If S1 = 1 And S2 = 0 Then                      'jeśli nadal wciśnięty
           Blokada = 1                                'ustaw bit blokady wyłączania silnika
           Toggle Portd.3                             'zmiana kierunku ruchu bramy
            Portd.2 = 1                               'start silnika
               S2 = 1                                 'zablokuj dalsze zmiany do czasu zwolnienia SW3
           End If
         Else
          S1 = 0 : S2 = 0                             'zeruj oba bity pomocnicze
       End If

    '********************  Pomiar obciązenia  **************************************

     Pomiar = Getadc(0)                               'przetwornik AC0
     Ust_pomiar = Getadc(1)                           'przetwornik AC1

     '-------------------------------------------------------------------------------
     If Pomiar < Ust_pomiar Then Portd.6 = 1          'włącz LED pomiaru prądu,silnik pracuje

    '-------------------------------------------------------------------------------
    If Pomiar > Ust_pomiar Then                       'zwiększenie obciązenia silnika zmień kierunek obrotów
          S3 = 1                                      'ustaw bit pomocniczy
        If S3 = 1 And S4 = 0 Then                     'jeśli nadal zwiększone obciązenie
             Toggle Portb.3                           'zmiana kierunku ruchu bramy
             Portd.6 = 0                              'wyłącz LED pomiaru prądu,
                S4 = 1                                'zablokuj dalsze zmiany do czasu zmniejszenia obciązenia
              End If
           Else
             S3 = 0 : S4 = 0                          'zeruj oba bity pomocnicze
         End If

    '-------------------------------------------------------------------------------
    If Pomiar > 1000 Then
       Portb.2 = 0                                    'jeśli pomiar prądu przekroczy MAX wyłącz silnik
    End If

    '********************  Wyłączenie silnika   ************************************

    If Blokada = 1 Then                               'jeśli ustawiono bit blokady

        If Pinb.0 = 0 Then                            'jeśli brama zamknięta to
           Portb.2 = 1                                'włącz silnik
          End If

            If Pinb.1 = 0 Then                        'jeśli brama otwarta to
               Portb.2 = 1                            'włącz silnik
              End If

               Incr Opoznienie                        'zwiększ o jeden licznik opoznienia
                 If Opoznienie = 2000 Then            'jeśli licznik dojdzie do
                     Opoznienie = 0                   'zeruj licznik i wykonaj
                        Blokada = 0                   'zeruj bit blokady
                    End If
      Else                                            'jeśli nie ustawiono bitu blokady to
        If Pinb.0 = 0 Then                            'jeśli brama zamknie się do końca to wykonaj
           Portb.2 = 0                                'wyłącz silnik
          End If

        If Pinb.1 = 0 Then                            'jeśli brama otworzy się do końca to wykonaj
           Portb.2 = 0                                'wyłącz silnik
          End If
      End If

    Loop                                              'koniec pętli
    End                                               'koniec programu głównego i powrót na początek pętli


    Resetowanie się atmega8, przy załączaniu przekaźnika

    Pozdrawiam
  • #50
    Mariojas
    Poziom 17  
    Nie musiałeś podawać kompletnego kodu, wystarczyło odpowiedzieć na pytania.
    Co do komparatora to jego funkcja mnie całkowicie satysfakcjonuje, wystarczy że uC wie że jest za duży pobór prądu co może być spowodowane zablokowaniem silnika i powinien się wyłączyć. Wystarczy.
  • #51
    marco47
    Poziom 41  
    Kolego chrobek
    To nie jest kompletny kod , to tylko działający zarys. W programie powinno się jeszcze znależć przechodzenie procesora w stan uśpienia po zamknięciu bramy, przy wyłączeniu z sieci przejście na akumulator, współdziałanie z pilotem , blokada optyczna , i inne pomagające w działaniu rzeczy. To jest tak samo jak z projektowaniem jakiejś płytki do naszych (klienta)potrzeb. Należy w momencie projektowania zawrzeć wszystkie możliwe rzeczy potrzebne w danym projekcie. A czy się je wykorzysta w danej chwili to już inna rzecz. Po jakimś czasie okazuje się że należy rozszerzyć zakres działania urządzenia , więc nie musimy budować od początku tylko uzupełniamy płytkę. Oszczędność czasu i test naszego przewidywania "inteligencji". Ja tak zawsze projektuję urządzenia , maximilizacja treści a minimalizacja formy, jak najwięcej zmieścić w jak najmniejszej wielkości płytki jak i też obudowy. Jest to wyprzedzanie wymagań klienta. Po co dwa , trzy razy podchodzić do projektu jak to można zrobić za pierwszym razem , póżniej tylko dodając wcześniej zaprojektowane elementy. Jeszcze się nie spotkałem z klientem który by po jakimś czasie nie chciał rozbudować urządzenia o nowe funkcje i tym podobne. Napisałeś wcześniej że nie jest Tobie potrzebny wyświetlacz LCD (może być LED), bo to niepotrzebne koszty. Ale przecież płytkę można już zaprojektować z gniazdem na LCD , i z innymi peryferiami w danym urządzeniu. Przyjdzie jakiś sąsiad , kolega lub panienka z prośbą o takie samo urządzenie tylko z dodatkowymi badziewiami , a Ty masz gotowy projekt dla wymagających klientów. Czyż to nie piękne , szybko i bez wysiłku?
    Pozdrawiam
  • #53
    atom1477
    Poziom 43  
    Dać się da ale to bardzo duża przeróbka. Więc prościej uznać że się nie da i zrobić to od początku inaczej.
  • #55
    atom1477
    Poziom 43  
    Najprościej to na przekładnikach prądowych.
  • #57
    atom1477
    Poziom 43  
    Ale mu nie mówimy o wyłączniku na przekładnikach :D No chyba że Ty.
  • #59
    atom1477
    Poziom 43  
    No chciałeś pomiar prądu a teraz piszesz o włączniku. Miernik a włącznik to jak na moje oko coś innego.