Erstmal Deinen Code hier posten, wuerde ich sagen - moeglichst komplett!Zitat von Rohbotiker
Hab leider ein Treiberproblem mit meiner USB-Glaskugel...
Gruesse
Torsten
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?
Erstmal Deinen Code hier posten, wuerde ich sagen - moeglichst komplett!Zitat von Rohbotiker
Hab leider ein Treiberproblem mit meiner USB-Glaskugel...
Gruesse
Torsten
Der Code ist wie folgt:
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?Code:$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
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.
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
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?
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.
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
versuch das einmal :
Interupt:
Disable Int0
Incr Begin
enable Int0
Return
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
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?
Lesezeichen