Taktfrequenz überprüfen.

Gast #746375
Lesenswert?
• ▲
▼
Wait 1 würde auch gehen....
allerdings habe ich irgendwie im Hinterkopf, dass der Befehl wait 
schonmal Probleme mit sich bringt. waitms soll wohl zuverlässiger sein. 
Habe ich jedenfalls mal irgendwo gelesen.
Gruß
Jan
Gast #746391
Lesenswert?
• ▲
▼
>und noch was. 1 sekunde oder 1,3 sekunden kann man schlecht voneinander
>unterscheiden (mit bloßem Auge)
>Desswegen lieber messen.

Dann programmiere eine einfache RS232 Übertragung zum PC
mit 9600 Baud. Wenn Schrott ankommt ist die Taktrate falsch.
Da sollten Beispiele bei BASCOM dabei sein.
Gast #746401
Lesenswert?
• ▲
▼
ich habe schon mal led blinken lassen. mit wait 1 (also 1 sek).
es kann mir aber vor, dass es etwas länger dauert als 1 sekunde.
desswegen wollte ich noch mal genauen nachmessen.
was kann man machen, wenn es nicht stimmt?
Gast #746406
Lesenswert?
• ▲
▼
>Wenn es 2 Sekunden gedauert hat, läuft er mit genau der Hälfte der
>Takfrequenz. So einfach ist es ;)

Genau. Und wenn man einfach 10 Wechsel auszählt kommt
man einigermaßen genau auf den Wert: 21,22,23,24,25,...
#746434
Lesenswert?
• ▲
▼
Alex wrote:

> und noch was. 1 sekunde oder 1,3 sekunden kann man schlecht voneinander
> unterscheiden (mit bloßem Auge)

Oh. Das kann man gut unterscheiden.
Nimm eine Uhr mit Sekundenzeiger. Wenn der schnellaufende
Zeiger ganz oben ist, guckst du ganz schnell auf deine
Led. Dann wartest du und zählst das Aufleuchten der Led mit.
Wenn du bei 60 angekommen bist, guckst du wieder auf deine
Uhr.
Hast du 1 Sek. dann sollte der schnelllaufende Zeiger
wieder ganz oben sein.
Hast du aber 1.3 Sekunden, dann ist derselbe Zeiger jetzt
nicht mehr oben, sondern schon waagrecht und an dem Strich
auf der Uhr vorbei, neben dem 3 steht.

Mann. Sei ein bischen kreativ!!!!!
Gast #746471
Lesenswert?
• ▲
▼
>Die "Toggelfrequenz" entspricht hierbei der Taktfrequenz geteilt durch 6

Fügt man der "loop"-Schleife noch vier "nop"s hinzu, wird der 
Teilungsfaktor 10.  Dann muss man nichts umrechnen, wenn man die 
Frequenz mit einem Frequenzmesser kontrolliert.
#746472
Lesenswert?
• ▲
▼
holger wrote:
>>Die "Toggelfrequenz" entspricht hierbei der Taktfrequenz geteilt durch 6
>
> Dann braucht man einen Frequenzzähler oder ein Oszi um
> das dann zu MESSEN.
...und außerdem kam ein ähnlicher Vorschlag oben bereits und 
darüberhinaus wurde weiter oben bereits festgestellt, dass der OP mit 
Assembler nix anfangen kann...
Gast #746487
Lesenswert?
• ▲
▼
>wie kann ich sicherstellen, ob mein µC wirklich mit 4Mhz läuft?

Schreib doch ein Programm, das eine LED genau im Minutentakt blinken 
läßt.  Wenn Du das heute exakt um 22:00:00 Uhr startest und bis morgen 
abend laufen läßt, kannst Du sogar gucken, ob die LED morgen auch genau 
wieder um 22:00:00 Uhr angeht, oder ein paar Sekunden später oder früher 
(dann wäre Dein Quarz nicht besonders genau).
Gast #746497
Lesenswert?
• ▲
▼
>Schreib doch ein Programm, das eine LED genau im Minutentakt blinken läßt.

Nachtrag: Realisier das aber unbedingt auf Basis eines Timers. 
Verwende keine Wait-Funktionen, weil denen gewisse Ungenauigkeiten 
anhaften.
#4306244
Lesenswert?
• ▲
▼
Hallo,

