- LiTime Speicher und Akkus         
Ergebnis 1 bis 7 von 7

Thema: Timer mehrfach / optimal nutzen

  1. #1

    Timer mehrfach / optimal nutzen

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo,
    ich möchte mit einem ATMEGA 8-16 gerne 2 drehzahlen über hall-sensoren einlesen, außerdem einen rc-kanal einlesen und dann noch einen servobefehl ausgeben.
    die hall-sensoren geben ein digitales signal aus, genau wie der rc-kanal.
    der servobefehl nimmt den timer0 in beschlag (bascom), das einlesen des rc-kanals habe ich mit dem timer1 gemacht und einen (!) hall sensor kann ich mit dem timer2 einlesen. bleibt noch der andere.
    meine fragen:
    1. kann man mit dem mega 8-16 auch mehr als einen hall sensor einlesen? beide INT - Pins sind ja schon belegt ?
    2. wenn ja, wie nutze ich dann den timer2 doppelt?

    oder muss ich für diese aufgabenstellung 2 controller miteinander vernetzen?


    Vielen Dank!

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Ich glaube hier überschätzt du die Community doch erheblich. Um dir hier wirklich gute Auskunft zu geben müsste sich jemand noch mehr mit deinem Programm auseinandersetzen als du es selbst getan hast und auch deine Pheriperiegeräte und Eingaben kennen.

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    -- muss das ganze zeitparallel sein oder geht auch Zeit-MUX?
    -- welche Auflösung brauchst du für die Eingaben (f, duty)

    Du kannst den AC und den InCapt ebenfalls als externe INTs verwenden
    Disclaimer: none. Sue me.

  4. #4
    danke für die antworten,
    davon habe ich auch schon gelesen, dass man andere ports als INT benutzen kann, aber wie genau macht man das?
    bin gerade erst in das thema atmel eingestiegen, bin noch grün hinter den ohren
    gedacht habe ich mir das so:

    2 hallsensoren an 2 INTs geben unabhängig voneinander einen impuls pro umdrehung. diese werden von 2 subroutinen gezählt.
    gleichzeitig läuft der timer2 und läuft nach einer halben sekunde über. das läuft soweit auch mit einen hall sensor wunderbar.
    ist der timer2 voll, so sollen beide zählungen ausgelesen und in 2 verschiedene upm umgerechnet werden.

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    Den AnalocComparator kannst du einen IRQ auslösen lassen. Er vergleicht die Spannungen an AIN0 gegen AIN1. Ausserdem kannst du noch viele andere Eingänge für den AC wählen (interne Referenz, Ausgang des Input-Multiplexers des ADC, etc). Am klarsten wird das, wenn du das Blockschaltbild im AVR-Manual anschaust.

    Der AC hat andere physikalische Eigenschaften als digitale I/O bzw. INTn. Aberzum Messen von digitalen Signalen stört das nicht weiter.

    Pulse zählen kannst du auch über die Timer1-Hardware, indem du den Timer nicht mit einer interenen Clock taktest sondern über Eingänge T0 bzw. T1.

    "Digitales Signal" sagt erst mal nix. Was musst du da analysieren? Pulse/Flanken Zählen? Dutycycle measurement, Datenstrom einlesen, ...?
    Disclaimer: none. Sue me.

  6. #6
    ich will einfach nur die pulse zählen.
    hast du vielleicht einen link, wo beschrieben wird, wie man das mit dem AC macht? und dann in Bascom programmiert? bin halt noch ziemlich neu in der materie...
    hier mal ein ausschnitt des codes zum zählen eines hall sensors. geht auch wunderbar.

    Code:
    $regfile "m8def.dat" 
    $crystal = 8000000    
    Config Timer2 = Timer , Prescale = 256   
    Config Int1 = Falling   
    On Timer2 Timer_irq
    Dim Zaehler As Long
    Dim Nzaehler As Word
    Dim Hall_ups As Word
    Dim Hall_upm As Word
    Enable Timer2
    Enable Interrupts
    '======================================================
    'Hallsensor: Pro Impuls ein Aufruf
    '======================================================
    Irq0:
     Incr Zaehler
    Return
    
    '======================================================
    'Hallsensor: Wenn Timer voll ist. Pro halbe Sekunde ein Aufruf
    '======================================================
    Timer_irq:
    Incr Nzaehler
    If Nzaehler = 61 Then
      Timer2 = 0
      Hall_ups = Zaehler * 2
      Hall_upm = Hall_ups * 60
      Zaehler = 0
      Nzaehler = 0
    Else
      Timer2 = 0
    End If
      Return
    danke

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    Den AC findest du im ATmega8-Handbuch auf Seite 190--192. Wenn was zur Hadrwar unklar ist, frag eben. Für die Software passt das BASCOM-Forum, evtl den Thread dahin verschieben.
    Disclaimer: none. Sue me.

Berechtigungen

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

LiTime Speicher und Akkus