3.0 Volt - 3.3 Volt Bauteile an Arduino Uno

Super, danke euch!

Ich könnte mir aber auch ein eigenes GPS Shield bauen, auf das ich dann auch eine 3Volt Knopfbatterie machen kann, für die Backupbatterie, oder?

Ich würde dann einen Transistor nehmen, mit dem ich die 5 Volt auf die 3.0 - 4.3 Volt runter regel und auch die schon erwähnten Sicherungswiederstände, damit nichts kaputt gehen kann. Oder ist dies zu aufwendig?

Ich würde dazu Prototypboards verwenden, die ich mir zurechtschneide.

Nachtrag bezüglich Eingangsspannungstollerante Bauteile.
Die Modellfamilie LVX, LVT, LVC, LCX der TTL74 Serie sind für 3,3V Betriebsspannung ausgelegt haben aber meist 5V tollerante Eingänge; Ideal für die Pegalanpassung 5V ->3,3V.
Ich habe keine vollständige Liste der TTL Familien gefunden und in den verscheidenen Quellen gab es immer wieder verschiedene Buchstabenkombinationen darum generell, bevor Ihr euch blind auf mich verläßt, im Datenblatt kontrolleiren.
Da bietet sich zB an 74LVX125 für 4 Eingänge und 74LVX541 für 8.
Grüße Uwe

Ich war heute meine Wiederstände kaufen für mein Projekt, und man hat mir dort etwas komisches erklärt was ich so noch nicht kannte. Auf meine Frage wie ich am sichersten das GPS Modul mit VDD 3.0 bis 4.2Volt ansteuere, hat mir der Verkäufer folgenden Rat gegeben.
Ich soll GND mit einem I/O Pin des Arduinos mit zwei Widerständen (3,3kOhm an GND und 1,8kOhm an I/O) in Reihe schalten und zwischen den beiden Widerständen dann die angeblichen 3,2 Volt abnehmen. Somit könnte ich mit den 5Volt des Arduinos arbeiten ohne Gefahr zu laufen das GPS Modul und den Arduino zu Schrotten.

Skizze:

I/O
|

|| 1,8kOhm

|
+-------- 3,2Volt
|

|| 3,3 kOhm

|
GND

BigInteger:
Ich war heute meine Wiederstände kaufen für mein Projekt, und man hat mir dort etwas komisches erklärt was ich so noch nicht kannte. Auf meine Frage wie ich am sichersten das GPS Modul mit VDD 3.0 bis 4.2Volt ansteuere, hat mir der Verkäufer folgenden Rat gegeben.
Ich soll GND mit einem I/O Pin des Arduinos mit zwei Widerständen (3,3kOhm an GND und 1,8kOhm an I/O) in Reihe schalten und zwischen den beiden Widerständen dann die angeblichen 3,2 Volt abnehmen. Somit könnte ich mit den 5Volt des Arduinos arbeiten ohne Gefahr zu laufen das GPS Modul und den Arduino zu Schrotten.

mkl0815 hat das bereits in der ersten Antwort geschrieben:

Auf Nummer Sicher gehst Du, wenn Du einen Pegelwandler verwendest, oder im einfachsten Fall einen Spannungsteiler mit 2 Widerständen, die das Ausgangssignal des Arduino auf 3.3V bringen. Schau Dir mal die verschiedenen Beschaltungsbeispiele für SD-Karten an, da wird das häufig so gemacht.

Auch Mardetuino:

Alle Signale die zum Modul gehen über Spannungsteiler auf 3,3V hinpegeln.

Auch Jurs; auch wenn er einen Spannungteiler für 2,5V vorschlägt, der aber auch funktionieren würde.

Zwischen Digital 3 und Ground installierst Du 2*10K Widerstände in Reihenschaltung, und am Mittelabgriff des so gebildeten Spannungsteilers zweigst Du zu GPS RX ab (wo dann nur die halbe Spannung statt der vollen 5V vom Arduino-Pin ankommt).

