7 Segment - Gear Shifter

Hallo Leute,

Ich bin gerade voll am verzweifeln. Ich bekomme meine 7 Segment Anzeige nicht zum laufen.

Möchte für mein Sim Racing Cockpit einen Gear Shifter machen.

Ich benutze dieses 7 Segment SA 40-19 RT: 7-Segment-Anzeige, rot, 100mm, gem. Anode bei reichelt elektronik

Ich benutze einen TPIC6B595N, wie verkabel ich das ganze richtig ?

LG Thomas

Hallo,

mit den Diodenanschlüssen kennste dich aus?
Du weißt was "gemeinsame Anode" bedeutet?

Schau mal hier nur durch Google Bildsuche:

Hier die Segement der Rest:

220px-7_segment_display_labeled.svg.jpg

Jetzt musst du dir die Schieberegister einarbeiten im Playground dann dir die "Zahlen" und Bitmuster umsetzten und dann rockt die Bude.

Der Link:

Gruß
DerDani

@ Doc_Arduino

Ich kannte mich mal aus damit aber das ist lange her.

Ich weiß nur das bei der Anzeige auf 3 & 8 das geimeinsame Plus ist also da lege ich 9V drauf oder ?

und mit 1 2 4 5 6 7 9 10 fahre ich auf den TPIC6B595N -> Drain 0 bis Drain 7 ?

Davor muß ich Widerstände reinmachen ?

RCK / SRCK / SER IN zum Arduino vom Chip
SRCLR / VCC die 5V vom Arduino zum Chip
G und die ganzen GND vom Arduino zum Chip

Und das ganze möchte ich mit einen Arduino Uno betreiben.

Ist das soweit richtig ?

Hallo,

der gefundene Schaltplan von Dani sollte keine Fragen mehr offen lassen. :wink:
Das nimmt dir noch nicht die Arbeit ab, dich mit Schieberegistern näher zubefassen.
Das Datenblatt zum TPIC ist auch hilfreich.

Hallo,

Danke Leute für eure Hilfe, habe es endlich hinbekommen :slight_smile:

Also zählen von 0 - 9 geht schon mal.

LG Thomas

if (project==success&&helpwasgood==true){
karma++; }

:grinning:

Gruß
DerDani

P.S.: Zeig mal her ein Bildchen

Hallo Leute,

Habe jetzt eigentlich alles fertig.

Ich benutze mein 7 Segment zusammen mit einen TM-1638 für Pcars.

Den Code habe ich aus einem Forum.

Es funktioniert eigentlich alles bis auf das das 7 Segment in einer Tour flackert.

Ich weiß nur das der Code für gemeinsame Kathode ( 7 Segment ) ist. Ich habe gemeinsame Anode.

Kann mir da einer helfen ?

Hier ein Video 7 Segment

Danke im Voraus

Den Code habe ich aus einem Forum.

Also weißt Du nicht, was da passiert ... :confused:

Es funktioniert eigentlich alles bis auf das das 7 Segment in einer Tour flackert.

Sketch zeigen!

Ich weiß nur das der Code für gemeinsame Kathode ( 7 Segment ) ist. Ich habe gemeinsame Anode.
Kann mir da einer helfen ?

Eine Diode hat zwei Anschlüsse: Anode (+) und Kathode (-)
Schau Dir den Plan von Dani nochmal an, dann siehst Du was das heißt.

/*
Project Cars Arduino Dashboard Ver: 1.3.2 one TM1638 mdule
Support: http://forum.projectcarsgame.com/showthread.php?29762-Arduino-Dashboard
Dokumentation: http://www.ws-clan.de/pc_dash/Readme.pdf
Software: http://www.ws-clan.de/pc_dash/index.php
copyright 2015 saibot852 http://forum.projectcarsgame.com/member.php?105167-saibot852
*/
#include <TM1638.h>
#include <stdio.h>
#include <string.h>

// define a module on data pin 8, clock pin 9 and strobe pin 7
TM1638 module(8, 9, 7);


