Forum: Mikrocontroller und Digitale Elektronik Timer, Uhr, Stopuhr mit AT90CAN128 erzeugen


von Hubert S. (ch00ser)


Lesenswert?

Hi,

in meinem Aufbau sende ich mit dem AT90CAN128 ein CAN-Signal an einen 
PC. Das klappt auch wunderbar.

Am PC soll dann eine Protokollierung gestartet und gestoppt werden.

Die Daten möchte ich, nach dem Start, eine Zeit lang aufnehmen.
Also muss der Controller wissen wie lange die definierte Zeit vergangen 
ist, bis er die Mesung stoppt.

Der AT90CAN128 ist auf der Entwicklungsplatine von Olimex verbaut und 
die Platine besitzt einen 16 MHz Quarz.

Könnte ich den existierenden Quarz für eine relativ genaue Zeitsteuerung 
nutzen?
Eine Ungenauigkeit von einer Sekunde wäre für den Aufbau kein Problem!

Die Rechnung geht doch soweit auf:
OCR1A = 16000000 / 256 - 1 = 62499, Rest 0

Wie fange ich den damit an, ich habe keine Ahnung!?

Früher habe ich die Funktion "sleep(5)" genutzt, um z.B. eine 
Verzögerung von 5s zu erzeugen.
1
#include <iostream>
2
...
3
int main(){
4
sleep(5); //für 5 Sekunden
5
}
Denke ich da falsch, Funktionen und Eigenschaften von C/C++ auf den MCU 
zu übertragen?

Kann mir jemand einen Ansazt geben, wie ich zu dem erwünschten Zeil 
komme?

Edit:
Beim senden eines Signales wird doch CPU Rechenzeit in Anspruch 
genommen.
Muss ich das in der späteren Timer Funktion berücksichtigen oder sind 
das vernachlässigbare Zeiten, liegt das im Nano- oder Mikrobereich?

von Karl H. (kbuchegg)


Lesenswert?

Hubert S. schrieb:

> Könnte ich den existierenden Quarz für eine relativ genaue Zeitsteuerung
> nutzen?
> Eine Ungenauigkeit von einer Sekunde wäre für den Aufbau kein Problem!

1 Sekunde - in welchem Zeitraum?
1 Tag, 1 Monat, 1 Jahr, 1 Jahrzehnt?

> Die Rechnung geht doch soweit auf:
> OCR1A = 16000000 / 256 - 1 = 62499, Rest 0

Schon. Aber so einfach ist es nicht. Dein Quarz schwingt nämlich nicht 
mit exakt(!) 16000000Hz, sondern ein wenig daneben. Und zu allem 
Überfluss geht er auch mal ein paar Hz vor und dann wieder ein paar Hz 
nach - Je nach Temperatur.

Aber: Die gute Nachricht. Das kann man ausmessen (das kannst du auch, 
selbst wenn du keine Messgeräte hast) und im Programm berücksichtigen. 
Nur eines musst du dir gleich abschminken: mit den schönen geraden 
ganzzahligen Zahlen wird das nichts.

> Wie fange ich den damit an, ich habe keine Ahnung!?

Indem du die Timermodi kennenlernst. Du wirst zb den CTC Modus brauchen, 
mit dem kriegst du das locker hin.


> Denke ich da falsch, Funktionen und Eigenschaften von C/C++ auf den MCU
> zu übertragen?

Ja.
Du hast kein Betriebssystem, welches dir solche Basisdinge wie zb 
Zeitsteuerung zur Verfügung stellt.

> Kann mir jemand einen Ansazt geben, wie ich zu dem erwünschten Zeil
> komme?

Such im Artikelbereich nach:
"Die genaue Sekunde"

aber vorher wirst du dich wohl über Timer schlau machen wollen.

von Hubert S. (ch00ser)


Lesenswert?

Danke werde mich damit erstainmal auseinander setztn und dann wieder 
hier bei Fragen melden!

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.