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
selbstbau Tauchcomputer [aktueller Fortschritt = Abschnitt 1]
25.12.2015, 10:54
Beitrag #9
RE: selbstbau Tauchcomputer [aktueller Fortschritt = Abschnitt 1]
Das sieht schonmal sehr gut aus, Respekt!
Bin gespannt wie es weitergeht Smile

Hier könnte ihre Werbung stehen
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.12.2015, 18:36 (Dieser Beitrag wurde zuletzt bearbeitet: 26.12.2015 18:37 von avoid.)
Beitrag #10
RE: selbstbau Tauchcomputer [aktueller Fortschritt = Abschnitt 1]
Hier mein zwischenzeitliches Ergebnis zum unkomprimierten speichern der Displaygrafiken in einen 24FC256 i2c-EEPROM um diese bei bedarf ab zu rufen. Ich habe derzeit nur das Schreiben und Lesen drin. Wie sich die Adressierung beim schreiben und lesen größerer Datenmengen verhält, ob ich dann den Page-Mode verwenden muss, hab ich noch nicht ausprobiert. Auch noch nicht überprüft habe ich, ob überhaupt alle Grafiken die ich brauche in einen dieser EEPROMs passen. Naja falls nicht hab ich ja noch mehr davon. Big Grin

Hier der leider etwas unübersichtliche und kaum kommentierte Code dazu:
Code:
#include <Wire.h>
#define i2cEEPROM_ADDRESS 0x50
int EArrayLengthMax = 0, EArrayCounter = 0, EStartCell = 0;
char test[] = { "Bla Bla 123" };
char dg0_bmp[] = { 0xFF, 0xF9, 0xFF, 0xF8, 0x80, 0x04, 0x80, 0x08, 0x40, 0x02, 0x40, 0x70, 0x30, 0x01, 0x21, 0x80,
0x88, 0x00, 0x96, 0x00, 0xE6, 0x00, 0x48, 0x00, 0x91, 0x00, 0x20, 0x00, 0x8C, 0xC0, 0x40, 0x00,
0x82, 0x20, 0x80, 0x00, 0x81, 0x99, 0x00, 0x00, 0x80, 0x46, 0x00, 0x00, 0x80, 0x30, 0x00, 0x00,
0x80, 0x08, 0x00, 0x00, 0x80, 0x10, 0x00, 0x00, 0x40, 0x20, 0x00, 0x00, 0x30, 0x40, 0x00, 0x00,
0x0C, 0x40, 0x00, 0x00, 0xC2, 0x80, 0x00, 0x00, 0xB1, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x00,
0x82, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00,
0x88, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00,
0xA0, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00 }; // 32x32

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

void loop() {
// Speichere char Array in i2c EEPROM
  EStartCell = 0;
  EArrayLengthMax = sizeof(test)-1;
  Serial.print("Schreiben1: ");
  for (EArrayCounter = 0; EArrayCounter < EArrayLengthMax; EArrayCounter++){
     writeEEPROM(i2cEEPROM_ADDRESS, EStartCell + EArrayCounter, test[EArrayCounter]);
     Serial.write(test[EArrayCounter]);
     delay(5); // wichtig!
  }
  Serial.println("");
// next Array
  EStartCell = EArrayCounter; //EStartCell = 11;
  EArrayLengthMax = sizeof(dg0_bmp)-1;
  Serial.print("Schreiben2: ");
  for (EArrayCounter = 0; EArrayCounter < EArrayLengthMax; EArrayCounter++){
     writeEEPROM(i2cEEPROM_ADDRESS, EStartCell + EArrayCounter, dg0_bmp[EArrayCounter]);
     Serial.write(dg0_bmp[EArrayCounter]);
     delay(5); // wichtig!
  }
  Serial.println("");
  Serial.println("Speichern beendet.");
  
// Lese char Array aus i2c EEPROM
  EStartCell = 0;
  EArrayLengthMax = 11;
  Serial.print("Lesen1: ");
  for (EArrayCounter = EStartCell; EArrayCounter < EStartCell + EArrayLengthMax; EArrayCounter++){
     Serial.write(readEEPROM(i2cEEPROM_ADDRESS,EArrayCounter,1));
  }
  Serial.println("");
// next Array
  EStartCell = EArrayCounter; //EStartCell = 11;
  EArrayLengthMax = 127; // Lenge des
  Serial.print("Lesen2: ");
  for (EArrayCounter = EStartCell; EArrayCounter < EStartCell + EArrayLengthMax; EArrayCounter++){
     Serial.write(readEEPROM(i2cEEPROM_ADDRESS,EArrayCounter,1));
  }
  Serial.println("");
  Serial.println("Lesen beendet.");
  delay(10000);
}

