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

[ATmega32][SPI] Kilka urządzeń na SPI - problem

21 Cze 2008 13:16 3535 2
  • Poziom 18  
    Witam.
    Podczas uruchamiania pewnego generatora DDS obsługującego układy AD9831 oraz AD8321, napotkałem na problem. Oba układy komunikują się z zewnętrzem za pomocą SPI.
    Problem jest następujący. Bezpośrednio po zaprogramowaniu ATmega32, program wykonuje się dopóki nie spotka definicji obsługi wysyłania bajtów na magistralę SPI. Następnie nie odpowiada. Co ciekawe jeśli odłączę zasilanie i ponownie uruchomię układ to działa on poprawnie. Niekiedy również po załączeniu zasilania program się wiesza i musze zrestartować go i kolejne uruchomienie jest poprawne. Trzeba dodać, że programator podpięty jest non stop do układu i z obserwacji wynika, że jego przepinanie nie ma wpływu na działanie/nie działanie układu.
    Zastanawiam się czy nie powinienem podciągnąć wyjść CS1 i CS2 do zasilania, ale skoro ustawione są one jako wyjścia to w trybie Master nie powinno być problemu. Poniżej widoczny rysunek podłączenia układów (nie ma żadnych buforów). Sterowanie urządzeniami za pomocą wyjść CS.
    [ATmega32][SPI] Kilka urządzeń na SPI - problem
    Dodatkowo poniżej prezentuje kluczowe funkcje obsługi SPI przeze mnie:

    Inicjalizacja SPI
    Code:

    SPCR = _BV(SPE) | _BV(MSTR) | _BV(CPOL); 
    SPSR = _BV(SPI2X);    
    DDRB=0xff;
    PORTB=0x18;


    Wysłanie bajtu danych
    Code:

    PORTB &= ~_BV(AD8321_CS);
    SPDR = data;
    while(!(SPSR & _BV(SPIF)));         
    PORTB |= _BV(AD8321_CS);    
  • Pomocny post
    Poziom 34  
    Jakiś czas temu był podobny problem - pin SS (PB4, u ciebie pokrywa się z CS1) był konfigurowany jako wyjście PO ustawieniu bitu MSTR (jeśli przy ustawianiu bitu MSTR na pinie SS będącym jeszcze wejściem był stan niski, to bit MSTR się nie ustawi). Spróbuj przenieść przypisanie do DDR'a przed inicjalizację SPI.
  • Poziom 18  
    Dziękuję bardzo - PODZIAŁAŁO, a tyle mi to już krwi napsuło.