www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

MPU6050 in DS1307 modula z enako adreso

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Arduino sekcija
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
marko11
Član
Član



Pridružen-a: Ned 14 Dec 2003 17:47
Prispevkov: 866
Aktiv.: 3.89
Kraj: Dobrepolje

PrispevekObjavljeno: Pet Apr 16, 2021 6:56 pm    Naslov sporočila:  MPU6050 in DS1307 modula z enako adreso Odgovori s citatom

Hi

Imam MPU6050 modul in DS1307 modul. Oba modula bi rad povezal na I2C vodilo na Arduinu, pa ne gre, ker imata oba isto addreso 0x68.

To da sta obe adresi enaki sem ugotovil z I2c_scanerjem.

Je pa možnost spremembe adrese na MPU6050 modulu in to tako, da Pin AD0 povežeš na Vcc in tako dobiš adreso 0x69.

Tukaj pa vas prosim za pomoč, ker to pa neznam, Kje in kaj spremeniti, da bo adresa modula MPU6050 (0x69).

Ali je potrebno kaj spremeniti v programu ali morda kaj v knjižnici MPU6050.h ? Ali pa... ?

Tukaj spodaj sta programa, ki vsak zasebe delujeta, tako kot je treba in tudi knjižnica mpu6050.h

Se že v naprej zahvaljujem za pomoč in nasvete.

Lp,marko


Program: MPU6050_accel_pitch_roll.ino

Koda:


/*
    MPU6050 Triple Axis Gyroscope & Accelerometer. Pitch & Roll Accelerometer Example.
    Read more: http://www.jarzebski.pl/arduino/czujniki-i-sensory/3-osiowy-zyroskop-i-akcelerometr-mpu6050.html
    GIT: https://github.com/jarzebski/Arduino-MPU6050
    Web: http://www.jarzebski.pl
    (c) 2014 by Korneliusz Jarzebski
*/


#include <Wire.h>
#include <MPU6050.h>



MPU6050 mpu;

void setup()
{
  Serial.begin(115200);

  Serial.println("Initialize MPU6050");

  while(!mpu.begin(MPU6050_SCALE_2000DPS, MPU6050_RANGE_2G))
  {
    Serial.println("Could not find a valid MPU6050 sensor, check wiring!");
    delay(500);
  }
}

void loop()
{
  // Read normalized values
  Vector normAccel = mpu.readNormalizeAccel();
float temp = mpu.readTemperature();
  // Calculate Pitch & Roll
  int pitch = -(atan2(normAccel.XAxis, sqrt(normAccel.YAxis*normAccel.YAxis + normAccel.ZAxis*normAccel.ZAxis))*180.0)/M_PI;
  int roll = (atan2(normAccel.YAxis, normAccel.ZAxis)*180.0)/M_PI;

  // Output
  Serial.print(" Nagib = ");
  Serial.print(pitch);
  Serial.print(" Roll = ");
  Serial.print(roll);
 
  Serial.println();

  Serial.print(" Temp = ");
  Serial.print(temp);
  Serial.println(" *C");

Serial.println();
 
  delay(1000);
}


Knjižnica programa, MPU6050.h

Koda:


#ifndef MPU6050_h
#define MPU6050_h

#if ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#endif

#define MPU6050_ADDRESS             (0x68) // 0x69 when AD0 pin to Vcc

