3.0 Volt - 3.3 Volt Bauteile an Arduino Uno

und bei diesem Code:

#include <SoftwareSerial.h>

#include <TinyGPS.h>

/* This sample code demonstrates the normal use of a TinyGPS object.
   It requires the use of SoftwareSerial, and assumes that you have a
   4800-baud serial GPS device hooked up on pins 3(rx) and 4(tx).
*/

TinyGPS gps;
SoftwareSerial nss(2, 3);

static void gpsdump(TinyGPS &gps);
static bool feedgps();
static void print_float(float val, float invalid, int len, int prec);
static void print_int(unsigned long val, unsigned long invalid, int len);
static void print_date(TinyGPS &gps);
static void print_str(const char *str, int len);

void setup()
{
  Serial.begin(115200);
  nss.begin(4800);
  
  Serial.print("Testing TinyGPS library v. "); Serial.println(TinyGPS::library_version());
  Serial.println("by Mikal Hart");
  Serial.println();
  Serial.print("Sizeof(gpsobject) = "); Serial.println(sizeof(TinyGPS));
  Serial.println();
  Serial.println("Sats HDOP Latitude Longitude Fix  Date       Time       Date Alt     Course Speed Card  Distance Course Card  Chars Sentences Checksum");
  Serial.println("          (deg)    (deg)     Age                        Age  (m)     --- from GPS ----  ---- to London  ----  RX    RX        Fail");
  Serial.println("--------------------------------------------------------------------------------------------------------------------------------------");
}

void loop()
{
  bool newdata = false;
  unsigned long start = millis();
  
  // Every second we print an update
  while (millis() - start < 1000)
  {
    if (feedgps())
      newdata = true;
  }
  
  gpsdump(gps);
}

static void gpsdump(TinyGPS &gps)
{
  float flat, flon;
  unsigned long age, date, time, chars = 0;
  unsigned short sentences = 0, failed = 0;
  static const float LONDON_LAT = 51.508131, LONDON_LON = -0.128002;
  
  print_int(gps.satellites(), TinyGPS::GPS_INVALID_SATELLITES, 5);
  print_int(gps.hdop(), TinyGPS::GPS_INVALID_HDOP, 5);
  gps.f_get_position(&flat, &flon, &age);
  print_float(flat, TinyGPS::GPS_INVALID_F_ANGLE, 9, 5);
  print_float(flon, TinyGPS::GPS_INVALID_F_ANGLE, 10, 5);
  print_int(age, TinyGPS::GPS_INVALID_AGE, 5);

  print_date(gps);

  print_float(gps.f_altitude(), TinyGPS::GPS_INVALID_F_ALTITUDE, 8, 2);
  print_float(gps.f_course(), TinyGPS::GPS_INVALID_F_ANGLE, 7, 2);
  print_float(gps.f_speed_kmph(), TinyGPS::GPS_INVALID_F_SPEED, 6, 2);
  print_str(gps.f_course() == TinyGPS::GPS_INVALID_F_ANGLE ? "*** " : TinyGPS::cardinal(gps.f_course()), 6);
  print_int(flat == TinyGPS::GPS_INVALID_F_ANGLE ? 0UL : (unsigned long)TinyGPS::distance_between(flat, flon, LONDON_LAT, LONDON_LON) / 1000, 0xFFFFFFFF, 9);
  print_float(flat == TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : TinyGPS::course_to(flat, flon, 51.508131, -0.128002), TinyGPS::GPS_INVALID_F_ANGLE, 7, 2);
  print_str(flat == TinyGPS::GPS_INVALID_F_ANGLE ? "*** " : TinyGPS::cardinal(TinyGPS::course_to(flat, flon, LONDON_LAT, LONDON_LON)), 6);

  gps.stats(&chars, &sentences, &failed);
  print_int(chars, 0xFFFFFFFF, 6);
  print_int(sentences, 0xFFFFFFFF, 10);
  print_int(failed, 0xFFFFFFFF, 9);
  Serial.println();
}

static void print_int(unsigned long val, unsigned long invalid, int len)
{
  char sz[32];
  if (val == invalid)
    strcpy(sz, "*******");
  else
    sprintf(sz, "%ld", val);
  sz[len] = 0;
  for (int i=strlen(sz); i<len; ++i)
    sz[i] = ' ';
  if (len > 0) 
    sz[len-1] = ' ';
  Serial.print(sz);
  feedgps();
}

