www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MOSI bei ATmega16 gibt keine Daten raus


Autor: Albert ... (albert-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen
Ich habe das Problem das bei meinem ATmega16 keine Daten am MOSI Pin 
(SPI) rauskommen. DAs Clocksignal und das Chipselect hingegen werden 
sauber geschaltet.
Ich programmiere über einen ISP programmer welcher während dem Betrieb 
angeschlossen bleibt. Könnte das ein Problem darstellen? Ich habe auch 
schon den Pin abgetrennt, aber keine Verbesserung erfahren.

Meine Initialisierung sieht wie folgt aus:
void gvSPIConfig(void){
  //Configure IO Pins
  DDRB |= (1<<PB4) | (1<PB5) | (1<<PB7);  //Set MOSI, SCK and SS to Output
  DDRB &= ~(1<<PB6);            //Set MISO to Input
  PORTB |= (1<<PB6);            //Enable Pull-up on MISO
  PORTB |= (1<<PB4);            //Set SS High

  //Configure Data Order
  SPCR |= 0x00;

  //Configure Master or Slave
  SPCR |= 0x10;

  //Configure Transfer Mode
  SPCR |= 0x00;

  //Configure Clock Rate
  SPCR |= 0x02;
}
Das versenden läuft wie folgt ab
void gvSPIWrite(uint8_t u8Data){
  PORTB &= ~(1<<PB4);  //Set SS low
  SPDR = u8Data;
  while(!(SPSR & (1<<SPIF)));  //wait till transmission complete
  PORTB |= (1<<PB4);  //Set SS High
}
Aber am MISO Pin kommen keine Daten raus. Er scheint sie aber 
herauszushiften. Zumindest kann er die gvSPIWrite Funktion erfolgreich 
beenden und die weiteren Aufgaben im Code werden auch ohne weiteres 
abgearbeitet. Auch am Oszi sehe ich immer wieder den wechselnden SS 
Pegel und das Clock Signal.

Autor: slw (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schluss gegen GND oder pin nicht richtig dran

Autor: Albert ... (albert-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kurzschluss gegen Ground ist es nicht. Und gemessen habe ich direkt am 
Pin des uC. Ich habe mal auf einen defekt geschlossen und ihn 
ausgetauscht, dort genau dasselbe verhalten.

Autor: Michael H. (michael_h45)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Siehst du was am Clock?

Autor: Albert ... (albert-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, das Clock Signal kommt raus. Auch mit der richtigen Frequenz und dem 
richtigen Timing.

Autor: slw (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich sehe nicht, dass Du SPI enabled hast?

Set SCPR.6 oder so ähnlich

Autor: Michael H. (michael_h45)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
DDRB |= (1<<PB4) | (1<PB5) | (1<<PB7);  //Set MOSI, SCK and SS to Output
                     ^

Autor: slw (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
SPCR gemeint natürlich

Autor: Albert ... (albert-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Michael H. schrieb:
> DDRB |= (1<<PB4) | (1<PB5) | (1<<PB7);  //Set MOSI, SCK and SS to Output
>                      ^

AAAAAAAAHHHHHHHHHHHH...ich dreh am Schnitzel....verdammte Tastatur die 
hängt. Morgen wird sie Sauber gemacht. Vielen Dank!

slw schrieb:
> ich sehe nicht, dass Du SPI enabled hast?
>
> Set SCPR.6 oder so ähnlich

Das habe ich im main Programm gemacht, sonst würde ich ja auch kein 
Clock Signal bekommen.

Autor: slw (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ist MOSI offen? oder hängt was auf der anderen Seite?

Autor: Albert ... (albert-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
slw schrieb:
> ist MOSI offen? oder hängt was auf der anderen Seite?

Es war das fehlende "<" beim setzen des Data Direction Registers. Siehe 
Post von Michael H.

Autor: Düsendieb (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, habe auch eine Frage zu dem Programm:

wieso wird vor dem Senden ss auf low gesetzt?
"PORTB &= ~(1<<PB4);  //Set SS low"

Das sollte doch Slave select bei low sein.



Axel

Autor: Floh (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Düsendieb schrieb:
> wieso wird vor dem Senden ss auf low gesetzt?

Daran ist der Slaveselect des Slaves angeschlossen.

> "PORTB &= ~(1<<PB4);  //Set SS low"
>
> Das sollte doch Slave select bei low sein.

Solange SS als Ausgang definiert ist, wird der mega16 nicht in den 
Slavemodus wechseln, falls du das meinst.
:-)

Autor: Düsendieb (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Floh schrieb:
> Solange SS als Ausgang definiert ist, wird der mega16 nicht in den
>
> Slavemodus wechseln, falls du das meinst.

genau das meinte ich. Danke

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.