-
Also ich hab das jetzt nochmal ausprobiert so wei es gesagt hast. Dannach hats auch weider was angezeigt aber allerdings sehr merk würdig. Und zwar im LCD steht dann 82400 zb. Und wenn ich die drehzahl verändere am Lüfter dann gehen bloß die zahlen nach der 8 runter. Die sind dann zwar fast richtig. pendel aber immer noch recht stark zwischen 500-1000, je nachdem wie schnell der Lüfter dreht.
Und das merkwürdigste is, das ich schon von anfang an werte im Im 60000-80000 bereich hab, und das obwohl der Lüfter entweder aus, oder sogar ganz ab is.
Hier mal der veänderte code.
Code:
$regfile = "M8def.dat"
$crystal = 8000000
Config Lcd = 20 * 4
Config Lcdbus = 4
Config Lcdpin = Pin
Config INT0 = LOW LEVEL
Dim Zehler As Long
Dim Ausgabe As Long
On Int0 Int0_int
Enable Int0
Enable Interrupts
Do
Wait 2
Ausgabe = Zehler
Cls
Lcd Ausgabe
Zehler = 0
Loop
Int0_int:
Incr Zehler
Return
'Dies ist der Programmteil, der in dem von ihnen gewählten
'Intervall aufgerufen wird
End 'end program
Ach ich hab übrigens mit Rising und Falling bzw. Low Level bei der Int0 config experimentiert. wenn ich Rising bzw. Falling drin stehen hab, kommen werte bloß im Hunderter bereich zustande, die sich auch nicht großartig veränderen wenn man die drehzahl ändert.
-
Ah ich habe mal ein bisschen nach geforstet. Und rausgefunden der Ausgang für das Tachosignal ein open-collector-ausgang is(hoffentlich richtig geschrieben). Und ich denke mir mal das dadurch die schaltung nicht richtig funkt.. Aber wie soll ich das jetzt änderen?!? Einfach ein Pull-Up wiederstand dran hängen?!?
-
Hi,
also da stecken noch ein paar Mankos in deinem Code. So darf der Interrupt nicht auf LowLevel definiert werden, sonst werden ständig Interrupts ausgelöst wenn das Signal auf GND liegt. Es soll aber nur ein Interrupt pro Takt aufgerufen werden. Der Fehler erklärt auch warum trotz nicht angeschlossenen Tachosignal werte entstehen. Leider hab ich mich mit Tachosignal noch nicht beschäftigt, aber ich nehme doch an das es pro Umdrehung einfach einen Impuls liefert.
Also solltest du erst mal checken ob die Impulse wirklich kommen. Ich hab dir das Programm ein wenig verändert. Probier es so mal.
Jetzt reagiert der Interrupt auf fallende Pegel. Zudem ist ein Pullup Widerstand eingeschaltet, so das der Port generell auf High gelegt wird.
Wenn alles klappt, müsste jetzt der Wert am Display mit den Umdrehungen ansteigen. Ich hab dir noch ein Wait eingefügt, damit du auch was am Display lesen kannst.
Gruß Frank
Code:
$regfile = "M8def.dat"
$crystal = 8000000
Config Lcd = 20 * 4
Config Lcdbus = 4
Config Lcdpin = Pin
Config pind.2=input
portd.2=1 'PullUp ein
Config Int0 = Falling
Dim Zehler As Long
Dim Ausgabe As Long
On Int0 Int0_int
Enable Int0
Enable Interrupts
Do
Ausgabe = Zehler
Cls
Lcd Ausgabe
Wait 1
Loop
Int0_int:
Incr Zehler
Return
End
-
Ich jetzt gerade mal einen 10KOhm pullup wiederstand dran gelötet und jetzt funkt das, war am anfang bloß ein bisschen Irritiertweil da bloß 35 stand die sich aber reglen ließen. Dann is mir ja eingefallen das ich ja bloß die Umdrehung pro sekunde messe und ich das ganze ja mal 60 rechnen muß und nun funkt das. Freu :cheesy:.
Und jetzt sehe ich denn code von dir wo der Interne Pullup aktiviert wird, und da könnte ich mir in denn hintern tretten das ich nicht selbst dran gedacht hab. ](*,)
Ach und das mit dem Low Level stand da noch drin weil ich damit experimentiert hab. Hatte es auch schon mit Falling ung Rising probiert. Aber jetzt funkts...
\:D/
-
Na dann ist ja alles bestens - dann viel Spaß noch bei der Vollendung des Programms