eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronika › Nieposłuszna Atmega nie zmienia stanu linii
Ilość wypowiedzi w tym wątku: 10

  • 1. Data: 2013-09-01 21:53:27
    Temat: Nieposłuszna Atmega nie zmienia stanu linii
    Od: Atlantis <m...@w...pl>

    Mam dziwny problem z Atmegą.
    W układzie dwie linie są wykorzystywane do sterowania kluczami CD4066.
    Makrodefinicje włączające i wyłączające klucz wyglądają standardowo:

    #define ON1 PORTC |= _BV(2)
    #define OFF1 PORTC &= ~_BV(2)
    #define ON2 |= _BV(7)
    #define OFF2 PORTD &= ~_BV(7)

    Jeśli na początku programu ustawię którąś z linii w konkretnym stanie -
    wszystko jest ok. Napięcie na porcie się pojawia, albo nie. Sygnał jest
    puszczany, albo nie.

    Dziwna rzecz zaczyna się dziać, gdy w nieskończonej pętli próbuję zrobić
    cykliczne włączanie i wyłączanie klucza:

    int main (void)
    {
    while(1)
    {
    ON1;
    _delay_ms(1000);
    OFF1;
    }
    }

    Program z uporem maniaka trzyma się stanu ustawionego na początku i za
    nic nie chce go zmienić...

    Jaką przyczynę typujecie? Błąd w programie, uszkodzony port Atmegi, a
    może CD4066 coś miesza?


  • 2. Data: 2013-09-01 21:55:52
    Temat: Re: Nieposłuszna Atmega nie zmienia stanu linii
    Od: Atlantis <m...@w...pl>

    W dniu 2013-09-01 21:53, Atlantis pisze:

    > #define ON2 |= _BV(7)

    Tutaj oczywiście miało być:
    #define ON2 PORTD |= _BV(7)
    Błąd powstał podczas redagowania wiadomości - w programie jest ok.


  • 3. Data: 2013-09-01 21:57:40
    Temat: Re: Nieposłuszna Atmega nie zmienia stanu linii
    Od: Atlantis <m...@w...pl>

    I jeszcze jedno - czy podłączenie do masy nieużywanych kluczy z CD4066
    (zarówno sterowanie jak i końcówki "włączników") może mieć jakiś
    negatywny wpływ na działanie układu?


  • 4. Data: 2013-09-01 21:58:19
    Temat: Re: Nieposłuszna Atmega nie zmienia stanu linii
    Od: AK <a...@g...com>

    W dniu 2013-09-01 21:53, Atlantis pisze:
    > Mam dziwny problem z Atmegą.
    > W układzie dwie linie są wykorzystywane do sterowania kluczami CD4066.
    > Makrodefinicje włączające i wyłączające klucz wyglądają standardowo:
    >
    > #define ON1 PORTC |= _BV(2)
    > #define OFF1 PORTC &= ~_BV(2)
    > #define ON2 |= _BV(7)
    > #define OFF2 PORTD &= ~_BV(7)
    >
    > Jeśli na początku programu ustawię którąś z linii w konkretnym stanie -
    > wszystko jest ok. Napięcie na porcie się pojawia, albo nie. Sygnał jest
    > puszczany, albo nie.
    >
    > Dziwna rzecz zaczyna się dziać, gdy w nieskończonej pętli próbuję zrobić
    > cykliczne włączanie i wyłączanie klucza:
    >
    > int main (void)
    > {
    > while(1)
    > {
    > ON1;
    > _delay_ms(1000);
    > OFF1;
    > }
    > }
    >
    A nie powinno być:

    int main (void)
    {
    while(1)
    {
    ON1;
    _delay_ms(1000);
    OFF1;
    _delay_ms(1000);
    }
    }

    Pozdr
    AK

    > Program z uporem maniaka trzyma się stanu ustawionego na początku i za
    > nic nie chce go zmienić...
    >
    > Jaką przyczynę typujecie? Błąd w programie, uszkodzony port Atmegi, a
    > może CD4066 coś miesza?
    >


  • 5. Data: 2013-09-01 21:59:58
    Temat: Re: Nieposłuszna Atmega nie zmienia stanu linii
    Od: BartekK <s...@d...org>

    W dniu 2013-09-01 21:53, Atlantis pisze:
    > int main (void)
    > {
    > while(1)
    > {
    > ON1;
    > _delay_ms(1000);
    > OFF1;
    > }
    > }
    A ta pętla robi:
    ON1;
    czekaj1000
    OFF1;
    ON1;
    czekaj1000
    OFF1;
    ON1;
    czekaj1000
    OFF1;
    ON1;
    .... itd
    Czyli raz ci mignie ON > 1000ms > OFF, a potem dostajesz tylko krótkie
    mignięcia o szerokości kilku cykli procesora (prawie nic)...


    --
    | Bartłomiej Kuźniewski
    | s...@d...org GG:23319 tel +48 696455098 http://drut.org/
    | http://www.allegro.pl/show_user_auctions.php?uid=338
    173


  • 6. Data: 2013-09-01 22:00:31
    Temat: Re: Nieposłuszna Atmega nie zmienia stanu linii
    Od: Sebastian Biały <h...@p...onet.pl>

    On 2013-09-01 21:53, Atlantis wrote:\
    > while(1)
    > {
    > ON1;
    > _delay_ms(1000);
    > OFF1;
    > }

    Kiedyś dawałem studentom taką zagadkę czemu nie działa :)

    while(1)
    {
    ON1;
    _delay_ms(1000);
    OFF1;
    _delay_ms(1000);
    }


  • 7. Data: 2013-09-01 22:02:30
    Temat: Re: Nieposłuszna Atmega nie zmienia stanu linii
    Od: Jakub Rakus <s...@o...pl>

    W dniu 01.09.2013 21:53, Atlantis pisze:

    > int main (void)
    > {
    > while(1)
    > {
    > ON1;
    > _delay_ms(1000);
    > OFF1;
    > }
    > }

    Kiedyś też z czymś podobnym walczyłem - jak się okazało, po nakierowaniu
    przez grupowiczów, przyczyną był kompilator i jego opcje optymalizacji -
    uznawał tego typu konstrukcje za zbędne - zobacz w asemblerze jak to
    wygląda.


    --
    Pozdrawiam
    Jakub Rakus


  • 8. Data: 2013-09-01 22:05:28
    Temat: Re: Nieposłuszna Atmega nie zmienia stanu linii
    Od: Michał Lankosz <m...@t...pl>

    W dniu 2013-09-01 21:53, Atlantis pisze:
    > int main (void)
    > {
    > while(1)
    > {
    > ON1;
    > _delay_ms(1000);
    > OFF1;
    > }
    > }
    >
    > Program z uporem maniaka trzyma się stanu ustawionego na początku i za
    > nic nie chce go zmienić...
    >
    > Jaką przyczynę typujecie? Błąd w programie, uszkodzony port Atmegi, a
    > może CD4066 coś miesza?

    W tej pętli na wyjściu 1 stan OFF będzie przez jakieś ułamki
    mikrosekundy. Mierząc woltomierzem na pewno będzie stan ON przez cały
    czas. Dodaj delay za OFF1.

    --
    Michał


  • 9. Data: 2013-09-01 22:14:34
    Temat: Re: Nieposłuszna Atmega nie zmienia stanu linii
    Od: Atlantis <m...@w...pl>

    W dniu 2013-09-01 21:58, AK pisze:

    > A nie powinno być:
    >
    > int main (void)
    > {
    > while(1)
    > {
    > ON1;
    > _delay_ms(1000);
    > OFF1;
    > _delay_ms(1000);
    > }
    > }

    Faktycznie.
    Jak widać faktycznie nie opłaca się siedzieć zbyt długo nad projektem... ;)


  • 10. Data: 2013-09-02 09:01:15
    Temat: Re: Nieposłuszna Atmega nie zmienia stanu linii
    Od: g...@s...invalid (Adam Wysocki)

    Atlantis <m...@w...pl> wrote:

    > Mam dziwny problem z Atmegą.

    Problem już rozwiązany, ale ja nie o tym. Czasami gdy jest podobny problem
    i nie sprowadza się do braku delaya, warto sprawdzić fusebity (np. JTAGEN).

    Przykład: http://www.elektroda.pl/rtvforum/topic809004.html

    Tak w ramach ciekawostki.

    --
    "zanim nastala era internetu, kazdy wiejski glupek siedzial w swojej wiosce"
    http://www.chmurka.net/

strony : [ 1 ]


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: