MOSI bei ATmega16 gibt keine Daten raus

OP #1847793
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:
1
void gvSPIConfig(void){
2
  //Configure IO Pins
3
  DDRB |= (1<<PB4) | (1<PB5) | (1<<PB7);  //Set MOSI, SCK and SS to Output
4
  DDRB &= ~(1<<PB6);            //Set MISO to Input
5
  PORTB |= (1<<PB6);            //Enable Pull-up on MISO
6
  PORTB |= (1<<PB4);            //Set SS High
7

8
  //Configure Data Order
9
  SPCR |= 0x00;
10

11
  //Configure Master or Slave
12
  SPCR |= 0x10;
13

14
  //Configure Transfer Mode
15
  SPCR |= 0x00;
16

17
  //Configure Clock Rate
18
  SPCR |= 0x02;
19
}
Das versenden läuft wie folgt ab
1
void gvSPIWrite(uint8_t u8Data){
2
  PORTB &= ~(1<<PB4);  //Set SS low
3
  SPDR = u8Data;
4
  while(!(SPSR & (1<<SPIF)));  //wait till transmission complete
5
  PORTB |= (1<<PB4);  //Set SS High
6
}
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.
OP #1847825
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.
Gast #1848009
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.
:-)

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.