www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Prescaler zeigt keine Wirkung


Autor: Axel Krüger (axel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich habe einen atmega8 mit 3686400 Hz Taktfrequenz und komme einfach
nicht mehr weiter :(

Und zwar möchte ich eine Pulslänge messen. Soweit auch kein Problem mit
dem Timer nur ich kann den prescaler verändern wie ich will, der Timer
zählt immer in der gleichen Geschwindigkeit, und zwar in fast genau 580
ms von 0 bis 65000.  Das ist viel zu lange weil ich die zeit zwischen
den „zündfunken“ ermitteln möchte. (will ein dzm bauen)

Theoretisch müsste der Timer 1 x durchlaufen in ca. 36 ms bei einem
prescaler von 8, macht er aber eben nicht.

Hier mal der Quelltext (bascom):

$regfile = "m8def.dat"
'Prozessortyp
$crystal = 3686400
'Taktfrequenz
$baud = 19200


Declare Function Lopulse() As Byte

Dim Value As Byte

Config Pinb.0 = Input
Set Portb.0.0
Inputpin Alias Pinb.0

Config Timer1 = Timer , Prescale = 8



Enable Timer1
Enable Inerrupts

Do
   Print "Waiting for Pulse..."
   Value = Lopulse()
   Print ; Value
Loop

End

Function Lopulse() As Byte

 While Inputpin <> 0 : Wend
 Tcnt0 = 0
 Start Timer1

 While Inputpin = 0 : Wend
 Stop Timer1
 Lopulse = Tcnt0

End Function Lopulse()



Ich hoffe ihr könnt mir weiterhelfen

MfG Axel

Autor: Danny P. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also ich bin nich der bascom-spezi, aber mir kommt komisch vor das du
zwar den Timer1 initialisierst aber weiter unten von "TCNT_0_"
schreibst.... das Register gehört aber leider zum Timer_0_  ...

Autor: Axel Krüger (axel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja stimmt das fällt mir jetzt auch auf.  Vorher hatt ich jedoch timer0
initialisiert und da war genau das gleiche problem nur es hat mich
unglaublich verwundert das er trotzdem bis 65xxx gezählt hat obwohl
timer 0 ja nur ein 8 Bit timer ist

Und kann mir das einer erklären warum er trotzem den wert von tcnt0
übernimmt obwohl ich timer1 initialisiert habe ?

thx

Autor: Danny P. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
naja.. das is ja nich schwer... du kannst die register ja beschreiben
wie du lustig bist... TCNT0 ist ja in Hardwareform im Controller
vorhanden von daher kannst du den immer und an jeder Stelle
beschreiben...

den µC interessiert es nicht, der Timer0 kann ja nicht wissen das du
ihn eigentlich nicht willst

hast an den Stellen denn mal durch Timer1 ersetzt?

Autor: Danny P. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also ich hab mal versucht dein programm zu verstehn....

was soll es machen?
wenn der Eingangspin high ist: Timer nullen und loszählen
wenn der Eingangspin low ist: Timer stoppen und Zählregister in
Loppulse schreiben

is das so richtig?

Autor: Axel Krüger (axel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja wenn eine high/low flanke kommt timer auf null setzen und loszählen
bis wieder ein highflanke kommt dann timer stoppen und den wert lopulse
zuweisen und diesen dann über seriell mit dem print befehl an den pc
senden

Autor: Danny P. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also... an Hand deines Bascom-Codes fällt mir nix auf was auf eine
falsche Initialisierung schliessen lässt...

ABER: Hast du deine FuseBits mal bearbeitet? Der Mega8 läuft
jungfräulich mit einem 1MHz internen Taktgeber

Autor: Axel Krüger (axel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
oooh stimmt das muss man ja noch machen. Aber trotzdem müsste doch der
prescaler einfluss auf die geschwindigkeit des timers haben!?

Naja egal. notfalls nehm ich dann ein 16 Mhz Quarz und dann hab ich
auch meinen "optimierten zähler" :)

Autor: Danny P. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hm also bei 3,686400MHz und nem Teiler von 8 würde der Timer bis zum
Überlauf bei 65535 etwa 142,22ms benötigen...

wenn aber der Mega8 auf ein MHz lief -> 524ms... das kommt doch deiner
angegebenen Zeit schon sehr nah :-)

Autor: Axel Krüger (axel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hmm das problem an der sache das ich den prescaler auch schon im obigen
quelltext auf 1024 hatte und das hat nix ausgemacht

aber erstmal danke für dein tip mit dem fuse bits ich werde das in den
nächsten tagen nochmal versuchen und bericht dann :)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.