-         

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

Thema: Bascom AVR wie Counter benutzen??

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    07.01.2010
    Ort
    Deutschland
    Beiträge
    735

    Bascom AVR wie Counter benutzen??

    Anzeige

    Hallo Forum,
    Ich möchte mir einen Drehzahlmesser für einen alten 2 Takter bauen. Als Taktgeber würde ich dann einen Hallsensor benutzen. Als µC nehm ich ein ATmega8 und einen 8*2 LCD. Nun zu meinem eig. Problem. Wie kann ich dem Timer als Counter benutzen ??
    Der Timer müsste dann später die "High" Impulse in 1sec. messen. Wie kann ich das in Bascom schreiben??
    So viel hab ich schon verstanden:
    Config Timer1 = Counter , Edge = Rising
    Wie muss der Rest programmiert werden?? Also mit den Impulsen pro sec. die Ich später als Variable weiter verarbeiten kann.
    Den Rest schaffe ich dann selber.

    Mfg
    bnitram
    Meine Homepage über alles Elektronische und Mechanische:
    http://www.kondensatorschaden.de/
    Viel Spaß!!

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    705
    Der Timer müsste dann später die "High" Impulse in 1sec. messen.
    Dafür muss der Controller auf jeden Fall exakt eine Sekunde abmessen können. Man könnte einen zweiten Timer so konfigurieren, dass er jede Sekunde überläuft, und in der ISR den als Counter konfigurierten Timer auslesen.

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    07.01.2010
    Ort
    Deutschland
    Beiträge
    735
    Hallo Sauerbruch,
    Danke für die Antwort.
    Wie progge ich das dann??
    Also wie ich eine Sekunde hinkrieg weiß ich. Aber in welcher Reihenfolge muss das kommen?? Oder wird das dann in einer Schleife geschrieben.

    Mfg
    bnitram
    Meine Homepage über alles Elektronische und Mechanische:
    http://www.kondensatorschaden.de/
    Viel Spaß!!

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    705
    Sicherlich führen tausend Wege nach Rom - einer davon könnte so aussehen: Timer1 wird als Counter konfiguriert, ein zweiter timer als 1-Sekunden-Timer. In der ISR des 1-Sekunden Timers wird der Inhalt des Timer1 in eine Word-Variable übernommen, auf 0 zurückgesetzt und ein Flag gesetzt. In der Hauptschleife wird das Flag dann abgefragt, und wenn es gesetzt ist, wird die Word-Variable mit 60 multipliziert (weil´s ja Umdrehungen pro Minute sind), angezeigt, und das Flag gelöscht:

    Code:
    Config timer1 as counter, edge = rising
    
    Config timer0 as timer....  '
    On timer0 Sekunde
    Enable timer0
    Enable Interrupts
    
    Dim RPM as word
    Dim Flag as Bit
    
    Do
    
    If Flag = 1 then
     RPM = RPM * 60
     LCD RPM
     Flag = 0
    End if
    
    Loop
    
    
    Sekunde:
    RPM = Timer1
    Timer1=0
    Flag = 1
    Return

    Das ist jetzt einfach nur mal ´ne Idee, auf blauen Dunst geschrieben und ungetestet!!

  5. #5
    Erfahrener Benutzer Roboter Experte Avatar von Thomas E.
    Registriert seit
    29.12.2011
    Beiträge
    638
    Ich würde das anders angehen:
    Statt in einem Zeitfenster von einer Sekunde Impulse zu zählen, würde ich eher die Zeit zwischen zwei Impulsen messen und dieses Ergebnis dann auf eine Sekunde aufrechnen.
    Grüße
    Thomas

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    07.01.2010
    Ort
    Deutschland
    Beiträge
    735
    Vielen Dank auf jeden Fall schonmal. Ich werde den Code mal durchgehen und auch mal testen.

    Mfg
    bnitram

    Edit:
    Welche Methode ist den dann die bessere??
    Meine Homepage über alles Elektronische und Mechanische:
    http://www.kondensatorschaden.de/
    Viel Spaß!!

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    705
    Welche Methode ist den dann die bessere??
    Das ist schwer zu sagen - das kommt darauf an, welche Leistungsmerkmale im Einzelfall wichtig sind.
    Der wesentliche Unterschied besteht in der Auflösung: Zählst Du während einer Sekunde die Umdrehungs-Impulse, ist die Drehzahl (in U/min) immer 60 * Zahl der Impulse. Das heißt, dass die angezeigte Drehzahl immer ein Vielfaches von 60 ist, und die Auflösung ebenfalls konstant 60 U/min beträgt.
    Wertest Du aber die Zeit zwischen zwei Umdrehungsimpulsen aus (indem Du einen Timer zwischen zwei Umdrehungsimpulsen hochzählen lässt und anschließend ausliest), ist die Drehzahl ja umgekehrt proportional zum Timerwert (je langsamer der Motor dreht, umso weiter kann der Zähler zwischen zwei Impulsen zählen). Im unteren Drehzahlbereich hast Du somit eine ziemlich "feine" Auflösung, während die Drehzahl im oberen Bereich in eher gröberen Schritten angezeigt werden.

    Ist das Projekt denn überhaupt noch aktuell??

  8. #8
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    07.01.2010
    Ort
    Deutschland
    Beiträge
    735
    Hallo Sauerbruch,
    Ja das Thema ist noch aktuell. Es geht in erster Linie darum einen alten Benzin Motor Drehzahl mäßig einzustellen. Es kommt dabei weniger auf die untere drehzahl an. Wichtiger ist der Drehzahlbereich von 2000-5000. Später sollte der drehzahl Messer dann auch fest als Anatur instaliert werden. Welche Möglichkeit wäre dann die bessere ?

    Mfg und vielen Dank für die Antwort
    bnitram

  9. #9
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    07.01.2010
    Ort
    Deutschland
    Beiträge
    735
    Keiner eine Idee??

    Mfg
    bnitram
    Meine Homepage über alles Elektronische und Mechanische:
    http://www.kondensatorschaden.de/
    Viel Spaß!!

  10. #10
    Erfahrener Benutzer Roboter-Spezialist Avatar von Thegon
    Registriert seit
    21.01.2011
    Beiträge
    562
    Naja wenn man so ein bisschen rechnet dann wäre für diese Drehzahlen doch die Methode mit dem "Zeitabstandmessen" besser geeignet.

    Weil 3000rpm = 50Hz, (Unter der Annahme, dass eine Umdrehung genau einen Impuls auslöst)

    -> Wenn man eine Sekunde Zeitfenster macht, bekommt man 50 Impulse rein -> wie oben schon gesagt die Auflösung in +- 60rpm, klar.

    Wenn man annimmt, der Mega8 ist mit 8Mhz getaktet, dann kann er den Zeitlichen Abstand (zumindest theoretisch) in 125ns - Schritten messen, und bei einer Frequenz von 50Hz wäre ein Fehler von +-125ns weniger als 0,001 % was entsprechen würde +- 0,018 rpm.

    Soweit wenn man es theoretisch in den Taschenrechner eintippt, praktisch wäre es halt genauer als man es dann am Display anzeigen wird.

    Nur das Problem dabei ist, wenn sich der Motor beim Starten sehr langsam dreht, dann kommen da riesige Anzahlen von 125ns Schritten heraus (bei 60rpm eben 8Mio, klar) , die man mit der Software halt bewältigen muss, aber mit Timer1 könnte das schon gehen, denke ich.

    Kritisch würde es bei dieser Art der Messung ja erst werden, wenn man sich dem Systemtakt annähern würde, sich der Motor also mit Millionen Umdrehungen pro Sekunde drehen würde, aber das ist ja nicht der Fall

    Ich würde es hier auf jeden Fall über "Zeitabstand messen" machen, also den Impuls per Interrupt in den AVR, und in der ISR Timerstand von vorher auslesen, Timerstand resetten, Timer weiterlaufen lassen und auf den Nächsten Impuls warten

    Zeitfenster machen eher Sinn, wenn man z.B. ein Display hat, das einem die Frequenz ( in 1Hz Schritten) eines Signals anzeigen soll, dessen Frequenz sehr variabel ist. Die Frequenzanzeige meines Eigenbau - Funktionsgenerators habe ich so gemacht, auch mit ATmega und Bascom.

    Soweit meine Meinung

    Mfg Thegon

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Pic Counter
    Von hvd12 im Forum PIC Controller
    Antworten: 7
    Letzter Beitrag: 01.03.2012, 16:20
  2. up/down counter
    Von flomesh im Forum Elektronik
    Antworten: 7
    Letzter Beitrag: 06.01.2008, 18:50
  3. Bascom-Simulator mit einem Laptop benutzen
    Von marik im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 04.11.2007, 21:12
  4. Howto: Bascom unter Linux benutzen ! (den compiler)
    Von Keksdose im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 16
    Letzter Beitrag: 09.04.2007, 11:29
  5. Bascom Counter funktioniert nicht.
    Von EDatabaseError im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 29.03.2007, 22:06

Berechtigungen

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