Hallo zusammen
Ich versuche die SPI Schnittstelle eines Atmega64 als Master in betrieb
zu nehmen, aber ich scheitere schon daran, dass ich keine "transmission
complete" bekomme (der Controller bleibt also in der while-Schleife in
SPI_MasterTransmit hängen). Komischerweise funktioniert es, wenn ich den
Controller mit 5V betreibe, nicht aber wenn ich ihn mit 3,3V betreibe.
Ich verwende den Code aus dem Datenblatt:
1 | void SPI_MasterInit(void)
|
2 | {
|
3 | /* Set MOSI and SCK output, all others input */
|
4 | DDRB = (1<<2)|(1<<1);
|
5 | /* Enable SPI, Master, set clock rate fck/16 */
|
6 | SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);
|
7 | }
|
8 | void SPI_MasterTransmit(char cData)
|
9 | {
|
10 | /* Start transmission */
|
11 | SPDR = cData;
|
12 | /* Wait for transmission complete */
|
13 | while(!(SPSR & (1<<SPIF)));
|
14 | }
|
und main sieht so aus:
1 | int main( void )
|
2 | {
|
3 | SPI_MasterInit();
|
4 |
|
5 | SPI_MasterTransmit('A');
|
6 | }
|
Hat jemand eine Ahnung was ich falsch mache?
Ich habe es auch noch einmal mit einem Atmega128 probiert, habe aber
genau das gleiche Problem.
Vielen Dank im Voraus.
Lolle