logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[Atmega88][Bascom] SPI sprzętowe - konfiguracja.

sokmarcin 21 Sie 2008 14:22 2383 3
  • #1 5459730
    sokmarcin
    Poziom 20  
    witam

    Mam problem z up Atmega88 - nie działa SPI. skonfigurowany jest jako master (spi sprzętowe) - wg noty katalogowej, jednak jak chce coś wysłać program staje (w symulacji i w układzie) , uzywam komenty SPIOUT. Wcześniej ten sam algorytm uzywałem na atmedze8 i wszystko było ok. Oczywiście zmieniłem w opcjach procesor i przekompilowałem program dla nowego procesora. Pozatym procesor działa.
    Co może byc nie tak? Bascom nie obsługuje wszystkich funkcji dla Atmegi88?
  • #2 5459913
    paluszasty
    Poziom 25  
    A dobrze masz konfigurowane piny wyjściowe?? Zobacz czy gdzieś w zakładkach kompilatora nie masz ustawionych inaczej niż na początku kodu, BASCOM czasem w takich wypadkach głupieje.
    Pozdrawiam
  • #3 5459998
    BoskiDialer
    Poziom 34  
    Strzelam, że pin SS jest konfigurowany jako wyjście po zainicjalizowaniu SPI, lub nie jest wcale konfigurowany. Żeby SPI działało jako master, pin SS musi być wejściem, na którym panuje stan wysoki, lub wyjściem (tu nie ma znaczenia jaki jest stan), w przeciwnym przypadku przełącza się na Slave - jeśli podczas inicjalizacji SS jest wejściem w stanie niskim, nie załączy się tryb master, a z powodu braku zewnętrznego źródła zegara transmisja przez SPI będzie się blokować.
  • #4 5471965
    sokmarcin
    Poziom 20  
    Witam,
    dziękuje za odpowiedz, ja niestety mam ograniczony dostęp do internetu i stąd to opóźnienie.

    Generalnie problem rozwiązałem wstawką w asm gdzie wpisuje bajt do rejestru SPDR i czekam aż bit SPIF z rejestru SPSR będzie równy 1.
    Różnica pomiędzy M8 i M88 jest w podprograme sprawdzającym bit SPIF

    dla Atmega8
    sbis SPSR,SPIF 
    rjmp _spi_Wait 
    ret


    dla Atmega88:
    in r16, SPSR
    sbrs r16, SPIF
    rjmp Wait_Transmit
    ret


    nie wiem, co kryje się za instrukcja SPIOUT, ale podejżewam, że problem może być w sposobie sprawdzania bitu. (sbis SPSR,SPIF nie działa na M88)
REKLAMA