-         

Ergebnis 1 bis 3 von 3

Thema: enable adc

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    20.08.2006
    Beiträge
    183

    enable adc

    Anzeige

    in der beschreibung vom Bascom 1.11.8.5 steht ein befehl mit enable adc.
    wenn ich den adc-int eingerichtetet habe und compiliere, wird gesagt, das es diesen befehl nicht gibt, wie kann den adc-int den nun einschalten?

    unten ist der code


    Code:
    $regfile = "m32def.dat"
    $crystal = 8000000
    $baud = 19200
    
    Dim Adhi As Byte , Adlow As Byte
    Dim Adcergebnis As Word
    Dim Zaehler_encoder As Word
    Dim Toggle_rad As Byte
    Dim Eingabe_encoder As Word
    Dim Encoder_l_r As Byte
    
    Dim Text As String * 8
    Dim Text1 As String * 8
    Dim Text2 As String * 8
    
    Declare Sub Robby_vor_encoder()
    Declare Sub Robby_zurueck_encoder()
    Declare Sub Robby_links_encoder()
    Declare Sub Robby_rechts_encoder()
    
    
    Declare Sub Adc_einstellen()
    
    On Int1 Int1_int Nosave
    Enable Int1
    On Adc Adc_encoder Nosave
    Enable Adc ' ergibt eine fehlermeldung
    
    Enable Interrupts 
    
    Open "comd.3:19200,8,n,1" For Input As #1
    Open "comd.7:19200,8,n,1" For Output As #2
    
    Call Adc_einstellen()
    Zaehler_encoder = 0
    Toggle_rad = 0
    Encoder_l_r = 0
    
    Do
    
    Waitms 255
    
    Loop
    
    End
    
    Int1_int:
     Disable Int1
     Enable Interrupts
     Input #1 , Text
    
     Text1 = Left(text , 3)
     Text2 = Right(text , 3)
     Eingabe_encoder = Val(text2)
    
     If Text1 = "vor" Then
      Print "vor"
      Call Robby_vor_encoder()
      Print "stop"
     End If
     If Text1 = "zur" Then
      Print "zurueck"
      Call Robby_zurueck_encoder()
      Print "stop"
     End If
     If Text1 = "lin" Then
      Print "links"
      Call Robby_links_encoder()
      Print "stop"
     End If
     If Text1 = "rec" Then
      Print "rechts"
      Call Robby_rechts_encoder()
      Print "stop"
     End If
    
     Enable Int1
    return
    
    Adc_encoder:
        If Encoder_l_r = 1 Then
         Adlow = Adcl
         Adhi = Adch
         Adcergebnis = Makeint(adlow , Adhi)
         If Adcergebnis > 500 And Toggle_rad = 1 Then
          Incr Zaehler_encoder
             Toggle_rad = 0
         End If
         If Adcergebnis < 300 And Toggle_rad = 0 Then
            Incr Zaehler_encoder
           Toggle_rad = 1
        End If
       End If
    return
    
    Sub Adc_einstellen()
     Adcsr.aden = 1
     Adcsr.adfr = 1
     Adcsr.adie = 1
     Adcsr.adsc = 1
     Adcsr.adps1 = 1
     Adcsr.adps2 = 1
    End Sub
    
    Sub Robby_rechts_encoder()
     Zaehler_encoder = 0
     Admux.mux0 = 1
     Encoder_l_r = 1
       While Zaehler_encoder < Eingabe_encoder
       Waitms 5
       Wend
       Encoder_l_r = 0
    End Sub
    
    Sub Robby_links_encoder()
     Zaehler_encoder = 0
     Admux.mux0 = 0
     Encoder_l_r = 1
       While Zaehler_encoder < Eingabe_encoder
       Waitms 5
       Wend
       Encoder_l_r = 0
    End Sub
    
    Sub Robby_vor_encoder()
     Zaehler_encoder = 0
     Admux.mux0 = 0
     Encoder_l_r = 1
       While Zaehler_encoder < Eingabe_encoder
       Waitms 5
       Wend
       Encoder_l_r = 0
    End Sub
    
    Sub Robby_zurueck_encoder()
     Zaehler_encoder = 0
     Admux.mux0 = 0
     Encoder_l_r = 1
       While Zaehler_encoder < Eingabe_encoder
       Waitms 5
       Wend
       Encoder_l_r = 0
    End Sub
    auch bei diesem original beispielcode meckert der compiler das enable adc nicht erkannt wird :
    Code:
    '--------------------------------------------------------------------
    '                  ADC_INT.BAS
    '  demonstration of GETADC() function in combintion with the idle mode
    '  for a better noise immunity
    '  Getadc() will also work for other AVR chips that have an ADC converter
    '--------------------------------------------------------------------
    $regfile = "m48def.dat"
    $crystal = 8000000
    $baud = 19200
    
    $hwstack = 40
    $swstack = 8
    $framesize = 40
    
    
    'configure single mode and auto prescaler setting
    'The single mode must be used with the GETADC() function
    
    'The prescaler divides the internal clock by 2,4,8,16,32,64 or 128
    'Because the ADC needs a clock from 50-200 KHz
    'The AUTO feature, will select the highest clockrate possible
    Config Adc = Free , Prescaler = Auto , Reference = Internal
    'Now give power to the chip
    On Adc Adc_isr Nosave
    Enable Adc
    Enable Interrupts
    
    
    
    Dim W As Word , Channel As Byte
    
    Channel = 0
    'now read A/D value from channel 0
    Do
      Channel = 0
      'idle will put the micro into sleep.
      'an interrupt will wake the micro.
      Start Adc
      Idle
      Stop Adc
    
      Print "Channel " ; Channel ; " value " ; W
    Loop
    End
    
    Adc_isr:
      push r26
      push r27
      push r24
      in r24,sreg
      push r24
      push r25
      W = Getadc(channel)
    
      pop r25
      pop r24
      !out sreg,r24
      pop r24
    
      pop r27
      pop r26
    Return

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    Hallo,

    wenn ich das richtig sehe heisst der ADCC

    Die Namen der INTs stehen in der .Dat-Datei ganz unten.

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    20.08.2006
    Beiträge
    183
    danke, es geht jetzt.

    dann wird die bescheibung wohl bald geändert in der chm-datei.

Berechtigungen

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