mikrocontroller.net

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


Autor: Guest (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

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

Autor: felix (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
felix schrieb:
> hat jemand evtl. ein Programmbeispiel?
Welche Sprache?

In C wie gesagt:
unsigned long hicnt, locnt;
float temperatur;

TIMER_ISR () // irgendein Timer, der regelmäßig so alle 1-5ms kommt
{
  :
  if (STM_PIN) high++;
  else         low++;
}


main ()
{
:
temperatur = (((float)high/(float)(high+low))-0.32)/0.0047;
:
}
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

Autor: Peter Dannegger (peda)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Guest (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Guest (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Peter

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

MFG

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Guest (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Guest (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Guest (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Guest (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Guest (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.