Hi Leute, ich möchte mit einem UTI03 von Smartec und einem ATMega128 die Temperatur eines PT100 messen. Die Schaltung ist fertig und sollte gehen. Nun frag ich mich wie ich das am besten im Controller realisiere. Hat da vielleicht jemand schon ein paar Erfahrungen damit gemacht und kann mir bei der Umsetzung ein paar Tipps geben? Ich dachte da an den Input Capture Pin für das auslesen. Weiß leider noch nicht so recht wie das funktioniert. Da muss man bestimmt auch auf das Zeitmanagment achten. Ihr würdet mir sehr helfen. Danke. Gruß Andreas
Hi Leute, nachdem sich keiner so richtig meldet, habe ich mal etwas ausprobiert und komme der Lösung nahe. Ich nutze nun den Input Capture Pin PortD Pin 4 der mit dem Timer 1 zusamen hängt. globale Variblen
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
die Initialisierung des ICP-Timers:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
Die Interruptroutine
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
Starte ich den Timer und lasse mir danach die Werte RestPh0L bis RestPh3H ausgeben steht überall Null. Mach ich irgendetwas falsch?
Das Problem wird sein das nicht sehr viele den UTI03 kennen und niemand deinen Schaltplan.
Im Prinzip ist das doch egal ob UTI oder nicht. Ich nutze den ICP-Timer um die Zeit zwischen zwei steigenden Flanken zu messen. Im angehängten Bild sehe ich (lila) das UTI-Signal und durch das auslösen des Timers setze ich einen Pin auf high und beim nächsten event wieder auf low.( im Code nicht vorhanden) So komme ich bei dem zweiten Impuls auf 31ms das müsste theoretisch die Zeit RestPh3 sein. Warum bekomme ich dann aber Null?
Gast
#2630133
Hier mal ein Link zu einer Wetterstation, die das auch benutzt, mit Quelltext im dort zu findender .PDF http://www.technik.dhbw-ravensburg.de/~lau/wetterstation.html Siehe auch Beitrag "Geeigneter Mikrocontroller für Messung mit SMT160-30"
Hi Leute, danke für eure Hilfe. Sieht ganz gut jetzt aus. Sobald ich komplett fertig bin werde ich den Code komplett posten. Eine Frage hätte ich da noch. Ich habe zwei Timer initialisiert. Mein Takt beträgt 12,288MHz
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
Einen Compare Timer der jede ms auslöst und die Variable cmp_counter1 hochzählt. Und einen Capture Timer der auslöst wenn das Signal eine high Flanke generiert. Dort lese ich das ICR1-Register aus und warte dann wieder auf die nächste high Flanke. Nun meine Frage(n). Wie verhält sich das ICR1-Register? Zählt das bis 65536 mit dem CPU-Takt, was bei 5,333ms überläuft? Wird es nach dem auslesen zurückgesetzt? die Berechnung der Zeit ist derzeit so. // ((12.288M)^-1) = 0,00008138 Time = cmp_counter1 + ((ICR1H * 256 + ICR1L) * 0,00008138); Damit gehe ich davon aus, dass das ICR1- Register nur jede ms hochgezählt wird. Stimmt das?
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.
