SPI Arduino hängt sich auf

OP #6184770
Lesenswert?
• ▲
▼
Hallo, ich habe - absichtlich- SPI für Arduino selber programmiert. Wenn 
ich allerdings bei MOSI was reinbekommen sollte, zeigt mir mein Programm 
an, dass ich in der Schleife mit while(go) der Methode ReadBit() 
feststeckt. Hat jemand eine Ahnung warum das so ist, ich komme auf 
meinen Fehler einach nicht drauf...
Die Serial.println habe ich nur zum Testen verwendet, damit ich sehe, wo 
er sich aufhängt
Vielen Dank
1
#include "pins_arduino.h"
2
#include <ESP8266WiFi.h>
3
#include <ESP8266HTTPClient.h>
4
#include <WiFiClient.h>
5
#include <SPI.h>
6
#include <ESP8266WiFiMulti.h>
7
#include "SPISlave.h"
8

9
#define SS 15
10
#define MOSI 13
11
#define MISO 12
12
#define SCK 15
13

14
int8_t Temperatur;
15

16
bool isAvailable(){
17
  if(digitalRead(SS)==LOW)return true;
18
  return false;
19
}
20

21
int readBit(){
22
  bool go=true;
23
  while(go){
24
    Serial.println("clk2");
25
  if(digitalRead(SCK)==HIGH){
26
    go=false;
27
    if(digitalRead(MOSI) == HIGH){
28
      return 1;
29
    }else {
30
      return 0;
31
    }
32
  }
33
  }
34

35
}
36

37
int readByte(){
38
  int received = 0;
39
  for(int i=0;i<8;i++){
40
    if(readBit()){
41
      Serial.println("read 1");
42
      received = received * 2+1;
43
  }else{
44
    Serial.println("read 0");
45
    received = received * 2;
46
  }
47
  if(i<8-1){
48
    while(digitalRead(SCK)==HIGH){
49
      Serial.println("waiting for clk"); 
50
  } 
51
  }
52
}
53
}
54

55
void writeBit(int data){
56
  
57
}
58

59
void writeByte(int data){
60

61
}
62

63
void readData(){
64
  Serial.println("reading...");
65
  Serial.println(readByte());
66
}
67

68
void setup(){
69
  // PINMODE zb
70

71
  pinMode(SCK,INPUT);
72
  pinMode(SS,INPUT);
73
  pinMode(MOSI,INPUT);
74
  Serial.begin(115200);
75
  Serial.println("started");
76
  
77
}
78

79

80
void loop() {
81
  if(isAvailable()){
82
    readData();
83
  }
84
  
85
  }
#6184834
Lesenswert?
• ▲
▼
Du willst Daten per SPI empfangen, also ein SPI Client.

Woher kommen die SPI Signale?
Welches Gerät sendet dir was?

Ich nehme an die SPI Signale sind einfach zu schnell für deinen Arduino.


Insbesondere DigitalRead() ist ja bekannt dafür dass extrem langsam ist.

Etwas besser geht es mit der LIB FastIO ...
Gast #6185605
Lesenswert?
• ▲
▼
Veit D. schrieb:
> am 'MOSI' wirst du keine Bits einlesen können.
> 'Master Out Slave In' immer aus Sicht des einzelnen Device betrachten!

Das ist das Schöne an den Signalbezeichnungen bei SPI, es gibt gar keine 
Diskussionen über die Sichtweise. Bei MOSI wird genau der Slave Bits 
einlesen.

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.