PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Interrupt Problem



Rohbotiker
23.08.2007, 22:55
Hallo,

Ich möchte mittels Interupt ein Signal auswerten. Habe den Modus mit Config auf Falling gestellt, will aber nicht klappen (Atmega32).
Folgendes Verhalten: Ist der Port auf High, gibt es keinen Interrupt, auf Low aber ständig, und damit meine ich auch ständig, so das nur noch die Interuptroutine abgeareitet wird. Was tun?

Torsten_G
25.08.2007, 12:49
...
Was tun?
...

Erstmal Deinen Code hier posten, wuerde ich sagen - moeglichst komplett!

Hab leider ein Treiberproblem mit meiner USB-Glaskugel... :-k

Gruesse

Torsten

Rohbotiker
25.08.2007, 13:42
Der Code ist wie folgt:



$regfile = "m32def.dat"
$crystal = 16000000
$baud = 9600
$hwstack = 32
$framesize = 24
$swstack = 8

Config Portd.2 = Input

Dim Begin as Long

Config Int0 = Change
On Int0 Interupt
Enable Int0

Enable Interrupts

Do
Print Begin
Print
Waitms 200
Loop

Interupt:
Incr Begin
Return



Wenn ich Portd.2 auf High ziehe bleibt Begin gleich, auf GND macht er nichts anderes als den Interrupt abzuarbeiten, sieht man daran, dass wenn man den Port wieder auf High setzt, die Zahl größer geworden ist. Was tun?

PicNick
25.08.2007, 14:28
Probier' mal was anderes als "change". Es gab oder gibt Bascom-Versionen, die haben diese MCUCR-Bits nicht immer richtig gesetzt.

Dann, wie legst du den PIN auf Low ? Ohne Entprellen kann das ganzschön nervös werden.

Rohbotiker
25.08.2007, 15:09
Das auf Low legen habe ich einfach an Gnd angeschlossen, also noch ohne Schalter.

Mit anderem als Change habe ich auch schon probiert. Was sind "MCUCR-Bits" und wie setze ich die richtig?

PicNick
25.08.2007, 17:35
MCUCR.0 und
MCUCR.1
sind für den Int0 zuständig
0 0 Immer (und dauernd) bei Low
0 1 bei change
1 0 falling
1 1 rising

also
MCUCR.0 = 1
MCUCR.1 = 0
wäre "on change"

Wie gesagt, es scheint, als wären diese Bits bei dir beide auf "0", da er ja bei Pin auf GND dauernd auslöst.

Du kannst das aber auch im Simulator überprüfen, was Sache ist, nicht, daß du den falschen Baum anbellst.

Aber sonst scheint mir dein Programm unverdächtig. Ich würd's halt überprüfen.

roboterheld
25.08.2007, 21:14
versuch das einmal :

Interupt:
Disable Int0
Incr Begin
enable Int0
Return

Torsten_G
25.08.2007, 21:25
Stimmt, das Programm ist so weit unverdaechtig.
Allerdings wuerde mich interessieren, wie der PIN hardwaremaessig auf High bzw. auf Low gesetzt wird. Im Programm wird der interne Pullup nicht aktiviert ( das wuerde die Zuweisung Portd.2=1 nach dem Config Portd.2 = Input erfordern).

Wenn extern kein Pullup (oder Pulldown) verbaut ist, wird die Sache kaum funktionieren, weil der INT0 in der Luft haengt und willkuerlich Interrupts ausloest.Die Eingangspins sind da wirklich hypersensibel, unklare Potenziale moegen sie gar nicht.
Fuer das Entprellen wuerde noch zusaetzlich ein Kondensator benoetigt.

Gruesse

Torsten

Rohbotiker
28.08.2007, 20:32
Danke, es lag an den Mcucr Bits, heißt es gibt keine Lowlevel Interrupts mehr, aber jetzt habe ich nochein Problem *fast am verzweifeln*

Mein Signal hat 0 oder 2V (aus einem Operationsverstärker :?: ) und möchte die zwei Volt zu fünf Volt machen, ich kriegs aber einfach nicht hin. Wenn möglich bitte ohne OP's, bei mir funktionieren die irgendwie nie. Wäre eine Lösung nur mit Widerständen, Dioden, Z-Dioden, Transistoren, Mosfets o.ä. möglich?