Skocz do zawartości

Atmega 328 poblem z ekspanderem, SPI.


dejmieno

Pomocna odpowiedź

Witam,

Usiluje polaczyc sie z ekspanderem pinow IO MCP23S08-E/P poprzez SPI. Czy myslicie ze kod jest dobry? Jesli tak tzn. ze problem jest gdzies w polaczeniu ekspandera. Jak widac ponizej probuje zapalic diode led pod pinem GP0 ekspandera. 

#include <avr/io.h>
#include <util/delay.h>

void init_spi(void);

void transfer_data(uint8_t data);

int main(void) {
	
	init_spi();

	transfer_data(0x40);
	transfer_data(0x00);
	transfer_data(~0x01);

	transfer_data(0x40);
	transfer_data(0x0A);
	transfer_data(0x01);
	while (1) {

	}
}

void init_spi(void) {
	DDRB = (1 << 3) | (1 << 5);

	SPCR = (1 << SPE) | (1 << MSTR) | (1 << SPR0);
}

void transfer_data(uint8_t data) {
	SPDR = data;
	while(!(SPSR & (1 << SPIF) ));
}

 

Link do komentarza
Share on other sites

@dejmieno, powtórzę swój komentarz z innego tematu 😉

Jeśli pytasz o poprawność funkcji to przydałaby się komentarze lub słowny opis tego, co według Ciebie (i jak) robi dany fragment kodu. Inaczej może się okazać, że ktoś potwierdzi poprawność kodu, a całość będzie działała inaczej niż myślisz. W tym wypadku warto też pokazać sposób podłączenia ekspandera, bo bez tego ciężko określić co zrobiłeś z pinami ustawiającymi adres ekspandera.

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.