-
        

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: Zeitmessung atmega8

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.06.2006
    Beiträge
    128

    Zeitmessung atmega8

    Anzeige

    Hallo! ich möchte mit einem atmega 8 und einer lichtschranke eine zeitmessung aufbauen.
    leider hab ich nicht so viel erfahrung mit der programmierung in Bascom. (bin anfänger)
    ich möchte, dass die zeitmessung in millisekunden läuft.
    welchen timer, welche zählweite und welchen prescaler muss ich wählen, dass der zähler nach 1 ms einen Überlauf macht?
    Und wie lasse ich eine variable hochzählen?
    Danke für die hilfe!!!

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.02.2005
    Ort
    Südtirol
    Beiträge
    283
    Hi, das mit dem Zähler fällt mir grad net ein, versuchs mal im datenblatt des Mega8.
    hochzählen der Variable :
    variable = variable + 1

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    43
    Beiträge
    2.240
    oder halt:

    incr variable

    für die Timereinstellungen schau mal unter
    http://www.roboternetz.de/phpBB2/dlo...le&file_id=169
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    705
    Die Frage, welcher Timer mit welchem Prescaler am geeignetsten ist, hängt auch ein Stück weit von der Quarzfrequenz ab. Prescaler/Quarzfrequenz ergibt das Zeitintervall (in Sekunden), das der Zähler für einen Zählschritt braucht. Wenn Du also die 1ms durch dieses Intervall (auch in ms!!) teilst, weißt Du, wie viele Schritte der Zähler in einer Millisekunde hochzählt.

    Im Mega8 gibt es 2 Zähler mit 8 Bit, die bis 255 zählen können (Timer 0 und 2) sowei einen 16 Bit-Zähler, der folglich bis 65535 zählen kann (Timer 1). Wenn das Ergebnis aus 0,001s*Quarzfrequenz/Prescaler größer als 255 ist, musst Du den 16-Bit Timer nehmen.

    Allens klar? ansonsten lohnt in der Tat die Auseinandersetzung mit den "Output compare"-Registern (Datenblatt!)

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.06.2006
    Beiträge
    128
    Danke für die antworten!
    wie komme ich auf den prescaler?
    für die berechnungen brauche ich ja den prescaler. die quarzfrequenz beträgt 16 mhz!
    Gruß epos!

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    705
    Es gibt 5 verschiedene prescaler: 1, 8, 64, 256 und 1024. Die kannste auswählen, wenn Du im Bascom den Timer konfigurierst (Config timer1 = timer...). `Ne super Hilfefunktion gibt´s da bei Bascom im Programm, einfach das gelbe Fragezeichen anklicken und dann "BASCOM Language Reference" auswählen - da findest Du zu JEDEM Befehl echt ausführliche Infos.

    Ich hab´s mal kurz angerechnet: Mit einem Prescaler von 1 würde der Timer in 1 ms bis 16000 zählen (wer hätte das gedacht?), das wär´also ein klarer Fall für Timer 1.
    Willst Du einen der beiden 8-Bit Zähler nehmen, bräuchtest Du ein Prescale von 64 - dann zählt er in 1ms bis 250 hoch (schön, weil er somit fast die ganze Breite des Zählers nutzt).

    Und wie gesagt - die BASCOM-Hilfe ist gar nicht hoch genug zu schätzen!!

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.06.2006
    Beiträge
    128
    Danke für deine Antwort Sauerbruch!
    Gut, dann nehm ich einen 8-bit zähler mit einem prescale von 64!
    Aber weiß noch wer, wie ich jetzt eine variable (eben die zeit in ms) hochzählen lassen kann, sodass ich dann mit der variablen weiterrechnen kann?
    Danke für eure schnelle hilfe!

  8. #8
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    705
    Zuerst definierst Du die Variable, die zählen soll, z.B. "Zeit"

    Dim Zeit as Byte

    Da nimmst Du am besten Timer 2, denn der hat (im Gegensatz zu Timer 0) ein "Output Compare Register). Da bschreibst Du den Wert 250 rein, dann gibts beim Zählerstand von 250 einen Interrupt:

    OCR2 = 250

    Als nächstes sagst Du dem Programm, zu welchem Label es im Compare-Fall springen soll:

    On COMPARE2 Zählen

    Die Interrut-Routine sollte dann etwa so anfangen:

    Zählen:
    Timer2 = 0 (wichtig - gleich am Anfang!!)
    Zeit = Zeit + 1
    return

    Alles klar?[/code]

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.06.2006
    Beiträge
    128
    Danke! ich glaub ich habs!
    mit der variable "Zeit kann ich dann wieterrechnen, richtig?
    stellst du mit timer2=0 den timer auf 0?
    gruß epos

  10. #10
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    705
    ...exakt!

    Du kannst Variablen auch belöiebei "weiterverrechnen", also z.B. nacheinander

    Zeit = Zeit+1
    Zeit = Zeit/1000 (dann wären´s Sekunden)
    Zeit = Zeit / 60 (oder Minuten)

    etc., etc.

    Und Timer2=0 solltest Du halt gleich als erstes im Compare-Interrupt machen, dass er halt präzise und ohne Zeitverzögerung weiterzählt.

    Veil Spaß beim Experimentieren!!

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •