Zum Inhalt springen

Interrupts in C


f1ssl

Empfohlene Beiträge

Moin liebe Com.

Ich habe mal einige Fragen zum Interrupt in C.

In meinem Programm in dem Ich den interrupt Befehl nutzen möchte, geht es um folgendes.

Das Programm besteht größenteils aus einer switch-case Anweisung.

Es gibt 7 verschiedene Zustände.

switch(step)

{

case 10: cout<<"Zustand 1 akiviert!"<<endl;

break;

case 20:""

break;

case 30:""

if (stop == 1)

{ step = 50;}

else

{ step=40;}

break;

case 40:""

break;

case 50:""

break;

case 60:""

break;

case 70:""

break;

Erklärung:

Es soll also der Zustand "case40" nur dann aufgerufen werden, wenn stop == 1 ist. (stop ist ein taster)

Mein Lehrer sagte mir, dass ich es mit einem Interrupt machen sollte.

Die einzelnen Zusände bleiben immer fuer eine bestimmte Zeit aktiv, die ich mit dem Sleep-Befehl gemacht.

Also es soll der Interrupt Befehl aktiviert werden, wenn ein Taster betätigt wird.

Sozusagen koennte man sagen, wenn der Taster betätigt wird, soll stop = 1 gesetzt werden.

Bin um schnelle Hilfe sehr dankbar, da das ziemlich der letzte Schritt ist den ich noch machen muss und meine Projektarbeit am Freitag abgeben muss.

Falls Ihr noch weitere Informationen benötigt, meldet euch einfach.

Vielen Dank im vorraus,

MfG f1ssl

Link zu diesem Kommentar
Auf anderen Seiten teilen

Genau den meine Ich.

Benutze den Microcontroller den man für 50,- bei Atmel kaufen kann.

Er sagte zu Mir, dass man das ganz leicht bei google finden könne. :-/

Mein Lehrer ist glaube Ich selber nicht DAS Ass in Programmieren, dass ers ausm Stehgreif erklären könnte. Aber das ist ja auch nebensache, es geht darum, dass ichs wohl erfahren müsste wie Ichs am besten realisieren kann :)

MfG

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das Problem dabei ist, dass es nicht über eine Software passieren soll, sondern ueber den Atmel88.

Microcontroller führen Software aus.

Ich weis nicht, ob es auch mit einem "if" funktionieren wuerde.

Natürlich funktioniert es in der Programmiersprache C per if den Inhalt einer Variablen mit einer Konstanten zu vergleichen.

Ob hinter der ursprünglichen Frage womöglich eine ganz andere Aufgabe/Frage steckt?

Mein Lehrer sagte mir, dass ich dafuer ein Interrupt nehmen sollte.

Dann hat er dies sicher auch ausreichend erklärt. Falls nein: Fragen!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich verstehe zwar nicht ganz, wieso Ich Mich hier rechtfertigen muss, warum ich eine Frage stelle aber i.O.

NEIN!!!, der Lehrer hat es NICHT ausreichend erklärt und nachfragen kann Ich bei Ihm auch leider nicht mehr, da ich die Projektarbeit übermorgen, nein falsch, mittlerweile morgen abgeben muss, und den Lehrer bis dahin nicht mehr sehe.

Also nochmals:

Kann man diese Schaltung auch irgendwie mit einem Interrupt anstatt des ifs schalten oder nicht?

Wenn doch, kann es mir bitte jemand erklären ohne Fragen über den Sinn oder meinen Lehrer zu stellen? Wäre wirklich dankbar dafür.

Es ist einfach so, ich bin ratlos wegen meinem Projekt. Stelle meine Frage in einem eigentlihc immer recht guten und hilfreichen Forum, was dafuer ja auch da ist und dann wird mir hier gesagt, dass mein Lehrer es ausreichend erklärt haben müsste usw usw. Was spielt das denn überhaupt für eine Rolle? o_O Ich hätte doch nur gerne die Frage beantwortet, mehr nicht.