Liest Du nicht was wir schreiben?

Grüße Uwe

Ich lese das schon, nur bin ich leider kein E-Techniker sondern Informatiker, somit verstehe ich manches nicht ganz. Ich hantiere leider nur theoretisch mit nMOS und cMOS so wie Transistoren aber habe mich leider noch nie damit auseinandersetzen müssen wie ich Spannungen von 5 Volt auf unter 5 Volt drücke und somit hab ich leider keine Ahnung von Widerständen, da ich diese bisher leider noch nicht verwendet habe. Ich kenne die Ohmsche-Gesetze aber auch nur aus der Theorie ohne diese jemals angewandt zu haben :frowning:

Du meinst bestimmt das hier http://s7.directupload.net/file/d/3118/hszocbka_jpg.htm

aber das entspricht nicht der Schaltung hier:

Du meinst bestimmt das hier http://s7.directupload.net/file/d/3118/hszocbka_jpg.htm
aber das entspricht nicht der Schaltung hier: ...

Ja, das entspricht mehr oder weniger (die Widerstandswerte sind anders und darum leicht die Ausgangspannung) aber es funktioniert beides.

Frag uns einfach; wir haben noch keinem den Kopf abgebissen weil er etwas gefragt hat. :wink: :wink: :wink:
Wir werden nur frech wenn jemand alles gleich gemacht haben will oder uns raten läßt. :wink: :wink: :wink:

Grüße Uwe

Ich habe das jetzt so verbunden


und den Beispielcode verwendet
Siehe: https://raw.github.com/adafruit/Adafruit-MTK3329-GPS-Module-Test-Sketch/master/Adafruit_MTK3329_GPS_Test.pde

Aber leider bekomme ich nur eine folge von ? und ÄÜ's woran kann das liegen? :astonished:

Sieht auf den ersten Blick wie ein Baudraten-Fehler aus. Allerdings ist die Standardeinstellung des GPS-Moduls 9600 und auch dein Programmschnipsel "spricht" 9600 bps. Hattest du versucht, das zu ändern, dass nun die Geschwindigkeiten nicht mehr passen?

BigInteger:
Ah und noch eine zweite Frage, ich habe einen Sensor, der mit einer Spannung von 3.0 bis 5.5 Volt betrieben werden kann,
wenn ich dieses Bauteil mit 3.3 Volt betreibe, bedeutet es doch auch, dass der Sensor länger über Batterie betrieben werden kann, als wenn ich diesen an 5 Volt klemme, oder liege ich da falsch?

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.

Ein einfaches Beispiel: Eine Nennleistung von 20 KW an einer Spannung von 230 volt soll über eine längere Strecke übertragen werden.
I=P/U => 20000W/230V => 87A

Erhöt mann die Spannung auf 10 KV, ergibt sich ein Strom von 2 Amper.
I=P/U => 20Kw (20000W)/10 KV (10000V) => 2A

Ergo Dein Modul braucht mit 3.3 volt genausoviel leistung wie mit 5 volt.

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.

:~

Und wieso wird eine gedimmte Lampe nicht nur dunkler, sondern auch weniger heiss ?

Ob der Sensor immer die gleiche Leistung braucht, und daher mehr Strom zieht, müsste man ihn auch erstmal fragen.

Ich glaube ich lese nicht richtig :fearful: :fearful:

Rene_Merten:
Nein. Singt die Spannung, setigt der Strom. Steigt die Spannung, sinkt der Strom.

Sorry, aber das ist SO komplett aus dem Zusammenhang gerissen!
Dieses Verhalten kann man z.B. bei einem DC/DC Wandler oder einer Stromquelle beobachten. Also einem aktiven Schaltkreis, der versucht, eine sekundäre Bedingung einzuhalten.

Rene_Merten:
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.

Und da haben die vielen mit ihrer Meinung recht. Das von dir ist einfach nur FALSCH. Bei einem ohmschen Verbraucher (Halogen-Lampe) ist die verbrauchte Leistung geringer wenn sie gedimmt ist/wird!

