Seit kurzem beschäftige ich mich mit Programmierung von ATMEL - Prozessoren und habe mir für erste Experimente das STK 500 gekauft. Nun habe ich auch schon ein ehrgeiziges Projekt vor Augen und kann dabei etwas konstruktive Hilfe gebrauchen. Es folgt nun eine kurze Projektbeschreibung: Es sind ca. 29 oder auch weniger Temperatursensoren vom Typ SMT 160-30 die ich nacheinander (Schleife) mit Hilfe eines Microcontrollers über den jeweiligen Temperaturstatus abfragen möchte. Die Messwerte sollen in einen Textfile geschrieben werden, in dem sie zur weiteren Verarbeitung zur Verfügung stehen. Noch kurz etwas zum SMT 160-30 von Smartec. Im "Smartec-Sensor" wird die Temperatur von einem Halbleiterelement (PTAT-Proportional To Absolute Temperature) aufgenommen. Nach der Verstärkung und Linearisierung wird die Ausgangsspannung mittels A/D-Wandler in ein Signal umgesetzt, dessen Tastverhältnis direkt proportional zur Temperatur T ist (Pulsbreitenmodulation). Das digitale Ausgangssignal des Sensors kann zur Weiterverarbeitung direkt an einen Mikrokontroller angeschlossen werden und belegt dort nur einen digitalen Eingang. Die Frequenz 1/tp des Rechtecksignals bewegt sich über dem Temperaturbereich und der Exemplarstreuung zwischen 1kHz und 4kHz. Dieser Effekt beeinflußt die Auswertung jedoch in keiner Weise, da der Tastgrad (td/tp) den relativen Bezug zwischen Periodendauer tp und Einschaltzeit td des Rechtecksignals darstellt. Mir geht es jetzt darum, wer kann mir interessante und konstruktive Tipps geben, wie ich ein solches Projekt realisieren kann. Vielen Dank
Geht eigentlich nur mit Hilfe eines Multiplexers, dessen Ausgang dann am besten auf den ICP geht. Also Meßstelle auswählen, Periodendauer messen, nächste Meßstelle usw. Die Abtastfrequenz geht natürlich umso weiter in den Keller, je mehr Meßstellen du vorsiehst. ICP stellst du meinentwegen zuerst auf fallende Flanke. In der ISR schaltest du auf steigende Flanke, den ICP-Wert speichern, das ist dann dein Startwert (t1). Als nächstes kommt wieder eine steigende Flanke, Wert (t2)speichern, wieder auf fallende Flanke umschalten. Bei der nächsten fallenden Flanke hast du dein Meßergebnis komplett (t3). Der Timer kann durchlaufen, um einen Überlauf brauchst du dich nicht zu kümmern (kann aber für ein timeout benutz werden, falls nämlich ein Sensor kein Signal liefert, bleibt die ganze Sache sonst stehen) Ein Beispiel: Quarz 8MHz, Timertakt 8MHz = 125µs, der Timer kann also ca. 8ms zählen, lang genug, um bei deiner min. Frequenz von 1kHz nicht zweimal überzulaufen, dann wirds nämlich falsch. t1 0x4000 t2 0x5000 t3 0x7000 Peiodendauer ist t3-t1=0x3000, Impulsbreite t2-t1=0x1000. Wenn der Timer während der Messung überläuft, ist es auch kein Problem, wenn du die Berechnung mit unsigned int durchführst. t1 0xf000 t2 0x0000 t3 0x2000 kommt zum selben Ergebnis. Der Vorteil dieser Methode: die Zeiten werden unabhängig von Softwarelaufzeiten mit der max. möglichen Genauigkeit gemessen.
Also wenn Du 29 Sensoren brauchst, kommen eigentlich nur die DS18B20 in Frage. Die kannst Du nämlich alle parallel schalten, weil jeder eine weltweit einmalige 48-Bit-Adresse hat. D.h. es reicht ein Portpin für alle zusammen. Die Temperatur wird direkt als Digitalwert in °C ausgegeben. Die Auflösung ist bis herab zu 0,0625° Schritten auswählbar. Einfacher gehts wirklich nicht. Peter
@marko Der von die gewählte Sensor eignet sich nicht für ein Bussystem (3 Draht). Dafür wären dannn die von Peter vorgeschlagenen DS18B20 geeignet.
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.