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.
Meine Steckbrettaufbauten verhalten sich ebenfalls komisch, wenn ich an ihnen rüttle. Abhilfe bei mir: Lochrasteraufbau (löten).
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.
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.
Die Entkoppelkondensatoren an VCC fehlen. Diese dienen der mechanischen Entkoppelung von Mikrocontroller und Steckbrett.
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.
Pin22 (GND) und Pin20(AVCC) wurden ebenfalls weggelassen.
Kim-Yannick schrieb: > http://pastebin.com/DyiizbWb Und warum kann man den Code nicht hier zeigen? Wurde der als aussätzig verstoßen?
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?
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.
Holger L. schrieb: > Pin22 (GND) und Pin20(AVCC) wurden ebenfalls weggelassen. Das hat es leider auch nicht gebracht :(
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
Holger L. schrieb: > Dem Resetpin kann man noch einen 10k Widerstand nach Vcc spendieren. Muss der Resetpin nicht mit dem USBAsp verbunden sein?
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
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 | }
|
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.