Bonjour,
Je n'arrive pas à faire communiquer mon Atmega par SPI en mode master. Après plusieurs heures à bloquer sur ce problème j'ai réduit le programme au maximum mais toujours rien.
Information utile : Je programme en c (avec WINAVR) sur un ATmega644 cadencé à 20Mhz. J'utilise un oscilloscope pour visualiser le signal.
Voici le programme :Sur l'oscillo, je n'observe que la broche PB4 passer de 1 à 0. Rien d'autre ne se produit... même pas d'horloge.Code:#include <avr/io.h> #define F_CPU 20000000UL int main (void) { // make the MOSI, SCK, and SS pins outputs DDRB |= ( 1 << PB5 ) | ( 1 << PB7 ) | ( 1 << PB4 ); PORTB |= (1 << PB4); // SS high // make sure the MISO pin is input DDRB &= ~( 1 << PB6 ); // set up the SPI module: SPI enabled, MSB first, master mode, // clock polarity and phase = 0, F_osc/8 SPCR = 0b01010001; SPSR = 0b00000001; // set double SPI speed for F_osc/8 //------------------------------------------------------------------------ PORTB &= ~( 1 << PB4); //PB4 low SPDR = 10; while ( ! ( SPSR & ( 1 << SPIF ))); PORTB |= (1 << PB4); //PB4 high while (1) { } return 1; }
J'ai vérifié (et fait vérifié) mon montage à plusieurs reprise, il est correct.
Une idée ?
-----