static void print_float(float val, float invalid, int len, int prec)
{
  char sz[32];
  if (val == invalid)
  {
    strcpy(sz, "*******");
    sz[len] = 0;
        if (len > 0) 
          sz[len-1] = ' ';
    for (int i=7; i<len; ++i)
        sz[i] = ' ';
    Serial.print(sz);
  }
  else
  {
    Serial.print(val, prec);
    int vi = abs((int)val);
    int flen = prec + (val < 0.0 ? 2 : 1);
    flen += vi >= 1000 ? 4 : vi >= 100 ? 3 : vi >= 10 ? 2 : 1;
    for (int i=flen; i<len; ++i)
      Serial.print(" ");
  }
  feedgps();
}

static void print_date(TinyGPS &gps)
{
  int year;
  byte month, day, hour, minute, second, hundredths;
  unsigned long age;
  gps.crack_datetime(&year, &month, &day, &hour, &minute, &second, &hundredths, &age);
  if (age == TinyGPS::GPS_INVALID_AGE)
    Serial.print("*******    *******    ");
  else
  {
    char sz[32];
    sprintf(sz, "%02d/%02d/%02d %02d:%02d:%02d   ",
        month, day, year, hour, minute, second);
    Serial.print(sz);
  }
  print_int(age, TinyGPS::GPS_INVALID_AGE, 5);
  feedgps();
}

static void print_str(const char *str, int len)
{
  int slen = strlen(str);
  for (int i=0; i<len; ++i)
    Serial.print(i<slen ? str[i] : ' ');
  feedgps();
}

static bool feedgps()
{
  while (nss.available())
  {
    if (gps.encode(nss.read()))
      return true;
  }
  return false;
}

bekomme ich das hier:

BigInteger:
und bekomme bei einer boundrate von 57600 nur "UP501 NMEA test!" mehr nicht :frowning:

Wenn hier nichts kommt, wird auch nichts vom Modul empfangen.
Das "UP501 NMEA test!" kommt vom Setup.
In der Loop wird nur weitergeleitet, was vom GPS Modul empfangen wird. Wenn hier nichts kommt, wird mit den anderen Libs auch nicht viel mehr passieren können.

Ich kenne mich mit dem Modul nicht aus, nur generell mit der GPS Technik. GPS hat einen cold-start der bis zu 10 Minuten brauchen kann. Probiere vielleicht mal das Modul mind. 10min unter freiem Himmel zu positionieren und dann den Monitor dran hängen. Nach der Zeit müsste er seinen fix haben.
Jurs hatte geschrieben, dass das Modul in der Standard- Konfig das NMEA sendet, außer du hast es mit irgendeiner Lib umprogrammiert.

Hast du einen USB-RS232 Adapter?
Könntest du am GPS Modul PIN 2 mal die AC-Spannung beobachten/messen?

leider habe ich keinen USB-RS232 Adapter :frowning:

Okay SCHOCK!!!!!!
Ich habe grade die anliegende Spannung gemessen und die betrug 4,78 - 5,1 Volt schwankende...
Und mein Modul verträgt aber nur von 3,0 bis 4,2 Volt!!!!
Ich denke, dass ich den teuren GPS Empfänger getötet habe....

Komischer weise schmeisst er aber nach ca 3 Minuten (Kaltstart) folgendes aus:

