score bord met 3x 7 segment display

Hardware die niet past in bovenstaande onderwerpen
Berichten: 31
Geregistreerd: 21 Jun 2015, 08:46

score bord met 3x 7 segment display

Berichtdoor handygerrit » 17 Feb 2016, 09:09

Ik heb een code voor arduino uno om 3x7segment teller aan te sturen met 3 digits 7 segment die werken met de 5 volt van arduino en telt van 0 tot 999 al de digits staan op nul en telt dan op naar 999 nu wil ik de displays vervangen met 2.3 inch maar die vragen een hogere spanning en stroom nu heb ik transistors geplaatst op de common anode om een hogere spanning te krijgen maar dan werkt het 3x7segment display niet meer correct alle segmenten lichte op en bij het bedienen van de knop teller +1 gaat dan op alle digits dus niet van 0 tot 999 maar van 0 tot 9
kan iemand mij vertellen wat doe ik niet goed???

cpp code
int digit1 = 10; //PWM Display pin 2
int digit2 = 9; //PWM Display pin 6
int digit3 = 6; //PWM Display pin 8
int BUTTONUP = 13; //ledje voor button pressed prima idee.
int BUTTON = 2; // de drukknop aansluiten tussen de nul en pin2
 
int segA = A1; //Display pin 14
int segB = 3; //Display pin 16
int segC = 4; //Display pin 13
int segD = 5; //Display pin 3
int segE = A0; //Display pin 5
int segF = 7; //Display pin 11
int segG = 8; //Display pin 15
 
 
void setup() {
  pinMode(segA, OUTPUT);
  pinMode(segB, OUTPUT);
  pinMode(segC, OUTPUT);
  pinMode(segD, OUTPUT);
  pinMode(segE, OUTPUT);
  pinMode(segF, OUTPUT);
  pinMode(segG, OUTPUT);
 
  pinMode(digit1, OUTPUT);
  pinMode(digit2, OUTPUT);
  pinMode(digit3, OUTPUT);
 
 
  pinMode(BUTTONUP, OUTPUT);
  pinMode(BUTTON, INPUT_PULLUP); // dan hoef je geen weerstanden te gebruiken, voor de korte afstand werkt dit prima.
}
boolean knopwasnietgedrukt;
int teller;
void loop() {
  //
  bool knopgedrukt = !digitalRead(BUTTON); // als de pin LOW is dan is de knopingedrukt
  digitalWrite(BUTTON, knopgedrukt); // een ledje aanzetten
  if (knopgedrukt && knopwasnietgedrukt) // ofwel uno ziet eerste knopdruk
  {
    teller=teller+1;
    knopwasnietgedrukt=false;
  }
  else{// niks doen
  }
  if (!knopgedrukt){
    knopwasnietgedrukt=true;
  }    
  // bovenstaand stuk zul je dus moeten herhalen voor de knop afteller.
 
  displayNumber(teller);
 
}
 
void displayNumber(int toDisplay) {
#define DISPLAY_BRIGHTNESS  500
 
#define DIGIT_ON  HIGH
#define DIGIT_OFF  LOW
 
  // long beginTime = millis();
 
  for(int digit = 3 ; digit > 0 ; digit--) {// hier moet er dus nog een bij (maar dat mag je zelf doen)
 
    switch(digit) {
    case 1:
      digitalWrite(digit1, DIGIT_ON);
      break;
    case 2:
      digitalWrite(digit2, DIGIT_ON);
      break;
    case 3:
      digitalWrite(digit3, DIGIT_ON);
      break;
    }
    //lightNumber(10); // hieronder kan ook waar het stond maar nu blijft het cijfer aan tot de volgende berekening klaar is.
   lightNumber(toDisplay % 10);//toegevoegt na afgezet regel hierboven
    toDisplay /= 10;
    //blink without delay(DISPLAY_BRIGHTNESS);//na toegevoegt
    delayMicroseconds(DISPLAY_BRIGHTNESS);
    lightNumber(10); //tot hier zie text boven
 
    digitalWrite(digit1, DIGIT_OFF);
    digitalWrite(digit2, DIGIT_OFF);
    digitalWrite(digit3, DIGIT_OFF);
 
    //lightNumber(toDisplay % 10); //pakt alleen de eenheden
    //toDisplay /= 10; // het getal wordt vast door tien gedeeld voor de volgende cyclus
 
    //delayMicroseconds(DISPLAY_BRIGHTNESS); // de tijd dat een cijfer aan moet zijn.
  }              // ik hou niet van delays, dus hier een oplossing voor bedenken dat het programma doorloopt en wacht tot de tijd gedaan is,
  // dat werkt met blink without delay.
}
 
