Forum: Mikrocontroller und Digitale Elektronik Temperaturmessung mit dem 80535 und dem SMT160-30


von Guest (Gast)


Lesenswert?

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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Peter Dannegger schrieb:
> Ja, das geht gut mit T0 und T1.
Zwei Timer? Wäre mir zuviel Ressourcenverbrauch... ;-)

von felix (Gast)


Lesenswert?

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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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

von Peter D. (peda)


Angehängte Dateien:

Lesenswert?

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

von Guest (Gast)


Lesenswert?

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

von Peter D. (peda)


Lesenswert?

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

von Guest (Gast)


Lesenswert?

@ Peter

Also ist deine Idee nur für den AT89C4051 brauchbar? Oder auch für den 
80535?

MFG

von Peter D. (peda)


Lesenswert?

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

von Guest (Gast)


Lesenswert?

@ 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

von Guest (Gast)


Angehängte Dateien:

Lesenswert?

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

von Peter D. (peda)


Lesenswert?

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

von Guest (Gast)


Lesenswert?

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

von Peter D. (peda)


Lesenswert?

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

von Guest (Gast)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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

von Guest (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.