#define MPU6050_REG_ACCEL_XOFFS_H     (0x06)
#define MPU6050_REG_ACCEL_XOFFS_L     (0x07)
#define MPU6050_REG_ACCEL_YOFFS_H     (0x08)
#define MPU6050_REG_ACCEL_YOFFS_L     (0x09)
#define MPU6050_REG_ACCEL_ZOFFS_H     (0x0A)
#define MPU6050_REG_ACCEL_ZOFFS_L     (0x0B)
#define MPU6050_REG_GYRO_XOFFS_H      (0x13)
#define MPU6050_REG_GYRO_XOFFS_L      (0x14)
#define MPU6050_REG_GYRO_YOFFS_H      (0x15)
#define MPU6050_REG_GYRO_YOFFS_L      (0x16)
#define MPU6050_REG_GYRO_ZOFFS_H      (0x17)
#define MPU6050_REG_GYRO_ZOFFS_L      (0x18)
#define MPU6050_REG_CONFIG            (0x1A)
#define MPU6050_REG_GYRO_CONFIG       (0x1B) // Gyroscope Configuration
#define MPU6050_REG_ACCEL_CONFIG      (0x1C) // Accelerometer Configuration
#define MPU6050_REG_FF_THRESHOLD      (0x1D)
#define MPU6050_REG_FF_DURATION       (0x1E)
#define MPU6050_REG_MOT_THRESHOLD     (0x1F)
#define MPU6050_REG_MOT_DURATION      (0x20)
#define MPU6050_REG_ZMOT_THRESHOLD    (0x21)
#define MPU6050_REG_ZMOT_DURATION     (0x22)
#define MPU6050_REG_INT_PIN_CFG       (0x37) // INT Pin. Bypass Enable Configuration
#define MPU6050_REG_INT_ENABLE        (0x38) // INT Enable
#define MPU6050_REG_INT_STATUS        (0x3A)
#define MPU6050_REG_ACCEL_XOUT_H      (0x3B)
#define MPU6050_REG_ACCEL_XOUT_L      (0x3C)
#define MPU6050_REG_ACCEL_YOUT_H      (0x3D)
#define MPU6050_REG_ACCEL_YOUT_L      (0x3E)
#define MPU6050_REG_ACCEL_ZOUT_H      (0x3F)
#define MPU6050_REG_ACCEL_ZOUT_L      (0x40)
#define MPU6050_REG_TEMP_OUT_H        (0x41)
#define MPU6050_REG_TEMP_OUT_L        (0x42)
#define MPU6050_REG_GYRO_XOUT_H       (0x43)
#define MPU6050_REG_GYRO_XOUT_L       (0x44)
#define MPU6050_REG_GYRO_YOUT_H       (0x45)
#define MPU6050_REG_GYRO_YOUT_L       (0x46)
#define MPU6050_REG_GYRO_ZOUT_H       (0x47)
#define MPU6050_REG_GYRO_ZOUT_L       (0x48)
#define MPU6050_REG_MOT_DETECT_STATUS (0x61)
#define MPU6050_REG_MOT_DETECT_CTRL   (0x69)
#define MPU6050_REG_USER_CTRL         (0x6A) // User Control
#define MPU6050_REG_PWR_MGMT_1        (0x6B) // Power Management 1
#define MPU6050_REG_WHO_AM_I          (0x75) // Who Am I

#ifndef VECTOR_STRUCT_H
#define VECTOR_STRUCT_H
struct Vector
{
    float XAxis;
    float YAxis;
    float ZAxis;
};
#endif

struct Activites
{
    bool isOverflow;
    bool isFreeFall;
    bool isInactivity;
    bool isActivity;
    bool isPosActivityOnX;
    bool isPosActivityOnY;
    bool isPosActivityOnZ;
    bool isNegActivityOnX;
    bool isNegActivityOnY;
    bool isNegActivityOnZ;
    bool isDataReady;
};

typedef enum
{
    MPU6050_CLOCK_KEEP_RESET      = 0b111,
    MPU6050_CLOCK_EXTERNAL_19MHZ  = 0b101,
    MPU6050_CLOCK_EXTERNAL_32KHZ  = 0b100,
    MPU6050_CLOCK_PLL_ZGYRO       = 0b011,
    MPU6050_CLOCK_PLL_YGYRO       = 0b010,
    MPU6050_CLOCK_PLL_XGYRO       = 0b001,
    MPU6050_CLOCK_INTERNAL_8MHZ   = 0b000
} mpu6050_clockSource_t;

typedef enum
{
    MPU6050_SCALE_2000DPS         = 0b11,
    MPU6050_SCALE_1000DPS         = 0b10,
    MPU6050_SCALE_500DPS          = 0b01,
    MPU6050_SCALE_250DPS          = 0b00
} mpu6050_dps_t;

