mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATMEGA644p + SPI = Problem


Autor: Detlev T. (detlevt)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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
#include <avr\io.h>

#define DD_MOSI     PINB5
#define DD_SCK     PINB7
#define DDR_SPI    DDRB

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

void SPI_MasterTransmit(char cData)
{
/* Start transmission */
SPDR = cData;
/* Wait for transmission complete */
while(!(SPSR & (1<<SPIF)));
}

int main(void) {
SPI_MasterInit();
SPI_MasterTransmit('A');
   while(1) ;
}

Autor: FReiling (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Detlev T. (detlevt)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Freiling

ich habe es zuerst in der Hardware gestestet (="reales Leben"), erst 
dann zum Simulator gegriffen.

Mit dem Oskar sehe ich weder am SCK noch am MOSI etwas.

Gruß, DetlevT

Autor: Thomas Eckmann (Firma: Thomas Eckmann Informationst.) (thomase)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
siehe Datenblatt: 17.3 SS Pin Functionality

mfg.

Autor: Detlev T. (detlevt)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.