Forum: Mikrocontroller und Digitale Elektronik Simples Würfelprogramm verhält sich nach kleiner Erschütterung komisch


von Kim-Yannick (Gast)


Angehängte Dateien:

Lesenswert?

Ich habe für meinen Atmega88PA ein simples Würfelprogramm geschrieben, 
welches auch funktioniert (Code: http://pastebin.com/UjBUAgNa). Sollte 
es aber zu einer kleinen Erschütterung der Hardware kommen und der 
Taster gedrückt werden, wartet das Programm nicht mehr auf das Loslassen 
des Tasters und generiert mit maximaler Geschwindigkeit Zahlen, sodass 
die 7-Segment-Anzeige extrem schnell rumflackert und eine acht zu sehen 
ist. Die Hardware scheint zu funktionieren, da ein anderes Programm, was 
bei selbem Aufbau einfach nur den aktuellen Pinstatus auf dem Display 
ausgiebt, nicht auf diese Erschütterungen reagiert. Woran kann das 
liegen? Wie kann die Erschütterung das eine Programm beeinflussen, das 
andere aber nicht?

Der Aufbau: Der Pin C0 des Controllers ist mit dem Taster und einem 
Pull-Up von 10 kOhm verbunden. Alle D-Pins sind mit den 8 Pins der 
7-Segment-Anzeige verbunden (Pin 7 ist ein kleiner Punkt neben der 
Zahl). Programmiert wird über Atmel Studio 7 und einem USBAsp, der die 
Schaltung auf dem Breadboard außerdem mit 5V Strom versorgt.

von Bertel (Gast)


Lesenswert?

Meine Steckbrettaufbauten verhalten sich ebenfalls komisch, wenn ich an 
ihnen rüttle. Abhilfe bei mir: Lochrasteraufbau (löten).

von qwertzuiopü+ (Gast)


Lesenswert?

Klingt so, als würde der Kontakt vom Taster flattern und schon gibts 
Müll.

Kim-Yannick schrieb:
> ein anderes Programm, was
> bei selbem Aufbau einfach nur den aktuellen Pinstatus auf dem Display
> ausgiebt

Zeig doch mal dieses wundervolle Programm.

Auf jeden Fall fehlt die Resetbeschaltung mit Pullup und die 
Entkoppelkondensatoren.

von Stefan S. (sschultewolter)


Lesenswert?

Mir fehlt in der Schaltung ein Kerko an den Versorgungspins des Atmegas. 
Ansonsten ist eine Steckbrettschaltung nie das wahre, zum testen okay, 
aber dann muss man sich aber auch nicht wundern, wenn die Signale mal 
etwas verrückt spielen. Gut möglich, dass der Taster nicht immer 100% 
sizt.

von Kim-Yannick (Gast)


Lesenswert?

qwertzuiopü+ schrieb:
> Zeig doch mal dieses wundervolle Programm.

http://pastebin.com/DyiizbWb

von Witzbold (Gast)


Lesenswert?

Die Entkoppelkondensatoren an VCC fehlen.
Diese dienen der mechanischen Entkoppelung von Mikrocontroller und 
Steckbrett.

von Kim-Yannick (Gast)


Lesenswert?

qwertzuiopü+ schrieb:
> Klingt so, als würde der Kontakt vom Taster flattern und schon gibts
> Müll.

Am Taster kann es nicht liegen, da das Testprogramm funktioniert und das 
Problem auch dann auftaucht, wenn ich den Eingangspin direkt mit GND 
verbinde.

von Holger L. (max5v)


Lesenswert?

Pin22 (GND) und Pin20(AVCC) wurden ebenfalls weggelassen.

von Forist (Gast)


Lesenswert?

Kim-Yannick schrieb:
> http://pastebin.com/DyiizbWb

Und warum kann man den Code nicht hier zeigen? Wurde der als aussätzig 
verstoßen?

von Dussel (Gast)


Lesenswert?

1: Warum setzt du den Code nicht direkt in den Beitrag? Der ist nicht so 
lang, dass es da Probleme gäbe.

2: Das Programm hat ein paar unschöne Stellen, die die Funktion nicht 
stören aber trotzdem nicht so toll sind.

3: Ist das Problem reproduzierbar, tritt also immer gleich auf? Werden 
dauerhaft neue Zahlen generiert oder nur beim Wackeln?

von Kim-Yannick (Gast)


Lesenswert?

Dussel schrieb:
> 3: Ist das Problem reproduzierbar, tritt also immer gleich auf? Werden
> dauerhaft neue Zahlen generiert oder nur beim Wackeln?

Nach der Erschütterung hält das Problem eine kurze und immer 
unterschiedliche Zeit an. Das Flackern passiert nur, solange der Taster 
gedrückt ist. Wenn ich ihn loslasse, erkennt es das Programm korrekt. 
Wenn ich ihn wieder drücke, fährt das Flackern fort, sofern sich die 
Schaltung nicht schon wieder eingekriegt hat.

Dussel schrieb:
> 1: Warum setzt du den Code nicht direkt in den Beitrag? Der ist nicht so
> lang, dass es da Probleme gäbe.

Weil man in vielen Foren den Code in eigene Code-Blöcke setzen muss, die 
es hier nicht gibt. Außerdem gibt es bei Pastebin Syntax-Highlighting.

Holger L. schrieb:
> Pin22 (GND) und Pin20(AVCC) wurden ebenfalls weggelassen.

Muss ich an die Pins einfach nocheinmal die Versorgungsspannung 
anschließen?

Witzbold schrieb:
> Die Entkoppelkondensatoren an VCC fehlen.
> Diese dienen der mechanischen Entkoppelung von Mikrocontroller und
> Steckbrett.

Wie genau muss ich die aufbauen? Ich bin neu im Gebiet der Elektronik.

von Kim-Yannick (Gast)


Lesenswert?

Holger L. schrieb:
> Pin22 (GND) und Pin20(AVCC) wurden ebenfalls weggelassen.

Das hat es leider auch nicht gebracht :(

von Holger L. (max5v)


Lesenswert?

Die 100nF Abblockkondensatoren kommen jeweils zwischen VCC und GND.
Dem Resetpin kann man noch einen 10k Widerstand nach Vcc spendieren.
Dein F_CPU 10000000UL hat eine null zu viel.
Eventuell ist eine Tastenentprellung erforderlich.
https://www.mikrocontroller.net/articles/AVR-Tutorial:_Tasten

Code kann man hier im Forum auch formatiert anzeigen, siehe dazu
https://www.mikrocontroller.net/articles/Formatierung_im_Forum

von Kim-Yannick (Gast)


Lesenswert?

Holger L. schrieb:
> Dem Resetpin kann man noch einen 10k Widerstand nach Vcc spendieren.

Muss der Resetpin nicht mit dem USBAsp verbunden sein?

von Holger L. (max5v)


Lesenswert?

Kim-Yannick schrieb:
> Muss der Resetpin nicht mit dem USBAsp verbunden sein?

Natürlich muß der beim Programmieren verbunden werden.
http://www.kreatives-chaos.com/artikel/avr-grundschaltungen

von Kim-Yannick (Gast)


Lesenswert?

Eine simple If-Abfrage scheint den Code lauffähig zu machen. Wieso es 
jetzt genau so war, weiß ich immer noch nicht. Aber immerhin läuft der 
Code jetzt.

Ausschnitt aus dem Code:
1
while (!PINC&1) {
2
    number = rand();
3
    _delay_ms(10);
4
}
5
6
if (PINC&1) { // Die If-Abrage scheint es zum Laufen zu bringen
7
    PORTD = codes[number%6+1];
8
    
9
    while (PINC&1)
10
        _delay_ms(10);
11
}

von Forist (Gast)


Lesenswert?

1
    PORTC = 1;
2
   
3
    while (1) {            
4
        PORTD = codes[PINC&1];

Was haben Port D und Pin C miteinander zu schaffen?

Wie sieht dein Schaltungplan dazu aus?

von Kim-Yannick (Gast)


Lesenswert?

Forist schrieb:
> Was haben Port D und Pin C miteinander zu schaffen?
>
> Wie sieht dein Schaltungplan dazu aus?

Das ist die selbe Schaltung wie oben beschrieben bzw. auf dem Foto zu 
sehen. Pin C0 ist der Schalter, dessen Signal in Form einer 0 oder 1 
abgegriffen wird. Diese 1-Bit-Zahl wird dann als Index für das 
Code-Array genommen, welches fortlaufend die Daten für die jeweiligen 
Ziffern des 7-Segment-Displays enthält, dessen Pins alle mit den Pins 
von PORTD verbunden sind.

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.