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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren