Hallo!
Dies ist mein erster Beitrag hier.
Ich möchte 2 12V Computer Lüfter (3 Pol.) mit einem ATmega8 oder 16
Steuern und deren Drehzahl messen.
Die Lüfter werden über die PWM gesteuert, da ist auch alles klar.
Jetzt hängt es nur noch an der Drehzahl?
Hier die Schaltung die ich anwenden möchte für die Drehzahlmessung:
VCC vom uC
|
10k
|
Lüfter ---+--- uC-Eingang
Ist das so Korrekt wen das Lüftersignal gegen GND zieht?
Ich habe in einem anderen Beitrag gelesen das ich diese Schaltung zur
Drehzahlermittlung nur anwenden kann, wenn ich eine "Hi Side PWM" nutze.
Meine eigentliche Frage:
Wie kann ich das Software-technisch mit Bascom Realisieren?
Das Programmieren fällt mir noch ein wenig schwer.
Ich weis das ich die Impulse pro Sekunde zählen muss, Aber wie?
Ein kleines Beispiel währe mir sehr Willkommen!!!
Danke schon mal im voraus!!!
Gruß Peter
Gast
#2850609
http://www.analog.com/library/analogdialogue/archives/38-02/fan_speed.pdf kleine Infos zum Tacho-Signal
Gast
#2850611
Interrupt
Gast
#2850621
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
in der FANISR musst Du dann rechnen, 1 Umdrehung 2 Pulse. Entweder die Zeit zwischen n Umdrehungen oder n Sekunden lang Pulse zählen.
Ist die Schaltung nun i.O. oder nicht ???
Gast
#2850688
Ist OK wenn du Highside (Plusleitung) schaltest.
Gast
#2850735
Hast du getestet ob die Lüfter überhaupt PWM mögen? Ich hab damit keine guten Erfahrungen gemacht, die Lüfter haben laute Geräusche von sich gegeben.
#Hast du getestet ob die Lüfter überhaupt PWM mögen? ja aber ein kondensator hat da abhilfe geschaffen
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
Das ist für ein Anfänger ziemlich viel wirres zeug was da steht! Gibt es jemand der mir das etwas genauer erklären kann? hier schon mal mein bisheriger code:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
mir fehlt einfach nur der ansatz wie man das lösen kann!! gruß peter
Gast
#2850776
man kann mit einem Interrupt die Flanke detektieren, das willst du. so konfiguriert man die Int's bei einem zB Mega128. was ist da wirr ?
Gast
#2850847
Wirr ist da z.B., daß er einen Mega16 hat und keinen Mega128. Und der hat auch keine 6 Ints. Prima, nun weiß er, wie beim 128er ganze 6 Ints so definiert werden, daß sie sogar in die gleiche ISR führen. Wo liegt da der Sinn?????? Würde ich als Anfänger auch nicht verstehen. @Peter: Ob deine 34285 für den Timer stimmen, habe ich gerade nicht nachgerechnet, kommt mir aber nicht bekannt vor. Was Du machen solltest, denn Deinem Programm fehlt doch so einiges: Du willst RPM2 auf das LCD schreiben, hast aber RPM2 nie dimensioniert!!! Da sollte aber der Compiler schon gemeckert haben. - Lege Deine beiden Tachoimpulse auf INT-Eingänge. - Dimensioniere zwei Variablen, die bei den entsprechenden INTs hochzählen. - Lege einen Timer an, der z.B. jede Sekunde ausgelöst wird. - Wenn der Timer auslöst, speicher Dir den Inhalt der beiden Variablen weg zum Berechnen. - Setze die Variablen und den Timer zurück. - Setze eine Merker-Variable, daß der Timer ausgelöst war. - Frage die Merker-Variable im Hauptprogramm ab, um die RPM-Berechnung auszuführen. - Lösche die Merker-Variable wieder. - Durch die beiden Variablen kennst du nun die Anzahl der Lüfterimpulse pro Sekunde und damit die Drehzahl. Versuchs mal!!
Hallo Das hört sich sehr amdängerfreundlich an! Danke! Ich werde es heute Nachmittag gleich ausprobieren! Gruss peter
Hallo! ich habe das jetzt mal so gemacht wie oben beschrieben. Und es funktioniert! Danke Hackes :-) und natürlich ein dank an alle anderen hier mein fertiger code:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
60 | |
61 | |
62 | |
63 | |
64 | |
65 | |
66 | |
67 | |
68 | |
69 | |
70 | |
71 | |
72 | |
73 | |
74 | |
75 | |
76 | |
77 | |
78 | |
79 | |
80 | |
81 | |
82 | |
83 | |
84 | |
85 | |
86 | |
87 | |
88 | |
89 | |
90 | |
91 | |
92 | |
93 | |
Ist wahrscheinlich nicht der Übersichtlichste code aber er funktioniert. Für Verbesserungsvorschläge habe ich immer ein offenes Ohr! Gruß Peter
Gast
#2852479
Hallo Peter, prima, wenn es geklappt hat. Das freut mich. Habe es wirklich nur überflogen, aber grundsätzlich ist es das, was ich meinte. Unübersichtlich trifft es in der Tat etwas. Mache reichlich Gebrauch von der TAB-Taste!
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
Das ist z.B. MEIN Stil. Muß man nicht zwingend so machen. Man erkennt welches LOOP zu welchem DO gehört und welches ENDIF zum IF. Bei den IFs finde ich das wichtig. Man erkennt sofort wo mal ein ENDIF fehlt. Den Merker sollte man direkt löschen, wenn er gesetzt wurde. Habe ich mal korrigiert. Dann ist es sehr unschön, daß es in der Timer-ISR zwei RETURNS gibt. Sowas macht man nicht. Zu einem Aufruf sollte es immer genau EIN Return geben. Im übrigen ist die Abfrage ob X=1 ist da überflüssig. Die ISR wird immer nach genau einer Sekunde aufgerufen. In der Zeit ist X im Hauptprogramm ganz sicher schon wieder gelöscht, also null. Oder ich sehe gerade den Haken nicht. Wenn Du Timer und INT-ISRs hast, dann ist es wichtig sich klar zu machen, wann wird mein Hauptprogramm "unterbrochen". WANN kann WAS überhaupt passieren. So, das war dann die konstruktive Kritik. Viel Spaß noch beim Programmieren lernen und hier im Forum. Gruß Hackes
Hallo! Danke werde ich mir zu herzen nehmen! Das mit "if x = 1" habe ich auch schon erkannt! Das Return aus "timer1_isr" habe ich raus genommen! Und dein Programmierstil ist sehr Übersichtlich, genau so steht es eigentlich auch in meinem Buch. Aber ich war wahrscheinlich zu faul. gruß peter
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.