Witam,
Próbuje połączyć dwa uP atmega8 ze sobą poprzez SPI. Na układ slave wgrałem soft
i działa jedynie gdy układ master skonfigurowany jest w ten sposób:
kod ten zaczerpnąłem z jakiejś stronki (chciałem poprostu sprawdzić w praktyce jak ta komunikacja przebiega) nie doszukałem się w tym kodzie jednak ustawienia wyprowadzenia SS w stan wysoki w spoczynku i niski przy komunikacji. Sprawdziłem miernikiem i jest cały czas stan niski. Chciałbym aby po komunikacji pojawił się stan wysoki więc dodałem:
No i teraz wyprowadzenie SS zmienia swój stan ale układ slave nie odbiera żadnej danej. Co zrobiłem źle?
Próbuje połączyć dwa uP atmega8 ze sobą poprzez SPI. Na układ slave wgrałem soft
i działa jedynie gdy układ master skonfigurowany jest w ten sposób:
void SPI_init(void){
DDRB = ((1<<DDB3)|(1<<DDB5)|(1<<DDB0)); //spi pins on port b MOSI SCK,SS outputs
SPCR = ((1<<SPE)|(1<<MSTR)|(1<<SPR0)|(1<<CPOL)|(1<<CPHA)); // SPI enable, Master, f/16
}
int SPI_manipulator(int slij){
SPDR = slij;
while(!(SPSR & (1<<SPIF))) ;
}
int main()
{
int wyslij=137;
while(1)
{
SPI_init();
SPI_manipulator(wyslij);
SPDR = 0;
}
}
kod ten zaczerpnąłem z jakiejś stronki (chciałem poprostu sprawdzić w praktyce jak ta komunikacja przebiega) nie doszukałem się w tym kodzie jednak ustawienia wyprowadzenia SS w stan wysoki w spoczynku i niski przy komunikacji. Sprawdziłem miernikiem i jest cały czas stan niski. Chciałbym aby po komunikacji pojawił się stan wysoki więc dodałem:
void SPI_init(void){
DDRB = ((1<<DDB3)|(1<<DDB5)|(1<<DDB0)); //spi pins on port b MOSI SCK,SS outputs
SPCR = ((1<<SPE)|(1<<MSTR)|(1<<SPR0)|(1<<CPOL)|(1<<CPHA)); // SPI enable, Master, f/16
}
int SPI_manipulator(int slij){
PORTB &= ~_BV(0);
SPDR = slij;
while(!(SPSR & (1<<SPIF))) ;
PORTB |= _BV(0);
}
int main()
{
int wyslij=137;
while(1)
{
SPI_init();
SPI_manipulator(wyslij);
SPDR = 0;
}
}
No i teraz wyprowadzenie SS zmienia swój stan ale układ slave nie odbiera żadnej danej. Co zrobiłem źle?