MfG

Link zu diesem Kommentar
Auf anderen Seiten teilen

Kann man diese Schaltung auch irgendwie mit einem Interrupt anstatt des ifs schalten oder nicht?

Das geht bestimmt.

Wenn doch, kann es mir bitte jemand erklären ohne Fragen über den Sinn oder meinen Lehrer zu stellen? Wäre wirklich dankbar dafür.
Solange es hier nicht zufällig jemanden gibt, der genau diesen Microcontroller und diese Entwicklungsumgebung kennt, müssten alle hier dasselbe tun wie du: Die entsprechende Dokumentation durchsuchen und die Informationen da rausholen.

Die Doku des Microcontrollers gibt's auf der Webseite von Atmel als PDF, da steht aber nicht viel über die Interruptprogrammierung drin, wie du möglicherweise schon selbst festgestellt (jedenfalls aber nicht erwähnt) hast.

Eine Doku deiner Entwicklungsumgebung gibt es bei myavr.de. Hast du die mal durchgelesen? Was ist dabei herausgekommen?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Der Compiler ist soweit ich weis in Dev-C++ integriert. Es ist die Verison: 4.9.9.2

Dann denk ich mal, dass die AVR-Headerdateien auch drin sind - ich hasse zwar Dev-C++ und spiel auf den Atmegas meist mehr mit ASM rum, aber in C Interrupts auszulösen war glaub ich nicht das Problem.

Meist gibt es irgendwelche Unterbrecherroutinen (ISR), zumindest beim AVR-GCC (avr/interrupt.h). Bei Dev-C++, wird bestimmt winavr verwendet, also:

WinAVR AVR-GCC Tutorial

avr-libc: <avr/interrupt.h>: Interrupts

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das Datenblatt des Microcontrollers habe ich mir natürlich mehrfach durchgelesen. Habe auch mehrere Stunden mit googlen verbracht, aber nichts gefunden. Sonst würd ich hier ja auch nicht fragen ;))

Danke TDM, das werde ich mir gleich mal durchlesen und es dann ausprobieren :))

MfG

Link zu diesem Kommentar
Auf anderen Seiten teilen

So, habe mir die beiden Seiten nun mal durchgelesen.

Das was da drin steht, kannte ich mehr oder weniger schon. Auf sowas bin ich bei meinen Recherchen im Internet auch gestoßen.

Nur leider weis ich das alles nicht so recht auf mein Programm zu übertragen.

Was mir gehlt ist einfach das grundsätzliche Verständnis denk Ich.

Kann Ich denn nicht einfach einen Interrupt Befehl so definieren wie z.B. ein goto in C++?

Wenn der Taster betätigt wird, dass der Interrupt hier loslegt, und dann an der Stelle weiter macht wo er aufhört(was interrupts ja im Regelfall tun).

Also:

Bei Case 30:

Wenn der Interrupt bis dahin ausgelöst worden ist, dann soll er Step auf 40 schrauben.

Wenn er nicht ausgelößt wurde, dann soll er Step auf 50 ändern.

Wenn dann aber im case 50 der Interrupt betätigt wird, soll er sich das merken, bis er wieder an der o.g. Stelle ist und soll Step dann halt auf 40 ändern.

Das Programm soll eine Fußgängerampel symbolisieren, vielleicht hilf das bei der Erklärung. Der Interrupt soll die Auto-Ampeln auf Rot stellen und die Fußgängerampel auf Grün.

Und danach soll er dann bei Step=50 weiter machen...

Das hört sich in der Theorie alles so einfach an und im Fenstermode von C++ wäre es auch recht einfach zu realisieren.

Dann kann es doch eigentlich in C bei der Hardware-Programmierung jetzt nicht soO schwierig sein oder? :-/

Bin wirklich langsam am durchdrehen hier

MfG

Bearbeitet von f1ssl
Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...