Forum: Mikrocontroller und Digitale Elektronik Atmega8535 Bascom+CTC


von Jonathan M. (jona)


Angehängte Dateien:

Lesenswert?

Hallo Forum,

Ich versuche mithilfe des Timer1 vom Atmega8535 einen Sekundentakt 
hinzubekommen.Der Systemtakt ist von meinem STK500 generiert und beträgt
1,8432Mhz (wegen RS232).Der Timer soll im Compare Modus laufen;dafür 
habe ich so den Wert ausgerechnet:
1843200Hz\256(Prescaler)-1=7199
Wenn ich es so auf den Chip schicke erhalte ich jedoch einen viel 
langsameren Takt(Code im Anhang).Kann mir jemand sagen woran das liegt?

Danke im Vorraus

Jonathan

von Karl H. (kbuchegg)


Lesenswert?

Und warum muss man den 20-Zeiler in ein Zip-File einbetten?

Es war schwer zu schreiben, als soll es auch für potentielle Helfer 
schwer zu lesen sein?
1
$regfile = "m8535.dat"
2
$crystal = 1000000
3
$hwstack = 40
4
$swstack = 16
5
$framesize = 32
6
7
Config Portb.2 = Output
8
Dim A As Byte
9
10
A = 0
11
12
On Compare1a Sekunde
13
Enable Timer1
14
Enable Interrupts
15
Enable Compare1a
16
17
Ocr1a = 7199
18
Config Timer1 = Timer , Prescale = 256 , Compare A = Disconnect , Clear Timer = 0
19
20
Do
21
22
Portb.2 = 1
23
24
Loop
25
26
27
Sekunde:
28
29
Portb.2 = 0
30
31
Return

von Karl H. (kbuchegg)


Lesenswert?

Ich mag mich irren (so gut kenn ich BASCOM dann auch wieder nicht). ABer 
sollte bei einem CTC nicht eigentlich
1
Config Timer1 = Timer , Prescale = 256 , Compare A = Disconnect , Clear Timer = 0
Clear Timer auf 1 stehen?

Oder anders ausgedrückt: Was in dieser Konfiguration macht dich glauben, 
damit den CTC Modus aktiviert zu haben?

von Jonathan M. (jona)


Lesenswert?

Hallo

Karl Heinz Buchegger schrieb:
> als soll es auch für potentielle Helfer
> schwer zu lesen sein?

Nein,Entschuldigung:-)

Karl Heinz Buchegger schrieb:
> Clear Timer auf 1 stehen?

Ich habe es auch schon mit 1 probiert,allerdings dann statt 7199 7200
geschrieben.Alles war gleich,jetzt habe ich nur die 0 zu ner 1 geändert 
und siehe da,es wird schneller(ca.3 mal so schnell wie vorher!?)
Allerdings ist es immer noch ein bisschen zu langsam.

Karl Heinz Buchegger schrieb:
> Was in dieser Konfiguration macht dich glauben,
> damit den CTC Modus aktiviert zu haben?

Das war alles was ich über Config...CTC gefunden habe (sowohl in Bascom 
als auch im Internet)

MfG
Jonathan

von Karl H. (kbuchegg)


Lesenswert?

< Der Systemtakt ist von meinem STK500 generiert und beträgt
> 1,8432Mhz

Die 1.8Mhz sind über jeden Zweifel erhaben?
d.h. du bist absolut sicher, dass dieser Takt auch benutzt wird?


??
> $crystal = 1000000

von Jonathan M. (jona)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Die 1.8Mhz sind über jeden Zweifel erhaben?

??

Karl Heinz Buchegger schrieb:
> ??
>> $crystal = 1000000

Der "Schönheit halber hätte ich 1843200 schreiben können,das ändert aber 
nichts am Ergebnis.

Jonathan

von Karl H. (kbuchegg)


Lesenswert?