$GPRMC,000302.037,V,,,,,0.00,0.00,060180,,,N*47
$GPRMC,210646.337,V,,,,,0.00,0.00,080180,,,N*4C
$GPRMC,210647.337,V,,,,,0.00,0.00,080180,,,N*4D
$GPRMC,210648.337,V,,,,,0.00,0.00,080180,,,N*42
$GPRMC,210649.337,V,,,,,0.00,0.00,080180,,,N*43
$GPRMC,210650.337,V,,,,,0.00,0.00,080180,,,N*4B
$GPRMC,210651.337,V,,,,,0.00,0.00,080180,,,N*4A
$GPRMC,210652.337,V,,,,,0.00,0.00,080180,,,N*49
$GPRMC,210653.337,V,,,,,0.00,0.00,080180,,,N*48
$GPRMC,210654.337,V,,,,,0.00,0.00,080180,,,N*4F
$GPRMC,210655.337,V,,,,,0.00,0.00,080180,,,N*4E
$GPRMC,210656.337,V,,,,,0.00,0.00,080180,,,N*4D
$GPRMC,210657.337,V,,,,,0.00,0.00,080180,,,N*4C
$GPRMC,210658.337,V,,,,,0.00,0.00,080180,,,N*43
$GPRMC,210659.337,V,,,,,0.00,0.00,080180,,,N*42
$GPRMC,210700.337,V,,,,,0.00,0.00,080180,,,N*4F
$GPRMC,210701.337,V,,,,,0.00,0.00,080180,,,N*4E
$GPRMC,210702.337,V,,,,,0.00,0.00,080180,,,N*4D
$GPRMC,210703.337,V,,,,,0.00,0.00,080180,,,N*4C
$GPRMC,210704.337,V,,,,,0.00,0.00,080180,,,N*4B
$GPRMC,210705.337,V,,,,,0.00,0.00,080180,,,N*4A
$GPRMC,210706.337,V,,,,,0.00,0.00,080180,,,N*49
$GPRMC,210707.337,V,,,,,0.00,0.00,080180,,,N*48

Sie Vorne ist die Uhrzeit aber Hinten sind keine richtigen werwedbaren Koordinaten... :frowning:
Aber wie gesagt, ich glaube dass ich den Chip durchgebrannt habe.... :disappointed_relieved: =( =( =(

BigInteger:
Ich habe grade die anliegende Spannung gemessen und die betrug 4,78 - 5,1 Volt schwankende...

WO hast du die Spannung WIE gemessen? Also AC oder DC? Bitte immer ausführlich beschreiben.
Das sollten wir klären vor weiteren Tests! (Auf deinen Bildern weist nichts auf ein vorhandensein von 5V DC hin.)
Mit der AC-Messung wollte ich nur sehen, ob Daten drauf sind. Die AC Werte sind nicht wichtig, nur ob eine AC Spannung angezeigt wird. Ein Oszi wirst du vermutlich nicht haben.

Hast du jetzt aufgrund meines Tipps das Modul länger beobachtet?
Ist es richtig, dass am Anfang noch wie vor keine Daten kommen und er erst später anfängt zu senden?
3min sind noch kein Kaltstart. Wie gesagt 10min sollten es auf dem Balkon mit freier sich zum Himmel schon sein.

Ob er abgeschossen ist wissen wir noch nicht. Hoffen wir mal dass er noch lebt ;). Den Daten nach zu urteilen lebt er noch und ist Gesund.

Nochmal zu den Bildern. Ich empfehle ich dir an Pin2 vom GPS Modul immer noch einen 1k Widerstand zum Schutz.
Dann kommen ganz sicher keine 5V irgendwo her. Wie gesgt, wenn du einmal nicht aufpasst, und den Arduino Pin als Ausgang definierst und den auf 1 setzt schützt der Wid immernoch. Wer weiß wie tolerant der GPS dinger ist...

mde110:
Nochmal zu den Bildern. Ich empfehle ich dir an Pin2 vom GPS Modul immer noch einen 1k Widerstand zum Schutz.
Dann kommen ganz sicher keine 5V irgendwo her. Wie gesgt, wenn du einmal nicht aufpasst, und den Arduino Pin als Ausgang definierst und den auf 1 setzt schützt der Wid immernoch. Wer weiß wie tolerant der GPS dinger ist...

Danke für deinen Tipp! Habst mir sehr geholfen, hab jetzt einen 1K Widerstand drangehängt und wie aus dem nichts kamen kurz darauf die Daten mit den PASSENDEN Koordinaten. Gott sein Dank ist mein Modul doch nicht hinüber, hab anscheind Glück gehabt, oder es gibt einen Überspannungsschutz.

Hab jetzt viel gelernt, vorallem immer sehr vorsichtig zu sein und bevor ich nächstens ein teures Modul dranhänge werde ich messen und auf Nummer sicher gehen. 8)

Aus deinem GPRMC-Datensatz bekommst du vor allem die Information "V", diese steht für "void" als ungültigen Wert. Sieht danach aus, als hättest du noch keinen Satellitenfix. Dass der GPS-Empfänger defekt ist schließe ich erst mal aus, immerhin wirft er die übertragene Uhrzeit aus.

[edit] Für mehr Informationen zu den Datensätzen: http://www.kowoma.de/gps/zusatzerklaerungen/NMEA.htm

Cool, danke für den Link, der ist sehr Hilfreich.

Werde jetzt meinen langen String den ich von meinem Modul bekomme mit einem Stringtokenizer zurechtstutzen und dann in die für mich relevanten Daten extrahieren. ]:smiley:

