RTV forum PL | NewsGroups PL

Nawiązanie komunikacji SPI między Atmega8 a MCP2510 - odpowiedzi w formie 'FF'

Atmega8, MCP2510 i komunikacja SPI - problem

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Nawiązanie komunikacji SPI między Atmega8 a MCP2510 - odpowiedzi w formie 'FF'

TRS
Guest

Fri Sep 19, 2008 11:39 am   



Próbuję właśnie nawiązać komunikację przez SPI pomiędzy Atmega8 oraz
układem MCP2510 (kontroler CAN). Połączenia są dobre (MOSI->SI,
MISO<-SO), /SS->/CS, SCK->SCK). Na linii SS mam diodę led, i widze że
atmega nadając, ustawia tą linię w stan niski. SPI działa, program się
wykonuje, ale niestety układ MCP na każdy rozkaz odpowiada bajtami FF
(czyli właściwie nie odpowiada). Nie mam już pomysłu co jest nie tak.
Oto kawałek kodu obsługujący transmisję:

CBI(PORTB,2);

SPDR = 0xa0; //na ten bajt, MCP powinien odpowiedzieć dwoma bajtami ze
statusem
while(!(SPSR & (1<<SPIF)));
CBI(SPSR,SPIF);

SBI(PORTB,2);

SPDR = 0x00;
while(!(SPSR & (1<<SPIF)));
CBI(SPSR,SPIF);
msg[0]=SPDR;

SPDR=0x00;
while((SPSR & 1<<SPIF)==0);
CBI(SPSR,SPIF);
msg[1]=SPDR;

USART_Transmit(msg[0]);
USART_Transmit(msg[1]);

SPI inicjalizuję poprzez:
void SPI_Init(void)
{
/* Enable SPI, Master, set clock rate fck/128 */
SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR1)|(1<<SPR0);
}

Porty atmegi ustawiam na samym początku:
DDRB = 0xef;//0b1110 1111
PORTB = 0x04;//0b0000 0100
DDRC = 0xff;
PORTC = 0x00;
DDRD = 0xff;
PORTD = 0x00;

Ktoś wie gdzie szukać błędu? Wszystkie układy mają zasilanie, a do
oscyloskopu niestety nie mam dostępu...

Z góry dzięki za wszelką pomoc!

Adam Wysocki
Guest

Sat Sep 20, 2008 7:07 am   



TRS <spam@spam.spam> wrote:

Quote:
Próbuję właśnie nawiązać komunikację przez SPI pomiędzy Atmega8 oraz
układem MCP2510 (kontroler CAN). Połączenia są dobre (MOSI->SI,
MISO<-SO), /SS->/CS, SCK->SCK). Na linii SS mam diodę led, i widze że
atmega nadając, ustawia tą linię w stan niski. SPI działa, program się
wykonuje, ale niestety układ MCP na każdy rozkaz odpowiada bajtami FF
(czyli właściwie nie odpowiada). Nie mam już pomysłu co jest nie tak.

1. CS=0
2. Wysyłasz "read status"
3. CS=1

Może status powinieneś odczytać przed ponownym ustawieniem CS? Tak by
wychodziło z punktu 11.5 datasheeta.

--
http://www.jeczarnia.pl/

TRS
Guest

Sat Sep 20, 2008 9:44 am   



Adam Wysocki pisze:
Quote:
Może status powinieneś odczytać przed ponownym ustawieniem CS? Tak by
wychodziło z punktu 11.5 datasheeta.

Faktycznie, tego nie zauważyłem. Mea culpa! Tylko mimo iż CS utrzymuję w
stanie LOW przez całą transmisję, to nadal dostaję w odpowiedzi 0xFF :/

TRS
Guest

Sat Sep 20, 2008 1:58 pm   



Quote:
Faktycznie, tego nie zauważyłem. Mea culpa! Tylko mimo iż CS utrzymuję w
stanie LOW przez całą transmisję, to nadal dostaję w odpowiedzi 0xFF :/

Problem rozwiązany. Dla potomnych, przyczyną był zimny lut na rezystorze
podciągającym pin RESET układu MCP2510 :/

elektroda NewsGroups Forum Index - Elektronika Polska - Nawiązanie komunikacji SPI między Atmega8 a MCP2510 - odpowiedzi w formie 'FF'

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map