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

programowanie - atmega 8 sterownik

badboypatryk 16 Lis 2014 17:44 2214 20
  • #1 16 Lis 2014 17:44
    badboypatryk
    Poziom 8  

    Witam potrzebuje zrobić sterowanie do nawigacji i pomyślałem o atmega 8 myślę ze da się to zrobić na tym mikroprocesorze a także o pomoc fachowców w napisaniu programu. A wiec do rzeczy sterować muszę otwieraniem i zamykaniem klapki oraz ustawieniem nachylenia. Przyciski jakie mam do wykorzystania to przycisk open/close i tittle oraz dwa sygnały otwarta klapka i zamknięta klapka. Mozę troszkę opisze według mnie jak to ma działać. Po naciśnięciu przycisku open/close to załącza mi przekaźnik od otwarcia klapki aż do uzyskania sygnału klapki otwartej kolejne wciśniecie przycisku open/close wysteruje mi przekaźnik zamykania klapki az do uzyskania sygnału klapki zamkniętej . Jeśli chodzi o przycisk tittle to tak zwane ręczne otwarcie lub zamkniecie tylko ze na przykład po otwarciu przyciskiem open /close po otwarciu można będzie skorygować przyciskiem tittle kont otwarcia czyli przymyka jak się trzyma przycisk. Myślę ze w miarę wyraźnie opisałem co chciałbym osiągnąć. Proszę o wyrozumiałość i ewentualne poprawki 
    pozdrawiam

    0 20
  • #2 16 Lis 2014 17:48
    bearq
    Poziom 35  

    Jakiś schemat, czy kawałek kody masz?

    0
  • #3 17 Lis 2014 21:41
    badboypatryk
    Poziom 8  

    Po przekręceniu kluczyka pojawia się nam napięcie na przekaźniku K1 który daje sygnał na PC1 że mamy włączone zasilanie i automatycznie sterownik powinien wystawić nam sygnał na wyjście PD0(zał/wył nawigacji K4) i na PD2(Otwarcie klapki K2) przy czym na PD0(zał/wył nawigacji) na jakieś 5sek. a na PD2(otwarcie klapki) do uzyskania sygnału z krańcówki KS3(klapka otwarta) na wejście PC3. Mamy teraz nawigacje włączoną i otwarta klapkę. Po wciśnięciu przycisku S1(open/close) i otrzymaniu sygnału na wejście PC5 sterownik powinien nam wystawić sygnał na PD1(zamykanie klapki K3) i PD0(zał/wył nawigacji K4) przy czym na PD0(zał/wył nawigacji) na jakieś 5sek. a na PD1(zamkniecie klapki) do uzyskania sygnału z krańcówki KS4(klapka zamknięta) na wejście PC2. Mamy nawigacje wyłączoną i klapkę zamkniętą. I po wciśnięciu przycisku S1(open/close) wystawia sygnał na PD2(otwarcie klapki K2) i na PD0(wył/zał nawigacje) przy czym na PD0(zał/wył nawigacji) na jakieś 5sek. a na PD2(otwarcie klapki) do uzyskania sygnału z krańcówki KS3(klapka otwarta) na wejście PC3. Przycisk S2(tittle) działa tylko gdy klapka jest otwarta a co za tym idzie nawigacja włączona. Gdy przycisk S2(tittle) daje sygnał na wejście PC4 sterownik powinien wystawiać sygnał tylko na PD1(zamykanie klapki). Sygnał ten wystawia równolegle do wejścia PC4 (S2 tittle) czyli jeśli trzymamy to zamyka(ktoś mi sugerował ze np. kolejne wciśniecie S2(tittle) może otwierać i każde wciśniecie będzie powodowało ze raz zamyka a raz otwiera nie wiem które lepsze zdaje się na fachowców w tej dziedzinie) ja myślałem ze może otwierać aż do sygnału z KS4(klapka zamknięta) i odrazu otwierać. Myślę że mnie rozumiecie o co chodzi. Po wyłączeniu zasilnia i zaniku napięcia na K1 sterownik nie otrzymuje sygnału na PC1 to znak że trzeba nawigacje wyłączyć czyli powinien wystawić sygnał na PD1(zamykanie klapki K3) i PD0(zał/wył nawigacji K4) przy czym na PD0(zał/wył nawigacji) na jakieś 5sek. a na PD1(zamkniecie klapki) do uzyskania sygnału z krańcówki KS4(klapka zamknięta) na wejście PC2. Podtrzymanie zasilania na tą operacje chcę uzyskać z kondensatorów C1 i C2

    dziękuje za wszystkie sugestie i porady i ewentualne poprawki schematu

    programowanie - atmega 8 sterownik

    Dodano po 1 [minuty]:

    schemat odręczny bo synek nie pozwoli coś lepszego stworzyć

    0
  • #4 17 Lis 2014 21:56
    BlueDraco
    Specjalista - Mikrokontrolery

    Tak na początek: styki powinny zwierać wejścia do masy, a nie do plusa.

    0
  • #5 17 Lis 2014 23:02
    dondu
    Moderator Mikrokontrolery Projektowanie

    Słowotoki strasznie się czyta na ekranie komputera :)
    Staraj się w przyszłości jakoś pogrupować tekst, wypunktować itp.

    badboypatryk napisał:
    Podtrzymanie zasilania na tą operacje chcę uzyskać z kondensatorów C1 i C2

    Jeżeli to ma być 5 sekund, to musisz wykonać próby, bo C1 i C2 są przed regulatorem napięcia.
    Co ma działać przez te 5 sekund? Tylko mikrokontroler? Jeśli tak to należy ukłąd rozwiązać inaczej.
    Poza tym ATmega8A lub 8L, a nie standardowa ATmega8 z powodu możliwości zasilania niższym napięciem, co tutaj może być istotne a propos tych 5 sekund.

    A uwaga BlueDraco jest bardzo istotna.

    0
  • #6 18 Lis 2014 07:00
    badboypatryk
    Poziom 8  

    Witam te 5 sekund to musi mi wysterować wył/zał nawigacji. A te kondensatory C1 i C2 to muszą mi utrzymać tak zasilanie aby po wyłączeniu zapłonu sterownik miał energie do wysterowania i uruchomienia silnika zamykania klapki. Zdaje sobie sprawę za pewnie dobór tych kondensatorów będę musiał dobrać eksperymentowalnie.
    Przepraszam ale nie za bardzo rozumiem BlueDarco.

    Tak na początek: styki powinny zwierać wejścia do masy, a nie do plusa.

    Można troszkę jaśniej.

    0
  • #8 18 Lis 2014 10:58
    badboypatryk
    Poziom 8  

    Aha czyli tutaj powinno być gnd tak ??? programowanie - atmega 8 sterownik


    Dobrze zrozumiałem jeśli nie to prosze pokazać mi na schemacie dziękuje

    0
  • #10 18 Lis 2014 21:55
    badboypatryk
    Poziom 8  

    Powiem tak właśnie nie rozumiem dlaczego musi byc minus. Powiem tak że z avr-ów to bardzo rzadko korzystam tylko dla swojego hobby tylko że teraz nie mam czasu na zabawe i nuke. Było by mi bardzo milo jeśli mógłbyś mi to wytłumaczyć. Czyli mogę już płytkę robić. I szukać fachowca do napisania programu.

    0
  • #11 19 Lis 2014 00:25
    dondu
    Moderator Mikrokontrolery Projektowanie

    Tak sądziłem dlatego zadałem pytanie. Chodzi o to, że aby mikrokontroler mógł odczytać poprawnie stan pinu, do którego podłączony jest przycisk, musi on (pin) przyjmować stan 1 lub 0.

    Tak jak podłączyłeś przycisk na początku wymusiłbyś stan 1 w momencie włączenia przycisku - więc OK. W tym momencie naładuje się bramka tranzystora MOSFET na wejściu tego pinu w mikrokontrolerze. Następnie zwalniasz przycisk i ... bramka nadal jest naładowana a mikrokontroler nadal widzi 1 na wejściu a Ty zdziwiony dlaczego? :)



    Link


    W takiej sytuacji należy do pinu dodać rezystor pull-down np. 1k zwierający pin do masy i rozładowujący go w momencie puszczenia przycisku.

    Ale jest inne rozwiązanie - wykorzystanie wewnętrznych rezystorów pull-up (podciągających do Vcc) znajdujących się w mikorkontrolerze na prawie każdym pinie. Włączamy programowo ten rezystor i mamy 1 na wejściu. Interpretujemy ją programem jako przycisk nieprzyciśnięty. Przycisk natomiast zamiast do Vcc podłączamy do GND. gdy go przyciśniemy pojawi się 0 a gdy puścimy rezystor pull-up ponownie wymusi jedynkę. W ten sposób zaoszczędzamy jeden rezystor dla każdego przycisku.

    Tak, możesz płytkę projektować, a fachowca do programu szukać nie musisz, bo sam go spokojnie napiszesz z naszą pomocą i przykładami. :)

    0
  • #12 19 Lis 2014 06:34
    badboypatryk
    Poziom 8  

    Aha teraz już rozumiem. Pamiętałem właśnie o tych rezystorach ale nie chciałem palnąć bo nie byłem pewien. No to super jak pomożecie tylko kurcze musicie mi naprawdę dużo pomagać bo szczerze nigdy nie pisałem programu a tu tez bym skłamał byłem raz na szkoleniu w programowaniu sterownika B&R ale było ono już na takim poziomie że dużo nie rozumiałem.
    Ok tak więc liczę na wasze pierwsze podpowiedzi i sugestie jak zacząć
    pozdrawiam

    0
  • #13 19 Lis 2014 21:02
    badboypatryk
    Poziom 8  

    Witam mam mały problem z płytka PCB. narysowałem schemat w eagle ale kurcze chce mi robić dwie warstwy może ktoś okaże trochę chęci i spróbuje zrobić PCB nie jest to skomplikowany schemat ale coś mi nie wychodzi. aha płytka musi mieć maksymalnie 11,5cmx5,5cm pozdrawiam

    0
  • #14 20 Lis 2014 21:42
    badboypatryk
    Poziom 8  

    Witam
    wszystko już mam
    zostało mi tylko program napisać ale potrzebuje waszej pomocy jak zacząć

    0
  • #15 22 Lis 2014 10:58
    dondu
    Moderator Mikrokontrolery Projektowanie

    Zacznij od przerobienia przykładów z kursu AVR: http://mikrokontrolery.blogspot.com/2011/03/drzaskowy-pamietnik-wstep.html

    Następnie zapoznaj się ze zjawiskiem drgań styków: http://mikrokontrolery.blogspot.com/2011/04/przycisk-drgania-stykow-debouncing.html
    oraz biblioteką: http://mikrokontrolery.blogspot.com/2011/04/jezyk-c-biblioteka-obsluga-klawiatury.html

    Możesz śledzić także ten aktualnie omawiany wątek o tej bibliotece: https://www.elektroda.pl/rtvforum/topic2933236.html

    Gdy już to zrobisz, będziesz w stanie napisać swój program. Napisz go tak jak będziesz potrafił i wklejaj w tym temacie - będziemy go wspólnie analizować i poprawiać.

    0
  • #16 23 Lis 2014 04:41
    emarcus
    Poziom 34  

    badboypatryk napisał:
    Witam
    wszystko już mam
    zostało mi tylko.............

    Może jednak nie wszystko jest tak oczywiste..
    Powróc na chwilę do twojego konceptu:
    Z tego co zrozumiałem to: - otwieranie 'klapki' wykonywane jest przez silnik el. DC, zamykanie jej jest również tymsamym silnikiem z odwróconym kierunkiem obrotów (zamiana biegunów zasilania).
    Jak ty to chcesz zrobic na dwóch przekaźnikach.
    ..... A może masz specjalny silnik z wbudowanym mostkiem H?

    e marcus

    0
  • #17 23 Lis 2014 10:42
    vonar
    Poziom 28  

    @emarcus
    Dwa przekaźniki wystarczą – np. DPDT do odwracania polaryzacji, SPST do włączania (SPDT jeśli z hamowaniem).

    0
  • #18 24 Lis 2014 01:10
    emarcus
    Poziom 34  

    vonar napisał:
    @emarcus
    Dwa przekaźniki wystarczą – np. DPDT do odwracania polaryzacji, SPST do włączania (SPDT jeśli z hamowaniem).



    Pod warunkiem że nie dbamy o zakłócenia EMI podczas załączania i wyłączania silnika.
    Jeżeli już muszą byc użyte mechaniczne łączniki/przekaźniki to można je zastosowac do ustawienia kierunku obrotów silnika przed załączeniem prądu, jednak samo załączenie wykonac tranzystorem MOSFET.
    Metoda powszechnie stosowana w modułach kontroli elektrycznych zamków i podnoszenia szyb w przemyśle samochodowym./
    Oto przykład takiego modułu:
    programowanie - atmega 8 sterownik

    e marcus

    0
  • #19 04 Gru 2014 22:05
    badboypatryk
    Poziom 8  

    Czyli że na tym układzie co ja mam zrobiony to nie będzie działało ???

    Dodano po 5 [sekundy]:

    Czyli że na tym układzie co ja mam zrobiony to nie będzie działało ???

    0
  • #20 05 Gru 2014 07:53
    emarcus
    Poziom 34  

    badboypatryk napisał:
    Czyli że na tym układzie co ja mam zrobiony to nie będzie działało ???



    To co napisałem nie znaczy "czyli" ..
    Oczywiście, silnik będzie pracował w układzie dwóch przekaźników przy konfiguracji mostka 'H'; ale, ponieważ są to łączniki mechaniczne załączające i wyłączające obciążenie indukcyjne to musisz liczy się z towarzyszącymi zakłóceniami (BEMF) przenoszącymi się na uklad zasilania co w konsekwencji może powodowac nie potrzebne resety processora. Dlatego podałem alternatywne rozwiązanie, aby zmiany kierunku obrotów silnika dokonac przekaźnikami przed aktualnym załączeniem prądu przez MOSFET. Może to trochę skomplikuje układ i program, ale tak bym to robił.

    e marcus

    0
  • #21 11 Kwi 2015 07:57
    badboypatryk
    Poziom 8  

    Witam coś próbuje zrobić z tym programem ale nie mam pojęcia czy wogole w dobrym kierunku i ten brak czasu jest straszny mam coś takiego jeśli by ktoś to mógł sprawdzić i ewentualnie poprawić bo ja już nie daje rady jak narazie dziękuje wszystkim za pomoc

    #define F_CPU 1000000L
    #include <avr/io.h>
    #include <util/delay.h>


    int main(void)
    {
    DDRD = 0xFF;
    DDRC = 0x00;
    PORTD = 0x00;
    PORTC = 0xff;
    int a,b,c;


    /* Petla programu glownego*/
    for(;;)
    {
    if(PINC & 0x01)
    {
    if(!(PINC & 0x08))
    {
    PORTD |= 0x04;
    //tu wstawic delay na 5sek na PD0
    };

    if((PINC & 0x40)&&(a != 1)) a = 1; //nacisnieto klawisz S1
    if((PINC & 0x40)&&(a == 1)) a = 0; //ponownie nacisnieto s1

    if(a == 1)
    {
    if(!(PINC & 0x04))
    {
    PORTD |= 0x02;
    //tu wstawic delay na 5sek na PD0
    };
    };

    if(a == 0)
    {
    if(!(PINC & 0x08))
    {
    PORTD |= 0x04;
    //tu wstawic delay na 5sek na PD0
    };
    };

    //tutaj siedzi obsluga S2
    if(PINC & 0x16)
    {
    if(PORTD & 0x01) PORTD |= 0x01;
    };

    };

    //tutaj zakonczenie dzialania ukladu
    if(!(PINC & 0x01))
    {
    if(!(PINC & 0x04))
    {
    PORTD |= 0x01;
    //tu wstawic delay na 5sek na PD0
    };
    };
    }
    }

    0