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:
  • 1 Bewertungen - 2 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Thermometer mit 7 Segment Anzeige
22.05.2016, 21:38
Beitrag #33
RE: Thermometer mit 7 Segment Anzeige
Zitat:werde es am kommenden WE probieren.
Das Wochende ist doch immer noch Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.05.2016, 08:26
Beitrag #34
RE: Thermometer mit 7 Segment Anzeige
Musste es noch schnell probieren.
Bis minus 9,9°C geht es! Ab minus 10°C wird nur noch die Stelle hinter dem Komma angezeigt und vor dem Komma ist ein A bei minus 11 ein b usw. Die Reihenfolge passt auch noch nicht richtig.
Den Punkt hab ich erstmal raus genommen, den schließe ich Hardwaremäßig direkt an.
gruß...ottii50
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.05.2016, 17:22
Beitrag #35
RE: Thermometer mit 7 Segment Anzeige
Ich habe gerade gesehen, das du digits anders deklariert hast als ich.
Bei mir ist es LSB und bei dir MSB.
Man sie das gut bei der "0", bei dir wäre das in Binär 0B11111100 und bei mir 0B00111111. Der Dezimal-Punkt und das '-' ist bei dir somit auch an einem anderem Ort.
Un noch was ist anders, du deckst mit deine Deklaration auch den Hex-Bereich (0-F) ab, was aber bei normaler Dezimal-Anzeige (0-9) nicht nötig ist.

So nebenbei ist eine Deklaration in Binär übersichtlicher als mit gewöhnlichen Zahlen.

Du kannst ja relativ einfach dein digits auskommandieren und meines übernehmen.


Code:
int digits[] = {252, 96, 218,242, 102, 182, 190, 224, 254, 246, 238, 62, 156, 122, 158, 142};

Bei mir:
Code:
const unsigned char digits[] = {
        0B00111111,  // = 0
        0B00000110,  // = 1
        0B01011011,  // = 2
        0B01001111,  // = 3
        0B01100110,  // = 4
        0B01101101,  // = 5
        0B01111101,  // = 6
        0B00000111,  // = 7
        0B01111111,  // = 8
        0B01100111,  // = 9
        };
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.05.2016, 19:35
Beitrag #36
RE: Thermometer mit 7 Segment Anzeige
Das werde ich noch machen.
Ohhh, hatte ja vergessen das meine 7 Segmente Cammon Cathode haben.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.05.2016, 17:44 (Dieser Beitrag wurde zuletzt bearbeitet: 24.05.2016 17:47 von Mathias.)
Beitrag #37
RE: Thermometer mit 7 Segment Anzeige
Ich habe es mal mit echtem C++ probiert und habe festgestellt, das die shiftOut vertauscht waren, auch habe ich im if na + n verwechselt.
Code:
void displayNumber(int n) {
    const unsigned char blank = 0B00000000;
    const unsigned char minus = 0B01000000;
    const unsigned char punkt = 0B10000000;

    unsigned int na = abs(n);
    digitalWrite(LATCH, LOW);
    if (na >= 100) {
        shiftOut(DATA, CLOCK, LSBFIRST, digits[na % 10]);
        shiftOut(DATA, CLOCK, LSBFIRST, digits[na % 100 / 10] | punkt);
        shiftOut(DATA, CLOCK, LSBFIRST, digits[na / 100]);
        if (n < 0) {
            shiftOut(DATA, CLOCK, LSBFIRST, minus);
        } else {
            shiftOut(DATA, CLOCK, LSBFIRST, blank);
        }
    } else {
        shiftOut(DATA, CLOCK, LSBFIRST, digits[na % 10] | punkt);
        shiftOut(DATA, CLOCK, LSBFIRST, digits[na / 10]);
        if (n < 0) {
            shiftOut(DATA, CLOCK, LSBFIRST, minus);
        } else {
            shiftOut(DATA, CLOCK, LSBFIRST, blank);
        }
        shiftOut(DATA, CLOCK, LSBFIRST, blank);
    }
    digitalWrite(LATCH, HIGH);
}
[/quote]
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.05.2016, 07:39
Beitrag #38
RE: Thermometer mit 7 Segment Anzeige
Hallo Mathias, danke für deine Mühe!
Hab es mal so aufgespielt wie du es geschrieben hast, jetzt funktioniert die Anzeige aber nicht mehr richtig. 2 und 4 werden angezeigt, ansonsten nur Striche also keine richtige Zahl.
Ich hab schon überlegt, wenn ich das Minus für die erste Stelle einfach über einen Digital Out Pin ansteuere, der bei "int temperature" minus/gleich 10°C auf HIGH geht.

gruß....ottii50

Code:
#define DATA 10
#define LATCH 8
#define CLOCK 9

#include <OneWire.h>

int DS18S20_Pin = 6; //DS18S20
const unsigned char digits[] = {
        0B00111111,  // = 0
        0B00000110,  // = 1
        0B01011011,  // = 2
        0B01001111,  // = 3
        0B01100110,  // = 4
        0B01101101,  // = 5
        0B01111101,  // = 6
        0B00000111,  // = 7
        0B01111111,  // = 8
        0B01100111,  // = 9
        };
