Forum: Mikrocontroller und Digitale Elektronik Arduino Würfel


von Gerhard H. (Firma: Rentner) (spectro)


Lesenswert?

Darf ich etwas fragen, ohne gleich furchtbar ausgelacht zu werden?
Ich habe die Pins im Source-Code so abgeändert, dass das Spielzeug 
(7-Segment-Würfel) autonom auf einer "selbstgeschnitzten" Platine laufen 
soll, aber ich komme nicht drauf, warum es zwar auf der UNO-Platine 
läuft und da nicht.
Platine ist korrekt und garantiert fehlerfrei.
// Sieben Segment Würfel autonom auf separater Platine



int segmente[10][7] = { {1,1,1,1,1,1,0},  // 0
                        {0,1,1,0,0,0,0},  // 1
                        {1,1,0,1,1,0,1},  // 2
                        {1,1,1,1,0,0,1},  // 3
                        {0,1,1,0,0,1,1},  // 4
                        {1,0,1,1,0,1,1},  // 5
                        {1,0,1,1,1,1,1},  // 6
                        {1,1,1,0,0,0,0},  // 7
                        {1,1,1,1,1,1,1},  // 8
                        {1,1,1,1,0,1,1}}; // 9

int pinArray[] = {14, 15, 5, 6, 11, 13, 12};


int buttonPin = 18;

void setup() {

 pinMode (pinArray[5,6,11,12,13,14,15], OUTPUT);

 pinMode(buttonPin, INPUT);


randomSeed(analogRead(0));

}


void loop() {


  if (digitalRead(buttonPin)==1) {

    for (int i=0; i<40; i++) {

      showDigit(random(1,7));

      delay(i);
    }
  }
}


void showDigit(int num) {

    for (int j=0; j<7; j++) {

      if (segmente[num][j]==1) {

        digitalWrite(pinArray[j], HIGH);
      }
      else {

        digitalWrite(pinArray[j], LOW);
      }


    }
}



