| Author |
Message
|
sokmarcin Poziom 18

Joined: 28 Mar 2004 Posts: 464 Location: Kraków/Częstochowa
|
#1
21 Aug 2008 14:22 [Atmega88][Bascom] SPI sprzętowe - konfiguracja. |
|
|
|
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?
|
|
| Back to top |
|
 |
Google

|
#
21 Aug 2008 14:22 |
|
|
|
|
|
| Back to top |
|
 |
paluszasty Poziom 18

Joined: 12 Mar 2006 Posts: 571 Location: Łódź
|
#2
21 Aug 2008 15:16 Re: Atmega88, SPI i bascom |
|
|
|
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
|
|
| Back to top |
|
 |
Google

|
#
21 Aug 2008 15:16 |
|
|
|
|
|
| Back to top |
|
 |
BoskiDialer Poziom 22

Joined: 28 Nov 2003 Posts: 1533 Location: Żory
|
#3
21 Aug 2008 15:43 Re: Atmega88, SPI i bascom |
|
|
|
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ć.
|
|
| Back to top |
|
 |
Google

|
#
21 Aug 2008 15:43 |
|
|
|
|
|
| Back to top |
|
 |
sokmarcin Poziom 18

Joined: 28 Mar 2004 Posts: 464 Location: Kraków/Częstochowa
|
#4
25 Aug 2008 09:40 Re: [Atmega88][Bascom] SPI sprzętowe - konfiguracja. |
|
|
|
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
| Code: |
sbis SPSR,SPIF
rjmp _spi_Wait
ret |
dla Atmega88:
| Code: |
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)
|
|
| Back to top |
|
 |