Rene_Merten:
Ein einfaches Beispiel: Eine Nennleistung von 20 KW an einer Spannung von 230 volt soll über eine längere Strecke übertragen werden.
I=P/U => 20000W/230V => 87A

Erhöt mann die Spannung auf 10 KV, ergibt sich ein Strom von 2 Amper.
I=P/U => 20Kw (20000W)/10 KV (10000V) => 2A

Sorry, aber das ist SO komplett aus dem Zusammenhang gerissen!
Siehe oben!

Rene_Merten:
Ergo Dein Modul braucht mit 3.3 volt genausoviel leistung wie mit 5 volt.

Diese Aussage ist nicht richtig begründet. Eine pauschale Aussage ist hier sowieso nicht möglich!
Und wie verhält sich das bei einer LED? Braucht die auch gleich viel Leistung bei 3,3V und 5,0V wenn der Rv für 5V mit 20mA berechnet wurde?

michael_x:
Ob der Sensor immer die gleiche Leistung braucht, und daher mehr Strom zieht, müsste man ihn auch erstmal fragen.

Jeder Fernseher, Radio, Arduino etc, hat eine schwankende Stromaufnahme. Es wird immer die maximale Stromaufnahme angegeben.

michael_x:
Und wieso wird eine gedimmte Lampe nicht nur dunkler, sondern auch weniger heiss ?

Weist Du, was ein Dimmer überhaupt macht?

Mit einem Dimmer können wir die Helligkeit einer Glühlampe stufenlos bis zu einem ganz schwachen Glimmen herunterregeln.

Das funktioniert so: Der Strom geht in jeder Sekunde fünfzig Mal an und aus. Ein Dimmer verzögert dieses Einschalten jedes Mal ein kleines bisschen. Soll das Licht nur wenig gedimmt werden, verzögert der Dimmer das Einschalten nur kurz. Möchten wir stark gedimmtes Licht, verzögert der Dimmer das Einschalten länger. In beiden Fällen reduziert sich also die Zeit, in der Strom durch die Lampe fließt.

Und was hat der Glühfaden nun? Mer zeit zum abkühlen.

Probiers doch mal selber aus.! Benötigst ein Ampermeter und Voltmeter. Das Ohmsche Gesetz wirste ja wohl kennen. Und vergiss die Verlustleistung des Wiederstandes an deiner LED net :smiley:

Für weitere Fragen kannste dich an mein Dad wenden, der hat Elektrotechnik Studiert.

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.

Rene_Merten:
...In beiden Fällen reduziert sich also die Zeit, in der Strom durch die Lampe fließt...

Da haben wir es, weniger Arbeit. Weil Arbeit = Leistung(Spannung * Strom) * Zeit.
Weniger Zeit = Weniger Arbeit

Rene_Merten:
Probiers doch mal selber aus.! Benötigst ein Ampermeter und Voltmeter. Das Ohmsche Gesetz wirste ja wohl kennen. Und vergiss die Verlustleistung des Wiederstandes an deiner LED net :smiley:

Ich glaube du hast dich da etwas verbrannt, Rene. Der Griff zum Multimeter solltest du machen und den Zusammenhang von Spannung und Strom an einem Widerstand beobachten. Dann wirst du erkennen, dass diese proportional sind. Ja genau, ohmsches Gesetz: R=U/I. R bleibt konstant, wenn U sinkt sinkt in gleichem Maße auch I. Wie gesagt, gilt für ohmsche Lasten. Ob es sich bei dem GPS-Modul zumindest in nächster Nähe um eine solche Last handelt, können nur entsprechende Messungen ergeben.

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!

Rene_Merten:
Das funktioniert so: Der Strom geht in jeder Sekunde fünfzig Mal an und aus. Ein Dimmer verzögert dieses Einschalten jedes Mal ein kleines bisschen. Soll das Licht nur wenig gedimmt werden, verzögert der Dimmer das Einschalten nur kurz. Möchten wir stark gedimmtes Licht, verzögert der Dimmer das Einschalten länger. In beiden Fällen reduziert sich also die Zeit, in der Strom durch die Lampe fließt.