OneWire ds(DS18S20_Pin);

int temperature;
int n = round(temperature*10);

void setup(void) {
pinMode(LATCH, OUTPUT);
pinMode(CLOCK, OUTPUT);
pinMode(DATA, OUTPUT);
Serial.begin(9600);
}

void displayNumber(int n) {
    const unsigned char blank = 0B00000000;
    const unsigned char minus = 0B01000000;
    const unsigned char punkt = 0B10000000;

    unsigned int na = abs(n);
    digitalWrite(LATCH, LOW);
    if (na >= 100) {
        shiftOut(DATA, CLOCK, LSBFIRST, digits[na % 10]);
        shiftOut(DATA, CLOCK, LSBFIRST, digits[na % 100 / 10] | punkt);
        shiftOut(DATA, CLOCK, LSBFIRST, digits[na / 100]);
        if (n < 0) {
            shiftOut(DATA, CLOCK, LSBFIRST, minus);
        } else {
            shiftOut(DATA, CLOCK, LSBFIRST, blank);
        }
    } else {
        shiftOut(DATA, CLOCK, LSBFIRST, digits[na % 10] | punkt);
        shiftOut(DATA, CLOCK, LSBFIRST, digits[na / 10]);
        if (n < 0) {
            shiftOut(DATA, CLOCK, LSBFIRST, minus);
        } else {
            shiftOut(DATA, CLOCK, LSBFIRST, blank);
        }
        shiftOut(DATA, CLOCK, LSBFIRST, blank);
    }
    digitalWrite(LATCH, HIGH);
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.05.2016, 17:34 (Dieser Beitrag wurde zuletzt bearbeitet: 27.05.2016 17:49 von Mathias.)
Beitrag #39
RE: Thermometer mit 7 Segment Anzeige
Code:
int temperature;
int n = round(temperature*10);
Wieso hast du für temperature, ein int anstelle von float gesetzt ?

Zitat: 2 und 4 werden angezeigt
Meinst du damit, das hunderter und das einer Segment, wobei das hunderter ganz Links ist und nur das '-' anzeigen soll ?


Schade, das ich es nicht richtig probieren kann, ich habe zwar eine Anzeige, aber diese steuere ich mit Multiplex an.

PS: Hast du deine Schaltung auf einem BreadBoard, oder hast du alles verlötet ?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.05.2016, 20:14
Beitrag #40
RE: Thermometer mit 7 Segment Anzeige
Hi, ich seh bald nicht mehr durch. Hab ich da was übersehen? Hatte bis jetzt immer
Code:
int temperature;
stehenAngry
Mach morgen noch mal einen Test!
Hab alles auf einem Steckboard! Die Hardware funktioniert auch!
Ich denke es liegt jetzt an dieser Deklaration
Code:
const unsigned char digits[] = {
        0B00111111,  // = 0
        0B00000110,  // = 1
        0B01011011,  // = 2
        0B01001111,  // = 3
        0B01100110,  // = 4
        0B01101101,  // = 5
        0B01111101,  // = 6
        0B00000111,  // = 7
        0B01111111,  // = 8
        0B01100111,  // = 9
        };
Hab es auch damit probiert, geht auch nicht
Code:
byte dec_digits[] = {0b10111111,0b00000110,0b11011011,0b01001111,
    0b11100110,0b01101101,0b11111101,0b00000111,0b11111111,0b01101111 };
gruß...ottii50
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  merkwürdige Anzeige bei lektion 17 lecker16 7 164 20.11.2016 22:40
Letzter Beitrag: Tommy56
Smile Datum Anzeige mit 7 Segmentanzeige ottii50 11 900 16.05.2016 19:12
Letzter Beitrag: Mathias
  Leonardo- Anzeige von MIDI-Daten an ws2812b Modinox 7 482 26.01.2016 13:11
Letzter Beitrag: Bitklopfer
  OLED Display anzeige von Logo falsch ! b3ta 0 338 23.01.2016 15:12
Letzter Beitrag: b3ta
  8 LED , 7-Segment-Elemente einzeln ansteuern beim tm1638 und die Buttons arduinofan 0 502 15.01.2016 22:37
Letzter Beitrag: arduinofan
  8x7 Segment LED Anzeige / Sketch verändern w1ck3d 3 647 23.11.2015 17:56
Letzter Beitrag: hotsystems
  7-Segment Multiplex, überblendet Mathias 4 713 18.11.2015 17:22
Letzter Beitrag: Mathias
  Drehzahl Anzeige Analog (neuling) Kuxii 9 1.112 30.10.2015 12:01
Letzter Beitrag: hotsystems
  Sieben Segment LED Anzeige Tellen 10 1.819 18.06.2015 21:21
Letzter Beitrag: Tellen
  fehler in anzeige von float avoid 11 1.912 12.04.2015 16:32
Letzter Beitrag: HaWe

Gehe zu:


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