Guten Morgen, ich habe mal eine Frage. Hat jemand schon Erfahrungen mit einer Temperaturmessung mit einem SMT160-30 und dem Siemens µC 80535. Kann mir da jemand ein paar Tipps oder Hinweise geben? Danke für eure Hilfe! MFG
Guest schrieb: > Hat jemand schon Erfahrungen mit einer > Temperaturmessung mit einem SMT160-30 und dem Siemens µC 80535. Erfahrungen in welcher Hinsicht? > Kann mir da jemand ein paar Tipps oder Hinweise geben? Ich würde da einfach in einem (beliebigen) Timerinterrupt den Pegel einlesen, und abhängig davon, ob er 0 oder 1 ist, einen Low- bzw. High-Zähler hochzählen. Aus den beiden Zählern lässt sich dann leicht das Tastverhältnis berechnen, und daraus dann die Temperatur. Es ist auf jeden Fall kein Hardware-Capture-Timer-Counter oder wasauchimmer für diese einfache Aufgabe nötig.
Ja, das geht gut mit T0 und T1. Ein Timer läuft durch und der andere im Gate-Mode. Das Verhältnis ist dann das Tastverhältnis und wird nach der Formel im Datenblatt in Temperatur umgerechnet. Du mußt über mehrere Perioden messen, sonst ist der Jitter zu hoch und das Ergebnis zu ungenau. Da der Gate-Input auch ein Interrupt ist, kann man schön an der Flanke beide Timer auslesen. Peter
Peter Dannegger schrieb: > Ja, das geht gut mit T0 und T1. Zwei Timer? Wäre mir zuviel Ressourcenverbrauch... ;-)
Hallo zusammen, hat jemand evtl. ein Programmbeispiel? Kann mir momentan noch nichts darunter vorstellen.Nur damit man mal ein anfang hat... stehen nämlich noch n bisschen auf´m schlauch... vielen dank schon mal im vorraus!! mfg
felix schrieb: > hat jemand evtl. ein Programmbeispiel? Welche Sprache? In C wie gesagt:
1 | unsigned long hicnt, locnt; |
2 | float temperatur; |
3 | |
4 | TIMER_ISR () // irgendein Timer, der regelmäßig so alle 1-5ms kommt |
5 | {
|
6 | :
|
7 | if (STM_PIN) high++; |
8 | else low++; |
9 | }
|
10 | |
11 | |
12 | main () |
13 | {
|
14 | :
|
15 | temperatur = (((float)high/(float)(high+low))-0.32)/0.0047; |
16 | :
|
17 | }
|
Hintergrund: Tastverhältnis (Duty Cycle DC) = 0.320+0.00470*t = higcnt/(highcnt+lowcnt) --> t = (DC-0.32)/0.0047 = ((highcnt/(hicnt+locnt))-0.32)/0.0047
Anbei mal ein älteres Testprogramm (Keil C51). Ist etwas tricky. Der Sensor hängt am Interrupt0 Eingang. PT0_, PT1_ sind die Bitmasken für die PT0, PT1 Bits. Peter
Hallo, verstehe ich es richtig, das ich 2 Timer habe, die beide hoch zählen und der eine durch einen Interrupt des SMT160-30 gestoppt wird. Der andere Timer zählt bis zum Überlauf hoch und dann werden die beiden Timerwerte verglichen. Aus diesen beiden Werten kann man das Puls/Pausen-Verhältnis bestimmen. MFG
Im Gate-mode zählt der Timer, wenn der Eingang high ist. Geht er auf low, hält der Timer an, geht er wieder auf high, zählt er weiter. Gemessen wird über mehrere Perioden (256 * 200 CPU-Zyklen + Dauer bis zur nächsten Flanke). Da der AT89C4051 nur 2 Timer hat und ich T1 für die Baudrate brauche, arbeitet Timer 0 im Split-Mode (2 * 8bit Timer). Daher die Erweiterung in den Timerinterupts auf 16 Bit. Peter
@ Peter Also ist deine Idee nur für den AT89C4051 brauchbar? Oder auch für den 80535? MFG
Guest schrieb: > Also ist deine Idee nur für den AT89C4051 brauchbar? Oder auch für den > 80535? Hat Dein 80535 etwa keinen T0 und T1? Peter
@ Peter Doch der 80535 hat einen Timer 0 und 1, du hast mich nur ein wenig mit dem AT89C4051 irritiert, daher meine Nachfrage. Ich bin Anfänger bei dem Thema, deshalb kenne ich mich noch nicht so gut damit aus. MFG
Hallo, ich habe jetzt ein Programm für die Temperaturmessung geschrieben, das im Anhang zu finden ist. Es läuft aber noch nicht richtig. Kann mir jemand sagen, was ich noch verbessern muss? Danke schon mal im Vorausaus! MFG
Guest schrieb: > Es läuft aber noch nicht richtig. Kein Wunder, Du mißt ja nirgends die Pulsdauer. Du brauchst den Gate-Mode oder Capture-Mode. Und ein float++ ist sowas von Pfui-Bäh. Ganzzahloperationen macht man mit char, int oder long, aber niemals mit float. In Interrupts sollte man float generell meiden. Peter
Ich habe es mir so gedacht, das ich jeweils einen Zähler habe, der die positive Zeit zählt und einen der die negative Zeit zählt. Und durch das Verhältnis kann ich nachher die Temperatur bestimmen. Das Problem dabei waren die Counter. Also muss ich die komplette Zeit messen und daraus dann die Temperatur ermittelt? Das mit dem float kann ich ja noch ändern, das is kein Problem. MFG
Guest schrieb: > Ich habe es mir so gedacht, das ich jeweils einen Zähler habe, der die > positive Zeit zählt und einen der die negative Zeit zählt. Dann mach es doch. Die Frequenz des SMT160 beträgt etwa 4kHz. Zählt man mit dem CPU-Takt und über mehrere Perioden, erhält man eine genügend hohe Auflösung. Peter
Um die 4 kHz zu bekommen muss ich die Zeitbasis ändern sehe ich das richtig. Ich verstehe zwar was du meinst, aber ich weiß nicht wie ich das umsetzen soll. Ich habe das Gefühl das das Programm was ich geschrieben habe, Mist ist. Das da irgendwie nix richtiges drin steht.
Guest schrieb: > Um die 4 kHz zu bekommen muss ich die Zeitbasis ändern sehe ich das > richtig. Wie schon gesagt, Zeitbasis ist der CPU-Takt (z.B. 1MHz bei 12MHz Quarz). Und dann entweder Gate- oder Capture-Mode. Das Beispiel im Gate-Mode läuft auf jedem 8051, also auch auf Deinem. Dein 8051 hat aber auch eine Capture-Einheit, damit kannst Du mehrere Sensoren auslesen. Peter
Ich wäre schon zufrieden wenn ich den Wert vom SMT160 vernünftig auslesen könnte. Hast du auch ein einfacheres Beispiel zum Gate-Mode? 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.