int vRpm, vGear, vDisplay, vSpeed, vTemp = 0, vAbs = 0, vFuel = 0, vEngineState = 0;
int LEDSTATE = 0;
char incomingByte = 0;
char data[50];
String sSpeed;
String sRpm;
int Time;
String fTime;
int counter = 0;
int ledout_temp = 0;
int ledout_fuel = 0;
int ledout_engine = 0;
int ledout_indicator = 0;
int button = 1;
int state;

boolean Leds_up;
word state_leds = 0;
word leds [10] = {0, 1, 3, 7, 15, 31, 8223, 24607, 57375, 65535};

int minuten;
int sekunden;
int millisek;


int minuten5;
int sekunden5;
int millisek5;
int Time5;
String fTime5;

#include <AH_74HC595.h>

#define SER_Pin   4   //Serial data input
#define RCLK_Pin  3   //Register clock
#define SRCLK_Pin 2   //Shift register clock
AH_74HC595 seven_segment(SER_Pin, RCLK_Pin, SRCLK_Pin);

const int ledPin =  10;
const int ledPine =  11;
const int ledPinf =  6;// the number of the LED pin
// Variables will change:
int ledState = LOW;
int ledStatef = LOW;
int ledStatee = LOW;
int ledStatei = 0x0000;   // ledState used to set the LED
long previousMillis = 0;
long previousMillise = 0;
long previousMillisf = 0;
long PreviousMillisi = 0;
// the follow variables is a long because the time, measured in miliseconds,
// will quickly become a bigger number than can be stored in an int.
long interval = 500;
long intervali = 30;
String ver;