Jonathan M. schrieb:
> Karl Heinz Buchegger schrieb:
>> Die 1.8Mhz sind über jeden Zweifel erhaben?
>
> ??

Läuft der µC mit 1.8Mhz?
Hast du das kontrolliert?

> Karl Heinz Buchegger schrieb:
>> ??
>>> $crystal = 1000000
>
> Der "Schönheit halber hätte ich 1843200 schreiben können,das ändert aber
> nichts am Ergebnis.

Das schöne an solchen Sachen ist, dass man solche Auffälligkeiten im 
Code ganz leicht vermeiden kann. Erfahrungsgemäss sind aber diejenigen, 
denen solche Dinge egal sind auch sonst nicht unbedingt bei den 'exakt 
arbeitenden' anzusiedeln.

von Jonathan M. (jona)


Lesenswert?

Hallo,

Ich habe jetzt das Programm auf 1Mhz angepasst und es läuft jetzt!

Karl Heinz Buchegger schrieb:
> Läuft der µC mit 1.8Mhz?
> Hast du das kontrolliert?

Ich habe eine andere Frequenz eingestellt beim STK500 und dann mein 
RS232
probiert...läuft.
Wenn ich mich jetzt an den Beitrag mit dem Rs232 Müll erinnere,dann 
fällt
auf das es "plötzlich" egal ist auf welche FRequenz ich mein STK500 
stelle!?
Ich blick da jetzt nicht mehr durch.Hilfe:-)

MfG
Jonathan

von Karl H. (kbuchegg)


Lesenswert?

Jonathan M. schrieb:

> Ich blick da jetzt nicht mehr durch.Hilfe:-)

Zumindest DIESER Mega ist auf 1Mhz interne Taktfrequenz gefused.
Wenn er den Takt vom STK benutzen soll, musst du die Fuses entsprechend 
umstellen.

von Jonathan M. (jona)


Lesenswert?

Aber wieso funktioniert dann auf einmal RS232 mit int. Oszillator?
(Gleicher Mega)ganz sicher

MfG
Jonathan

von Karl H. (kbuchegg)


Lesenswert?

Jonathan M. schrieb:
> Aber wieso funktioniert dann auf einmal RS232 mit int. Oszillator?
> (Gleicher Mega)ganz sicher

Sagt je keiner, dass es überhaupt nicht geht. Wenn die interne Taktrate 
nahe genug an 1Mhz ist, dann reicht das ja. Woher der µC den Takt für 
die RS232 bezieht, spielt ja erst mal keine Rolle. Der Takt muss nur 
stabil genug sein und nahe genug und der Frequenz mit der die 
Teilerfaktoren errechnet wurden.

Die Empfehlung für eine externe Taktquelle beruht auf 2 Umständen
* bei einem Quarz ist die tatsächliche Taktfrequenz auf jeden Fall nahe 
genug an der aufgedruckten, so dass man diesen Unterschied erst mal 
unter den Tisch fallen lassen kann. (Ein 1.8432 Mhz Quarz macht nicht 
exakt 1843200 Schwingungen in der Sekunde. Das können auch 100 mehr oder 
weniger sein.)
* die tatsächliche Taktfrequenz verändert sich bei einem Quarz bei 
Temperaturänderungen eher wenig im Vergleich zu einem RC-Glied.

D.h. mit einem Quarz ist man auf Anhieb genau genug an einer stabilen, 
genau genug bekannten Frequenz. Ob das mit dem internen Takt auch so 
ist, ist hingegen eine ganz andere Geschichte. Was aber nicht heißt, das 
es nicht ebenfalls möglich ist, dass die eingestellte Frequenz auch 
tatsächlich genau genug eingehalten wird.

von Jonathan M. (jona)


Lesenswert?

Aha ok also praktisch sehr zufällig...
Danke für die Tipps!Ich werde nächstes Mal an den Quellcode denken;)

MfG
Jonathan

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.