void lightNumber(int numberToDisplay) {
 
#define SEGMENT_ON  LOW
#define SEGMENT_OFF HIGH
 
  switch (numberToDisplay){
 
  case 0:
    digitalWrite(segA, SEGMENT_ON);
    digitalWrite(segB, SEGMENT_ON);
    digitalWrite(segC, SEGMENT_ON);
    digitalWrite(segD, SEGMENT_ON);
    digitalWrite(segE, SEGMENT_ON);
    digitalWrite(segF, SEGMENT_ON);
    digitalWrite(segG, SEGMENT_OFF);
    break;
 
  case 1:
    digitalWrite(segA, SEGMENT_OFF);
    digitalWrite(segB, SEGMENT_ON);
    digitalWrite(segC, SEGMENT_ON);
    digitalWrite(segD, SEGMENT_OFF);
    digitalWrite(segE, SEGMENT_OFF);
    digitalWrite(segF, SEGMENT_OFF);
    digitalWrite(segG, SEGMENT_OFF);
    break;
 
  case 2:
    digitalWrite(segA, SEGMENT_ON);
    digitalWrite(segB, SEGMENT_ON);
    digitalWrite(segC, SEGMENT_OFF);
    digitalWrite(segD, SEGMENT_ON);
    digitalWrite(segE, SEGMENT_ON);
    digitalWrite(segF, SEGMENT_OFF);
    digitalWrite(segG, SEGMENT_ON);
    break;
 
  case 3:
    digitalWrite(segA, SEGMENT_ON);
    digitalWrite(segB, SEGMENT_ON);
    digitalWrite(segC, SEGMENT_ON);
    digitalWrite(segD, SEGMENT_ON);
    digitalWrite(segE, SEGMENT_OFF);
    digitalWrite(segF, SEGMENT_OFF);
    digitalWrite(segG, SEGMENT_ON);
    break;
 
  case 4:
    digitalWrite(segA, SEGMENT_OFF);
    digitalWrite(segB, SEGMENT_ON);
    digitalWrite(segC, SEGMENT_ON);
    digitalWrite(segD, SEGMENT_OFF);
    digitalWrite(segE, SEGMENT_OFF);
    digitalWrite(segF, SEGMENT_ON);
    digitalWrite(segG, SEGMENT_ON);
    break;
 
  case 5:
    digitalWrite(segA, SEGMENT_ON);
    digitalWrite(segB, SEGMENT_OFF);
    digitalWrite(segC, SEGMENT_ON);
    digitalWrite(segD, SEGMENT_ON);
    digitalWrite(segE, SEGMENT_OFF);
    digitalWrite(segF, SEGMENT_ON);
    digitalWrite(segG, SEGMENT_ON);
    break;
 
  case 6:
    digitalWrite(segA, SEGMENT_ON);
    digitalWrite(segB, SEGMENT_OFF);
    digitalWrite(segC, SEGMENT_ON);
    digitalWrite(segD, SEGMENT_ON);
    digitalWrite(segE, SEGMENT_ON);
    digitalWrite(segF, SEGMENT_ON);
    digitalWrite(segG, SEGMENT_ON);
    break;
 
  case 7:
    digitalWrite(segA, SEGMENT_ON);
    digitalWrite(segB, SEGMENT_ON);
    digitalWrite(segC, SEGMENT_ON);
    digitalWrite(segD, SEGMENT_OFF);
    digitalWrite(segE, SEGMENT_OFF);
    digitalWrite(segF, SEGMENT_OFF);
    digitalWrite(segG, SEGMENT_OFF);
    break;
 
  case 8:
    digitalWrite(segA, SEGMENT_ON);
    digitalWrite(segB, SEGMENT_ON);
    digitalWrite(segC, SEGMENT_ON);
    digitalWrite(segD, SEGMENT_ON);
    digitalWrite(segE, SEGMENT_ON);
    digitalWrite(segF, SEGMENT_ON);
    digitalWrite(segG, SEGMENT_ON);
    break;
 
  case 9:
    digitalWrite(segA, SEGMENT_ON);
    digitalWrite(segB, SEGMENT_ON);
    digitalWrite(segC, SEGMENT_ON);
    digitalWrite(segD, SEGMENT_ON);
    digitalWrite(segE, SEGMENT_OFF);
    digitalWrite(segF, SEGMENT_ON);
    digitalWrite(segG, SEGMENT_ON);
    break;
 
  case 10:
    digitalWrite(segA, SEGMENT_OFF);
    digitalWrite(segB, SEGMENT_OFF);
    digitalWrite(segC, SEGMENT_OFF);
    digitalWrite(segD, SEGMENT_OFF);
    digitalWrite(segE, SEGMENT_OFF);
    digitalWrite(segF, SEGMENT_OFF);
    digitalWrite(segG, SEGMENT_OFF);
    break;
  }
}

Advertisement

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: score bord met 3x 7 segment display

Berichtdoor shooter » 17 Feb 2016, 10:00

heb je wel de goede transistoren gebruikt aan de anode zijde?
dat zijn andere dan onderaan bovenaan is het pnp en onder is het npn.
en als dat goed is dan moet je de define van de digits eens omdraaien wellicht want die transistoren gaan aan als ze laag zien. (deze moeten gesinkt worden)
paul deelen
shooter@home.nl

Berichten: 31
Geregistreerd: 21 Jun 2015, 08:46

Re: score bord met 3x 7 segment display

Berichtdoor handygerrit » 17 Feb 2016, 11:09

shooter schreef:heb je wel de goede transistoren gebruikt aan de anode zijde?
dat zijn andere dan onderaan bovenaan is het pnp en onder is het npn.
en als dat goed is dan moet je de define van de digits eens omdraaien wellicht want die transistoren gaan aan als ze laag zien. (deze moeten gesinkt worden)


ik gebruik BC547 voor de anode te schakelen basis aan pin voor digit 1 of 2 of 3 colector aan 12 volt + emiter aan gnd

Berichten: 31
Geregistreerd: 21 Jun 2015, 08:46

Re: score bord met 3x 7 segment display

Berichtdoor handygerrit » 17 Feb 2016, 12:10

handygerrit schreef:
shooter schreef:heb je wel de goede transistoren gebruikt aan de anode zijde?
dat zijn andere dan onderaan bovenaan is het pnp en onder is het npn.
en als dat goed is dan moet je de define van de digits eens omdraaien wellicht want die transistoren gaan aan als ze laag zien. (deze moeten gesinkt worden)


ik gebruik BC547 voor de anode te schakelen basis aan pin voor digit 1 of 2 of 3 colector aan 12 volt + emiter aan gnd

wat bedoel je met deze moeten gesinkt worden (wat en waar!!)
ik heb ook een poging gedaan met opto coupler CNY17 maar het zelfde resultaat

Berichten: 31
Geregistreerd: 21 Jun 2015, 08:46

Re: score bord met 3x 7 segment display

Berichtdoor handygerrit » 17 Feb 2016, 16:28

Ik heb BC547 npn gebruikt voor anode digit 1+2+3 aan basis 7,5volt aan colector en gnd aan emitor.
Wat bedoel je met deze moeten gesinkt worden (wat en waar)
Ik heb ook een poging gedaan met opto coupler CNY17 maar met het zelfde resultaat

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: score bord met 3x 7 segment display

Berichtdoor shooter » 17 Feb 2016, 23:09

stukje theorie:
bc547 npn de basis spanning moet 0.7 Volt hoger zijn dan de emitter, dan gaat de 'diode' open en de transistor in geleiding.
bijv bc557 pnp, de basisspanning moet juist onder de emitter zijn,
je moet het zo zien dat als er stroom loopt van basis door de diode dan is de transistor in geleiding.
dus nee met een npn gaat dat niet.
het kan wel met een optocoupler ertussen hoor, maar dan wel van basis naar de gnd en een 10k naar de+
paul deelen
shooter@home.nl

Berichten: 31
Geregistreerd: 21 Jun 2015, 08:46

Re: score bord met 3x 7 segment display

Berichtdoor handygerrit » 19 Feb 2016, 11:16

Toch nog steeds een probleem om de code te laten werken met grotere 7 segment digits met common anode wanneer ik de arduino opstart met kleine digits met common anode werkt deze perfect dan start deze met 3 x 0 en rechtse digit na druk op de knop word dan 1---9 en bij 0 word digit midden 1 wanneer ik het opstart met grote digits
dan start deze met 3 x 0 dus segment G is dan uit wanneer ik op de knop druk veschijnt vaag de 1 op alle digits en de andere segmenten lichte ook op ietjes zwakker zodat ik de 1 nog zie maar al de andere digits op aan staan.
kunt u mij uitleggen waarom dit gebeurt heb al van alles geprobeert

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: score bord met 3x 7 segment display

Berichtdoor nicoverduin » 19 Feb 2016, 12:46

Gebruik jij een weerstand vanaf de data pin naar de basis van die transistoren? Of heb je die data pinnen rechtstreeks hangen aan de basis?
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 31
Geregistreerd: 21 Jun 2015, 08:46

Re: score bord met 3x 7 segment display

Berichtdoor handygerrit » 19 Feb 2016, 13:09

ik heb 220 omh weerstand tussen basis en pin 10-9-6 maar gebruik opto coupler CNY17 pin 1 met weerstand aan basis en pin 10-9-6 van arduino zie code pin 2 CNY 17 aan GND pin 4 CNY17 aan GND en pin 5 CNY17 aan pin 9 volt van arduino en anode van digit aan pin 5 van CNY17
ook gelijk aan boven met transistors BC547 en BC 557

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: score bord met 3x 7 segment display

Berichtdoor nicoverduin » 19 Feb 2016, 13:29

Heb je ff een scham? van mij part gewoon een schets en een foto of scan
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Volgende

Terug naar Overige hardware

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 8 gasten