typedef enum
{
    MPU6050_RANGE_16G             = 0b11,
    MPU6050_RANGE_8G              = 0b10,
    MPU6050_RANGE_4G              = 0b01,
    MPU6050_RANGE_2G              = 0b00,
} mpu6050_range_t;

typedef enum
{
    MPU6050_DELAY_3MS             = 0b11,
    MPU6050_DELAY_2MS             = 0b10,
    MPU6050_DELAY_1MS             = 0b01,
    MPU6050_NO_DELAY              = 0b00,
} mpu6050_onDelay_t;

typedef enum
{
    MPU6050_DHPF_HOLD             = 0b111,
    MPU6050_DHPF_0_63HZ           = 0b100,
    MPU6050_DHPF_1_25HZ           = 0b011,
    MPU6050_DHPF_2_5HZ            = 0b010,
    MPU6050_DHPF_5HZ              = 0b001,
    MPU6050_DHPF_RESET            = 0b000,
} mpu6050_dhpf_t;

typedef enum
{
    MPU6050_DLPF_6                = 0b110,
    MPU6050_DLPF_5                = 0b101,
    MPU6050_DLPF_4                = 0b100,
    MPU6050_DLPF_3                = 0b011,
    MPU6050_DLPF_2                = 0b010,
    MPU6050_DLPF_1                = 0b001,
    MPU6050_DLPF_0                = 0b000,
} mpu6050_dlpf_t;

class MPU6050
{
    public:

   bool begin(mpu6050_dps_t scale = MPU6050_SCALE_2000DPS, mpu6050_range_t range = MPU6050_RANGE_2G, int mpua = MPU6050_ADDRESS);

   void setClockSource(mpu6050_clockSource_t source);
   void setScale(mpu6050_dps_t scale);
   void setRange(mpu6050_range_t range);
   mpu6050_clockSource_t getClockSource(void);
   mpu6050_dps_t getScale(void);
   mpu6050_range_t getRange(void);
   void setDHPFMode(mpu6050_dhpf_t dhpf);
   void setDLPFMode(mpu6050_dlpf_t dlpf);
   mpu6050_onDelay_t getAccelPowerOnDelay();
   void setAccelPowerOnDelay(mpu6050_onDelay_t delay);

   uint8_t getIntStatus(void);

   bool getIntZeroMotionEnabled(void);
   void setIntZeroMotionEnabled(bool state);
   bool getIntMotionEnabled(void);
   void setIntMotionEnabled(bool state);
   bool getIntFreeFallEnabled(void);
   void setIntFreeFallEnabled(bool state);

   uint8_t getMotionDetectionThreshold(void);
   void setMotionDetectionThreshold(uint8_t threshold);
   uint8_t getMotionDetectionDuration(void);
   void setMotionDetectionDuration(uint8_t duration);

   uint8_t getZeroMotionDetectionThreshold(void);
   void setZeroMotionDetectionThreshold(uint8_t threshold);
   uint8_t getZeroMotionDetectionDuration(void);
   void setZeroMotionDetectionDuration(uint8_t duration);

   uint8_t getFreeFallDetectionThreshold(void);
   void setFreeFallDetectionThreshold(uint8_t threshold);
   uint8_t getFreeFallDetectionDuration(void);
   void setFreeFallDetectionDuration(uint8_t duration);

   bool getSleepEnabled(void);
   void setSleepEnabled(bool state);
   bool getI2CMasterModeEnabled(void);
   void setI2CMasterModeEnabled(bool state);
   bool getI2CBypassEnabled(void);
   void setI2CBypassEnabled(bool state);

   float readTemperature(void);
   Activites readActivites(void);

   int16_t getGyroOffsetX(void);
   void setGyroOffsetX(int16_t offset);
   int16_t getGyroOffsetY(void);
   void setGyroOffsetY(int16_t offset);
   int16_t getGyroOffsetZ(void);
   void setGyroOffsetZ(int16_t offset);

   int16_t getAccelOffsetX(void);
   void setAccelOffsetX(int16_t offset);
   int16_t getAccelOffsetY(void);
   void setAccelOffsetY(int16_t offset);
   int16_t getAccelOffsetZ(void);
   void setAccelOffsetZ(int16_t offset);

