Forum: Mikrocontroller und Digitale Elektronik MOSI immer auf high?


von Knut (Gast)


Lesenswert?

Hallo zusammen

Ich verwende den AT90USB128 auf dem USBKEY. Nach dem initialisieren des 
SPI mit folgender Routine, bleibt meine MOSI Leitung immer auf High. 
Dieses Problem hatte ich zuvor noch nie gehabt. Nun habe ich es auf 
allen meinen drei USBKEY's d.h. es muss an der Software liegen. Im AVR 
Studio zeigt mir PINB2 (MOSI) high an, obwohl PORTB2 low hat. Hatte 
jemand diesen Effekt auch schon, oder kann mir jemand weiterhelfen?

Code:

void mcu_spi_master_init(void) {
  DDRB = 0x07;
  PORTB = 0x01;    // CS = 1
  SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0)|(1<<SPR1);
}


Danke und Gruss
Knut

von Bensch (Gast)


Lesenswert?

> es muss an der Software liegen.

Richtig, ein Blick ins Datenblatt hilft vielleicht.

von Bernhard K. (Firma: SSSA - CNR Pisa) (berny74)


Lesenswert?

Hallo

Habe gerade eine funktionierende SW auf einen AT90USB1287 portiert. Auch 
ich habe das Problem, das die SPI-Schnittstelle am AT90USBxx nicht 
funktioniert und im Datenblatt keinen Hinweis gefunden woran es liegen 
könnte.
Hinweis @ Knut: wenn man den SPI im Master-Mode betreibt unbedingt auf 
den SS-Pin achten, wenn der als Input geschalten ist und low ist, gibt's 
Probleme (siehe Datenblatt).

Hast Du Dein Problem mit der SPI lösen können, bin für Hinweise dankbar!

mfg
Bernhard

von Enrico (Gast)


Lesenswert?

Hallo,

ich habe das Problem ebenfalls mit einem Atmega16.
Immer wenn ich das SPI aktiviere geht der MOSI auf high, obwohl er 
vorher als Ausgang mit low-Pegel programmiert wurde.

Im Datenblatt habe ich eine Zeichnung gefunden, aus der hervorgeht, dass 
MOSI im idle-Zustand tatsächlich high sein soll, also low-aktiv ist. Es 
ist also kein Fehler.
Ein Prob ist es trotzdem, da an dem SPI ein max3100 hängt, der ein 
high-aktiven MOSI erwartet.

Hat irgendwer eine idee, wie ich das problem lösen kann?

MfG, Enrico

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Angehängte Dateien:

Lesenswert?

> Im Datenblatt habe ich eine Zeichnung gefunden, aus der hervorgeht, dass
> MOSI im idle-Zustand tatsächlich high sein soll, also low-aktiv ist.
Low-Aktiv bedeutet in der bekannten Interpretationsweise eine 
Aktivierung irgendeines Signals mit Pegel = '0'. Das gilt z.B. für 
Chip-Selects, wenn mit '0' ein Baustein aktiviert werden soll ('0'-aktiv 
= low-aktiv). Bei einer Datenleitung redet man von low-aktiv, wenn mit 
niedrigerem Pegel eine '1' übertragen wird (z.B. RS232).
SPI ist auf der Datenleitung High-Aktiv (high='1', low='0').

> Ein Prob ist es trotzdem, da an dem SPI ein max3100 hängt,
> der ein high-aktiven MOSI erwartet.
Sieh dir mal die Abbildung 1 im Datenblatt des MAX3100 an. Nur während 
der steigenden Flanke von SCLK muß DIN (MOSI) stabil sein. Sonst ist der 
Pegel beliebig. Ich würde sagen, du hast kein Problem mit MOSI, sondern 
mit der Taktzuordnung (SPI-Mode).

> Hat irgendwer eine idee, wie ich das problem lösen kann?
Den richtigen SPI-Mode verwenden?
CPOL = 0
CPHA = 0
Siehe auch http://www.totalphase.com/support/kb/10045/

von Enrico (Gast)


Lesenswert?

Danke für die Antwort.

Hab inzwischen selbst herausgefunden, dass low-aktiv quatsch ist. Das 
war ein Trugschluß meinerseits.

MOSI ist tatsächlich nicht das Prob. CPHA, CPOL hatte ich auf 0. Das 
Prob war mein PCB-Layout. Der max3100 hat einen (diesmal wirklich) 
low-aktiven Pin für Hardware-Shutdown. Der war mit nichts verbunden -.- 
Außerdem hatte ich versehentlich das SPI des ATmega auf LSB first 
eingestellt, was dann zu den missverständlichen, bzw. unsinnigen 
Antworten des max3100 führte, sonst hätte ich auch früher gemerkt, dass 
der IC im StandBy ist.

Jetzt läuft es!

MfG

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.