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

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