   void calibrateGyro(uint8_t samples = 50);
   void setThreshold(uint8_t multiple = 1);
   uint8_t getThreshold(void);

   Vector readRawGyro(void);
   Vector readNormalizeGyro(void);

   Vector readRawAccel(void);
   Vector readNormalizeAccel(void);
   Vector readScaledAccel(void);

    private:
   Vector ra, rg; // Raw vectors
   Vector na, ng; // Normalized vectors
   Vector tg, dg; // Threshold and Delta for Gyro
   Vector th;     // Threshold
   Activites a;   // Activities
   
   float dpsPerDigit, rangePerDigit;
   float actualThreshold;
   bool useCalibrate;
   int mpuAddress;

   uint8_t fastRegister8(uint8_t reg);

   uint8_t readRegister8(uint8_t reg);
   void writeRegister8(uint8_t reg, uint8_t value);

   int16_t readRegister16(uint8_t reg);
   void writeRegister16(uint8_t reg, int16_t value);

   bool readRegisterBit(uint8_t reg, uint8_t pos);
   void writeRegisterBit(uint8_t reg, uint8_t pos, bool state);

};

#endif



Tukaj pa je program za rtc uro DS1307_simple.ino


Koda:


/*
  DS1307: Real-Time Clock. Simple example
  Read more: www.jarzebski.pl/arduino/komponenty/zegar-czasu-rzeczywistego-rtc-ds1307.html
  GIT: https://github.com/jarzebski/Arduino-DS1307
  Web: http://www.jarzebski.pl
  (c) 2014 by Korneliusz Jarzebski
*/

#include <Wire.h>
#include <DS1307.h>

DS1307 clock;
RTCDateTime dt;


void setup()
{
  Serial.begin(9600);

  // Initialize DS1307
  Serial.println("Initialize DS1307");;
  clock.begin();

  // If date not set
  if (!clock.isReady())
  {
    // Set sketch compiling time
    clock.setDateTime(__DATE__, __TIME__);
  }
}

void loop()
{
  dt = clock.getDateTime();


  // For leading zero look to DS1307_dateformat example

  Serial.print("Raw data: ");
  Serial.print(dt.year);   Serial.print("-");
  Serial.print(dt.month);  Serial.print("-");
  Serial.print(dt.day);    Serial.print(" ");
  Serial.print(dt.hour);   Serial.print(":");
  Serial.print(dt.minute); Serial.print(":");
  Serial.print(dt.second); Serial.println("");

  delay(1000);
}

Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
mato1111
Član
Član



Pridružen-a: Pet 28 Dec 2012 14:42
Prispevkov: 612
Aktiv.: 4.45
Kraj: Vrhnika

PrispevekObjavljeno: Pet Apr 16, 2021 7:25 pm    Naslov sporočila:   Odgovori s citatom

Če pogledaš v
MPU6050.h -> #define MPU6050_ADDRESS (0x68) // 0x69 when AD0 pin to Vcc
je napisano dokaj jasno.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
marko11
Član
Član



Pridružen-a: Ned 14 Dec 2003 17:47
Prispevkov: 866
Aktiv.: 3.89
Kraj: Dobrepolje

PrispevekObjavljeno: Pet Apr 16, 2021 8:13 pm    Naslov sporočila:   Odgovori s citatom

mato1111 je napisal/a:
Če pogledaš v
MPU6050.h -> #define MPU6050_ADDRESS (0x68) // 0x69 when AD0 pin to Vcc
je napisano dokaj jasno.


Hvala mato1111, sedaj pa deluje.

Jaz sem pa to adreso spreminjal tudi v MPU6050.cpp datoteki in zato ni delovalo.

Bi pa vprašal kaj sploh je ta datoteka MPU6050.cpp

Pa še to, če mi nekdo prevede v slovenščino besede: PITCH in ROLL

lp,
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
mato1111
Član
Član



Pridružen-a: Pet 28 Dec 2012 14:42
Prispevkov: 612
Aktiv.: 4.45
Kraj: Vrhnika

PrispevekObjavljeno: Pet Apr 16, 2021 10:50 pm    Naslov sporočila:   Odgovori s citatom

