f1ssl Geschrieben 10. Februar 2010 Teilen Geschrieben 10. Februar 2010 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
grueni Geschrieben 10. Februar 2010 Teilen Geschrieben 10. Februar 2010 Auf welcher Plattform soll das Programm laufen? Welchen Compiler bzw. welche Entwickungsumgebung setzt du ein? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
f1ssl Geschrieben 10. Februar 2010 Autor Teilen Geschrieben 10. Februar 2010 Ich nutze zum Programmieren das Programm Dev-C++. Jedoch wird es nachher per myAVR-Workpad auf den Atmel88 gebrannt werden. Der Compiler ist soweit ich weis in Dev-C++ integriert. Es ist die Verison: 4.9.9.2 MfG Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Bubble Geschrieben 10. Februar 2010 Teilen Geschrieben 10. Februar 2010 Es soll also der Zustand "case40" nur dann aufgerufen werden, wenn stop == 1 ist. (stop ist ein taster) case 40: if(stop == 1) { // Mach was... } break; Wo war das Problem? Was soll das mit Interrupts zu tun haben? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
f1ssl Geschrieben 10. Februar 2010 Autor Teilen Geschrieben 10. Februar 2010 Das Problem dabei ist, dass es nicht über eine Software passieren soll, sondern ueber den Atmel88. Ich weis nicht, ob es auch mit einem "if" funktionieren wuerde. Mein Lehrer sagte mir, dass ich dafuer ein Interrupt nehmen sollte. lg Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 10. Februar 2010 Teilen Geschrieben 10. Februar 2010 Mein Lehrer sagte mir, dass ich dafuer ein Interrupt nehmen sollte.Dann hat dein Lehrer dir doch sicher auch irgendwann einmal gezeigt, wie Interruptprogrammierung für diesen "Atmel88" (meinst du ATmega88 von Atmel?) funktioniert? Oder sollst du das ganz allein herausfinden? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
f1ssl Geschrieben 10. Februar 2010 Autor Teilen Geschrieben 10. Februar 2010 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Bubble Geschrieben 10. Februar 2010 Teilen Geschrieben 10. Februar 2010 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! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
f1ssl Geschrieben 10. Februar 2010 Autor Teilen Geschrieben 10. Februar 2010 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 11. Februar 2010 Teilen Geschrieben 11. Februar 2010 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? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
TDM Geschrieben 11. Februar 2010 Teilen Geschrieben 11. Februar 2010 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
f1ssl Geschrieben 11. Februar 2010 Autor Teilen Geschrieben 11. Februar 2010 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
f1ssl Geschrieben 11. Februar 2010 Autor Teilen Geschrieben 11. Februar 2010 (bearbeitet) 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 11. Februar 2010 von f1ssl Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.