eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronika › zamulający program na AVR
Ilość wypowiedzi w tym wątku: 28

  • 1. Data: 2016-04-07 15:58:18
    Temat: zamulający program na AVR
    Od: badworm <n...@p...pl>

    To znów ja, i pewnie znów z problemem, który ma jakieś banalne
    rozwiązanie. Postawnowiłem się w końcu przesiąść z mocno już leciwego
    GCC AVR (pakiet WinAVR) w wersji 20050214 na najnowszą jaka jest
    dostępna. Program na Mega 8, napisany na starej wersji, skompilował się
    bez błędów i ostrzeżeń (te dotyczące innego umiejscowienia niektórych
    bibliotek jak signal.h skrupulatnie wypełniłem). Niestety w rzeczywistym
    układzie jest totalna porażka - urządzenie zachowuje się, jakby nie było
    taktowane kwarcem 8MHz, lecz co najwyżej 10kHz. Cały program wykonuje
    się koszmarnie wolno, np. dane na wyświetlacz OLED wysyłane po I2C
    pojawiają się teraz znak po znaku, a wcześniej następowało to bez
    widocznego opóźnienia.

    Coś się pozmieniało w bibliotekach, czy w w makefile powinienem coś
    dopisać bądź zmienić?
    --
    Pozdrawiam Bad Worm badworm[maupa]post{kropek}pl
    GG#2400455 ICQ#320399066


  • 2. Data: 2016-04-07 17:04:31
    Temat: Re: zamulający program na AVR
    Od: szod <b...@a...pl>

    W dniu 2016-04-07 o 15:58, badworm pisze:

    > Niestety w rzeczywistym
    > układzie jest totalna porażka - urządzenie zachowuje się, jakby nie było
    > taktowane kwarcem 8MHz, lecz co najwyżej 10kHz. Cały program wykonuje
    > się koszmarnie wolno, np. dane na wyświetlacz OLED wysyłane po I2C
    > pojawiają się teraz znak po znaku, a wcześniej następowało to bez
    > widocznego opóźnienia.

    To sprawdź ustawienia bitów konfiguracyjnych uC - na jakim oscylatorze
    pracuje.


  • 3. Data: 2016-04-07 17:37:01
    Temat: Re: zamulający program na AVR
    Od: badworm <n...@p...pl>

    Dnia Thu, 7 Apr 2016 17:04:31 +0200, szod napisał(a):

    > To sprawdź ustawienia bitów konfiguracyjnych uC - na jakim oscylatorze
    > pracuje.

    Kompilator do fusebitów raczej dostępu nie ma. Przed chwilą porównałem
    prędkość zegara I2C dla wsadów z obu kompilatorów. Różnica jest
    kolosalna - dla nowego GCC to zaledwie 5kHz, dla starego ponad 80kHz.
    Kod generujący opóźnienia dla tej magistrali wygląda tak:

    #include <avr\io.h>
    #include <inttypes.h>

    #include "harddef.h"
    #include "makra.h"
    #include "i2c.h"

    // Wyliczenie czasu opóźnienia połówkowego i ćwiartkowego (cykle)
    #define I2C_nhalf (F_CPU/I2C_SPEED/2)

    // Funkcja dłuższych opóźnień
    #if I2C_nhalf < 3
    // Nic
    #elif I2C_nhalf < 8
    static void i2c_xdelay(void)
    {
    NOP();
    }
    #else
    #define I2C_delayloops (1+(I2C_nhalf-8)/3)
    #if I2C_delayloops > 255
    #error Przyspiesz - bo sie nie wyrabiam ;)
    #endif
    static void i2c_xdelay(void)
    {
    asm volatile( \
    "delayus8_loop%=: \n\t"\
    "dec %[ticks] \n\t"\
    "brne delayus8_loop%= \n\t"\
    : :[ticks]"r"(I2C_delayloops) );
    }
    #endif //I2C_nhalf >= 3

    // Opóźnienia dla I2C
    static inline void i2c_hdelay(void)
    {
    #if I2C_nhalf < 1
    return; // To jest funkcja inline, jeśli składa się tylko z "return"
    jest usuwana podczas optymalizacji
    #elif I2C_nhalf < 2
    NOP();
    #elif I2C_nhalf < 3
    asm volatile(
    "rjmp exit%=\n\t"
    "exit%=:\n\t"::);
    #else
    i2c_xdelay();
    #endif
    }
    --
    Pozdrawiam Bad Worm badworm[maupa]post{kropek}pl
    GG#2400455 ICQ#320399066


  • 4. Data: 2016-04-07 18:12:39
    Temat: Re: zamulający program na AVR
    Od: Grzegorz Kurczyk <g...@c...usun.slupsk.pl>

    W dniu 07.04.2016 o 17:37, badworm pisze:
    > Dnia Thu, 7 Apr 2016 17:04:31 +0200, szod napisał(a):
    >
    >> To sprawdź ustawienia bitów konfiguracyjnych uC - na jakim oscylatorze
    >> pracuje.
    >
    > Kompilator do fusebitów raczej dostępu nie ma. Przed chwilą porównałem
    > prędkość zegara I2C dla wsadów z obu kompilatorów. Różnica jest
    > kolosalna - dla nowego GCC to zaledwie 5kHz, dla starego ponad 80kHz.
    > Kod generujący opóźnienia dla tej magistrali wygląda tak:
    >
    > #include <avr\io.h>
    > #include <inttypes.h>
    >
    > #include "harddef.h"
    > #include "makra.h"
    > #include "i2c.h"
    >
    > // Wyliczenie czasu opóźnienia połówkowego i ćwiartkowego (cykle)
    > #define I2C_nhalf (F_CPU/I2C_SPEED/2)

    F_CPU masz dobrze ustawione?


    --
    Pozdrawiam
    Grzegorz


  • 5. Data: 2016-04-07 19:01:15
    Temat: Re: zamulający program na AVR
    Od: badworm <n...@p...pl>

    Dnia Thu, 7 Apr 2016 18:12:39 +0200, Grzegorz Kurczyk napisał(a):

    > F_CPU masz dobrze ustawione?

    Tak, F_CPU = 8000000. Rzecz polega na tym, że dokładnie ten sam projekt
    skompilowany na starym GCC chodzi prawidłowo, a na nowym - muli się.
    --
    Pozdrawiam Bad Worm badworm[maupa]post{kropek}pl
    GG#2400455 ICQ#320399066


  • 6. Data: 2016-04-07 20:02:17
    Temat: Re: zamulający program na AVR
    Od: AlexY <a...@i...pl>

    badworm pisze:
    [..]
    > #include "i2c.h"

    Ja nie szprecham w C więc może się mylę, czy Ty nie używasz sprzętowego
    I2C ? Atmega 8 ma takowy i działa znakomicie.
    [..]


    --
    AlexY
    http://faq.enter.net.pl/simple-polish.html
    http://www.pg.gda.pl/~agatek/netq.html


  • 7. Data: 2016-04-08 08:58:26
    Temat: Re: zamulający program na AVR
    Od: wchpikus <w...@w...wp.pl>

    W dniu 2016-04-07 o 20:02, AlexY pisze:
    > badworm pisze:
    > [..]
    >> #include "i2c.h"
    >
    > Ja nie szprecham w C więc może się mylę, czy Ty nie używasz sprzętowego
    > I2C ? Atmega 8 ma takowy i działa znakomicie.
    > [..]
    >
    >
    i2c masz sprzętowy czy softowy?
    Mozesz pokazac biblioteki do TWI?



  • 8. Data: 2016-04-08 12:51:29
    Temat: Re: zamulający program na AVR
    Od: AlexY <a...@i...pl>

    wchpikus pisze:
    > W dniu 2016-04-07 o 20:02, AlexY pisze:
    >> badworm pisze:
    >> [..]
    >>> #include "i2c.h"
    >>
    >> Ja nie szprecham w C więc może się mylę, czy Ty nie używasz sprzętowego
    >> I2C ? Atmega 8 ma takowy i działa znakomicie.
    >> [..]
    >>
    >>
    > i2c masz sprzętowy czy softowy?
    > Mozesz pokazac biblioteki do TWI?

    Komu odpisujesz? Bo to raczej nie do mnie pytanie.


    --
    AlexY
    http://faq.enter.net.pl/simple-polish.html
    http://www.pg.gda.pl/~agatek/netq.html


  • 9. Data: 2016-04-08 15:51:41
    Temat: Re: zamulający program na AVR
    Od: "Grzegorz Niemirowski" <g...@p...onet.pl>

    badworm <n...@p...pl> napisał(a):
    > Kompilator do fusebitów raczej dostępu nie ma. Przed chwilą porównałem
    > prędkość zegara I2C dla wsadów z obu kompilatorów. Różnica jest
    > kolosalna - dla nowego GCC to zaledwie 5kHz, dla starego ponad 80kHz.
    > Kod generujący opóźnienia dla tej magistrali wygląda tak:

    Może to jest kwestia optymalizacji? Czy nie lepiej te opóźnienia generować z
    pomocą timera lub też funkcjami bibliotecznymi? Rozumiem, że to jest
    programowe I2C i nie możesz użyć sprzętowego?

    --
    Grzegorz Niemirowski
    http://www.grzegorz.net/
    OE PowerTool i Outlook Express: http://www.grzegorz.net/oe/
    Uptime: 16 days, 15 hours, 46 minutes and 23 seconds


  • 10. Data: 2016-04-08 16:53:27
    Temat: Re: zamulający program na AVR
    Od: Marek <f...@f...com>

    On Thu, 7 Apr 2016 17:37:01 +0200, badworm <n...@p...pl> wrote:
    > NOP();

    Co w tym jest?

    --
    Marek

strony : [ 1 ] . 2 . 3


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: