Dobbelsteen met display

Ik ben bezig met een quiz knoppenkast en dat is redelijk gelukt maar daarbij wil ik ook graag een dobbelsteen maken.
De bedoeling is dat ik 2 dobbelstenen maak met daarbij 2 losse 7 sigment led display, dus eigenlijk 2 losse dobbelstenen naast elkaar.
Ik ben begonnen met 1 dobbelsteen en die werkt alleen weet ik niet hoe ik de 7 sigment display aan moet sluiten en welke code daarbij moet komen.
Weet iemand hoe ik nu verder kan?

Dit heb ik tot nu toe.

//unsigned long count[7];

void setup()
{
pinMode (buttonPin, INPUT_PULLUP);
Serial.begin (9600);
}

void loop()
{
buttonState = digitalRead (buttonPin);

if (buttonState == LOW)
{
randNumber = random ( 1, 7);
Serial.println (randNumber);
}
else
{
analogWrite (randompin, HIGH);
}

delay (500);

}

Hoi.

Zulke displays komen in uitvoeringen met common Anode, en met common Kathode.
Dus op zo'n ding zitten óf alle Anodes aan elkaar, of alle Kathodes.
Het begint er mee dat jij weet welke daarvan je hebt.
Het volgende is dat je moet weten hoeveel LEDs er in 1 segment zitten, want die zitten dan in serie met elkaar.
Heb je kleinere displays, dan zal daar vast maar 1 LED in zitten.
Maar ik heb hier ook wat grotere exemplaren leggen waar 3 LEDs per segment zitten.
En omdat die in serie zitten moet daar dus de spanning ook hoog genoeg zijn om ze te laten oplichten.
Gemakshalve ga ik er nu maar van uit dat je kleine displays hebt met 1 LED per segment.
En dat die LED 20 mA trekt plus common Kathode is.
Dan gebruik je dus een weerstandje (220 Ohm) per segment en 1 pin van je Arduino.
Maak je de uitgang die aan pin A van je display zit HIGH, dan gaat het bovenste segment dus aan.
Zo kun je dus tekens bouwen, maar ook leuke animaties laten zien terwijl de dobbelsteen 'rolt'.

Overigens, nog even dit ter inspiratie (klik !)

Dat klinkt me nog te ingewikkeld haha ben net een paar dagen bezig met arduino en heb nog maar heel weinig of geen kennis van het geheel

O, ik ben vergeten te typen dat de common Kathode dan dus aan GND gaat.
Zou het een common Anode zijn, dan gaat dat aan 5 volt, en moet je je logica omdraaien (zie je andere thread).

Als ik me niet vergis, heb je een kit gekocht. Indien ja, een link naar die kit kan handig zijn.

Zijn de 7-segment displays daar onderdeel van? Indien ja, dan zijn er waarschijnlijk voorbeeld programmas en schemas bijgeleverd en kun je daar eens naar kijken.

Ja was een setje uit china zijn goedkoop ding en er zat er maar 1 bij maar heb er 2 nodig en nee geen voorbeelden zal sowieso vast 2 dezelfde kopen

Voor een dobbelsteen is het leuker om 7 LED's in een vierkant te plaatsen zodat je alle zijden van een dobbelsteen kunt maken. Die sluit je dan op 4 pinnen aan:
1->middelste
2->linksboven en rechtsonder
3->rechtsboven en links onder
4->links en rechts van midden
Deze map kan daar dan bij:

byte pinout[7]={
b00000000,
b00000001,
b00000010,
b00000011,
b00000110,
b00000111,
b00001110};// grappige is dat op de waarde van 5 en 6 na het netjes binair is!

Oh, en vergeet niet ergens in de setup deze zin op te nemen:

randomSeed(analogRead(A0));

anders gooit ie steeds hetzelfde.

Je hebt waarschijnlijk wel wat meer nodig dan die twee displays.

