das Kunstobjekt Mensch und Natur ( bei youtube zu sehen unter http://www.youtube.com/watch?v=dlN3wU8XeNE )wird gesteuert per Microcontroller ATMega 8 A PU 1 MegaHz. Es hat 5 Programmteile, in Assembler geschrieben. Das Programm läuft selbständig von Teil 1 bis Teil5 durch, es funktioniert auch alles. Per Knopfdruck soll es jedoch möglich sein, jederzeit von einem Programmteil in den nächstfolgenden weiterzuschalten. Ich habe versucht, das mit einer Interrupt-Programmierung zu bewerkstelligen, das funktioniert aber leider nicht. Wer kann mir weiterhelfen? Ich habe das Programm als -.spr datei und als -.txt datei beigefügt.
A. Z. schrieb: > Ich habe das Programm als -.spr datei und als -.txt datei beigefügt. Und was soll man damit machen? Zeig besser das Assembler-Programm (*.asm). Peter
hallo Peter, eine .asm datei habe ich leider nicht aufgefunden. Mein Programm für die Programmierung ( Sisy3 AVR ) prodoziert .spr dateien und .sax dateien. In der Textdatei ist jedoch die Programmierung klar zu sehen. Anando
Tja, sowas programmiert man ja auch wie jeder normale Mensch in C und nicht mit irgendwelchen exotischen Umgebungen, die außer einem selbst keiner benutzt.
Hi >Tja, sowas programmiert man ja auch wie jeder normale Mensch in C und >nicht mit irgendwelchen exotischen Umgebungen, die außer einem selbst >keiner benutzt. Was ist an Assembler exotisch? Und normale Menschen programmieren überhaupt nicht. Die laden Apps und wohnen in Clouds. C finde ich auch exotisch. @A. Z. (sunmoon) 1. Du solltest dich mal mit den Timern beschäftigen. 2. INTs sind für Tasten ungeeignet. MfG Spess
A.Z. schrieb: > Mein Programm für die > Programmierung ( Sisy3 AVR ) prodoziert .spr dateien und .sax dateien. Das würd ich aber schon exotisch nennen.
Oliver J. schrieb: > spess53 schrieb: >> 2. INTs sind für Tasten ungeeignet. > Nicht wenn man hardwaremäßig entprellt. Selbst dann bringt es ihm in seinem Fall nichts. Das ist alles mit Warteschleifen gemacht. Und so wie er sich die Umschaltung aus dem Interrupt heraus vorstellt, wird das sowieso nichts. Die ganze Programmorganisation passt einfach hinten und vorne nicht. Das fängt schon damit an, dass die einzelnen 'Teile' eigentlich mehr oder weniger ohne jegliche Steuerung hintereinander ablaufen und eigentlich einen einzigen Teil bilden, der aus 4 Abschnitten besteht. Damit ist es aber nicht vernünftig möglich, eine davon abweichende Steuerung des Ablaufs von Teilen einzubauen. Ganz einfach deswegen, weil es die gar nicht gibt.
Keno Usuki schrieb: > Tja, sowas programmiert man ja auch wie jeder normale Mensch in C und > nicht mit irgendwelchen exotischen Umgebungen, die außer einem selbst > keiner benutzt. BASCOM hätte sich da auch noch angeboten. Für Dinge in dieser Komplexitätsklasse ideal.
Karl Heinz Buchegger schrieb: > Selbst dann bringt es ihm in seinem Fall nichts. > Das ist alles mit Warteschleifen gemacht. > Und so wie er sich die Umschaltung aus dem Interrupt heraus vorstellt, > wird das sowieso nichts. Auf seinen Code hab ich auch keinen Bezug genommen. Wollte lediglich anmerken, dass man Taster mit Interrupts auswerten kann, wenn man hardwareseitig entprellt.
Oliver J. schrieb: > Karl Heinz Buchegger schrieb: >> Selbst dann bringt es ihm in seinem Fall nichts. >> Das ist alles mit Warteschleifen gemacht. >> Und so wie er sich die Umschaltung aus dem Interrupt heraus vorstellt, >> wird das sowieso nichts. > > Auf seinen Code hab ich auch keinen Bezug genommen. Wollte lediglich > anmerken, dass man Taster mit Interrupts auswerten kann, wenn man > hardwareseitig entprellt. Ja kann man. Ist aber mit Ausnahme des Falles, das der Interrupt den µC aus dem Tiefschlaf holen muss, nicht sinnvoll. Tastendrück ist aus µC Sicht nichts zeitkritisches. wenn er regelmässig mit einem Timer nachsieht, ob eine Taste gedrückt ist, dann ist das schnell genug und man spart den Aufwand für externes Entprellen mit gleichzeitig noch besserer Funktionalität wie zb Autorepeat, Unterscheidung kurzer/langer Tastendruck etc. Kurz und gut: Hat man einmal eine entsprechende Entprellung, ist sowas eine Copy&Forget Aktion. Entprellung
hallo sunmoon, kannst mal ein SiSy-Arcive (*.sax) hoch laden? die kann ich dann auch mit meinem Sisy öffnen ;-) Grüße J.
Hi Also prinzipiell würde ich für Taaster auch keinen Interrupt nuzn. Was hier Sinn macht, ist eine Flankenauswertung, also Flag setzen, wenn Taster gedrückt und in einer Bearbeitung ( Weiterschalten) dann zurückgesetzt. Sinn macht es allerdings, einen Timer -Interrupt zur Steuerung des Programms zu nutzen. Etwa so Timer -ISR stellt alle Sekunden ein Bit auf 1 ( Timer-Flag) Hauptprogramm erkennt gesetztes Bit und zählt einen Wert hoch oder runter. Dabei wird das Zeitflag wieder gelöscht. Bei erreichen einer Zeit wird Subroutine zur Weiterschaltung aufgerufen. Taster wird bei jedem Programmzyklus eingelesen und mit altem Zustand abgeglichen. Dies lässt sich mit einer Exclusiv-Oder-Schaltung ganz gut erledigen. Nur wenn ein Wechsel des Eingangs stattfindet, wird das Ergebnis der XOR- Verknüpfung "1". Danach wird der neue Status vom Eingang in den "alten" kopiert. Die "1" kann nun benutzt werden, um die Subroutine, die auch vom Timer angestoßen wird, aufzurufen. Dabei wird die "1" wieder gelöscht. Ein erneutes "1" Ergebnis erhält man erst beim nächsten Wechsel des Einganges. Nun sollte aber nur die positive Flanke zum "Weiterschalten benutzt werden. Bei mir sieht das dann so aus:
1 | In Reg_A, Port_x |
2 | COM Reg_A ; bei Tastern gegen GND das Complement bilden |
3 | ANDI REG_A, 0b00001111 ; nur bits 0-3 bewerten |
4 | STS New_In, Reg_A ; neuen Status ablegen |
5 | LDS Reg_B, old_In ; alten Status n zweites Register holen |
6 | EOR Reg_B, Reg_A ; nur Wechsel erkennen |
7 | AND Reg_B, Reg_A ; positive Flanke ist in Register B |
8 | STS old_In, Reg_A ; neuen Status in Alblage |
9 | STS Flag_To_High, Reg_B ; Die Bits nach Bearbeitung löschen |
Die Bits in Flag_To_High werden nun beim Tastendruck gesetzt. Das heißt, wenn du in deiner Bearbeitung dieses Events das Bit löscht, muß der Taster erst losgelassen und wieder betätigt werden PS: Übrigends, ich liebe ASM. Mit C hab ich nix am Hut... aber deswegen schimpf ich da nicht drauf. Jede Sprache hat irgendwo seine Berechtigung. Gruß oldmax
A.Z. schrieb: > eine .asm datei habe ich leider nicht aufgefunden. Die txt-Datei sind aber aus, wie Assembler. Ist die wirklich als txt-Datei in Deinem Projekt gespeichert? @Alle. Ich glaube nicht, daß es Sinn macht, den Programmierstil zu zerpflücken. Es ist doch ein Anfängerprojekt und genauso sieht es eben aus. Peter
Peter Dannegger schrieb: > A.Z. schrieb: >> eine .asm datei habe ich leider nicht aufgefunden. > > Die txt-Datei sind aber aus, wie Assembler. > Ist die wirklich als txt-Datei in Deinem Projekt gespeichert? Ich hab mal kurz dieses Sissy Zeug überflogen. Das sieht so aus, als ob man vorab Ablaufpläne zeichnen muss. In die entsprechenden Blöcke werden Assembler Codestückchen (oder auch C-Stücke) eingefügt. Das glaub ich ihm daher, dass er kein eigentliches Assembler-File vorrätig hat. Die Sissy IDE wird das nur auf Anforderung aus den PAP zusammenstellen. > Ich glaube nicht, daß es Sinn macht, den Programmierstil zu zerpflücken. > Es ist doch ein Anfängerprojekt und genauso sieht es eben aus. Ich denke er kann da noch nicht einmal großartig etwas dafür. In einem PAP zeichnet es sich nun einmal leicht. Ist dann halt kein Spaghetti Code sondern eine Spaghetti Zeichnung, aber das Problem ist nach wie vor dasselbe.
Hi >Das glaub ich ihm daher, dass er kein eigentliches Assembler-File >vorrätig hat. Sein .txt-File lässt sich innerhalb einer Minute AVR-Studio kompatibel machen. Und das ist auch mit Sicherheit nicht aus einem Ablaufplan generiert. MfG Spess
A. Z. schrieb: > das Kunstobjekt Mensch und Natur ( bei youtube zu sehen unter > http://www.youtube.com/watch?v=dlN3wU8XeNE ) Selten was hässlicheres gesehen...ach doch, die russische VFD-Uhr letztens ...nee, die war doch noch ein Tick eleganter ;-)
LuXXuS 909 schrieb: > Selten was hässlicheres gesehen...ach doch, die russische VFD-Uhr > letztens Seit wann ist hier ein Kunstkritiker-Forum?
Also LuXXuS 909, das Teil hat schon sehr vielen Menschen sehr gut gefallen, das nur mal nebenbei. Ich habe hier nocheinmal die .sax datei hochgeladen, da Jonas das gewünscht hatte. Man kann aber auch einfach die .txt datei kopieren. Ich bin natürlich wirklich ein Anfänger, sonst müsste ich hier keine Fragen stellen. Ich denke nicht, daß ich mich dafür schämen oder entschuldigen müsste. Oldmax, du bist der einzige, der mir offenbar eine inhaltliche Lösung anbieten möchte, dafür bin ich dir dankbar. Leider bin ich tatsächlich Anfänger, und habe deine Ausführungen bisher nicht verstanden, da sie sich auf einem mir zu hohen theoretischen Niveau bewegen. Grüße Anando
A.Z. sunmoon schrieb: > Also LuXXuS 909, das Teil hat schon sehr vielen Menschen sehr gut > gefallen, das nur mal nebenbei. Vergiss ihn. > Ich habe hier nocheinmal die .sax datei hochgeladen, da Jonas das > gewünscht hatte. Man kann aber auch einfach die .txt datei kopieren. > Ich bin natürlich wirklich ein Anfänger, sonst müsste ich hier keine > Fragen stellen. Ich denke nicht, daß ich mich dafür schämen oder > entschuldigen müsste. Musst du nicht. Frage: Inwiefern bist du an Sissy gebunden. Das Problem: Damit können hier im Forum nicht viele umgehen.
Hi Mit dem SAX-File kann man nichts anfangen. Wird dein TXT-File mit der Dateierweiterung erzeugt? Oder hast du das umbenannt? Anbei ein AVR-Studio verträgliches File. MfG Spess
Hi Es war nicht meine Absicht, dir das Leben schwer zu machen, aber ich denke, es ist ein Weg, mal eine andere Ansicht zu bekommen. Wenn du in der Lage bist, einen Interrupt für einen Eingang zu verarbeiten, ist es auch möglich, einen Timer - Interrupt umzusetzen. Es gibt noch das AVR-Praxis Forum. Dort findest du einen Beitrag unter FAQ -"Keine Angst vor Assembler". Vielleicht findest du dort ergänzende Hilfe. Den Einstieg habe ich hier mit den Tutorials gemacht und bin dait ganz gut zurecht gekommen. Vielleicht schaust du dort einmal hinein. Das mit der Flankenauswertung ist sinnvoll, wenn du einen Schalter/ Taster nur mit dem Ereignis "jetzt betätigt" erfassen willst und nicht als Zustand "betätigt". Wenn du dir einmal deine Programmschleife vornimmst und den Zyklus folgendermaßen aufbaust: Daten erfassen, also Eingänge lesen seriellen Datenempfang prüfen Bearbeiten Mach dies, mach das Ausgeben Ausgänge setzen serielle Info senden dann siehst du, das die Eingänge laufend gelesen werden. Für einen Taster braucht es keinen Interrupt, denn selbst bei 1 MHz kannst du gar nicht schnell genug sein, das es der µC nicht mitbekommt, es sei denn, in deinem Programm sind Schleifen aufgebaut, die den Zyklus unnötig verlängern. Beruf dich nicht darauf, Anfänger zu sein, sondern versuch, die Info zu verstehen, die dir den richtigen Weg zeigt. @Peter D. Es wird kein Anfängerprogrammzerpflückt, sondern ich seh da schon Ansätze für richtige Hilfe. Es ist nicht sinnvoll, einen falschen Ansatz noch weiter in diese Richtung zu treiben.... manchmal ist es notwendig, anzuhalten und einen neuen Weg zu gehen. Gruß oldmax
Wenn ich das richtig sehe, hat er eigentlich 2 Baustellen. 1. Taster auswerten 2. Gescheite Aktion auslösen
Hallo oldmax, ich bemühe mich, deine Ausführungen zu verstehen. Das Programm arbeitet allerdings überall wo Zeit verstreichen soll mit Warteschleifen, das müsste dann sicher anders funktionieren? Hallo Karl Heinz Buchegger, welches Programm (oder Programmierumgebung) ist denn empfehlenswert und gebräuchlich? Hallo spess53 den textfile habe ich erzeugt, indem ich das Programm per copy und paste in einen textfile kopiert habe. Das geht auch ohne weiteres umgekehrt. Ich habe alle meine Propgramme als txt files aufgehoben, da man dann Programmteile problemlos für andere Programme nutzen kann. Gruß sunmoon
Hi Das dein Programm mit Wait- oder Delay-Funktionen arbeitet, war mir schon klar, denn sonst hättest du für den Taster keinen Interrupt benutzen müssen. Trotzdem ist der Ansatz falsch. Du wachst doch auch nicht die ganze Nacht, damit du morgends aufstehen kannst. Dafür gibt es einen Wecker, der dich aus dem notwendigen Schlaf holt. Es kostet kein Geld, wenn der µC kontinuierlich sein Programm prüft und auf Änderungen reagiert. Änderungen sind gesetzte Bits, die ihn beauftragen, irgend etwas zu tun und dann das Bit zu quittieren. Ob diese Bits von einem Taster oder einem Timer-Interrupt gesetzt werden, ist dem Controller völlig wurscht. Und das du dafür ein paar Variablen brauchst, ist auch nicht so schlimm. Der Zeitverlust durch die Zugriffe ist in deinem Fall ohne Bedeutung. Der Speicherplatz ist bereits mit dem Kauf des µC bezahlt und darf auch benutzt werden. Ich hatte dir einen Hinweis auf das AVR-Praxis-Forum gegeben. Da sollte dir einiges klarer werden. Zum Timer benutze einfach das Tutorial hier. HAb ich auch gemacht und bin damit gut zurecht gekommen. Ist auch direkt für den Atmega8, so das du es fast 1:1 anwenden kannst. Gruß oldmax
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.