Archiv verlassen und diese Seite im Standarddesign anzeigen : einfacher Zähler funktioniert im Simulator, real jedoch nich
Unkaputtbar
03.05.2010, 21:01
Hey,
Ich möchte in der nächsten Zeit eine Geschwindigkeitsanzeige programmieren. Nun habe ich erstmal angefangen etwas zu programmieren, damit eine Zahl bei jeder steigenden Taktflanke, die durch einen einfachen Schalter ausgelöst werden soll um 1 erhöht wird. Im Bascom-Simulator funktioniert das Programm. In der Realität sieht es jedoch folgendermaßen aus: Solange der Schalter nicht betätigt ist, zählt das Programm einfach schnell nach oben ohne Halt. Sobald man den Schalter betätigt, bleibt der Zähler stehen. Löst man den Schalter wieder, zählt das Programm weiter.
Woran kann das liegen?
Folgendes ist der Quellcode:
$sim
$regfile = "m32def.dat"
$crystal = 16000000
Config Lcdpin = Pin , Db4 = Portb.1 , Db5 = Portb.2 , Db6 = Portb.3 , Db7 = Portb.4 , E = Portb.5 , Rs = Portb.6
Config Portd.2 = Input
Config Int0 = Rising
Enable Interrupts
Enable Int0
Cls
Initlcd
Dim D As Integer
Enable Interrupts
Config Lcd = 20 * 4
D = 0
On Int0 Abc
Do
Initlcd
Cls
Lcd D
Loop
End
Abc:
D = D + 1
Return
Wie schaut denn die Hardwareanbindung vom Taster aus?
Der Beschreibung nach hat der Pin INT0 bei nicht gedrücktem Schalter keinen festen Pegel.
Unkaputtbar
03.05.2010, 21:26
Der Taster ist an - (5V) angeschlossen.
Naja... wie genau?
Oder anders gefragt: Hat der Pin am AVR bei nicht gedrücktem Schalter einen definierten Pegel oder hängt der frei in der Luft und wird nur bei gedrücktem Schalter auf +5V bzw. Masse gezogen?
Falls letzteres: Schlecht. Dem Programm nach soll der Schalter den Pin anscheinend nach +5V bringen. D.h. es fehlt ein Widerstand am Pin, der ihn nach Masse runterzieht.
Ohne irgendwas sucht sich der Pin irgendeinen Pegel; darum feuert der Interrupt auch die ganze Zeit.
Unkaputtbar
03.05.2010, 22:09
Ich habe einen internen Pull-Up-Widerstand genutzt. Also so sieht der Quelltext aus, mit dem ich die Schaltung getestet habe.
$regfile = "m32def.dat"
$crystal = 16000000
Config Lcd = 20 * 4
Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.5 , Rs = Portc.4
Config Lcdbus = 4
Config Pind.2 = Input
Config Portd.2 = 1
Enable Interrupts
Cls
Initlcd
Dim D As Integer
Enable Interrupts
D = 0
Do
If Portd.2 = 0 Then D = D + 1
Locate 1 , 1
Lcd D
Loop
End
Hallo alle zusammen
ich versuche auch so was zu realisieren doch ich hab festgestelt, dass auf meinem Display sofort hochgezählt wird wenn ich an meinem rn-contoler Bord den Portd.2 (into) mit einem draht berühre der aber an keiner Spannung oder Masse angeschlossen ist. Ich hab nicht herausfinden können an was das liegt. Falls ihr ne idee habt also mir kommt das ihrgendwie komisch vor ich hab auch schon gemessen ob ihrgend wie ein kurzschluss vorhanden ist , is aber keiner.
Würed mich über ideen freune
lg Micha
D.h. der Interne Pullup zieht nach 5V und der Taster beim drücken nach GND? Wäre dann Pegelmässig ok.
Nur wundert mich, wenn es mit dem Quelltext geklappt hat, da die Zeile:
If Portd.2 = 0 Then D = D + 1
nicht das liest, was du haben willst. Zum Einlesen von Tastern braucht man Pind.2.
Und was genau hast du mit Config Portd.2 = 1 vor? Den auf 1 setzen? Dann braucht man Config nicht. Zum Einschalten der Pullups auch nicht.
Config braucht man da nur zum Festlegen, ob der Pin Input oder Output sein soll.
dass auf meinem Display sofort hochgezählt wird wenn ich an meinem rn-contoler Bord den Portd.2 (into) mit einem draht berühre der aber an keiner Spannung oder Masse angeschlossen ist.
Und das ist genau das Problem mit dem nicht definierten Pegel. Da nur ein Draht dranhängt, wirkt dieser Draht (oder idealerweise schon der Pin des Controllers) als Antenne. Jedes el. Feld in der Nähe zieht den Pegel irgendwohin; hängt von Mondphase, Sauberkeit der Katze, etc. ab, also im Prinzip nicht vorhersagbar.
Darum braucht man hier eben einen Pullup/Pulldown-Widerstand, der den Pin im unbeschalteten Zustand trotzdem auf einen definierten Pegel bringt.
Hängt also nur der Draht am Pin und sonst nichts, ist das ein total normales Verhalten.
Ich hab das gleiche Phänomen mal bei den ADC-Pins gehabt, d.h komplett unbeschaltete Pins (nur ca. 10cm Kabel bis zum Stecker) und dann mal ständig die Spannung am Pin gemessen. Resultat:
http://www.youtube.com/watch?v=-1LVgI2BDJ0
Die Netzfrequenz von 50Hz (die ja eigentlich überall ist) hat sich mit der Abtastfrequenz überlagert und damit dieses langsame Schwingen erzeugt.
hey Jaecko
vielen dank des mit dem internen pillup wiederstand hab ich ihrgendwie verpeilt das man da kein config braucht dake( anfänger fehler ;-))
ich muss des dann mal ausprobieren aber ich denk dan gibts keine probleme
noch mal danke
lg Micha
hey Jaecko
noch mal danke hatte jetzt mal zeit des kurz zu testen und hat alles problemlos geklappt
gruß micha
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.