Voordat je koopt en mogelijk geld weggooit, doe een beetje onderzoek. Heb je genoeg pinnen vrij voor twee displays? Of moet je een andere oplossing bedenken. Houdt rekening met de maximale stroom per Arduino pin (20mA), per groep pinnen (100mA) en voor de microcontroller (200 mA).

Wat zit er allemaal in die kit?

Dit zat er allemaal in voor 15 euro of zoiets

61-DXRPZIoL.AC.jpg

61-DXRPZIoL.AC.jpg

Deze site toont het verschil tussen 7-segment display met een gemeenschappelijke kathode en een gemeenschappelijke anode.

Als engels niet een van je sterke punten is kun je het altijd door google laten vertalen :wink:

Je kunt zelf bepalen of je display een gemeenchappelijk kathode heeft of een gemeenschappelijke anode. Verbind de gemeenchappelijk pin met GND en gebruik een weerstand om een van de segment pinnen met Vcc te verbinden. Als een segment oplicht, heb je een gemeenschappelijk kathode, anders een gemeenschappelijk anode. Als de segmenten niet oplichten kun je de gemeenschappelijk pin met Vcc verbinden en een segment via een weerstand met GND verbinden; als het segment oplicht heb je een gemeenschappelijke anode.

Je hebt nu in ieder geval een indicatie wat je moet kopen dat overeenkomt met wat je al hebt. Zoals gezegd komt er nog wat meer bij kijken.

Je kunt ook overwegen om de module te gebruiken in de linker bovenhoek; daarmee zou je moeten kunnen maken wat @blnkjns zo'n beetje voorstelde. Je hoeft je dan geen zorgen meer te maken over het overbelasten van de pinnen van de Arduino.

begin eens met led13 zet die aan als je op de knop duwt, haha dat is nog niet zo simpel hoor denk eraan dat je input_pullup gebruikt. Ja die gaat laag als je op de knop drukt, en de led gaat aan bij een hoog signaal,
veel plezier.
vervolgens ga je met de display aan de gang, daar moeten weerstanden tussen en de aansluiting zie de anderen die dat al uitgelegd hebben. denk eraan om de digitale punt aan te zetten bij 6 en 9 dan weet je hoe te lezen.
met die ULN kun je dus de 4 digits aan krijgen (leuke puzzel dus we gaan je nog wel horen hier.)

blnkjns:
..en vergeet niet ergens in de setup deze zin op te nemen:

randomSeed(analogRead(A0));

anders gooit ie steeds hetzelfde.

bulldogrick:
Plaatje

Jouw plaatje toont een controller in QFP32 behuizing, en niet DIL 28 en dat heeft een voordeel.
Wanneer je inderdaad een Uno hebt zoals die daar getoond word, dan heb je namelijk A6 en A7 extra.
Puur omdat de vorm van die behuizing de ruimte biedt.
A6 en A7 zijn alleen daarvoor te gebruiken, en niet zoals de andere analoge ingangen ook als digitale in of uitgangen.
Daarom kun je in dat geval blnkjns's tip beter gebruiken met A7:

randomSeed(analogRead(A7));

Het kan zijn dat A6 en A7 op pinnen naar buiten zijn gevoerd op je Uno clone, ik kan dat niet zien op de foto.
Maar ze zitten dan met zekerheid niet in de rijen links en rechts, vermoedelijk in het veldje linksonder op die foto.
Zo kun je mooi weer een pin uitsparen voor een extra LEDje (oog van je dobbelsteen) en toch de ruis oppikken voor je randomSeed.

Voorzover ik weet heeft een Uno geen A6 en A7. Dat zouden dan poorten PC6 en PC7 moeten zijn, maar:

  • PC6 is RESET
  • via PC7 is de interne temperatuursensor bereikbaar op de multiplexer

