- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 10 von 10

Thema: Suche Source für Stoppuhr (Sekundenzähler)

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.02.2005
    Beiträge
    663

    Suche Source für Stoppuhr (Sekundenzähler)

    Anzeige

    Praxistest und DIY Projekte
    Guten Abend!

    Könnte mir bitte jemand einen kurzen Code posten, der jede Sekunde eine Aktion (z.B. Zählen ) ausführt? Das ganze soll für einen ATmega8 - 8Mhz sein.
    Sinn und Zweck des Ganzen ist eine Art Stoppuhr.

    Gruß, Björn
    Nur tote Fische schwimmen mit dem Strom...

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.11.2004
    Beiträge
    1.693
    Genau, zu fragen ist eine gute Idee, bevor man sich selbst gedanken machen muss :P

    Willst du den kompletten Code für die Stopuhr haben oder nur den Teil der zählt?
    Wenn alles, musst du auch sagen ob du doch eine 7-Segment-Anzeige nimmst oder was anderes. Und ob eine mit gemeinsammer Anode oder Kathode. Und was für einen AVR du verwendest, usw...

    Sollen nur die Sekunden oder auch 1/100 Sek gezählt werden?
    Du musst doch nur eine Timer einstellen und in der ISR eine Variable hochzählen lassen.
    Für den Timer gibt es im Downloadbereich ein gutes Programm, was alles nötige ausrechnet und auch gleich einen Code für Bascom erzeugt.

    Da ich nicht weiss wie fit du in Sachen AVR bist ist es schwer dir zu helfen. Was genau willst du denn wissen?
    Hast du dir schon gedanken drüber gemacht das die Zeit auch mal wieder auf 0 gesetzt werden muss usw...?

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.02.2005
    Beiträge
    663
    Also... erstens habe ich mir Gedanken gemacht und auch an Timer gedacht, habe aber noch nie mit ihnen gearbeitet (nur ein gescheiterter Versuch).

    Ich brauche nur den Code der hochzählt. Es sollen nur Sekunden gezählt werden. ATmega8 - steht oben schon. Achja, in Bascom.

    Gruß, Björn
    Nur tote Fische schwimmen mit dem Strom...

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.11.2004
    Beiträge
    1.693
    Aber die Hilfe hätte zum Thema Timer viele Lösungen gebracht. Besonders wenn es um Sekunden zählen geht
    Hier der Link zum Programm: https://www.roboternetz.de/phpBB2/dl...le&file_id=169
    In der ISR musst du dann ja nur eine Variable hochzählen.

    Der Code könnte so aussehen.

    Code:
    '##############################################################
    ' Timer Beispiel für das universelle Controllerboard
    ' RN-Control mit mega 16 oder mega 32
    ' Ausführliche Infos zum Controller Board findet man
    ' unter www.robotikhardware.de als auch im
    ' www.roboternetz.de
    '
    ' Dieses Demo läßtz eine LED in dem von ihnen gewählten
    ' Timer-Rhytmus blinken
    ' Der generierte Code kann direkt in den Bascom-Compiler kopiert
    ' und kompiliert werden. Natürlich läßt sich der Code auch in
    ' bestehende Programme integrieren
    
    ' Autor: Frank
    ' Weitere Beispiele und Beschreibung der Hardware
    ' unter http://www.Roboternetz.de oder robotikhardware.de
    ' Eigene Programmbeispiele sind im Roboternetz gerne willkommen!
    '##############################################################
    
    
    
    'wenn mega 32, dann ändern in  $regfile = "m32def.dat"
    $regfile = "m16def.dat"
    
    'Quarzfrequenz, entsprechend ihren Angaben
    'der passende Quarz muss in die Fassung gesteckt werden
    $crystal = 8000000
    
    'nur notwendig wenn RS232 benutzt werden soll
    $baud = 9600
    
    'Hier wird der Timer und der Teiler festgelegt
    Config Timer1 = Timer, Prescale = 256
    
    'Der Port mit der dritten LED auf RN-Control wird als Ausgang programmiert
    Config Pinc.2 = Output
    'Hier geben wir der Definition einen schöneren Namen
    Led3 Alias Portc.2
    
    'Hier wird das Unterprogramm festgelegt, das
    'in dem von ihnen eingestellten Intervall aufgerufen wird
    On Timer1 Timer_irq
    
    'Diese Vorgabe wurde berechnet um die genaue Intervallfrequenz zu erreichen
    Const Timervorgabe = 34286
    
    
    'Hier werden die Timer aktiviert
    Enable Timer1
    Enable Interrupts
    
    'Hier ist die Programmhauptschleife
    Do
    'Hier könnte Ihr Hauptprogramm stehen
    Loop
    
    
    
    'Dies ist der Programmteil, der in dem von ihnen gewählten
    'Intervall aufgerufen wird
    Timer_irq:
      Timer1 = Timervorgabe
    
    'Hier könnte nun ihre beliebige IRQ-Routine stehen
    'Dabei sollte man darauf achten das diese nicht mehr Zeit
    'benötigt, als das Intervall zuläßt
    
    'Der Zustand der LED wir umgekehrt, wodurch sich blinken ergibt
    'Hohe Frequenzen sind natürlich nicht mehr sichtbar
       Toggle Led3
    
       Return
    An Stelle von Toggle Led3 kannst du einfach
    Code:
    INCR Sekunden
    eingeben. Dann wird die Variable Sekunden jeweils um 1 erhöht.
    Zum starten der Uhr Enable Timer1 benutzen und zum stoppen Disable Timer1

    Das starten und stoppen muss du dann mit deinem Taster oder wie auch immer du das realisieren willst verknüpfen.
    Wenn das als Hilfe nochnicht reicht muss du mehr Infos Preis geben. Z.B. wie wann angefangen werden soll zu zählen, wie gestoppt werden soll, wie auf 0 gesetzt und und und...

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.02.2005
    Beiträge
    663
    So...

    ich habe mal diesen Code getestet, es kamen jedoch nur irgendwelche Buchstaben an.

    Code:
    $regfile = "m8def.dat"
    $crystal = 8000000
    $baud = 9600
    
    'Hier wird der Timer und der Teiler festgelegt
    Config Timer1 = Timer, Prescale = 256
    
    'Hier wird das Unterprogramm festgelegt, das
    'in dem von ihnen eingestellten Intervall aufgerufen wird
    On Timer1 Timer_irq
    
    'Diese Vorgabe wurde berechnet um die genaue Intervallfrequenz zu erreichen
    Const Timervorgabe = 34286
    
    Dim Sekunden As Integer
    
    'Hier werden die Timer aktiviert
    Enable Timer1
    Enable Interrupts
    
    'Hier ist die Programmhauptschleife
    Do
    'Hier könnte Ihr Hauptprogramm stehen
    Loop
    
    
    'Dies ist der Programmteil, der in dem von ihnen gewählten
    'Intervall aufgerufen wird
    Timer_irq:
      Timer1 = Timervorgabe
    
      Incr Sekunden
      Print Sekunden
    Return
    Ist der Code fehlerhaft oder muss der Fehler woanders liegen?

    Gruß, Björn
    Nur tote Fische schwimmen mit dem Strom...

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.02.2005
    Beiträge
    663
    Hey es geht...

    Mit externem Quarz funktioniert es jetzt.

    Vielen Dank!

    Gruß, Björn
    Nur tote Fische schwimmen mit dem Strom...

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.11.2004
    Beiträge
    1.693
    Dim die Sekunden mal als Byte oder Word. Der Code sieht richtig aus. Und Printe mal einen Text mit.
    PRINT "Sekunden" ; Sekunden
    Dann weisst du ja genau was ankommen muss.
    Ist der Mega8 auch auf einen Quarz eingestellt (Fusebits)?

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.11.2004
    Beiträge
    1.693
    Dann hat sich mein letzter Beitrag ja auch erledigt

  9. #9
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.02.2005
    Beiträge
    663
    Mist! Ich verwende jetzt das interne 1Mhz Quarz - doch leider ist der Controller auf 5 min gesehen 2 Sekunden zu langsam. Woran könnte das liegen?

    Gruß, Björn
    Nur tote Fische schwimmen mit dem Strom...

  10. #10
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.11.2004
    Beiträge
    1.693
    Dadran, das der interne Oszi nicht so genau ist. Ich glaube er ist auch empfindlicher was Temperaturänderung angeht.
    Laut Datenblatt Seite 28 hat der interne Takt eine Toleranz von +-3% bei 5V und 25 Grad Celsius. Er kann bei gleichen Bedinungen aber bis auf 1% korrigiert werden. Wie das gehen soll ist laut Seite 28 auf Seite 222 beschrieben. Und dort wird auf Seite 29 verwiesen
    Entweder machst du dir die Mühe den Takt zu kalibrieren oder du änderst dein Timerpreload.
    Da dir Uhr z.Zt. zu langsam geht muss der Timer also schneller ausgeführt werden. Das bedeutet, das der Preloadwert kleiner werden müsste.
    Ist zwar auch etwas arbeit. Aer genauer geht es nunmal nur wenn du einen Quarzoszilator verwendest (PS: Das ist kein Quarz mit 2 Anschlüssen sondern die mit 4).

Berechtigungen

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

LiFePO4 Speicher Test