-         

Ergebnis 1 bis 4 von 4

Thema: adc-interrupt setzen mit 2 ausgebewerten

  1. #1
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    20.06.2004
    Beiträge
    1.941

    adc-interrupt setzen mit 2 ausgebewerten

    Anzeige

    wie kann man in der interruptroutine 2 adcwerte abfragen und in eine variable speichern. zur zeit frage ich "mux0" ab,ist der 2. adcpin.
    und wie kann man zb pin8 abfragen da muss ja irgendwie mux0 und ein anderer mux.... als "or" hintereinander gesetzt werden.
    so sieht es zb bei winabr-c aus: ADCchannel_8 ADMUX= _BV(MUX2) | _BV(MUX1) | _BV(MUX0)
    Code:
    $regfile = "m16def.dat"
    $crystal = 8000000
    $baud = 19200
    
    Dim Adhi As Byte
    Dim Adlow As Byte
    Dim Adcergebnis As Word
    Dim Radzaehler As Byte
    Dim Toggle_rad As Byte
    
    Disable Interrupts
    Adcsra.aden = 1
    Adcsra.adate = 1
    Adcsra.adie = 1
    Adcsra.adsc = 1
    Adcsra.adps0 = 1
    Adcsra.adps1 = 1
    Adcsra.adps2 = 1
    Admux.refs0 = 1
    Enable Interrupts
    
    Radzaehler = 0
    Toggle_rad = 0
    
    On Adc Onadc
    
    Do
    
    Waitms 1
    Print Radzaehler
    
    Loop
    
    Onadc:
       Admux.mux0 = 1
       Adcsra.adsc = 1
       Adlow = Adcl
       Adhi = Adch
       Adcergebnis = Adhi * 256
       Adcergebnis = Adcergebnis + Adlow
       If Adcergebnis > 400 And Toggle_rad = 1 Then
          Incr Radzaehler
          Toggle_rad = 0
       End If
       If Adcergebnis < 100 And Toggle_rad = 0 Then
          Incr Radzaehler
          Toggle_rad = 1
       End If
    Return
    
    End
    mfg pebisoft

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    FÜr den Channel sind die untersten Bits zuständig. Am bequemsten ist es, alle drei zu löschen und dann einfach die Channel -Nummer (0-7) direkt reinzuschreiben:

    admux = admux AND &HF8 ' löschen der untersten 3 bit
    Und dann
    admux = admux OR 0 ' Channel 0 oder
    admux = admux OR 1 ' Channel 1 oder
    admux = admux OR 2 ' Channel 2 oder
    admux = admux OR 3 ' Channel 3 oder
    admux = admux OR 4 ' Channel 4 oder
    admux = admux OR 5 ' Channel 5 oder
    admux = admux OR 6 ' Channel 6 oder
    admux = admux OR 7 ' Channel 7

    Das ganze in GCC
    admux &= 0xF8 ' löschen der untersten 3 bit
    admux |= 0 ' Channel 0 oder
    admux |= 1 ' Channel 1 oder
    ...........
    admux |= 7 ' Channel 7 oder
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Gast
    @Pebisoft: Bist aber noch recht aktiv hier für das, daß du Bascom angbl. verkauft hast, da du ja umsteigen wolltest (C ?)!

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    20.06.2004
    Beiträge
    1.941
    so aktiv nicht mehr, nachdem mir das updateforum so gestunken hat bin ich auf winavr-c umgestiegen (habe hier weiter unten im forum eine bösartige )schilderung abgegeben. versuch ein sram zum laufen zu bringen welches daten vom adc-port als interrupt bekommt. klappt in winavr-c noch nicht und Suche erst eine lösung, habe mal ein bascombeispiel aus diesem forum reingestellt um die situation schildern zu können.
    hallo picknick diese or-lösung läuft in winavr-c sehr gut .
    mfg pebisoft

Berechtigungen

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