Edit: Ik heb er toch eens even naar gekeken, en heb dit ontdekt:

  • De 328/QFP32 heeft inderdaad pins voor A6 en A7, nl op 19 en 22. Maar deze zijn niet uitgevoerd op de Arduino-print.
  • Een analogInput(A6) of (A7) geeft de eerste pakweg 15 keer een random-achtige waarde, daarna wordt de variatie snel minder.
  • Het maakt hierbij niet uit of je pinMode() op INPUT, INPUT_PULUP of OUTPUT instelt... ???
  • Om de int. temp.sensor te kunnen gebruiken moet je eerst een paar registers instellen.

Dat heb ik ook niet gezegd.
De originele Uno heeft helemaal geen A6 en A7, want die heeft een chip in een DIL28 behuizing.
Ik heb gezegd dat de foto een Uno clone laat zien die een QFP32 behuizing heeft.
En omdat aan een QFP 32 dus 4 pootjes over zijn, heeft Atmel besloten de schakelaar die de ene analoge ingang die er werkelijk in zit, helemaal uit te bedraden.
Die schakelaar heeft dus 8 ingangen (want die kun je met dezelfde 3 bitjes aansturen als een 6 voudige schakelaar) en 1 uitgang, en zit in de chip geïntegreerd.
Maar in de 28 pins behuizing kom je pootjes te kort en kun je daarom maar 6 ingangen gebruiken.
Ik heb nooit eerder de behoefte gevoeld om het te testen, maar ik heb het donkerbruine vermoeden dat de IDE er ook nooit over zal klagen als je A6 en A7 wil gebruiken, en de chip er ook heen zal schakelen.
Alleen komt het dan dus nooit van de chip af, en is de kans dat je op die manier de hier gezochte ruis oppikt een heel stuk kleiner geworden.
Want een aan de buitenkant niet aangesloten pin werkt als antenne, maar een niet aanwezige pin dus een heel stuk minder.

In deze QFP 32 behuizing kun je dus 2 extra analoge ingangen gebruiken, en zoals gezegd kunnen die alleen daarvoor gebruikt worden.
Niet als digitale uitgangen of voor welke andere functie dan ook, al kun je natuurlijk ook kijken of je er een 1 of een 0 van kunt lezen.

Ik heb het nog even opgezocht, en de Uno boardjes die die ingangen ook als soldeereilandjes of pinnen beschikbaar hebben zijn heel zeldzaam (want extra productiekosten ondanks dat de chip zelf aanzienlijk goedkoper (de werkelijke reden van deze keuze) is).
Als ze die pinnen hebben, dan vallen die niet binnen de Arduino "from factor", omdat een originele Arduino deze pinnen niet ondersteunt, maar je kunt ze wel gebruiken in je code.
Andere boardjes die ik hier ook heb, hebben dat wel zoals een Arduino mini (clone).

Tot slot nog 2 plaatjes die laten zien dat ik niet sprookjes zit te vertellen, zoek de teksten A6 en A7:

Check. Ik heb na het schrijven van mijn bericht nog wat zitten testen, en het bericht uitgebreid. Blijkt dat ik het maar half bij het rechte eind had... :wink:

dat de IDE er ook nooit over zal klagen als je A6 en A7 wil gebruiken

Klopt, en de compiler vindt het ook allemaal wel best. :wink:

Maar nu wil ik ook weten of je er in de praktijk iets mee kunt doen, alleen durf ik (nog?) niet aan die microscule pinnetjes te solderen... Misschien later.

En ik ben nieuwsgierig waar de twee nog overblijvende pins voor gebruikt worden! Zo te zien gaat het om pin 18 AVCC, whatever dat moge betekenen (1), de tweede zie ik zo gauw nog niet (2).

1: Gevonden: "AVCC is the supply voltage pin for the A/D Converter, Port C (3..0), and ADC (7..6)."
2: Pin 5 is "AGND", zal dus bij AVCC horen.

Volgens mij zit er trouwens een fout in jouw eerste tekening (Reddit - Dive into anything ): bij pins 9 en 10 van de 328 staat OCB0B resp. OCC0A, dat moet OC0B resp. OC0A zijn!

