Använder jag SPI eller I2C?

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
Användarvisningsbild
Magnus_K
EF Sponsor
Inlägg: 5854
Blev medlem: 4 januari 2010, 17:53:25
Ort: Skogen mellan Uppsala-Gävle

Använder jag SPI eller I2C?

Inlägg av Magnus_K »

Dum fråga som jag aldrig trodde jag skulle behöva ställa, men här kommer den:

Vilken sorts kommunikation används här egentligen?

Detta exempel är taget från Adafruits hemsida för en LIS3DH accelerometer.
Min intention är att prata hårdvaru-SPI med den men nu börjar jag faktiskt undra...
Så fort jag kommenterar bort IF-satsen i setup:en så vill den inte kommunicera med min MCU längre. Så fort jag låter det stå som det gör så fungerar det som det ska och jag kan göra de inställningar som jag önskar med känslighet och annat.

Det känns spontant som att jag missar något. Att det är I2C som är default och när jag inte gör adress-kollen så knyter man ingen kommunikation.
Jag har dragit både SPI och I2C till min MCU på ett kort så kommunikationen har möjlighet att ske genom vilket som.
Slutligen så är skopet till svårtillgängligt just nu så har inte möjlighet att proba och se vart det existerar kommunikation.

Kod: Markera allt

#include "Arduino.h"
#include <avr/sleep.h>
#include "stdio.h"
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_LIS3DH.h>
#include <Adafruit_Sensor.h>
#include <SoftwareSerial.h>


#define LIS3DH_CLK 13
#define LIS3DH_MISO 12
#define LIS3DH_MOSI 11
#define LIS3DH_CS 10
#define led_pin 3
#define wakeup_pin 2
#define CLICKTHRESHHOLD 85

Adafruit_LIS3DH lis = Adafruit_LIS3DH(LIS3DH_CS);

void setup(void) {

  if (! lis.begin(0x18)) {   // change this to 0x19 for alternative i2c address
    //Serial.println("Couldnt start");
    while (1);
  }
}
Användarvisningsbild
hawkan
Inlägg: 2621
Blev medlem: 14 augusti 2011, 10:27:40

Re: Använder jag SPI eller I2C?

Inlägg av hawkan »

Du verkar använda hårdvaru SPI. Avgörs av vilken konstruktor du använder.
Från exemplet på dess hemsida.

Kod: Markera allt

// software SPI
//Adafruit_LIS3DH lis = Adafruit_LIS3DH(LIS3DH_CS, LIS3DH_MOSI, LIS3DH_MISO, LIS3DH_CLK);
// hardware SPI
//Adafruit_LIS3DH lis = Adafruit_LIS3DH(LIS3DH_CS);
// I2C
Adafruit_LIS3DH lis = Adafruit_LIS3DH();
Användarvisningsbild
carpelux
Inlägg: 1876
Blev medlem: 13 oktober 2007, 12:33:33
Ort: Varnhem

Re: Använder jag SPI eller I2C?

Inlägg av carpelux »

Det ser ut att vara SPI. Ser inte att du har definierat SDA och SCL som används av i2c. om det nu skulle vara i2c som används är det i så fall defaultvärden för dessa pinnar som används.

Testa att ta bort includen för Wire.h och se om det funkar. I så fall är det klarlagt att det är SPI du kör.
Användarvisningsbild
Magnus_K
EF Sponsor
Inlägg: 5854
Blev medlem: 4 januari 2010, 17:53:25
Ort: Skogen mellan Uppsala-Gävle

Re: Använder jag SPI eller I2C?

Inlägg av Magnus_K »

hawkan skrev:Du verkar använda hårdvaru SPI. Avgörs av vilken konstruktor du använder.
Från exemplet på dess hemsida.

Kod: Markera allt

// software SPI
//Adafruit_LIS3DH lis = Adafruit_LIS3DH(LIS3DH_CS, LIS3DH_MOSI, LIS3DH_MISO, LIS3DH_CLK);
// hardware SPI
//Adafruit_LIS3DH lis = Adafruit_LIS3DH(LIS3DH_CS);
// I2C
Adafruit_LIS3DH lis = Adafruit_LIS3DH();
Det var exakt så här jag tänkte när jag kladdade ihop programmet, att det är här jag bestämmer vilket sätt kommunikationen ska ske genom.
Men det är väldigt konstigt att kommunikationen upphör när jag kommenterar bort hela if-satsen, som jag förutsatt enbart har med I2C att göra.


@carpelux: Ja, det ska jag testa. Har inget annat på I2C-linan så det kan jag prova!
Användarvisningsbild
Magnus_K
EF Sponsor
Inlägg: 5854
Blev medlem: 4 januari 2010, 17:53:25
Ort: Skogen mellan Uppsala-Gävle

Re: Använder jag SPI eller I2C?

Inlägg av Magnus_K »

Det verkade vara något med att jag inkluderade biblioteket.
Nu fungerar det kanon utan vare sig wire.h-bibliotek eller if-sats, så äntligen kan jag vara säker på att jag använder SPI :D
(Känns så extremt nybörjaraktigt att behöva fråga sånt här men men, ibland får man krypa till korset!)

Tack för hjälpen!
schnilsch
Inlägg: 76
Blev medlem: 11 juni 2014, 18:14:16

Re: Använder jag SPI eller I2C?

Inlägg av schnilsch »

Ser ut som att du måste kalla på begin().

I den så kollar koden om man kör spi eller i2c och sätter upp portar om det behövs för spi eller initierar i2c kommunikation.
Skriv svar