Temperaturmessung mit dem 80535 und dem SMT160-30

Moderator (Firma: Titel) Persönliche Seite #2038417
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.
#2038496
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
Gast #2039020
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
Moderator (Firma: Titel) Persönliche Seite #2039050
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
Gast #2039895
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
#2040218
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
Gast #2048613
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
Gast #2050541
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.
#2050635
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren