Sekundentakt Atmega8

Löten, Basteln, Tippen, Schrauben.
Gesperrt
MartinZippel
Beiträge: 1543
Registriert: 02.11.2005 19:16
Name: Martin Zippel
Geschlecht: weiblich
Studienrichtung: Informatik
Matrikel: 2005
Angestrebter Abschluss: Dipl-Ing.
Wohnort: Püchau
Contact:

Sekundentakt Atmega8

Beitrag von MartinZippel » 02.04.2008 12:28

Ich hab mal wieder ein Problem mit meinem neuen Schatz:

Als ersten Schritt zur Uhr hin wollte ich den Doppelpunkt meiner SSA im Sekundentat blinken lassen. Allerdings entspricht das, was dabei rauskommt nicht mal annähernd einer Sekunde, eher 20.

Mein Code:

Code: Alles auswählen

$regfile = \"m8def.dat\"
$crystal = 16000000                                         \'auf 16MHz stellen


Config Timer1 = Timer , Prescale = 1024                     \'Timer1 und seinen Teilfaktor bestimmen
On Timer1 Dp                                                \'Subprogramm bei TimerInterrupt
Enable Timer1                                               \'Timer1 einschalten
Const Timervorgabe = 49910                                  \'Startwert definieren
Enable Interrupts                                           \'Interrupts aktivieren
Timer1 = Timervorgabe                                       \'Startwert des Timers einstellen


Config Portc = Output                                       \'Stelle
Config Portd = Output                                       \'Ziffer

Dim Punkt As Bit                                            \'ja/nein/vielleicht


Main:

Portc = 4                                                   \'Doppelpunkt kann \"beschrieben\" werden
Punkt = 0                                                   \'zunächst keinen Punkt anzeigen


Do
Portd = 255                                                 \'alle Segemente aus, um Anzeigespuren zu vermeiden
If Punkt = 1 Then Portd = 255                               \'Doppelpunkt aus
If Punkt = 0 Then Portd = 121                               \'Doppelpunkt an
Loop


Dp:                                                         \'ISR von Timer1
Timer1 = Timervorgabe                                       \'wieder auf Startwert stellen
Toggle Punkt                                                \'Punkt anzeigen wird gewechselt (ist ja vom Typ Bit)
Return
Also ich stell auf 16MHz, was laut Datenblatt auch möglich ist. Den Prescaler auf 1024. Das heißt:
16MHz/1024 = 15625
Also zählt der Timer in einer Sekunde bis 15625.
Laut Datenblatt erreicht der Timer seinen Overflow bei 65536 \"Zählungen\".
Also 65536-15625 = 49911
Die 49911 habe ich als Startwert des Timers eingestellt. Er soll also bei 49911 anfangen und dann loszählen. Wenn er alle 1024 Takte einmal hochzählt kommt er bei 16000000 Takten auf 65536, hat da seine Grenze erreicht und löst den Overflow-Interrupt aus.
Wenn das nur gering abweichen würde, wär das nicht weiter schlimm, soweit ich weiß, müsste ich von den 49911 sogar noch eins abziehen. Aber da der Takt ein völlig anderer ist und ich nun auch nicht mehr weiß, was ich ausprobieren soll, frag ich hier.
Also hat jemand eine Idee, was der Fehler sein könnte?

FlyingMatze
Beiträge: 87
Registriert: 31.01.2005 09:34

Sekundentakt Atmega8

Beitrag von FlyingMatze » 02.04.2008 16:57

Der Controller wird mit 1MHz Takt ausgeliefert und den hat er auch solange bis du die Fuses geändert hast. Da kannst du in deinem Programm chreiben was du willst, die Fuses müssen immer mit dem Entsprechenden Programm, mit dem du das Programm aufspielst, extra geändert werden. Ich benutze dafür immer Ponyprog.
P.S. Kennst du Mikrocontroller.net ? Die wohl beste seite wenn es um Atmel Fragen geht. Dort ist auch deine jetzige Frage (und wahrscheinlich auch deine nächsten Fragen) schon beantwortet. Es gibt auch einen guten Arktiel zu AVRs.
P.S.2. Wenn du mit Basic anfängst dann baust du dir irgendwann selber eine Falle weil du irgendwann nicht weiterkommst. Lerne lieber gleich C.

MartinZippel
Beiträge: 1543
Registriert: 02.11.2005 19:16
Name: Martin Zippel
Geschlecht: weiblich
Studienrichtung: Informatik
Matrikel: 2005
Angestrebter Abschluss: Dipl-Ing.
Wohnort: Püchau
Contact:

Sekundentakt Atmega8

Beitrag von MartinZippel » 02.04.2008 17:17

Ich dachte, der Befehl mit den 16MHz würde die Fuse umstellen.
microcontroller.net kenn ich natürlich, wollte mich aber nicht wegen der einen Frage anmelden...
Sollt ich vielleicht doch mal tun, werden ja noch mehrere Fragen dazu kommen.
Danke

FlyingMatze
Beiträge: 87
Registriert: 31.01.2005 09:34

Sekundentakt Atmega8

Beitrag von FlyingMatze » 02.04.2008 17:19

Dort muss man sich nicht anmelden. Kannst einfach so schreiben. Wenn man den Gerüchten glaubt, dann besteht das ganze Forum nur aus 3 Leuten, die immer unter anderen Namen Posten ;)

MartinZippel
Beiträge: 1543
Registriert: 02.11.2005 19:16
Name: Martin Zippel
Geschlecht: weiblich
Studienrichtung: Informatik
Matrikel: 2005
Angestrebter Abschluss: Dipl-Ing.
Wohnort: Püchau
Contact:

Sekundentakt Atmega8

Beitrag von MartinZippel » 02.04.2008 17:20

:-O

Gesperrt

Zurück zu „Technik“