Und was hat der Glühfaden nun? Mer zeit zum abkühlen.

Rene. Ja, Du mußt aufpassen Dich nicht zu verbrennen.

Bei 50Hz Wechselstrom wird der Strom 100ma Null (nach jeder Halbwelle). Phasenanschnittsteuerung kennen wir alle. Die Leistung ist in diesem Fall das Integral des quadratischen Mittelwerts der Produkte der Momentalwerte des Stroms und der Spannung wobei diese bei einer Lampe beide einen sinusförmigen Verlauf haben. Während einer Halbwelle änder sich sowohl der Strom als auch die Spannung.

Das Verhältnis P= U*I = konstant ist nur bei einem Trafo gegeben wenn man die Verluste nicht berücksichtigt.

Alle anderen 2-Pole haben mehr oder weniger den Zusammenhang I ist proportional U. Einzige Ausnahme sind Motore. Da hängt der Strom von der Spannung und von der an der Welle abgegebenen mechanischen Leistung ab.

Glaub mir auch, daß der Glühfaden einer Lampe während einer teilweise fehlenden Halbwelle nicht merklich abkühlt sondern dur weniger eingebrachte Leistung weniger heiß wird.

Grüße Uwe

So hab es jetzt mit diesem code hier versucht:

// tested on an Arduino Mega 2560 using pins 11 for RXd & 12 for TXd
// Connect the GPS Power pin to 3.3V
// Connect the GPS Ground pin to ground
// Connect the GPS VBAT pin to 3.3V if no battery is used
// Connect the GPS TX (transmit) pin to Digital 11
// Connect the GPS RX (receive) pin to Digital 12
// For 3.3V only modules such as the UP501, connect a 10K
// resistor between digital 12 and GPS RX and a 10K resistor
// from GPS RX to ground. (Must divide voltage into module as it only takes 3.3V)

#include <SoftwareSerial.h>;

#define PMTK_SET_NMEA_UPDATE_1HZ "$PMTK220,10001F"
#define PMTK_SET_NMEA_UPDATE_5HZ "$PMTK220,200
2C"
#define PMTK_SET_NMEA_UPDATE_10HZ "$PMTK220,1002F"
#define PMTK_SET_NMEA_OUTPUT_RMCONLY "$PMTK314,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
29"
#define PMTK_SET_NMEA_OUTPUT_ALLDATA "$PMTK314,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0*28"

int rxPin = 2;
int txPin = 3;

SoftwareSerial mySerial = SoftwareSerial(rxPin, txPin);

void setup()
{
Serial.begin(57600);
Serial.println("UP501 NMEA test!");

pinMode(rxPin, INPUT);
pinMode(txPin, OUTPUT);

mySerial.begin(9600);

// uncomment this line to turn on only the "minimum recommended" data for high update rates!
//mySerial.println(PMTK_SET_NMEA_OUTPUT_RMCONLY);

// uncomment this line to turn on all the available data - for 9600 baud you'll want 1 Hz rate
mySerial.println(PMTK_SET_NMEA_OUTPUT_ALLDATA);

// Set the update rate
// 1 Hz update rate
mySerial.println(PMTK_SET_NMEA_UPDATE_1HZ);

// 5 Hz update rate- for 9600 baud you'll have to set the output to RMC only (see above)
//mySerial.println(PMTK_SET_NMEA_UPDATE_5HZ);

//10 Hz update rate - for 9600 baud you'll have to set the output to RMC only (see above)
//mySerial.println(PMTK_SET_NMEA_UPDATE_10HZ);

}

void loop()
{

if (mySerial.available())
Serial.print((char)mySerial.read());

if (Serial.available())
mySerial.print((char)Serial.read());
}

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

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?