Betreib dein Modul über einen AMS1117 3.3 oder einem LM LowDrop Regler mit 3.3 volt.
Dann kannste den auch mit 5 oder 12 volt betreiben.

brauch ich die dann an jedem Pin?
Funktioniert dies wie ein Widerstand, oder gib er einfach konstant 3.3V egal welche Spannung ich über 3.3 bis 12 Volt anlege?

Gibt konstant 3.3 volt am Ausgang raus. Beide haben 3 "Pinne" Eingang, Masse, Ausgang. Den LM kannste direckt aufen Bread Board stecken, hab ich auch gemacht.

BigInteger:
brauch ich die dann an jedem Pin?
Funktioniert dies wie ein Widerstand, oder gib er einfach konstant 3.3V egal welche Spannung ich über 3.3 bis 12 Volt anlege?

@BigInteger
Nein, du brauchst den Spannungsregler nicht. Das haben wir doch schon am Anfang geklärt.
Die Frage an dich, wo du wie die 5V gemessen hast ist noch offen! Das sollten wir noch klären. ALso bitte beschreibe kurz, WO und WIE du gemessen hast.

@Rene,
du bist mir noch eine Antwort schuldig!

ich habe bei diesem Aufbau http://www.adafruit.com/images/large/ID660bb_LRG.jpg

Mit meinem Multimeter (schwarz) an GND und (rot) an Pin 2 (Position 20b) gemessen.
Ich habe auf meinem Multimeter 20 Volt Gleichstrom eingestellt.

Sorry wenn ich das so komisch beschreibe, aber hab noch nicht so viel Erfahrung mit E-Technik :blush:

BigInteger:
Sorry wenn ich das so komisch beschreibe, aber hab noch nicht so viel Erfahrung mit E-Technik :blush:

Kein Problem.

Meinst du nicht 22b?
Die 5V können an der Stelle nur vom Arduino Ausgang kommen. Sind die 5V immer noch da, auch wenn du ein 1k Widerstand davor hast?

mde110:

BigInteger:
Sorry wenn ich das so komisch beschreibe, aber hab noch nicht so viel Erfahrung mit E-Technik :blush:

Kein Problem.

Meinst du nicht 22b?
Die 5V können an der Stelle nur vom Arduino Ausgang kommen. Sind die 5V immer noch da, auch wenn du ein 1k Widerstand davor hast?

Wie willst Du mit nur einem Wiederstand die Spannung konstant runterziehn?
Wenn schon braucht man 2 Wiederstände für einen Spannungsteiler bzw. einem mit einer Z-Diode. Ein Festspannungsregler kostet weniger als 2 Euro, und man hat ruhe.

Spannungsteiler mit wiederstand: Spannungsteiler – Wikipedia

Mein Arduino ist es egal, ob ich mit 5 oder 12 volt arbeite. Aber die Eingänge nicht. Also habe ich eine LM2940CT 5.0 (LowDrop Regler) auf mein BreadBoard gesteckt, und habe nun konstante 5 Volt für die Eingänge und den Arduino.

Wenn demnächst meine anderen Module da sind, die teils mit nur 3.3 arbeiten, mach ich mir eine kleine Platine wo 2 x AMS1117 drauf kommen. Einmal für 5V und einmal für 3.3V.

spannungsteiler.jpeg

lm2940.jpeg

Lese dir mal das ganze Thema durch, dann weißt du was er machen will.
Das Thema mit den Spannungsreglern haben wir auch schon erledigt. Als kurze Zusammenfassung: Der Uno hat einen für 5V und einen für 3V3 drauf. Der 3,3V Regler reicht für das GPS.

@Rene,
du bist mir noch eine Antwort schuldig!