void setup() {

 pinMode(6, OUTPUT);
 pinMode(10, OUTPUT);
 pinMode(11, OUTPUT);
 pinMode(12, OUTPUT);
 ver = "1.3.2;1;";
 pinMode(ledPin, OUTPUT);
 Serial.begin(38400);

}
void loop() {

 unsigned long CurrentMillisi = millis();

 if (Serial.available() > 0) {
   incomingByte = Serial.read();

   if (incomingByte != ';') {
     data[counter] = incomingByte;
     data[counter + 1] = '\0';
     counter ++;
   } else {
     String stringOne = data;
     //version check
     if (stringOne.substring(0, 3) == "VER") {
       Serial.println(ver);

       digitalWrite(12, HIGH);
       delay(100);
       digitalWrite(12, LOW);
       digitalWrite(11, HIGH);
       delay(100);
       digitalWrite(11, LOW);
       digitalWrite(10, HIGH);
       delay(100);
       digitalWrite(10, LOW);
       digitalWrite(6, HIGH);
       delay(100);
       digitalWrite(6, LOW);
       delay(100);
       digitalWrite(12, HIGH);
       digitalWrite(11, HIGH);
       digitalWrite(10, HIGH);
       digitalWrite(6, HIGH);
       seven_segment.showNumber(8);
       module.setLEDs(0xFFFF);
       module.setDisplayToString("88888888");
       delay(1000);
       digitalWrite(12, LOW);
       digitalWrite(11, LOW);
       digitalWrite(10, LOW);
       digitalWrite(6, LOW);
       seven_segment.clear();
       module.setLEDs(0x0000);
       module.clearDisplay();

       //buttons send
     } else if (stringOne.substring(0, 5) == "state") {
       state = stringOne.substring(5, 6).toInt();

       if (state == 1 ) {
         if (module.getButtons() == 0b00000001) {
           button = 1;
         } else if (module.getButtons() == 0b00000010) {
           button = 2;
         } else if (module.getButtons() == 0b00000100) {
           button = 3;
         } else if (module.getButtons() == 0b00001000) {
           button = 4;
         } else if (module.getButtons() == 0b00010000) {
           button = 5;
         } else if (module.getButtons() == 0b00100000) {
           button = 6;
         } else if (module.getButtons() == 0b01000000) {
           button = 7;
         } else if (module.getButtons() == 0b10000000) {
           button = 8;
         }

         String button_s = String(button);
         Serial.println(button_s + ":0:0:");
       }

       //rpm,pos,lap right module1
     } else if (stringOne.substring(0, 2) == "CC") {
       sRpm = stringOne.substring(2, 6);
       module.setDisplayToString(sRpm, 0, 4);

       //Fuel setup display
     } else if (stringOne.substring(0, 2) == "CH") {
       String fuel_level = stringOne.substring(2, 6);
       int fuel_level_int = stringOne.substring(2, 6).toInt();

       if (fuel_level_int < 10) {
         module.setDisplayToString("  0" + fuel_level, 0b00100000, 4);
       } else if (fuel_level_int < 100) {
         module.setDisplayToString("  " + fuel_level, 0b00100000, 4);
       } else if (fuel_level_int < 1000) {
         module.setDisplayToString(" " + fuel_level, 0b00100000, 4);
       } else {
         module.setDisplayToString(fuel_level, 0b00100000, 4);
       }

       //speed left module1
     } else if (stringOne.substring(0, 2) == "DD") {
       sSpeed = stringOne.substring(2, 6);
       module.setDisplayToString(sSpeed, 0, 0);

       //time right modul 1
     } else if (stringOne.substring(0, 2) == "CA") {
       fTime = stringOne.substring(2, 7);

       if (fTime == "0" || fTime == "-1") {
         module.setDisplayToString("----", 0, 4);
       } else {

         int tleng = fTime.length() - 1;
         int cTime = fTime.substring(0, tleng).toInt();

         int mspos = tleng + 1;
         millisek = fTime.substring(tleng, mspos).toInt();

         minuten  = (cTime %  3600) /   60;
         sekunden =  cTime %    60;
         String min = String(minuten);
         String sek = String(sekunden);
         String ms = String(millisek);

         if (cTime < 600) {

           if (sekunden < 10) {
             module.setDisplayToString(min + "0" + sek + ms, 0b10100000, 4);
           } else {
             module.setDisplayToString(min + sek + ms, 0b10100000, 4);
           }

         } else {

           if (sekunden < 10) {
             module.setDisplayToString(min + "0" + sek, 0b01000000, 4);
           } else {
             module.setDisplayToString(min + sek, 0b01000000, 4);
           }
         }

       }
       //split time right modul 1
     } else if (stringOne.substring(0, 2) == "CE") {
       fTime5 = stringOne.substring(2);

       int tleng5 = fTime5.length() - 3;
       if (tleng5 < 0) {
         tleng5 = 0;
       }
       int cTime5 = fTime5.substring(0, tleng5).toInt();
       int mspos5 = tleng5 + 3;
       millisek5 = fTime5.substring(tleng5, mspos5).toInt();

       minuten5  = (cTime5 %  3600) /   60;
       sekunden5 =  cTime5 %    60;

       String min5 = String(minuten5);
       String sek5 = String(sekunden5);
       String ms5 = String(millisek5);

       String ms5ausgabe;

       if (millisek5 < 10 ) {
         ms5ausgabe = "00" + ms5;
       } else if (millisek5 < 100 ) {
         ms5ausgabe = "0" + ms5;
       } else {
         ms5ausgabe = ms5;
       }

       if (fTime5 == "-1000" || fTime5 == "0") {
         module.setDisplayToString("----", 0, 4);
       } else if (cTime5 < 60) {

         if (sekunden5 < 1) {
           module.setDisplayToString("0" + ms5ausgabe, 0b10000000, 4);
         } else if (sekunden5 < 10) {
           module.setDisplayToString(sek5 + ms5ausgabe, 0b10000000, 4);
         } else {
           ms5ausgabe = ms5ausgabe.substring(0, 2);
           module.setDisplayToString(sek5 + ms5ausgabe, 0b01000000, 4);
         }

       } else if (cTime5 < 600) {

         if (sekunden5 < 10) {
           ms5ausgabe = ms5ausgabe.substring(0, 1);
           module.setDisplayToString(min5 + "0" + sek5 + ms5ausgabe, 0b10100000, 4);
         } else {
           ms5ausgabe = ms5ausgabe.substring(0, 1);
           module.setDisplayToString(min5 + sek5 + ms5ausgabe, 0b10100000, 4);
         }

       } else {
          if (sekunden5 < 10) {
         module.setDisplayToString(min5 + "0" + sek5, 0b01000000, 4);
       } else {
         ms5ausgabe = ms5ausgabe.substring(0, 1);
         module.setDisplayToString(min5 + sek5, 0b01000000, 4);
       }

     }

     // gear setup
   } else if (stringOne.substring(0, 2) == "BB") {
     vGear = stringOne.substring(2).toInt();

     if (vGear == 0) {
       seven_segment.clear();
       seven_segment.setPin(4, 1);
       seven_segment.setPin(6, 1);
       seven_segment.setPin(2, 1);
     } else if (vGear == -1) {
       seven_segment.clear();
       seven_segment.setPin(4, 1);
       seven_segment.setPin(6, 1);
     } else if (vGear == -2) {
       seven_segment.clear();
       seven_segment.setPin(6, 1);
     } else if (vGear == -3) {
       seven_segment.clear();
     } else {
       seven_segment.showNumber(vGear);
     }

     //led setup
   } else if (stringOne.substring(0, 2) == "AA") {
     vTemp = stringOne.substring(2, 3).toInt();
     vAbs = stringOne.substring(3, 4).toInt();
     vEngineState = stringOne.substring(4, 5).toInt();
     vFuel = stringOne.substring(5, 6).toInt();
     LEDSTATE = stringOne.substring(6, 7).toInt();

     if (vTemp == 1) {
       // digitalWrite(10, HIGH);

       ledout_temp = 1;

     } else {
       ledout_temp = 0;
       // digitalWrite(10, LOW);
     }

     if (vEngineState == 1) {
       // digitalWrite(11, HIGH);
       ledout_engine = 1;
     } else {
       //digitalWrite(11, LOW);
       ledout_engine = 0;
     }

     if (vAbs == 1) {
       digitalWrite(12, HIGH);
     } else {
       digitalWrite(12, LOW);
     }

     if (vFuel == 1) {
       //digitalWrite(6, HIGH);
       ledout_fuel = 1;
     } else {
       //digitalWrite(6, LOW);
       ledout_fuel = 0;
     }

     // tm1638 shifting led setup
     if (LEDSTATE > 7)
     {
       CurrentMillisi = millis();
       if (CurrentMillisi - PreviousMillisi > 50)
       {
         PreviousMillisi = CurrentMillisi;
         if ( Leds_up )
         {
           Leds_up = false;
           module.setLEDs(65535);
           state_leds = 65535;
         }
         else
         {
           Leds_up = true;
           module.setLEDs(0);
           state_leds = 0;
         }
       }
       else
       {
         module.setLEDs(state_leds);
       }
     }
     else
     {

       if (LEDSTATE >= 1) {
         module.setLED(1, 0);
       } else {
         module.setLED(0, 0);
       }

       if (LEDSTATE >= 2) {
         module.setLED(1, 1);
       } else {
         module.setLED(0, 1);
       }

       if (LEDSTATE >= 3) {
         module.setLED(1, 2);
       } else {
         module.setLED(0, 2);
       }

       if (LEDSTATE >= 4) {
         module.setLED(1, 3);
       } else {
         module.setLED(0, 3);
       }

       if (LEDSTATE >= 5) {
         module.setLED(1, 4);
       } else {
         module.setLED(0, 4);
       }

       if (LEDSTATE >= 6) {
         module.setLED(1, 5);
       } else {
         module.setLED(0, 5);
       }

       if (LEDSTATE >= 7) {
         module.setLED(1, 6);
       } else {
         module.setLED(0, 6);
       }

       module.setLED(0, 7);

       Leds_up = false;
       state_leds = 65535;
     }

   }
   data[0] = '\0';
   counter = 0;
 }
}

//blinking warning led
unsigned long currentMillis = millis();
unsigned long currentMillise = millis();
unsigned long currentMillisf = millis();

if (ledout_temp == 1) {

 if (currentMillis - previousMillis > interval) {

   // save the last time you blinked the LED

   previousMillis = currentMillis;

   // if the LED is off turn it on and vice-versa:

   //The curly brackets may have to be added to this if statement (they were missing in the IDE file)

   if (ledState == LOW) {

     ledState = HIGH;

   }
   else {

     ledState = LOW;

   }

   // set the LED with the ledState of the variable:

   digitalWrite(ledPin, ledState);

 }
} else {
 digitalWrite(ledPin, LOW);
}

if (ledout_fuel == 1) {

 if (currentMillisf - previousMillisf > interval) {

   // save the last time you blinked the LED

   previousMillisf = currentMillisf;

   // if the LED is off turn it on and vice-versa:

   //The curly brackets may have to be added to this if statement (they were missing in the IDE file)

   if (ledStatef == LOW) {

     ledStatef = HIGH;

   }
   else {

     ledStatef = LOW;

   }

   // set the LED with the ledState of the variable:

   digitalWrite(ledPinf, ledStatef);

 }
} else {
 digitalWrite(ledPinf, LOW);
}

if (ledout_engine == 1) {

 if (currentMillise - previousMillise > interval) {

   // save the last time you blinked the LED

   previousMillise = currentMillise;

   // if the LED is off turn it on and vice-versa:

   //The curly brackets may have to be added to this if statement (they were missing in the IDE file)

   if (ledStatee == LOW) {

     ledStatee = HIGH;

   }
   else {

     ledStatee = LOW;

   }

   // set the LED with the ledState of the variable:

   digitalWrite(ledPine, ledStatee);

 }
} else {
 digitalWrite(ledPine, LOW);
}


}

