PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wie viele Interrupts sind gesund?



cht
20.05.2004, 14:54
Hi Leute,
Ich fange gerade erst mit mikrocontrollern an, hab mir noch keinen gekauft, und schon kommt die erste frage:
son AVR hat ja nur 2-3 externe Interrupts. Wenn ich das Tutorial auf www.mikrocontroller.net richtig verstanden habe, brauche ich interrupts, um auf ereignisse von außen (sensoren) zu reagieren. heisst das dass ich nen roboter nur mit zwei simplen tastern ausstatten kann? Was, wenn ich jetzt im Lotto gewinne und meinen Bot mit Sensoren vollstopfen will, z.B. ne Kamera, nen Radarsensor, Taktscheiben an den Rädern, n Kompassmodul, ...? Nicht, dass ich das alles vorhätte, aber nur zwei simple sensoren sind wirklich etwas mickrig...

PS: Mit welchem µC fang ich am besten an? mega8? mega16? oder n ganz anderer?

recycle
20.05.2004, 15:29
Wenn ich das Tutorial auf www.mikrocontroller.net richtig verstanden habe, brauche ich interrupts, um auf ereignisse von außen (sensoren) zu reagieren.

Das ist sicher anders gemeint. Du brauchst nicht unbedingt Interrupts um auf Ereignisse von Sensoren zu reagieren, du kannst Interrupts dafür nutzen.

"Interrrupt" kommt von unterbrechen. Das heisst wenn ein Interrupt ausgelöst wird, wird der normale Programmablauf unterbrochen und die Routine die für diesen Interrupt definiert wurde ausgeführt.
Wenn der normale Programmablauf aber sowieso schon regelmässig alle paar ms die Sensoren abfragt, brauchst du für diese Sensoren keinen Interrupt.
Du kannst im Prinzip an jeden I/O Pin Sensoren anschliessen und nicht nur soviele wie der µC Interrupts hat.



Mit welchem µC fang ich am besten an? mega8? mega16? oder n ganz anderer?

Preislich unterscheiden die sich um knappe 1 - 2 Euro, von der Funktion sind sie fast gleich der ATMega16 hat nur ein paar Ein/Ausgänge mehr.
Für einen einfachen Roboter mit dem man normalerweise anfängt reichen beide völlig aus. Wenn dich nicht stört, dass er etwas mehr Platz auf der Platine braucht würde ich den ATMega 16 nehmen. Man muss ja nicht alle Pins benutzen.

cht
20.05.2004, 15:47
Gut, das heisst ich muss mir einige wichtige Sensoren aussuchen, auf deren ereignisse ich gleich per interrupt reagieren will, und den rest muss ich in ner art schleife abfragen.


von der Funktion sind sie fast gleich
aber der mega16 ist im gegensatz zum mega8 n 16bit controller oder?

Na dann vielen dank für deine hilfe, die technik find ich ziemlich faszinierend, mir muss nur noch ne sinnvolle idee kommen was mein bot machen soll... :-k

Flite
20.05.2004, 16:34
nein! der mega16 ist viel alle avrs ein 8 bit controller.
er hat nur mehr speicher, mehr pins und ein paar mehr features.

Grüße
flite

Manf
20.05.2004, 18:03
Üblicherweise faßt man mehrere oder alle Interrupts (Unterbrechungsanforderungen) zusammen beispielsweise über "wired or" oder allgemein über Gatter und teilt sie dem Controller auf einer gemeinsamen Leitung (port) mit.
Der unterbricht und, wenn erschon dabei ist, dann schaut er nach, wo der Interrupt herkam. Mehrere Interrupt Eingänge braucht man bei dieser Organisation dann nur noch für unterschiedliche Priortät.
Sensoren kann man natürlich auch ohne Interrupt abfragen, wenn man deren Meßwerte benötigt oder periodisch zur Überprüfung.
Interruptbehandlung ist eben effizienter, wenn zunächst kein Alarm erwartet wird trotzdem bei Bedarf schnell reagiert werden soll.
Manfred

cht
20.05.2004, 18:08
Interruptbehandlung ist eben effizienter, wenn zunächst kein Alarm erwartet wird trotzdem bei Bedarf schnell reagiert werden soll.

seh ich genauso. mehrere veränderungen auf einen interrupt zu legen ist ne gute idee, ich muss bloß irgendwo den vorherigen status speichern um rauszufinden wo die änderung passiert ist. muss ich halt n paar register oder etwas ram opfern...

Minifriese
21.05.2004, 06:47
Das mit dem wired or für mehrere Interrupts auf einem Pin ist ne sehr gute Idee, darauf war ich noch gar nicht gekommen. Hilft mir sehr, weil ich mit einem Mikroprozessor 4 PWM-Signale einlesen will und die AVRs wie gesagt meist nur 2 oder 3 haben. Danke!