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.

Atmega8 - Program czasówka

krzysiekdioda 10 Mar 2013 13:25 1692 14
  • #1 10 Mar 2013 13:25
    krzysiekdioda
    Poziom 13  

    Witam,

    Potrzebuję napisać program na atmegę który będzie wykonywał :

    Z centralki centralnego podaje 1 sek impuls masy na Atmegę, po podaniu impulsu atmega uruchomi jedno z wyjść na 2 sek, w tym czasie załączy przekaźnik przytrzyma go załączonego i wyłączy. Po 2 sek od załączenia pierwszego przekaźnika
    drugie wyjście, automatycznie poda 2 sek impuls na kolejny przekaźnik. Po 2 sek oba przekaźniki wyłączą się, aż do kolejnego podania impulsu masy przez centralkę centralnego. Centrala to Zamster PLUS. Chodzi mi o rozwiązanie otwierania i zamykania klapy w samochodzie. Coś podobnego jest w audi A4. Z góry serdecznie dziękuję.

    Pozdrawiam
    Krzysztof

    0 14
  • #2 10 Mar 2013 13:30
    excray
    Poziom 39  

    Jeśli to jest ogłoszenie (bo nie widzę żadnego projektu) to powinieneś podać cenę i umieścić w innym dziale.

    0
  • #3 10 Mar 2013 13:38
    krzysiekdioda
    Poziom 13  

    Nie ogłoszenie, raczej prośba o pomoc.

    0
  • #4 10 Mar 2013 13:55
    excray
    Poziom 39  

    W takim razie co potrafisz sam zrobić a w czym potrzebujesz pomocy?

    0
  • #5 10 Mar 2013 14:02
    krzysiekdioda
    Poziom 13  

    Napisałem coś takiego ale Bascom avr coś mi nie kompiluje :

    Code:

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

    Config Pind.0 = Input
    Config Pind.1 = Output
    Config Pind.2 = Output

    S1 Alias Pinb.0
     Do

       If Pind.0 = 1 Then                       'jeżeli masa zostanie podana
       pind 1 .0=1                                'wlacz cewke portu 1
       waitms 2000                              'czekaj dwie sekundy
       Pind 1.0 = 0                               'zgaś wylacz cewke portu 1
       Waitms 500                               'czekaj 500 ms
       Pind 2.0 = 1                              'wlacz cewke portu 2
       Waitms 2000                             'czekaj 2 sekundy
       Pind 2.0 = 0                              'wylacz cewke portu 2
       endif                                    'koniec bloku warunkowego

     loop                                       'koniec pętli

    End                     

    0
  • #6 10 Mar 2013 16:16
    sp3ots
    Poziom 35  

    Witam !
    W tych liniach są błędy:
    pind 1 .0=1
    napisz tak:
    Portd.1=1 ' itp.
    Pozdrawiam. Stefan

    0
  • #7 10 Mar 2013 17:50
    krzysiekdioda
    Poziom 13  

    Zrobiłem tak :

    Code:
    $regfile = "m88def.dat"
    
    $crystal = 1000000

    Config Portd.0 = Input
    Config Portd.2 = Output
    Config Portd.3 = Output
        Portd.2 = 0
        Portd.3 = 0
    S1 Alias Portd.0
     Do

       If Portd.0 = 1 Then                                      'jeżeli masa zostanie podana
       Portd .2 = 1                                             'wlacz cewke portu 1
       waitms 2000                              'czekaj dwie sekundy
       Portd .2 = 0                                             'zgaś wylacz cewke portu 1
       Waitms 500                               'czekaj 500 ms
       Portd .3 = 1                                             'wlacz cewke portu 2
       Waitms 2000                             'czekaj 2 sekundy
       Portd .3 = 0
       Waitms 2
       Portd .2 = 0
       Portd .3 = 0
                                               'wylacz cewke portu 2
       endif                                    'koniec bloku warunkowego

     loop                                       'koniec pętli

    End


    Lecz program cały czas podaje masę na wyjście pd2 i pd3, nic nie dzieje się jak przycisnę przycisk. W ogóle nie działa z moim założeniem

    0
  • #8 10 Mar 2013 18:19
    zumek
    Poziom 39  

    krzysiekdioda napisał:
    ... W ogóle nie działa z moim założeniem

    Nie działa, bo Ty wogóle nie rozróżniasz rejestrów. Dla Ciebie PINx czy PORTx to "wsio ryba", a dla ATMega88 już nie.


    PS
    I nie mam na myśli konfiguracji, bo ta jest OK.

    0
  • #9 10 Mar 2013 18:24
    krzysiekdioda
    Poziom 13  

    Dopiero co zaczynam zabawę z mikrokontrolerami, nie wiem już co może być przyczyną, że program zachowuje się jakby w ogóle nie działał z kodem.

    0
  • #10 10 Mar 2013 18:31
    bogdan_p
    Poziom 39  

    krzysiekdioda napisał:
    podaje 1 sek impuls masy na Atmegę,

    Zobacz jaki sprawdzasz warunek ....... plus to co wspomniał kolega , dla sprawdzenia stanu PINx.x a nie PORTx.x ponadto wypada podciągnąć port do plusa .

    0
  • #12 10 Mar 2013 18:54
    krzysiekdioda
    Poziom 13  

    teraz mam tak, ale tym razem pętla działa na okrągło

    Code:
    $regfile = "m88def.dat"
    
    $crystal = 1000000

    Config Pind.0 = Input
    Config Portd.2 = Output
    Config Portd.3 = Output

    S1 Alias Pind.0
     Do

       If Pind.0 = 1 Then                                       'jeżeli masa zostanie podana
       Portd .2 = 0                                             'wlacz cewke portu 1
       Waitms 2000                                              'czekaj dwie sekundy
       Portd .2 = 1                                             'zgaś wylacz cewke portu 1
       Waitms 500                                               'czekaj 500 ms
       Portd .3 = 0                                             'wlacz cewke portu 2
       Waitms 2000                                              'czekaj 2 sekundy
       Portd .3 = 1


                                               'wylacz cewke portu 2
       End If                                                   'koniec bloku warunkowego

     Loop                                                       'koniec pętli

    End

    0
  • #14 10 Mar 2013 19:45
    bogdan_p
    Poziom 39  

    krzysiekdioda napisał:
    If Pind.0 = 1 Then 'jeżeli masa zostanie podana

    Widzę że nadal nie rozumiesz jaki warunek sprawdzasz , piszesz o masie a sprawdzasz 1
    krzysiekdioda napisał:
    Portd .2 = 0 'wlacz cewke portu 1

    krzysiekdioda napisał:
    Portd .2 = 1 'wlacz cewke portu 1

    To samo dotyczy stanu włącz , zdecyduj się czy 1 czy 0

    0
  • #15 11 Mar 2013 05:31
    emarcus
    Poziom 34  

    krzysiekdioda napisał:
    teraz mam tak, ale tym razem pętla działa na okrągło


    Bo tak jest program napisany...
    Poza uwagami wyżej podanymi przez kolegów, dodałbym że jeżeli cały program to tylko sterowanie tych dwóch przekaźników to z powodzeniem wystarczyłby jakiś mały 8-pinowy ATtinyxx.
    Druga uwaga to: z regóły w układach cyklicznych jak ten przykład; program po wykonaniu zadania powinien pozostawic kontrolowane wyjścia w tymsamym stanie jakie były przed jego wykonaniem, czyli w stanie spoczynkowym. U ciebie tak nie jest.
    Skoro z wyjśc processora załączasz przekaźniki to byłoby wskazane pokazanie schematu tego interface do wglądu i ew. weryfikacji.

    e marcus

    0