Hallo! Ich möchte das Tachosignal meines Lüfters in meinem 4433 zählen. Das klappt aber nur bedingt. Zunächst habe ich es für ein Hardwareproblem gehalten, aber mittlerweile denke ich das es ein Softwareproblem ist. Denn selbst wenn ich die Leitung des Tachos gegen Masse halte, zählt er nur jede 3. odder 4. Berührung!! Mein programm sieht so aus. $regfile = "4433def.dat" $crystal = 4000000 Dim Tacho As Integer Dim A As Byte Dim Fan As Integer Dim Ausgabe As Integer Dim New_time As Byte Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.5 , Rs = Portd.4 Config Lcd = 24 * 2 'configure lcd screen Config Portd = Output 'configure portd as output Config Portb = Input Config 1wire = Portb.4 Reset Portd.1 'write mode for display Initlcd 'init display again Cursor On Const Ticks = 10 Dim Count As Integer Config Timer0 = Counter , Edge = Rising Load Timer0 , Ticks On Timer0 Timer0_isr ' Jump to Timer1 ISR Enable Timer0 ' Enable the timer interrupt Enable Interrupts ' Enable Global Interrupt Do If Pinb.2 = 0 Then A = 1 'Zustand 1 zwischenspeichern If Pinb.2 = 1 Then If A = 1 Then Reset A Cls Lcd Count End If End If Loop End Timer0_isr: Load Timer0 , Ticks Count = Count + 1 Return Ich hoffe jemand kann mir da weiterhelfen. Vielen Dank! Gruß Matthias
Hallo! Ich habe das obige Programm noch mal überarbeitet, aber ich bin immer noch nicht weitergekommen, ich bekomme die Drehzahl nicht gezählt. Ich habe es diesmal über einen externen Interrupt versucht, aber bei 26 bleibt das Display stehen! Manchmal etwas eher oder später. Und dafür zählt er auch noch viel zu langsam. Bin für jede Hilfe Dankbar. $regfile = "4433def.dat" $crystal = 4000000 Dim A As Byte Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.5 , Rs = Portc.4 Config Lcd = 24 * 2 'configure lcd screen Config Portc = Output 'configure portd as output Config Portb = Input Config 1wire = Portb.4 Reset Portb.1 Dim Count As Integer 'write mode for display Initlcd 'init display again Cursor On 'Ddrd.4 = 0 'Pin PD4/T0 auf Eingang setzen Config Portd = Input 'Portd.4 = 0 'PullUp von PD4/T0 aktivieren On TIMER0 OnTimer0 'Interrupt-Routine für Timer0-Overflow Config Timer0 = Counter , Edge = Rising Enable TIMER0 'Timer0-Overflow-Interrupt einschalten Enable Interrupts 'Interrupts global zulassen Cls '--------------------------------------------------------- Timer0 = 246 'Counter initial voreinstellen Cls Do 'Hauptschleife Lcd Count Lowerline Loop '--------------------------------------------------------- OnTimer0: 'Interrupt-Routine Timer0 = 246 'Counter (wieder) voreinstellen Count = Count + 1 'Cls ' Lcd Count Return
Hi, Matthias Wie schnell dreht sich denn der lüfter laut Hersteller Maximal? Ist er eventuell zu schnell um mit Deinem Timer gezählt zu werden? wenn ja, könnte da eventuell ein Frequenzteiler helfen? MfG Matthias Topel
Hi, Danke für die Antwort! Der Lüfter ist von Enermax, und ist einstellbar von 1000 - 3000 R.P.M. In einem anderen Thread hat mir schon jemand gesagt, das das kein Problem für den Atmel seien sollte. In einem anderem Forum (Modding), wo sie auch mit Lüfterdrehzahlen experimentieren, meinten sie es läge an meinem Programm, da sie ohne AVR keine Probleme hatten. Zumindest nicht so wie ich. Dort habe ich erfahren das der Lüfter 2 Impulse pro Umdrehung macht, und das Problem das die hatten war, das sie viel zu viele Impulse hatten! Das haben sie mit einem Widerstand kompensiert. Bei mir sieht das aber so aus, wenn ich in meinem Programm die Zeile stehen habe tacho = tacho + 1 dann zähle ich gerade mal maximal 400 Impulse in 2 Sekunden!! Bei so ca. 7 - 8 V. Bei 12 V bekomme ich weniger Impulse!! Also nur so 350 oder noch weniger! Wie würdest du das Tachosignal denn Zählen?
Hallo, Also Ich würde den Timer1 benutzen dafür, Prescaler nicht vergessen einzustellen, und auch die Flanke, also Rising oder Falling. Also irgendwie so: Dim Drehzahl as integer Config Timer1 = Counter , Prescale = 1 , Edge = Rising counter1 = 0 Do Drehzahl = Counter1 LCD Drehzahl Counter1 = 0 wait 1 loop End oder dieses nochmal mit timer0 probieren. Sven
Ich denke, hier ist nicht wichtig "Ob" ein Impuls kommt, sondern "wie oft" ein Impuls kommt als eher einen normalen Timer, mit dem dann auch ein Bezug zur Zeitlichen Taktrate getroffen werden kann. Am Ende soll ja wieder "Umdrehungen in der Minute" rauskommen. MfG Matthias Topel
Ja, sicher Matthias hast ja Recht, aber nen bischen soll er ja auch lernen. Also,Für Umdrehungen pro Minute das Wait 1 durch Wait 60 ersetzen ;-)) Sven
Hi für eine anständige Auflösung zählt man nicht 60s lang sondern mißt die Länge eines Pulses. Wie das in Hardware geht (ICP) kann man auf meiner HP nachsehen (www.matwei.de) Matthias
Danke für eure Antworten! Aber irgendwie komm ich nicht weiter! Ich habe mich für den Timer 0 entschieden, und scheinbar funktioniert das auch. Aber die Anzeige flackert bei 7V zwischen 50 und 250, also pro Sekunde! Bei 12V bleibt der letzte Wert stehen der vorher im Display stand bevor ich den Regler hoch gedreht habe!! Liegt dann scheinbar doch an den Signalen der Lüfter. Hat jemand von euch noch ein paar Infos zu den Tachosignalen? Also was die genau für eine Spannung ausgeben, und ob die abhängig von der Betriebsspannung ist. Also ob ich bei 6V UBB auch 6V Tachosignale bekomme. Ich habe auch schon einen CPU Lüfter ausprobiert, in der Hoffnung das die Signale nur bei meinem Enermax schlecht sind! Aber auch da die dleichen Symtome. Hat einer von euch noch eine andere Idee?? Gruß Matthias
Etwas habe ich noch vergessen, gelegendlcih hängt sich der Zähler auf!! Trotz Drehzahlveränderung von 5 - 12V bleibt die Anzeige immer gleich! Ich denke mal der Atmel ist abgestürzt. Gruß Matthias
Hallo Mathias, Wie hast du den das Tachosignal abgenommen ??? Steckt das noch im Mainboard ??? Wenn nicht, Einfach das Tachosignal mal mit 10KOhm Pullup Widerstand an +5V hängen. Es muß schon gewährleistet sein, das das Signal maximal +5V erreicht, wenn das Tachosignal noch im Mainboard steckt, weiß ich nicht wie es dort weiterverarbeitet wird, eventuell beeinflusst sich dies dan gegenseitig. Sven
Hi, Ne Ne, das ist ein extra Gehäuse Lüfter und den hab ich direkt auf meiner Platine angeschlossen wo auch der 4433 ist. Genauso wie du das beschrieben hast habe ich ihn auch angeschlossen. Habe auch schon den 7414 dazwischen geschaltet (invertierender Schwellwertschalter). Den Ne555 als Monflop habe ich auch schon aufgebaut, so wie auf Matwei.de beschrieben ist. Aber alles hat keinen nennenswerten Einfluß gehabt. Ich bin da echt am verzweifeln. Matthias
Hallo Matthias, schalte doch mal von den Tachoimpulsen 10 nF nach masse. Vielleicht entsthen zu viele störungen auf deiner Tacho Leitung. Sven
Hi, habe 47pF 22nF und 100nF ausprobiert, aber keine Verbesserung. Allerdings, wenn ich den mehrere Sekunden laufen lasse geht der Zählstand auf 0 zurück!! Auch ohne Kondensator. Manchmal reicht eine Veränderung der Drehzahl, aber meistens muß ich die Versorgungsspannung kappen, und dann gehts wieder! Trotzdem Danke!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.