Edit:

  • INT1 (Uno pin 3) staat er ook niet in
  • AGND is niet als zodanig aangeduid
  • CLK0 (Uno 8) idem
  • PWM-pins zijn niet als zodanig aangeduid

Een provisorische update, correcties in rood:

De enige manier om er zeker van te zijn dat een pinout diagram correct is om het te verifieren tegen de datasheet. Er zwerven teveel pinout diagrammen rond op het internet die niet correct zijn.

En zelfs Arduino krijgt het ook niet altijd de eerste keer goed :wink:

In dit geval lijkt het om een typo te gaan.

Heel simpel; ik heb gezocht naar een duidelijk plaatje waar de aanwezigheid van A6 en A7 getoond worden.
De andere pinnen waren dus totaal oninteressant voor mijn doel.
Inderdaad is een datasheet de enige betrouwbare referentie, maar daar ga je niet even een plaatje uit trekken waar je op een forum naar kunt linken.
Ik snap niet waarom er dan nog getwijfeld word over de beschikbaarheid en bruikbaarheid van de aanwezige pinnen, maar daar mag men lekker zelf mee gaan experimenteren.
Ik heb al uitgelegd wat er wel en wat er niet kan met die 2 extra pinnen.

Wanneer je via een analoge pin meer variatie op je random wil genereren, heb je 2 gereedschappen om dat te doen:

  1. Lees een andere, bekende waarde uit met de ADC en het liefst een die aan GND ligt, zodat de condensator die hiervoor gebruikt word, ontladen raakt.
    Dus A6 die je aan GND hebt geknoopt bijvoorbeeld.
  2. Wanneer er wel een pin beschikbaar is op je Arduino, sluit daar dan een stuk draad op aan dat aan de andere kant nergens op is aangesloten.
    Dan heb je een waarschijnlijk betere antenne voor de ruis die je wil ontvangen.

kijk even hier om wat meer te weten te komen over hoe je de 7 segment display verbindt.

zo ben ff weg geweest en wat een hoop info maar.... ik ga er mee aan de slag
ff een vraagje ik zie een hele discussie over het uno bordje maar ik snap er niet zo heel veel meer van
wat voor mij belangrijk is, is de vraag of dat het bordje wel dezelfde werking heeft als het originele arduino bordje
dus met andere woorden als ik een schema gebruik van een origineel bordje werkt mijn bordje dan ook gewoon, en als ik een nano bordje koop kan ik dan ook allemaal dezelfde aansluit pinnetjes gebruiken of werkt dat dan ook weer anders?

Wederom weer heel hartelijk dank voor alle info :grin:

sterretje:
Deze site toont het verschil tussen 7-segment display met een gemeenschappelijke kathode en een gemeenschappelijke anode.

Als engels niet een van je sterke punten is kun je het altijd door google laten vertalen :wink:

Je kunt zelf bepalen of je display een gemeenchappelijk kathode heeft of een gemeenschappelijke anode. Verbind de gemeenchappelijk pin met GND en gebruik een weerstand om een van de segment pinnen met Vcc te verbinden. Als een segment oplicht, heb je een gemeenschappelijk kathode, anders een gemeenschappelijk anode. Als de segmenten niet oplichten kun je de gemeenschappelijk pin met Vcc verbinden en een segment via een weerstand met GND verbinden; als het segment oplicht heb je een gemeenschappelijke anode.

Je hebt nu in ieder geval een indicatie wat je moet kopen dat overeenkomt met wat je al hebt. Zoals gezegd komt er nog wat meer bij kijken.

Je kunt ook overwegen om de module te gebruiken in de linker bovenhoek; daarmee zou je moeten kunnen maken wat @blnkjns zo'n beetje voorstelde. Je hoeft je dan geen zorgen meer te maken over het overbelasten van de pinnen van de Arduino.

Welke module in de linker bovenhoek bedoel jij precies ik zie hem niet