China AVR - SPI defekt?

OP #4608310
Lesenswert?

Hallo!

Ich hab hier einen Atmega328p vom Chinesen (auf einem "Nano" Board, aber 
ohne Arduino). Eigentlich will ich einen kleinen CAN Bus aufbauen, 
scheitere aber gerade an der simpelsten SPI Kommunikation. Also erstmal 
ein Minimalbeispiel zu SPI programmiert.
1
//Init
2
  DDRB |= (1<<PB3)|(1<<PB5);  //MOSI, SCK als Ausgang
3
  PORTD |= (1<<PD5);          //CS aus
4
  DDRD |= (1<<PD5);           //CS als Ausgang
5

6
    SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);    //SPI init: enable, master, f0/16
7
//Erstes Zeichen
8
    PORTD &= ~(1<<PD5);         //CS
9
    SPDR = 0x01;                //Senderegister
10
    while(!(SPSR & (1<<SPIF))); //Warten auf Senden
11
    _delay_ms(1);
12
    PORTD |= (1<<PD5);          //~CS
13
    _delay_ms(1);
14
//Zweites Zeichen
15
    PORTD &= ~(1<<PD5);
16
    SPDR = 0x01;
17
    while(!(SPSR & (1<<SPIF)));
18
    _delay_ms(1);
19
    PORTD |= (1<<PD5);
20
    _delay_ms(1);

Nun passiert auf dem Bus laut Logikanalysator fast nichts. Auf den 
Bildern im Anhang kann man sich gut an der Chip Select Linie 
orientieren. Achtung, die Labels stehen tiefer als man denkt, Linien 
zählen!
Außerdem bleibt das Programm beim zweiten gesendeten Zeichen in der 
Warteschleife hängen, sieht man auch am Bild.

SPI langsamer zu stellen hab ich probiert, ändert nichts. uC läuft mit 
16 MHz, ob der CAN Controller (MCP2515) dran hängt oder nicht macht auch 
keinen Unterschied.

Langsam fällt mir blos noch ein Hardwaredefekt ein, allerdings ist es 
bei zwei gleichen Boards genauso....
Oder ich mache einen einfachen Fehler und seh ihn einfach nicht...

Achja: Programmieren lässt er sich über ISP problemlos.

Danke für Denkanstöße,
Luggi
Angehängte Dateien:
(Firma: Vescomp) #4608324
Lesenswert?

Luggi F. schrieb:
> Oder ich mache einen einfachen Fehler und seh ihn einfach nicht...

     SPDR = 0x01;                //Senderegister
 Um zu sehen, ob es überhaupt funktioniert, sendet man normalerweise
 0x55 oder 0xAA.

 Mit deinen ms kann keiner etwas anfangen. Sollten us sein.

 MOSI bleibt die ganze Zeit auf HIGH.

 SCK bleibt die ganze Zeit auf HIGH.

 EDIT:

 Mensch, setze doch die Labels und Signale richtig zueinander.
OP #4608395
Lesenswert?

Forist schrieb:
> Nun reicht es aber mit Schmierpapier.
Tut mir Leid, auf dem betreffenden PC gibts nur Win XP/Paint.

Marc V. schrieb:
> a) Dein Arduino ist kaputt.
Naja, 3 Stück, frisch aus der Tüte? Nicht unmöglich, aber 
unwahrscheinlich.

>  b) Du hast Arduino und MCP falsch verbunden.
Steckt momentan eh nicht dran. Mit MCP ändert sich aber auch nichts. 
Einer von den AVRs hat den MCP noch nie gesehen, von da kommt also auch 
kein Defekt.
Gast #4608453
Lesenswert?

Ich sehe im Programm nichts zu PB2 = /SS, nach einem Reset steht der auf 
Eingang!
Datenblatt 19.3.2 Master Mode:
"If /SS is configured as an input, it must be held high to ensure Master 
SPI operation..."
Gast #4608497
Lesenswert?

Luggi F. schrieb:
> Forist schrieb:
>> Nun reicht es aber mit Schmierpapier.
> Tut mir Leid, auf dem betreffenden PC gibts nur Win XP/Paint.

Genau damit (mit MSPaint) habe ich die Zeichnung mit 3 Klicks zurecht 
gestutzt (Auswahl, Rechteckige Auswahl, Bereich markieren, Copy, Größe 
ändern auf z.B. 1%, Einfügen, Speichern).

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