Forum: Mikrocontroller und Digitale Elektronik kunstobjekt mit Weiterschaltung per interrupt


von A. Z. (sunmoon)


Angehängte Dateien:

Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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

von A.Z. (Gast)


Lesenswert?

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

von Keno Usuki (Gast)


Lesenswert?

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.

von spess53 (Gast)


Lesenswert?

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

von Oliver J. (skriptkiddy)


Lesenswert?

spess53 schrieb:
> 2. INTs sind für Tasten ungeeignet.
Nicht wenn man hardwaremäßig entprellt.

von Jan Tenner (Gast)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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.

von Oliver J. (skriptkiddy)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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

von Jonas (Gast)


Lesenswert?

hallo sunmoon,

kannst mal ein SiSy-Arcive (*.sax) hoch laden? die kann ich dann auch 
mit meinem Sisy öffnen ;-)

Grüße J.

von oldmax (Gast)


Lesenswert?

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

von Peter D. (peda)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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.

von spess53 (Gast)


Lesenswert?

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

von LuXXuS 9. (aichn)


Lesenswert?

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 ;-)

von Oliver J. (skriptkiddy)


Lesenswert?

LuXXuS 909 schrieb:
> Selten was hässlicheres gesehen...ach doch, die russische VFD-Uhr
> letztens
Seit wann ist hier ein Kunstkritiker-Forum?

von A.Z. sunmoon (Gast)


Angehängte Dateien:

Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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.

von spess53 (Gast)


Angehängte Dateien:

Lesenswert?

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

von oldmax (Gast)


Lesenswert?

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

von oszi40 (Gast)


Lesenswert?

Wenn ich das richtig sehe, hat er eigentlich 2 Baustellen.
1. Taster auswerten
2. Gescheite Aktion auslösen

von sunmoon (Gast)


Lesenswert?

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

von oldmax (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.