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.
Dodatkowo poniżej prezentuje kluczowe funkcje obsługi SPI przeze mnie:
Inicjalizacja SPI
Wysłanie bajtu danych
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.
Dodatkowo poniżej prezentuje kluczowe funkcje obsługi SPI przeze mnie:
Inicjalizacja SPI
SPCR = _BV(SPE) | _BV(MSTR) | _BV(CPOL);
SPSR = _BV(SPI2X);
DDRB=0xff;
PORTB=0x18;Wysłanie bajtu danych
PORTB &= ~_BV(AD8321_CS);
SPDR = data;
while(!(SPSR & _BV(SPIF)));
PORTB |= _BV(AD8321_CS);