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

Atmega 8 - Atmega + 74hc595 nieprowidłowa komunikacja SPI

DOHC 26 Wrz 2012 11:08 3885 6
  • #1 26 Wrz 2012 11:08
    DOHC
    Poziom 19  

    Witam

    Zacząłem niedawno przygodę z mikrokontrolerami, swoją naukę opieram na książce Mirosława Kardasia Mikrokontrolery AVR język C. Nie korzystam z płytki proponowanej przez autora, staram się budować układy do testów sam. Doszedłem właśnie do rozdziału o SPI i napotkałem problem z prawidłowym uruchomieniem tej transmisji. Rozdział ten jest dla mnie o tyle ważny że z transmisji SPI będą korzystać urządzenia których chęć zbudowania zmotywowała mnie do nauki programowania mikrokontorlerów.

    Do rzeczy. Atmega ma sterować układem 74HC595 w taki sposób abym mógł wykorzystać linijkę diodową jako wskaźnik. Wykorzystuje do tego Spi sprzętowe (z softowym też próbowałem ale efekty nie były lepsze). Układ teoretycznie odbiera poprzez linie MOSI bajt wysyłany z atmegi i po odebraniu ostatniego bitu ładuje go na wyjścia. Czyli jeśli w bajcie bit0 = 0 to na wyjściu z układu będzie 0.

    Poskładałem układ według tego schematu:
    Atmega 8 - Atmega + 74hc595 nieprowidłowa komunikacja SPI
    Napisałem taki program:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Program ten powinien zapalać poszczególne diody co 2 sekundy. Jak działa układ przedstawia poniższy film:

    Link


    Układ obsługuje 8 diod od lewej. Czerwone diody to QH,QG itd... zielona to QA

    Co powoduje ten bałagan ? Dopowiem jeszcze że zdarza się że np od diody QA do diody QF diody zapalają się poprawnie i zaczyna wariować na końcu. Analizowałem kod wiele razy i wygląda na to że jest on napisany dobrze. Czy nieprawidłowe działanie układu może wynikać z zakłóceń ? Dodam jeszcze że całość jest zasilana ze starej ładowarki do tel. i zasilanie przy układzie 74HC595 nie jest w żaden sposób filtrowane. Podpowiecie mi gdzie szukać problemów ?

    pozdrawiam

    0 6
  • Arrow Multisolution Day
  • #2 26 Wrz 2012 12:06
    1906770
    Użytkownik usunął konto  
  • Arrow Multisolution Day
  • #3 26 Wrz 2012 12:36
    DOHC
    Poziom 19  

    Witam

    Dziękuje za reakcje.
    Definicje wprowadziłem żeby program był dla mnie czytelniejszy podczas eksperymentów. Nie powinno to mieć chyba wpływu na działanie samego programu bo wg książki z której korzystam kompilator zastępuje słowa po #define ciągiem znaków który występuje po słowie. Co do sygnału wyzwalającego to jest to sygnał SS i jego narastanie przenosi zawartość magazynu na wyjścia. Program to zapewnia. Film zmieniłem na publiczny. Rzućcie okiem jak to jest zmontowane, popełniłem niezłego pająka i obawiam się że tu może leżeć problem.


    Pozdrawiam

    0
  • #4 26 Wrz 2012 13:09
    1906770
    Użytkownik usunął konto  
  • #6 26 Wrz 2012 14:10
    DOHC
    Poziom 19  

    Witam

    Wrzuciłem Twoje funkcje do mojego kodu, całość skompilowałem ta:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    dodatkowo ustawiłem wszystkie porty w procku jako wyjścia żeby nic nie siało tą drogą. Nie dało to żadnego efektu układ na tym godzie pracuje tak :

    Link


    Co do mikrokontrolera to jest on uruchomiony na gotowej płytce kupionej z allegro i piny od ADC i wszystkie zasilające są podłączone. Są też kondensatory filtrujące zasilanie. (te kosteczki smd pomiędzy pinami vcc i gnd to chyba kondensatory) Więc procesor podłączony jest prawidłowo.
    Zdjęcia płytki mikrokontrolera
    Niewłaściwie dodane obrazki usunąłem. https://www.elektroda.pl/rtvforum/topic2053101.html [Mirek Z.]

    To że diody świecą razem nie jest spowodowane żadnym błędem w lutowaniu. To sprawdziłem na początku.

    pozdrawiam

    0
  • #7 27 Wrz 2012 13:39
    DOHC
    Poziom 19  

    Witam

    Udało mi się doprowadzić układ do porządku. Dorzuciłem kondensator 10uF na płytke przy 74hc595 i 100 nf przy samej nóżce zasilającej ale to nic nie zmieniło. Dopiero zmiana przewodów na ekranowane załatwiła sprawe. Pozdrawiam i dziękuje za pomoc.

    0