Timer, Uhr, Stopuhr mit AT90CAN128 erzeugen

OP #2619243
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?
#2619267
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.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.