void writeEEPROM(int deviceaddress, unsigned int eeaddress, byte data) {
  Wire.beginTransmission(deviceaddress);
  Wire.write((int)(eeaddress >> 8));   // MSB
  Wire.write((int)(eeaddress & 0xFF)); // LSB
  Wire.write(data);
  Wire.endTransmission();
}

byte readEEPROM(int deviceaddress, unsigned int eeaddress, int eelength) {
  byte rdata = 0xFF;
  Wire.beginTransmission(deviceaddress);
  Wire.write((int)(eeaddress >> 8));   // MSB
  Wire.write((int)(eeaddress & 0xFF)); // LSB
  Wire.endTransmission();
  Wire.requestFrom(deviceaddress,eelength);
  if (Wire.available()) rdata = Wire.read();
  return rdata;
}

Gute Fragen sind wie ein wissenschaftliches Experiment. Sie setzen eine Menge Wissen bereits voraus.
bitcoin:1J5dgQQp8eUy8wkUxyztBUVCkCpo5MQEQs?label=Danke
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.12.2015, 01:15
Beitrag #11
RE: selbstbau Tauchcomputer [aktueller Fortschritt = Abschnitt 1]
So weiter geht's mit dem Code für den HDMM01 Kompass-Sensor von Pollin.
Nach der Kalibrierung kann man nun auch was mit den Werten anfangen. Wink

Code:
// danke für den Großteil des Code an www.aurob.com
#define I2ADDR       0x30 // i2c Adresse
#define TakeMeasure  0x01 // Messung starten
#define SET_COIL     0x02 // kalibrieren
#define RESET_COIL   0x04 // Löschen der Kalibrierung
#include <Wire.h>

void setup(){
  Wire.begin();
  Serial.begin(9600);
  ResetSetCoil(); // kalibrieren des Sensor
}

void loop(){
  byte MsbX,LsbX,MsbY,LsbY;
  int x,y;
  char line[80];
  Wire.beginTransmission(I2ADDR);
  Wire.write(0x00);               // Adressfeld spielt hier keine Rolle
  Wire.write(TakeMeasure);        // Befehl zum Messen
  Wire.endTransmission();
  delay(20);                      // sensor Reaktionszeit
  
  Wire.beginTransmission(I2ADDR);
  Wire.write(0x01);               // Adressfeld 1 um die 4 relevanten Register auszulesen
  Wire.requestFrom(I2ADDR, 4);
  while(Wire.available()<4);
  MsbX  =Wire.read();            // obere  4 Bit X
  LsbX  =Wire.read();            // untere 8 Bit X
  MsbY  =Wire.read();            // obere  4 Bit Y
  LsbY  =Wire.read();            // untere 8 Bit Y
  Wire.endTransmission();

  x=((MsbX&0x0f)*256)+(LsbX);
  y=((MsbY&0x0f)*256)+(LsbY);
  x = map(x, 1900, 2188, -180, 180);
  y = map(y, 1910, 2193, -180, 180);
  double mygrad = atan2(x, y)*180/3.1415927410;
  if (mygrad < 0) mygrad = mygrad +360;

  // Ausgabe von X, Y und Grad
  Serial.print("X-Achse: ");
  Serial.print(x);
  Serial.print(", Y-Achse: ");
  Serial.print(y);
  Serial.print(", Grad: ");
  Serial.println(mygrad);
  delay(400);
}