(Fürs Arduino UNO Board sieht der Anfang so aus:

int pinArray[] = {8,9,3,4,5,7,6};


int buttonPin = 12;


void setup() {

  for (int i=3; i<10; i++) {
    pinMode(i, OUTPUT);
  }

Die FOR- Schleife kann ich autonom nicht anwenden, weil die Ausgangspins 
nicht in einer Reihe liegen.

Der ATMega ist korrekt auf Pins 7, 20 und 21 mit Versorgungsspannung und 
auf 8 und 22 mit GND gespeist und die Verdrahtung passt.

von Michael B. (laberkopp)


Lesenswert?

Gerhard H. schrieb:
> pinMode (pinArray[5,6,11,12,13,14,15], OUTPUT);

Das funktioniert ?

von Gerhard H. (Firma: Rentner) (spectro)


Lesenswert?

Lässt sich compilieren aber ich habe es zuerst anders gemacht:

void setup() {


     pinMode(5, OUTPUT);
     pinMode(6, OUTPUT);
     pinMode(11, OUTPUT);
     pinMode(12, OUTPUT);
     pinMode(13, OUTPUT);
     pinMode(14, OUTPUT);
     pinMode(15, OUTPUT);



  pinMode(buttonPin, INPUT);


  randomSeed(analogRead(0));
}

klappt auch nicht

von Arduino F. (Firma: Gast) (arduinof)


Lesenswert?

1
const byte pinArray[] {8,9,3,4,5,7,6};
2
void setup() 
3
{
4
   for(const byte p:pinArray)pinMode(p, OUTPUT);
5
}
6
7
void loop() 
8
{
9
10
}
die Sprache lernen, welche man verwendet, beantwortet dann alle Fragen 
dieser Art.

: Bearbeitet durch User
von Gerhard H. (Firma: Rentner) (spectro)


Lesenswert?

Geht aber auf dem UNO Board mit der FOR -Schleife auch

for(const byte p:pinArray)pinMode(p, OUTPUT);

Das funktioniert leider auch nicht

: Bearbeitet durch User
von Arduino F. (Firma: Gast) (arduinof)


Lesenswert?

Gerhard H. schrieb:
> for(const byte p:pinArray)pinMode(p, OUTPUT);
>
> Das funktioniert leider auch nicht

Warum nicht?

von Arduino F. (Firma: Gast) (arduinof)


Lesenswert?

Michael B. schrieb:
> Das funktioniert ?

Natürlich nicht, das ist ein Fantasieprodukt.


Aber so gehts:
1
template<typename ArrayType,size_t N> void pinMode(const ArrayType (&pins)[N],byte mode)
2
{
3
  for(byte p:pins)pinMode(p, mode);
4
}
5
6
7
const byte pinArray[] {8,9,3,4,5,7,6};
8
9
10
void setup() 
11
{
12
   pinMode(pinArray, OUTPUT);
13
}

von Rainer W. (rawi)


Lesenswert?

Gerhard H. schrieb:
> Ich habe die Pins im Source-Code so abgeändert, dass das Spielzeug
> (7-Segment-Würfel) autonom auf einer "selbstgeschnitzten" Platine laufen
> soll, aber ich komme nicht drauf, warum es zwar auf der UNO-Platine
> läuft und da nicht.

Was heißt "läuft nicht"?
Geht es ein bisschen genauer?
Hat dein Compiler vielleicht bereits Probleme mit dem Code und gibt die 
Fehlermeldung "warning: left operand of comma operator has no effect 
[-Wunused-value] pinMode (pinArray[5,6,11,12,13,14,15], OUTPUT);" aus?

von Stefan F. (Gast)


Lesenswert?

Fange erstmal ganz einfach an, indem du alle LEDs einschaltest. Sonst 
nichts.
1
void setup() {
2
  pinMode(14,OUTPUT);
3
  pinMode(15,OUTPUT);
4
  pinMode(5,OUTPUT);
5
  pinMode(6,OUTPUT);
6
  pinMode(11,OUTPUT);
7
  pinMode(13,OUTPUT);
8
  pinMode(12,OUTPUT);
9
10
  digitalWrite(14,HIGH);
11
  digitalWrite(15,HIGH);
12
  digitalWrite(15,HIGH);
13
  digitalWrite(6,HIGH);
14
  digitalWrite(11,HIGH);
15
  digitalWrite(13,HIGH);
16
  digitalWrite(12,HIGH);
17
}
18
19
void loop() {}

Leuchten dann alle Segmente? Wenn nicht, kontrolliere die Verkabelung. 
Wenn das soweit klappt, schreibe die wiederholten Funktionsaufrufe in 
eine for-Schleife mit pinArray um.

Danach sehen wir weiter.

von Gerhard H. (Firma: Rentner) (spectro)


Angehängte Dateien:

Lesenswert?

Keinerlei Compilierprobleme, aber es gibt keine Anzeige auf dem Display.

Hier wäre das Layout:

von Gerhard H. (Firma: Rentner) (spectro)


Lesenswert?

[quote]Leuchten dann alle Segmente? Wenn nicht, kontrolliere die 
Verkabelung.
Wenn das soweit klappt, schreibe die wiederholten Funktionsaufrufe in
eine for-Schleife mit pinArray um[/quote]
Das habe ich schon mal getestet. Ja, leuchten alle

von Stefan F. (Gast)


Lesenswert?

Es fehlen Abblock-Kondensatoren sowohl am Spannungsregler als auch am 
Mikrocontroller.

von Thomas W. (Gast)


Lesenswert?

Gerhard H. schrieb:
> Keinerlei Compilierprobleme, aber es gibt keine Anzeige auf dem Display.
>
> Hier wäre das Layout:

Schaltplaene sind ueberbewertet.

Gruesse

Th.

von Stefan F. (Gast)


Lesenswert?

Gerhard H. schrieb:
> Das habe ich schon mal getestet. Ja, leuchten alle

Dann der nächste Schritt: Gebe eine Zahl aus.
1
void setup() {
2
  ... pins initialisieren
3
  showDigit(0);
4
}
5
6
void loop() {}

Funktioniert das?

von Gerhard H. (Firma: Rentner) (spectro)


Lesenswert?

in dem Fall ganz bestimmt

von Stefan F. (Gast)


Lesenswert?

Stefan F. schrieb:
> Dann der nächste Schritt: Gebe eine Zahl aus.

Gerhard H. schrieb:
> in dem Fall ganz bestimmt

Was heißt das, funktioniert dein Programm soweit? Oder denkst du nur, 
dass es funktionieren sollte? Hast du die fehlenden Kondensatoren 
nachgerüstet?

Baue dein Programm schrittweise auf, bis der Fehler wieder auftritt. 
Dann weißt du genau, an welchem Punkt es scheitert. Frage dann nochmal 
nach, wir helfen gerne weiter.

Beitrag #7374113 wurde von einem Moderator gelöscht.
von Arduino F. (Firma: Gast) (arduinof)


Lesenswert?

Stefan F. schrieb im Beitrag #7374113:
> Da greifst du übrigens auf Speicher außerhalb des Arrays zu.

Blödsinn!

von Stefan F. (Gast)


Lesenswert?

Arduino F. schrieb:
> Blödsinn!

Ja habe ich gelöscht.

von Gerhard H. (Firma: Rentner) (spectro)


Lesenswert?

Wie oben geschrieben, funktioniert das Programm mit den für den UNO 
äquivalenten Pin-Nummern auf dem UNO-Board perfekt, nur die 
eigenständige Platine ergibt keine Anzeige, was mir total unverständlich 
ist.
100µF beim Stabi - Eingang und 100nF beim Stabi-Ausgang hab ich 
nachgerüstet.

Ich habe auch Folgendes probiert: ATMega  in der Original-UNO-Platine 
und wie üblich, Drahtverhau zu den Vorwiderständen der 7-Segment-Anzeige 
probeweise verlegt und das läuft problemlos.
Seltsame Sache

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Gerhard H. schrieb:
> 100µF beim Stabi - Eingang und 100nF beim Stabi-Ausgang hab ich
> nachgerüstet.

Halte dich an die Vorgaben aus dem Datenblatt des Spannungsreglers. 
Kontrolliere die Stromversorgung an allen Versorgungspins, auch GND. 
Kontrolliere die Spannung am Reset Eingang. Wenn der Mikrocontroller für 
einen Quarz konfiguriert wurde, muss man den auch anschließen.

Deine Angabe welches Programm bzw. welcher Test nun erfolgreich war, und 
welcher nicht, sind widersprüchlich. Sortiere dich mal. Wir brauchen den 
Schaltplan, Fotos vom Aufbau und exakt das Programm (Quelltext) mit der 
dazu gehörigen Fehlerbeschreibung.

von Reinhold R. (rrose)


Lesenswert?

Gerhard H. schrieb:
> Ich habe auch Folgendes probiert: ATMega  in der Original-UNO-Platine
> und wie üblich, Drahtverhau zu den Vorwiderständen der 7-Segment-Anzeige
> probeweise verlegt und das läuft problemlos.

Da hat er auch Takt. Auf deinem Bord sind
Pin 9 u.10 unbeschaltet.
Internen Takt einschalten?

Gruß, Reinhold

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.