mde110:

Rene_Merten:
...Und ganz nebenbei, es war die Frage, ob es an 3.3 volt gegenüber 5 volt Strom spart. Und genau das tut man nicht. Und vergiss net, das kein Gerät der Welt eine Konstante bStromaufnahme hat. Es wir immer die Maximale Stromaufnahme angegeben. Betreib deine LED mit der angegebenen Nennspannung, rechne, und dann mit Vorwiederstand und eine höhere Spannung, inklusive der Verlustleitung des Wiederstandes. Dann vergleich mal beide Ergebnisse.

Habe aufgebaut, und verglichen. Sorry ist leider kein PSpice geworden. Siehe Ergebnisse im Anhang. Jetzt bist du dran!

Hier hatse deine Antwort. LOL Virtuell. Ich habs mit richtigem Volt und Ampermeter gemacht, und siehe da, fast kein unterschied.

Ind er Praxis sihts ein bisschen anders aus, als Virtuell von irgend ein Programm.

Aber egal, mein was Du willst, Du hast Recht und der Rest der Welt nicht, und ich habe meine Ruhe.

Nicht virtuell. Es wurde simuliert! Das machen die ganz tollen elektronik Firmen nämlich auch. Sie simulieren die komplette Schaltung und optimieren "nur" anhand von Simulationsergebnissen. Und die simulation machen sie mit Schaltungen, die um einiges komplexer sind als eine Diode mit Widerstand. Da geht es um sehr hohe Frequenzen und Kapazitäten die zwischen zwei Leiterbahnen entstehen...

Jetzt aber nur noch eine Frage an dich:
Haben sth77 und uwefed mit dem Dimmen der Lampe Unrecht?

Rene_Merten:
Hier hatse deine Antwort. LOL Virtuell. Ich habs mit richtigem Volt und Ampermeter gemacht, und siehe da, fast kein unterschied.

Ind er Praxis sihts ein bisschen anders aus, als Virtuell von irgend ein Programm.

Aber egal, mein was Du willst, Du hast Recht und der Rest der Welt nicht, und ich habe meine Ruhe.

Klingt ganz schön pampig... :frowning: Ich kann nicht mit hundertprozentiger Sicherheit sagen, ob das Modell der LED im Simulationsprogramm auch die typische Kennlinie einer LED berücksichtigt. Aber für eine ohmsche Last (Widerstand, und zwar mit einem i!) war das was du erzähltest ziemlich großer Quatsch. Und der Rest der Welt, den du anführst (und zu dem ich mich auch zähle), ist wohl eher der Meinung von mde110.

Rene_Merten:
Nein. Singt die Spannung, setigt der Strom. Steigt die Spannung, sinkt der Strom. Viele meinen auch, das wenn man eine Lampe dimmt, verbraucht die weniger Strom. Dies ist ebenfalls falsch. Hättest Du nach der Nennleistung gefragt, die bleibt in beiden fällen gkeich.

Das wurde nun schon hinreichend widerlegt. Und wie ich schon anführte, teste das ruhig mal mit dem Multimeter. Ganz ohne Simulationsprogramm. Regelbare Spannungqualle, Amperemeter und Festwiderstand in Reihe und eine Wertetabelle (Stromstärke in Abhängigkeit von der angelegten Spannung) aufnehmen. Dann kannst du die Verlustleistung P am Widerstand berechnen (P=U*I), du wirst sehen, dass sie im Quadrat der angelegten Spannung steigt (P=U²/R). So haben viele angefangen, ist ja auch nicht schlimm, wenn man sich mal irrt. Nur darf man nicht auf falsche Behauptungen beharren...

Die Ergebnisse einer Simulation sind immer nur so gut wie die Simulation die Wirklichkeit abbildet.
Um etwas über die Korrespondenz der Simulation gegenüber der Wirklichkeit sagen zu können muß die Simulation und die Wirklichkeit analysiert und gegeneinander verglichen werden und analysiert werden ob und inwiefern Störeinflüsse oder Abweichungen Einfluß auf die Güte der Simulation haben. Ohne genaue Kenntnisse der zu simulierenden Schaltung und dem Aufbau/Paramenter der Simulation kann keien gültige Aussage gemacht werden.

Grüße Uwe