void ResetSetCoil() {
  Wire.beginTransmission(I2ADDR);
  Wire.write(byte(0));
  Wire.write(RESET_COIL);
  Wire.endTransmission();
  delay(25);                      // sensor Reaktionszeit
  Wire.beginTransmission(I2ADDR);
  Wire.write(byte(0));
  Wire.write(SET_COIL);
  Wire.endTransmission();
  delay(50);                      // sensor Reaktionszeit
  Serial.println("Sensor kalibriert.");
}
Was mich wundert ist, das ich hier auch gleich mit den Pollarkoordinaten arbeiten könnte um meine Grafik auf dem Display zu drehen. Ich werde mal drüber nachdenken. Aber sinn macht es wohl nicht erst in Grad und dann wieder zurück zu rechnen. Naja evtl. später, wenn ich mehr Leistung raus kitzeln muss, den kürzer wird der Code dadurch auch nicht um die Kompassrose zu zeichnen.

Gut das ich Urlaub hab ... Big Grin
Morgen Kommt der Temperatur Sensor drann und dann kann ich mich über den Drucksensor machen. Obwohl ich ja die Auswertelektronik für den B+B Keramikdrucksensor mit bestellt habe hab ich bedenken ihn ans laufen zu bekommen, dazu mach ich mal besser unter Hardware einen eigenen Beitrag.

Gruß,
avoid

Gute Fragen sind wie ein wissenschaftliches Experiment. Sie setzen eine Menge Wissen bereits voraus.
bitcoin:1J5dgQQp8eUy8wkUxyztBUVCkCpo5MQEQs?label=Danke
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.01.2016, 01:06 (Dieser Beitrag wurde zuletzt bearbeitet: 01.01.2016 01:06 von avoid.)
Beitrag #12
RE: selbstbau Tauchcomputer [aktueller Fortschritt = Abschnitt 1]
Ein gesundes neues Jahr euch allen. Big Grin

Ich hab euch mal fix ein Päckchen zum DS18x20 OneWire TempSensor gepackt. Damit könnt ihr den DS18S20 mit max. 9Bit genau so verwenden wie den DS18B20 mit max. 12Bit Genauigkeit. Bei meinem DS18B20 verwende ich auch nur die 9Bit, das reicht dicke wenn der Sensor nur Änderungen von 0,5 Grad aus spuckt. Bitte darauf achten das ich im Code einen anderen Pin verwende als auf dem Bild gezeigt wird.

Was mir beim HDMM01, Kompass noch aufgefallen ist: wurde er nicht sauber Kalibriert kann die Abweichung gerne mal 20 Grad betragen. Zum glück muss man ihn nur ein mal kalibrieren und nicht bei jedem Programmstart.

Wenn ich alle Grafiken im i2c_EEPROM habe, um sie von dort zu laden, dann gibt's wieder ein Video mit Erklärung der bisherigen Hardware und Funktionen in dem ihr mal das Gesamtkunstwerk begutachten könnt.

Gruß,
avoid


Angehängte Datei(en)
.zip  DS18X20_Temp.zip (Größe: 78,62 KB / Downloads: 41)

Gute Fragen sind wie ein wissenschaftliches Experiment. Sie setzen eine Menge Wissen bereits voraus.
bitcoin:1J5dgQQp8eUy8wkUxyztBUVCkCpo5MQEQs?label=Danke
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.01.2016, 20:07
Beitrag #13
RE: selbstbau Tauchcomputer [aktueller Fortschritt = Abschnitt 1]
Dein Projekt klingt auf jeden Fall sehr interessant! Ist mit Sicherheit eine Menge Arbeit, es macht aber vermutlich ziemlich Spaß, oder? Big Grin
Ich bin mal gespannt wie es weiter geht - viel Erfolg!

