ATMEGA644p + SPI = Problem

OP #2021885
Lesenswert?
• ▲
▼
Hallo Leute,

ich stehe irgendwie auf dem Schlauch, die SPI-Schnittstelle an einem 
ATMEGA644p zum laufen zu bekommen. Eigentlich sollte das ja nicht so 
schwer sein - dachte ich.

Diesen Programcode habe ich im Web gefunden und die Pins an den 644p 
angepasst. Im realen Leben läuft das aber leider nicht, im Simulator 
bleibt es in der while-Schleife der Transmit-Funktion hängen.

Was habe ich übersehen?

Vielen Dank für eure Hilfe,

Gruß, DetlevT
1
#include <avr\io.h>
2

3
#define DD_MOSI     PINB5
4
#define DD_SCK     PINB7
5
#define DDR_SPI    DDRB
6

7
void SPI_MasterInit(void)
8
{
9
// Set MOSI and SCK output, all others input
10
DDR_SPI = (1<<DD_MOSI)|(1<<DD_SCK);
11
// Enable SPI, Master, set clock rate fck/16
12
SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);
13
}
14

15
void SPI_MasterTransmit(char cData)
16
{
17
/* Start transmission */
18
SPDR = cData;
19
/* Wait for transmission complete */
20
while(!(SPSR & (1<<SPIF)));
21
}
22

23
int main(void) {
24
SPI_MasterInit();
25
SPI_MasterTransmit('A');
26
   while(1) ;
27
}
Angehängte Dateien:
Gast #2021901
Lesenswert?
• ▲
▼
Hast du den Code nur simuliert oder auch in Hardware getestet? Einige 
Dinge lassen sich nämlich nicht mit dem Simulator testen.
Hatte auch schon Probleme mit einer I²C Kommunikation mit dem Simulator.
OP #2021977
Lesenswert?
• ▲
▼
Hallo Eckmann,

danke für den Tipp. Gelesen hatte ich das wohl schon einmal, aber 
offenbar wieder verdrängt.

Für die anderen als Erklärung: Ein SS-Pin als Eingang veranlasst den 
ATMEGA, vom Master zum Slave zu werden, wenn dieser auf low gezogen 
wird. Und dann war es das. A feature, not a bug, aber wissen muss man es 
halt. Wenn der Master Master bleiben soll, muss SS also immer als 
Ausgang konfiguriert werden, auch wenn man den Anschluss gar nicht für 
SPI nutzt.

Danke erst einmal soweit.

Gruß, DetlevT

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.