Hallo,

!!! Code in Code Tags, oben links Button </> , geht auch nachträglich.

Nochmal. Der Unterschied "gemeinsame Anode" vs. "gemeinsame Kathode" ist dir klar?

Und dann kommt es auf den Schaltplan drauf an, sprich wie du die Segmente ansteuerst. Dazu muss dann der Code angepaßt werden.

Hallo Doc,

Was der Unterschied ist weiß ich.

Aber ich kenn mich mit den programmieren null aus.

Bei diesen Code was ich gepostet habe handelt es sich um eine 74HC595, da der User nur eine kleine Anzeige verwendet

Ich habe eine TCIP6B595N da ich eine größere Anzeige benutze die 10 Volt benötigt.

Ich weiß leider nicht wie ich den Code umschreiben muß nur für die 7 Segment, der Rest geht ja also das TM1638 Modul.

Deswegen wende ich mich an euch die mir vielleicht ein bisschen unter die Arme greifen können.

LG Thomas

Erstens:
Wenn du die Datenblätter der beiden Bausteine nebeneinander legst, dann solltest du in der Lage sein die Unterschiede/Gemeinsamkeiten heraus zu arbeiten. Welche dann natürlich die Grundlage für deine Programmänderung werden.

Zweitens:
Wie kommst du auf die witzige Idee, dass ich das für dich mache?

@ combie

ich habe nie gesagt das du mir das machen sollst.

Die Datenblätter habe ich und kein Problem diese zu lesen.

Ich habe nur das Problem das ich nicht weiß was für die 7 Segment Anzeige zuständig ist im Code.

Ich habe ja 7 Segmente für das TM1638 und ein 7 Segment für den Gear Shifter. Ich suche das was für den Gear Shifter verantwortlich ist.

LG Thomas

ThomasT083:
Ich habe ja 7 Segmente für das TM1638 und ein 7 Segment für den Gear Shifter. Ich suche das was für den Gear Shifter verantwortlich ist.

// define a module on data pin 8, clock pin 9 and strobe pin 7
TM1638 module(8, 9, 7);
...
AH_74HC595 seven_segment(SER_Pin, RCLK_Pin, SRCLK_Pin);

Alles mit "module." gehört zu TM1638, alles mit "seven_segment." zu 74HC595, also zum Gear Shifter.