Gruß
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.01.2016, 20:30 (Dieser Beitrag wurde zuletzt bearbeitet: 01.01.2016 20:42 von avoid.)
Beitrag #14
RE: selbstbau Tauchcomputer [aktueller Fortschritt = Abschnitt 1]
Spaß, naja.
Es ist eben ein Hobby und für mich eher eine sehr arbeitsintensive Herausforderung. Grundlegender Gedanke und Ansporn war mein Ärger darüber das die Professionellen Hersteller ihre Möglichkeiten nicht ausschöpfen sondern mit 20 Jahre alter Technik da her kommen. Da dachte ich mir, denen zeig ich's. Die Idee dazu ist jetzt aber auch schon wieder etwas über zwei Jahre her. In der Zwischenzeit haben die Hersteller angefangen ihre Hausaufgaben zu machen, was der "VTX von OCEANIC" vormals "AERIS A300" oder der "seabear H3" auch zeigen.

Als Einzelkämpfer, der sich erst mal in nötige Hardwarekomponenten wie Sensoren, deren Librarys und in die komplexen Berechnungen sowie die dazugehörigen physikalischen Gegebenheiten einarbeiten muss, dauert das alles natürlich deutlich länger und steht Qualitativ auch auf einer anderen Stufe zu Geräten die im Handel um die 700-1500€ kosten.

Je mehr ich mich mit dem Thema befasse desto mehr Ideen bekomme ich. GPS geht unter Wasser nur bis zu max. 2m Tiefe.
http://www.doedt-online.de/scuba/navigation.htm
http://www.mechatronics.fh-aachen.de/For...TauchNavi/

Evtl. findet sich ja wer der Lust hat mit daran zu arbeiten.

Gruß,
avoid

Gute Fragen sind wie ein wissenschaftliches Experiment. Sie setzen eine Menge Wissen bereits voraus.
bitcoin:1J5dgQQp8eUy8wkUxyztBUVCkCpo5MQEQs?label=Danke
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.01.2016, 12:35
Beitrag #15
RE: selbstbau Tauchcomputer [aktueller Fortschritt = Abschnitt 1]
In Sachen Drucksensor bin ich jetzt etwas weiter gekommen wie man hier nachlesen kann.
http://www.arduinoforum.de/arduino-Threa...3#pid27193
Leider glaube ich langsam das der Sensor nicht Praktikabel genug ist, kennt jemand eine bessere alternative?

Gute Fragen sind wie ein wissenschaftliches Experiment. Sie setzen eine Menge Wissen bereits voraus.
bitcoin:1J5dgQQp8eUy8wkUxyztBUVCkCpo5MQEQs?label=Danke
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
13.02.2016, 17:51 (Dieser Beitrag wurde zuletzt bearbeitet: 13.02.2016 17:55 von avoid.)
Beitrag #16
RE: selbstbau Tauchcomputer [aktueller Fortschritt = Abschnitt 1]
ok, neuer stand in Sachen Drucksensor.
Hab mir diese hier für Druck- und Temperaturmessung besorgt http://www.amsys.de/products/ms5803.htm , als Privatperson einfach per Mail anfragen und sich ein Angebot schicken lassen, auch Selbstabholung in Mainz ist möglich.

Als Library habe ich diese hier verwendet https://github.com/millerlp/MS5803_05 wie es mir ardu_arne vorgeschlagen hat. Der sensor gibt nun den Absoluten druck aus also muss ich Unterwasser ca. 1bar abziehen. Die Erkennung ob über oder Unterwasser werde ich als nächstes angehen und damit automatisch eine Umschaltung zwischen Absolut- und Relativdruck realisieren.

Ich hab euch noch ein Par Bilder gemacht damit ihr einen Eindruck vom Sensor bekommt (ich dachte erst er währe größer aber er ist mini ^^).
   
   

Ja ich habe den Sensor nur mit +3,3v und GND sowie den beiden i2c Leitungen verbunden und einen 100nF Kondensator in die Spannung gelötet damit er keinen Reset macht wenn die Spannung mal schwankt.

Gute Fragen sind wie ein wissenschaftliches Experiment. Sie setzen eine Menge Wissen bereits voraus.
bitcoin:1J5dgQQp8eUy8wkUxyztBUVCkCpo5MQEQs?label=Danke
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Gehe zu:


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