habe mal ein Bascom-Programm geschrieben, das einen Ausgang nach 4 
Stunden abschaltet und eine LED im Sekundentakt blinken läßt um zu 
zeigen das sich was tut. Es arbeitet mit externem Oszillator und Timer, 
ist richtig genau und ist ausführlich kommentiert, wie ich meine.

Vielleicht nützt es jemandem.

Dabei stand am Anfang die Überlegung, welcher Quarz (-oszillator) 
geeignet ist. Dabei habe ich geschaut, welche Taktfrequenz, geteilt 
durch den Vorteiler von 2^10 (=1024) eine glatte Zahl ergibt, d.h. eine 
mit ein paar Nullen hinten, die man vernünftig weiterverarbeiten kann so 
daß eine gradzahlige Frequenz rauskommt.

Dabei habe ich hier 2,4576 MHz genommen, geteilt durch 1024 ergibt genau 
2,4 KHz. Dann gibt es ja den 8-Bit-Timer, der also bis 256 zählt und 
dann einen Interrupt auslösen kann. Wenn man den auf den Startwert 16 
setzt, zählt er ja von 16 bis 256, also 240 Zyklen. Damit ergibt sich 
2,4 KHz geteilt durch 240 = 10 Hz. Also gibt es mit einer Frequenz von 
10 Herz Timer-Überläufe, die einen Interrupt auslösen können und dieser 
dann weiter etwas machen kann, wie z.B. eine Zähler bis 10 hochzählen, 
wenn er 10 erreicht hat ist eine Sekunde vergangen. Und so weiter ...

Die Timer sind halt ganz genau weil sie sich nicht vom sonstigen 
Programmablauf beeinflussen lassen.

Gruß Tilmann



'ATtiny13A schaltet nach 4 Stunden ein Relais ab.
'Weiterhin blinkt eine LED im Sekundentakt, um anzuzeigen daß sich etwas 
tut.


$regfile = "attiny13.dat"
$crystal = 2457600       'Frequenz des externen Oszillators

$hwstack = 10
$swstack = 10
$framesize = 20

Config Portb.0 = Output                   'blinkende LED an Pin 5
Config Portb.4 = Output                   'Relaisausgang an Pin 3
Portb.4 = 1     'Relaisausgang sofort einschalten wegen der 
Selbsthaltung

Dim Ticks As Word                         'Ticks sind die 
Timer-Überläufe
Dim Sekunden As Word
Dim Minuten As Word
Dim Stunden As Word
Config Timer0 = Timer , Prescale = 1024        'Die Quartzfrequenz ' 
zusammen mit dem Prescaler ergeben eine Frequenz von 2,4kHz
On Ovf0 Tim0_isr                  'Wenn Timer überläuft, löse
                                  'den Interrupt "Tim0_isr" aus
Enable Timer0
Enable Interrupts

Do
   'nicht weiter in der Hauptschleife
Loop

Tim0_isr:                           'Der Interrupt:
Timer0 = 16                    'Der Timer hat 8 Bit (256). Mit dem
                          'Startwert von 16 zählt er bis 240.
                          'Bei einer Eingangsfrequenz von 2,4 KHz ergibt
                          'sich damit eine Überlauffrequenz von 10 Hz.

Ticks = Ticks + 1                            'Ticks sind Timer-Überläufe
   If Ticks = 10 Then                        '10 Ticks sind eine Sekunde
      Ticks = 0                              'Ticks zurücksetzen
      Sekunden = Sekunden + 1                'Sekunden hochzählen
      Toggle Portb.0                         'nur blinken damit man 
sieht
                                             'das sich was tut
      If Sekunden = 60 Then                   'nach 60 Sekunden ...
      Sekunden = 0                     'Sekunden auf Null zurücksetzen 
...
      Minuten = Minuten + 1          ' ... und Minuten um eins 
hochzählen
      End If
      If Minuten = 60 Then                    'nach 60 Minuten ...
      Minuten = 0                    'Minuten auf Null zurücksetzen ...
      Stunden = Stunden + 1          ' ... und Stunden um eins 
hochzählen
      End If
      If Stunden = 4 Then
      Portb.4 = 0                    'Relais schaltet nach 4 Stunden aus
      End If
   End If
Return

End

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren