INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Arduino und TMD2672 - I2C Problem
08.04.2015, 09:30
Beitrag #1
Arduino und TMD2672 - I2C Problem
Ich habe ein Problem mit der Kommunikation zwischen Arduino Micro und TMD2672 (Proximity Sensor).
Ich habe bereits TWI.c so geändert, dass die internen Pull-Ups ausgeschaltet sind um SDA/ SCL auf 3,3V zu ziehen. Am Oszi sieht das Ganze auch ganz manierlich aus.
Das Problem ist, dass ich keine Register auslesen kann vom Sensor. Ich bekomme in meiner Funktion "sensor_read" entweder das Register zurück, welches der Arduino gerade selbst auf den Bus geschrieben hat. Oder, wenn ich "Wire.endTransmission" auskommentiere bekomme ich den Inhalt von Register 0x00 (6D) zurück.

Hier mein Code (die interessanten Ausschnitte):
Code:
 // define TMD address: Address = (0x39 << 1) + r/w (1/0) = 0x72 (write), 0x73 (read)
#define TMD            0x39
#define TMD_WRITE      0x72
#define TMD_READ       0x73

//define registers
#define R_ENABLE       0x00
#define R_PTIME        0x02
#define R_WTIME        0x03
#define R_PILTL        0x08
#define R_PILTH        0x09
#define R_PIHTL        0x0A
#define R_PIHTH        0x0B
#define R_PERS         0x0C
#define R_CONFIG       0x0D
#define R_PPULSE       0x0E
#define R_CONTROL      0x0F
#define R_REVISION     0x11
#define R_ID           0x12
#define R_STATUS       0x13
#define R_PDATAL       0x18
#define R_PDATAH       0x19
#define R_OFFSET       0x1E

Code:
// Setting up parameters
void setup()
{
  Serial.begin(38400);
  Wire.begin();
  configure_sensor();
  //attachInterrupt(6, int6, LOW); // Int6 = Digital Pin 7, active low
  delay(3000);
}

Code:
// configure sensor
void configure_sensor()
{
  // set Proximity Time Control Register to 2.73ms
  sensor_write(R_PTIME, 0xFF);

  // set Wait Time Register to 200ms
  sensor_write(R_WTIME, 0xB6);

  // set bit for WLONG in Configuration Register. Cycle: 200ms * 12 = 2,4s
  sensor_write(R_CONFIG, 0x02);

  // set Proximity Pulse Count
  sensor_write(R_PPULSE, PULSECOUNT);

  // set Control Register to I(LED)=100mA, CH1
  sensor_write(R_CONTROL, 0x20);
  
  // interrupt generated every cycle
  sensor_write(R_PERS, 0x00);

  //set Enable Register to Wait Enable, Proximity Enable, Power ON, Interrup enable
  sensor_write(R_ENABLE, 0x6D);
}

Code:
// reading from sensor
uint8_t sensor_read(uint8_t reg)
{
  Wire.beginTransmission(TMD);
  Wire.write(reg);
  //Wire.endTransmission();
  Wire.requestFrom(TMD, 1);
  while(!Wire.available());
  //if(1 == Wire.available())
  {
    return(Wire.read());
  }    
}

Code:
// writing to sensor
void sensor_write(uint8_t reg, uint8_t value)
{
  Wire.beginTransmission(TMD);
  Wire.write(reg);
  Wire.write(value);
  Wire.endTransmission();
}

Code:
// main loop
void loop()
{
  uint8_t id = 0;
  
  id = sensor_read(R_ID);
  Serial.println(id, HEX);
  delay(1000);
  }
}

Zurück bekommen müsste ich 0xB8, ich erhalte aber immer entweder 0x18 (Register Adresse der ID) oder 0x6D ( Inhalt Register 0x00).

Ich hoffe jemand kann mir aushelfen Smile
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
09.04.2015, 10:37
Beitrag #2
RE: Arduino und TMD2672 - I2C Problem
Hab's selbst herausgefunden...Die Adressen der Register waren falsch Rolleyes