v .cpp so funkcije, ki jih kličeš v .ino

aeronavtični izrazi:
pitch je nagib naprej/nazaj
roll je nagib levo/desno
yaw pa ni nagib ampak zasuk levo/desno
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
marko11
Član
Član



Pridružen-a: Ned 14 Dec 2003 17:47
Prispevkov: 866
Aktiv.: 3.89
Kraj: Dobrepolje

PrispevekObjavljeno: Sob Apr 17, 2021 5:20 pm    Naslov sporočila:   Odgovori s citatom

Hi

Iz te ure DS1307 bi rad dobil podatek, če je možno, zaporedni dan v letu, mogoče obstaja kakšna funkcija za klic.

Drugače, pa kako bi matematično najenostavnejše prišel do tega podatka, da mi vsak dan izpiše zaporedni dan ( 1. januar ja št. 1 in tako naprej)

LP,
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
tlogar
Član
Član



Pridružen-a: Pon 23 Mar 2015 16:57
Prispevkov: 189
Aktiv.: 1.71

PrispevekObjavljeno: Pon Apr 19, 2021 6:06 pm    Naslov sporočila:   Odgovori s citatom

Morda ob prehodu ure iz 23:59 na 00:00 povečaš spremenljivko za zaporedni dan v letu? Ne vem pa če obstaja kakšna funkcija, ki to že naredi.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
BojanR
Član
Član



Pridružen-a: Tor 08 Apr 2008 9:52
Prispevkov: 684
Aktiv.: 3.50
Kraj: Vnanje Gorice

PrispevekObjavljeno: Tor Apr 20, 2021 7:48 am    Naslov sporočila:   Odgovori s citatom

Uporabljam samo večjega brata, tj. DS3231 in niti tu ne dobiš ven zaporednega dne. Še za dan v tednu je tako, da ga moraš ob nastavitvah prvo sam postaviti (1 do 7) in potem rtc sam vrti ta števec, tebi pa cifra pomeni, kar ti pač pomeni.
Zato mislim, da je predlog od tlogar kar pravi.
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
rafaellsi
Član
Član



Pridružen-a: Ned 11 Sep 2011 18:54
Prispevkov: 478
Aktiv.: 3.11
Kraj: Radovljica

PrispevekObjavljeno: Tor Apr 20, 2021 11:57 am    Naslov sporočila:   Odgovori s citatom

Odšteješ od trenutnega časa (time()) odšteješ čas zadnjega novega leta (time(1.1.xxxx)) in deliš z 86400 (sekund v dnevu) ...
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
marko11
Član
Član



Pridružen-a: Ned 14 Dec 2003 17:47
Prispevkov: 866
Aktiv.: 3.89
Kraj: Dobrepolje

PrispevekObjavljeno: Tor Apr 20, 2021 9:05 pm    Naslov sporočila:   Odgovori s citatom

rafaellsi je napisal/a:
Odšteješ od trenutnega časa (time()) odšteješ čas zadnjega novega leta (time(1.1.xxxx)) in deliš z 86400 (sekund v dnevu) ...


Tole mi ni čisto jasno, če lahko primer za 20.4.2021. To je 110 dan .

lp,
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
rafaellsi
Član
Član



Pridružen-a: Ned 11 Sep 2011 18:54
Prispevkov: 478
Aktiv.: 3.11
Kraj: Radovljica

PrispevekObjavljeno: Tor Apr 20, 2021 9:39 pm    Naslov sporočila:   Odgovori s citatom

Na pamet, nekako takole;

Koda:
tmElements_t ref
time_t sedaj, refCas:

sedaj = now();
ref.Year = year();
ref.Month = 1;
ref.Day = 1;
ref.Hour = 0;
ref.Minute = 0;
ref.Second = 0;

refCas = makeTime(ref);
zapDan = (now() - refCas)/SECS_PER_DAY;

Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Arduino sekcija Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
Ne, ne moreš pripeti datotek v tem forumu
Ne, ne moreš povleči datotek v tem forumu

Uptime: 70 dni


Powered by phpBB © 2001, 2005 phpBB Group