Archiv verlassen und diese Seite im Standarddesign anzeigen : Hardware Interrupts - Bascom ich bitte um Hilfe!
Hallo,
Ich möchte 2 ir sensoren in bascom auswerten. Es gibt bei meinen Atmega16 ja 2 Interrupteingänge
Wie kann ich sobalt eine logische spannung von 5 oder 0volt anliegen das das Programm unterbrochen wird, und es an eine spezielle stelle im Program springt.
Hat jemand mir vieleicht ein paar Codeschipsel oder ähnliches?
Ich würde mich über jegliche Beiträge freuen! O:)
Viele Grüße an alle Roboterbauer
flori
was willstn nun, bei 5V oder bei 0V oder abwechselnd?
sobalt einer der beiden auf 0volt also logisch bit 0 wird soll er etwas ausführen
$regfile="m16def.dat"
$crystal=7372800 'musste für dich noch ändern
config int0 = falling
config int1 = falling
enable int0
enable int1
enable interrupts
on int0 int0_isr
on int1 int1_isr
do
'...
loop
int0_isr: 'isr=InterruptServiceRoutine
'tue dies bei INT0 auslösung
return
int1_isr: 'isr=InterruptServiceRoutine
'tue dies bei INT1 auslösung
return
das sollte es gewesen sein ^^
danke du hast mir sehr geholfen!...ich werde dies im laufe des tages ausprobieren!
Bevor du dich wunderst....
Wenn du ein LCD angeschlossen hast, kann es unter Umständen zu Störungen in der Anzeige kommen, wenn du gerade auf's LCD schreibst und zum gleichen Zeitpunkt ein Interrupt auftritt.
Ich disable die Interrupts vor'm schreiben auf's LCD und schalte sie sofort danach wieder ein.
Falls einer eine bessere Lösung für das LCD Problem hat, bitte her damit !
Gruß
Christopher
wie viele ints benutzt du denn im programm?
Ich disable die Interrupts vor'm schreiben auf's LCD und schalte sie sofort danach wieder ein.
Falls einer eine bessere Lösung für das LCD Problem hat, bitte her damit !
Also soweit ich weiß, wird das öfter/immer so gemacht. Wenn man irgendwelche operationen macht, wo nichts dazwischen Funken darf: INTERRUPT aus und wieder an. Da führt wohl kein Weg dran vorbei, es sei denn du erzeugst künstlich nen Interrupt und schreibst in diesen die LCD Routinen. Es stimmt doch, dass Interrupts, die während einer ISR auftreten, nach der gerade aktuellen ISR ausgeführt werden, oder?
Es stimmt doch, dass Interrupts, die während einer ISR auftreten, nach der gerade aktuellen ISR ausgeführt werden, oder?
Keine Ahnung ;) hängt das nicht mit der Priorität der Interrupts zusammen ?
Würde mich auch interessieren, ob ein Interrupt mit höherer Priorität einer ISR "dazwischenfunken" kann.
Oder muß ich dann in der ISR selber die Interrupts disablen und am Ende der ISR wieder einschalten um sowas zu verhindern ??
Gruß
Christopher
besitzt der Atmega16 2 oder 3 externe Interrupts? aus den Pinbelegungen des Datenblattes kann ich 3 entnehmen Int0 int1 und Int2/AIN0 was bedeutet AIN0? muss ich irgendwelche fusebits aktivieren um diesen nutzen zu können, oder hat der mega16 nur 2 externe Interrupts?
viele grüße
florian
hi,
wollte nicht unbendingt einen neuen thread aufmachen:
es gibt also bei einem mega8/16 2 bzw. 3 HARDWARE interrupts....gibts auch software interrupts, die man auf jeden x-beliebigen pin anwenden kann? weil sonst kann man ja immer nur 2 bz.w 3 sensoren oder sonstiges ein interrupt auslösen lassen...
gruss hacker
Hi,
Hab' das Datenblatt gerade nicht hier, aber AIN0 ist ein Eingang des Analogkomparators.
Gruß
Christopher
gibts auch software interrupts, die man auf jeden x-beliebigen pin anwenden kann?
Nein leider nicht, man könnte aber mehrere Sensoren über Dioden an einen Imterruptpin legen und dann während des Interrupts schnell schauen, welcher Sensor es war. Man legt einen Sensor also an einen IO und mit einer Diode an den Interruptpin. Voraussetzung ist natürlich, dass die Sensoren den gleichen Pegel haben.
ahja...und wie machen hier des dann die meisten wenn se mer sensoren haben..(was eigentlich im durchschnitt der fall ist denk ich mal) ..tun die die ganze zeit pollen?
ja, bzw.
besseres pollen: in einem intervall immer mal wieder scannen oder
intelligentes pollen: egal welcher sensor nun angesprungen ist, er löst den selben interrupt aus, daraufhin scannt der µc alle einmal ab und guckt welcher es war
Martin
oki, danke euch !
gruss hacker :D
Es stimmt doch, dass Interrupts, die während einer ISR auftreten, nach der gerade aktuellen ISR ausgeführt werden, oder?
Keine Ahnung hängt das nicht mit der Priorität der Interrupts zusammen ?
Also, hab jetzt mal einen Experten gefragt, es ist folgendermaßen:
Wenn man sich in einer ISR befindet und ein weiterer Interrupt wird ausgelöst, dann wird die laufende Routine ganz normal zu ende geführt, genau ein Befehl im im hauptprogramm abgearbeitet und dann in die nächste ISR gesprungen. Wenn 2 Interrupts während einer laufenden ISR ausgelöst werden, dann läuft es genau so, die mit den höheren Priorität wird dann als nächstes bearbeitet.
Hi,
@RCO: danke für die Info.
Hab's durch Zufall gerade auch im Buch von Rowalt gefunden.
Seite 55
Da steht allerdings, daß nach dem ersten Interrupt sofort der nächste, je nach Priorität, ausgeführt wird, also nicht, daß noch ein Befehl im Hauptprogramm zwischen den Interrupts abgearbeitet wird.
Aber egal, Hauptsache es funkt mir in einen Interrupt kein zweiter dazwischen :D
Gruß
Christopher
Naja, dieser eine Befehl in der Hauptschleife soll wohl dazu dienen, dass das Hauptprogramm, auch wenn die ganze Zeit Interrupts auftreten, nicht völlig stehen bleibt, sondern, wenn auch sehr langsam, weiter läuft. Naja, ist ja erstmal nicht so wichtig.
Nee,
finde Ich schon wichtig und eine gute Information!
Der Sinn des einen Befehls war mir bis jetzt noch nicht klar, aber das ist einleuchtend. Macht Sinn.
Gruß
Christopher
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.