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.

Analiza kodu programu AVR C

mazril 31 Maj 2012 13:16 2169 9
  • #1 31 Maj 2012 13:16
    mazril
    Poziom 2  

    Witam mam problem z poniższym kodem po zaprogramowaniu atmelka nie chce za żadne skarby działać w zaplanowany sposób po zaniku sygnału na nóżce PD1 powinien zmienić stany a tego nie robi zupełnie jak by nadal otrzymywał sygnał wysoki. W symulatorze AVR Studio działa w oczekiwany sposób, mogę prosić o pomoc w zlokalizowaniu błędu ?

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0 9
  • #2 31 Maj 2012 13:27
    LordBlick
    VIP Zasłużony dla elektroda

    A czy to tajne dane, jeśli chodzi o schemat ? ;)
    Gdzie używasz delay() i czemu to służy, jeśli nie używa F_CPU ?
    Po czym wnosisz, że nie działa ?
    Jak to sprawdzasz ?
    Jak powinno działać ?

    0
  • #3 31 Maj 2012 14:03
    krzysztofh
    Poziom 29  

    Program działa, ale chyba autorowi chodziło o inne działanie.
    Funkcja delay nie używana w programie.
    Pierwszy if działa poprawnie, drugi też, a trzeci tak szybko że nie zauważasz zmian na portach B

    0
  • #4 31 Maj 2012 14:18
    mazril
    Poziom 2  

    Nie tajne ale schemat ciągle ewoluuje dlatego go niema.
    Działanie ma wyglądać następująco:

    Po otwarciu drzwi lub użyciu pilota centralnego zamka ma się włączyć podświetlenie, w takim przypadku sygnał pojawi się na PD0 i atmel ma włączyć 2 przekaźniki "podpięte" do PB0, PB1

    Po odpaleniu samochodu sygnał ma pojawić się na PD1 i w takim przypadku atmel ma włączyć przekaźnik pod PB0, oraz PB2. Delay powinien zostać umieszczony przed fragmentem kodu stacyjka = 0 ; czyli po zgaszeniu samochodu ma poczekać x czasu i wyłączyć oświetlenie kodem PORTB=0x00.

    Sprawdzam najzwyklejszym miernikiem puszczam napięcie na nóżkę PD0 wtedy pojawia mi się na PB0 i PB1 odcinam PD0 jednocześnie znika PB0 i PB1 (czyli poprawnie) analogicznie to samo robię z PD1 i tu problem bo prawidłowo włącza PB0, PB2 ale po zaniku już nie wyłącza.

    F_CPU jak go wykorzystać zamiast delay powiedzmy do 10 sekundowego opóźnienia ? jestem zielony w programowaniu układów. btw. Układzik to attiny2313


    do: krzysztofh
    Chodzi o ostatniego else kiedy powinien wykonać kod wyłączający piny który nie działa.

    if(bit_is_clear(PIND, PD0) && bit_is_clear(PIND,PD1)) sprawdza czy silnik jest wyłączony i czy drzwi są zamknięte potem sprawdza czy stacyjka jest równa 0 jeżeli tak wyłącza wszystko a jeżeli równe 1 znaczy że silnik był odpalony wtedy poczekaj powiedzmy 10 sekund i wyłącz wszystko.

    0
  • #6 31 Maj 2012 14:32
    LordBlick
    VIP Zasłużony dla elektroda

    Co rozumiesz pod pojęciem sygnał ? Impuls czy stabilny stan ? Jak zapewniasz układowo stabilność tego sygnału ?

    0
  • #7 31 Maj 2012 14:35
    krzysztofh
    Poziom 29  

    Jest jedna drobna kwestia, o której nie piszesz.
    W obecnej wersji programu, po zdjęciu napięcia z PIND1, na krótko są ustawiane wyjścia PORTB1 i PORTB2, a później powinny te porty się wyzerować.

    0
  • #8 31 Maj 2012 14:36
    mazril
    Poziom 2  

    "Co rozumiesz pod pojęciem sygnał ? Impuls czy stabilny stan ? Jak zapewniasz układowo stabilność tego sygnału ?" Stabilny układzik mam na płytce do programowania i podpinam 5v na sztywno pod pin od PD1 więc skoków napięcia żadnych nie ma. Odpinam ręcznie więc mogą być drgania ale to już nie istotne przy wyłączaniu.

    0
  • #9 31 Maj 2012 14:44
    LordBlick
    VIP Zasłużony dla elektroda

    mazril napisał:
    Stabilny układzik mam na płytce do programowania i podpinam 5v na sztywno pod pin od PD1 więc skoków napięcia żadnych nie ma.
    Chciałbym zobaczyć tą "sztywność" przez oscyloskop... ;)
    Proponuję zacząć wyrabiać sobie dobry nawyk pod postacią używania Timera.
    Tutaj jest kod, którego odpowiednie fragmenty mogą się przydać:
    https://www.elektroda.pl/rtvforum/topic2077545.html

    0
  • #10 31 Maj 2012 14:47
    dondu
    Moderator Mikrokontrolery Projektowanie

    mazril napisał:
    Stabilny układzik mam na płytce do programowania i podpinam 5v na sztywno pod pin od PD1 więc skoków napięcia żadnych nie ma.
    Odpinam ręcznie więc mogą być drgania ale to już nie istotne przy wyłączaniu.

    Ponowię prośbę:

    dondu napisał:
    Pokaż schemat.

    0