Weiß zufällig jemand wie ich den Interrupt am Digital Pin 7 aktiviere bzw. welche Nummer dieser hat?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
09.04.2015, 10:58
Beitrag #3
RE: Arduino und TMD2672 - I2C Problem
(09.04.2015 10:37)memeqri schrieb:  Weiß zufällig jemand wie ich den Interrupt am Digital Pin 7 aktiviere bzw. welche Nummer dieser hat?
Hi,
das ist wahrscheinlich wie beim Leonardo, also Nummer 4. Siehe hier: http://arduino.cc/en/Reference/AttachInterrupt.
Gruss,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
09.04.2015, 10:59
Beitrag #4
RE: Arduino und TMD2672 - I2C Problem
(09.04.2015 10:37)memeqri schrieb:  ....Weiß zufällig jemand wie ich den Interrupt am Digital Pin 7 aktiviere bzw. welche Nummer dieser hat?

Hi,
also am UNO und auch beim Mini sind in der Arduino IDE als auch in der Hardware die Port's 2 und 3 als externer Interrupt definiert. Wenn du Port 7 mit Interrupt belegen willst mußt dich mal durch das Atmel Datenblatt durchwühlen und die entsprechenden Konfigurationsregister in der CPU selber richtig einstellen das dann Interrupt X dann das Ereignis vermeldet. Wobei ich mal keine Garantie dafür gebe das es mit der Arduino IDE dann auch funktioniert. Probieren macht Klug...
lg
bk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
09.04.2015, 11:07
Beitrag #5
RE: Arduino und TMD2672 - I2C Problem
(09.04.2015 10:59)Bitklopfer schrieb:  also am UNO und auch beim Mini sind in der Arduino IDE als auch in der Hardware die Port's 2 und 3 als externer Interrupt definiert....
Er hat nen micro. Das ist ein 32u4 oder so. D.h. wie Leo.
Ansonsten waere ich mit pinChangeInt gekommen.
Gruss,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
09.04.2015, 11:22
Beitrag #6
RE: Arduino und TMD2672 - I2C Problem
Also laut arduino.cc:
External Interrupts: 0(RX), 1(TX), 2, 3 and 7. These pins can be configured to trigger an interrupt on a low value, a rising or falling edge, or a change in value. See the attachInterrupt() function for details.

Da Pin 2 und 3 mit I2C belegt sind und ich RX, TX auch benötige kommt nur noch Pin 7 in Frage.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
09.04.2015, 12:28
Beitrag #7
RE: Arduino und TMD2672 - I2C Problem
Ja und? Lies mal meinen Beitrag von 10:58.
Gruss,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Problem mit SD Card Library BennIY 4 194 06.10.2016 18:38
Letzter Beitrag: Bitklopfer
  Problem mit SD.remove Eichner 6 212 22.08.2016 19:42
Letzter Beitrag: Eichner
  4x16 Tastermatrix Problem Michel 16 855 14.07.2016 10:02
Letzter Beitrag: StephanBuerger
  Problem mit Delay und Millis funnyzocker 1 461 26.06.2016 09:54
Letzter Beitrag: hotsystems
  Problem mit ESP8266 und EMail senden torsten_156 1 608 13.06.2016 21:14
Letzter Beitrag: torsten_156
  ESP8266_01 flashen - Problem torsten_156 12 1.057 30.05.2016 20:12
Letzter Beitrag: torsten_156
  Hardwareserial/Softserial: Problem mit Superklasse tuxedo0801 10 483 19.05.2016 12:25
Letzter Beitrag: amithlon
  ESP8266 HTML Problem arduino_weatherstation 1 498 25.04.2016 21:52
Letzter Beitrag: rkuehle
  Problem mit OLED 0.96" Display torsten_156 3 546 03.04.2016 15:10
Letzter Beitrag: hotsystems
  Problem: SDFat - Das Ende einer Datei finden und Schleife beenden MartinK 4 490 01.04.2016 05:49
Letzter Beitrag: MartinK

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste