TMP36 Temperatursensor auf Arduino Uno Multifunction Shield

Hi

Hast Du Mal gemessen/Dir anzeigen lassen, wie lange ein loop()-Durchlauf dauert?
Klar ist Serial mit 9600 Baud nicht sonderlich schnell (ca 1 Zeichen pro ms), aber ggf. hast Du noch andere Bremsklötze verbaut.

'Schade' ist auch eher eine Aussage in die Richtung, daß Du ganz gerne eine vorgekaute Lösung haben willst - Das finde ich dann schon eher 'schade'.

MfG

Gerd50:
Leider bringt das Verändern der Baudrate, auch bis auf die höchste Einstellung, bei mir nichts. Schade.

Wie ist dein aktuelles Programm?

Es ist noch das, wie in #15.

Das andere mit den sehr dunklen 7-Segmentanzeigen auch noch wie oben beschrieben. Div. Änderungen brachten nix, so dass ich diese wieder verworfen habe.

Gerd50:
Es ist noch das, wie in #15.

Das andere mit den sehr dunklen 7-Segmentanzeigen auch noch wie oben beschrieben. Div. Änderungen brachten nix, so dass ich diese wieder verworfen habe.

Ich glaube, du meinst #13 (denn der Code von #15 hat nichts mit einer Siebensegmentanzeige zu tun).

In der Tat, wenn ich den Code von #13 verwende, dann ist auch bei mir die Einerstelle der vierstelligen Siebensegmentanzeige deutlich heller als die anderen:
disp_01.png

Es wurde ja schon erklärt, warum es dazu kommt: Durch Verzögerungen (z.B. durch delay() oder langsame serielle Ausgaben) leuchtet eine Stelle länger (=heller) als die anderen.

Wenn ich aber die seriellen Ausgaben entferne (und damit die Verzögerungen so gering wie möglich halte) wie bei diesem leicht geänderten Code:

#define LATCH_DIO 4
#define CLK_DIO 7
#define DATA_DIO 8

#define Pot1 0

/* Segment byte maps for numbers 0 to 9 */
const byte SEGMENT_MAP[] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0X80, 0X90};
/* Byte maps to select digit 1 to 4 */
const byte SEGMENT_SELECT[] = {0xF1, 0xF2, 0xF4, 0xF8};

void setup () {
  Serial.begin(9600);
  /* Set DIO pins to outputs */
  pinMode(LATCH_DIO, OUTPUT);
  pinMode(CLK_DIO, OUTPUT);
  pinMode(DATA_DIO, OUTPUT);
}

/* Main program */
void loop() {
  int PotValue;
  PotValue = analogRead(Pot1);
  // Serial.print("Potentiometer: ");   // serielle Ausgaben verzögen - weg damit
  // Serial.println(PotValue);            // serielle Ausgaben verzögen - weg damit
  /* Update the display with the current counter value */
  WriteNumberToSegment(0 , PotValue / 1000);
  WriteNumberToSegment(1 , (PotValue / 100) % 10);
  WriteNumberToSegment(2 , (PotValue / 10) % 10);
  WriteNumberToSegment(3 , PotValue % 10);
}

/* Write a decimal number between 0 and 9 to one of the 4 digits of the display */
void WriteNumberToSegment(byte Segment, byte Value) {
  digitalWrite(LATCH_DIO, LOW);
  shiftOut(DATA_DIO, CLK_DIO, MSBFIRST, SEGMENT_MAP[Value]);
  shiftOut(DATA_DIO, CLK_DIO, MSBFIRST, SEGMENT_SELECT[Segment] );
  digitalWrite(LATCH_DIO, HIGH);
}

...dann sieht es bei mir so aus und alle vier Stellen leuchten ziemlich gleich hell:
disp_02.png

Variante 2:
Wenn ich die "Geschwindigkeit" der seriellen Ausgabe deutlich vergrößere, wie in diesem, auch nur wenig veränderten Code, auch dann leuchten alle 4 Stellen annähernd gleich hell - zumindest ist das bei mir so:

#define LATCH_DIO 4
#define CLK_DIO 7
#define DATA_DIO 8

#define Pot1 0

/* Segment byte maps for numbers 0 to 9 */
const byte SEGMENT_MAP[] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0X80, 0X90};
/* Byte maps to select digit 1 to 4 */
const byte SEGMENT_SELECT[] = {0xF1, 0xF2, 0xF4, 0xF8};

void setup () {
  Serial.begin(500000);  //  schnellere Ausgabe --> weniger Verzögerung
  /* Set DIO pins to outputs */
  pinMode(LATCH_DIO, OUTPUT);
  pinMode(CLK_DIO, OUTPUT);
  pinMode(DATA_DIO, OUTPUT);
}

/* Main program */
void loop() {
  int PotValue;
  PotValue = analogRead(Pot1);
  Serial.print("Pot: ");
  Serial.println(PotValue);
  /* Update the display with the current counter value */
  WriteNumberToSegment(0 , PotValue / 1000);
  WriteNumberToSegment(1 , (PotValue / 100) % 10);
  WriteNumberToSegment(2 , (PotValue / 10) % 10);
  WriteNumberToSegment(3 , PotValue % 10);
}

/* Write a decimal number between 0 and 9 to one of the 4 digits of the display */
void WriteNumberToSegment(byte Segment, byte Value) {
  digitalWrite(LATCH_DIO, LOW);
  shiftOut(DATA_DIO, CLK_DIO, MSBFIRST, SEGMENT_MAP[Value]);
  shiftOut(DATA_DIO, CLK_DIO, MSBFIRST, SEGMENT_SELECT[Segment] );
  digitalWrite(LATCH_DIO, HIGH);
}

Hi

Man könnte auch, wenn man halt auf einen langsamen Abschnitt angewiesen ist, die Anzeige in dieser Zeit abschalten.
Dadurch leuchtet Sie dann zwar auch nicht heller, aber ebenfalls gleichmäßig.

MfG