- 12V Akku mit 280 Ah bauen         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 24

Thema: Mehrere Programme gleichzeitig laufen lassen geht nicht.

  1. #11
    Neuer Benutzer Öfters hier
    Registriert seit
    15.02.2005
    Alter
    34
    Beiträge
    23
    Anzeige

    Praxistest und DIY Projekte
    Hallo
    Hat schon jemand ein Lienverfolgungs prog geschrieben.
    Wäre froh wenn jemang so ein Prog mal posten kann.
    Würde mich schon viel weiter bringen.
    Danke schon im voraus

  2. #12
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.11.2004
    Beiträge
    1.693
    Wie hast du denn die Sensoren angeschlossen? Das da oben ist ja sicherlich nicht das ganze Programm. Hast du den ADC auch richtig eingestellt? Die jeweiligen Ports als Ein- und Ausgang eingestellt?

  3. #13
    Benutzer Stammmitglied
    Registriert seit
    22.03.2004
    Ort
    Hamburg
    Beiträge
    69
    Hi mesli-andres,
    ich denke Du hast da nen ganz trivialen bug in der Funktion Bewegungsmelder. Bei allen 3 Abfragen sind "End If" und "End Select" vertauscht.

    If We < 1010 Then
    Select Case We
    Case 380 To 470
    Bewegungsmelder = 3

    Case 535 To 720
    Bewegungsmelder = 3
    End If
    End Select


    If B < 1010 Then
    Select Case B
    Case 612 To 820
    Bewegungsmelder = 1
    End If
    End Select


    If C < 1010 Then
    Select Case C
    Case 612 To 820
    Bewegungsmelder = 2
    End If
    End Select


    Verschachtelte Ifs, Selects, Schleifen usw müssen immer von innen nach aussen geschlossen werden.

    Edit:
    Hab grad noch mal Dein Progie angesehen und verstehe "Call Lienienverfolgung" unter "Case 3" nicht.
    Dann dachte ich noch, Du solltest bei "Case 3 " vielleicht zuerst die Motoren abzuschalten, damit das Teil nicht fast 20 Sekunden lang einfach geradeaus weiterfährt.

    Grüße
    Marvin
    2B or not 2B = FF

    Wenn etwas klemmt, wende keine Gewalt an,
    nimm einfach nen größeren Hammer.

  4. #14
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.11.2004
    Beiträge
    1.693
    If C < 1010 Then
    Select Case C
    Case 612 To 820
    Bewegungsmelder = 2
    End If
    End Select
    Ich hab das mal anders dargestellt. Es mag sein, das ich mich täusche, aber denke eher das du If und Select vertauschst hast. Select ist innen und If ist aussen.

  5. #15
    Benutzer Stammmitglied
    Registriert seit
    22.03.2004
    Ort
    Hamburg
    Beiträge
    69
    Hmm, bei genauer Betrachtung ist das If mitsamt dem End If eigentlich völlig überflüssig.
    Wenn C >= 1010 ist, dann trifft der "Case 612 to 820" nicht zu und "Bewegungsmelder" wird nicht gesetzt.

    Grüße
    Marvin
    2B or not 2B = FF

    Wenn etwas klemmt, wende keine Gewalt an,
    nimm einfach nen größeren Hammer.

  6. #16
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.01.2004
    Beiträge
    2.441
    @mesli-andres
    hast du bei deinem ATMega die serielle Schnitstelle so beschaltet (max232), dass du Daten an den PC ausgeben kannst?

    Dann würde ich bei Schleifen, Abfragen usw. Print Befehle zum Debuggen einfügen.
    Damit findet man Fehler wie Marco78 und Marvin gefunden haben meist schneller, als wenn man über dem Quelltext brütet.

  7. #17
    Neuer Benutzer Öfters hier
    Registriert seit
    15.02.2005
    Alter
    34
    Beiträge
    23
    Hallo
    Danke mal für die vielen tips.
    Mit Case 3 steuere ich eine Digicam die dann Fotos macht.
    Später habe ich dann das Prog mit Print Befehlen ausgestattet aber das brachte mich nicht weiter.

  8. #18
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.11.2004
    Beiträge
    1.693
    Kannst du nicht mal den Schaltplan und das komplette Propgramm veröffentlichen?

    Es stellt sich immer noch die Frage, ob der ADC überhaupt richtig eingestellt ist und ob die Spannung mit einem Spannungsteiler ermittelt wird...

  9. #19
    Neuer Benutzer Öfters hier
    Registriert seit
    15.02.2005
    Alter
    34
    Beiträge
    23
    Hallo
    Hier ist das gesamte Prog.

    Code:
    '###################################################
    'Überwachungsroboter.bas
    'Überwachungsroboter
    'Projekt von Andres
    '#######################################################
    
    
    Declare Function Bewegungsmelder() As Byte
    Declare Sub Linieverfolgung()
    
    
    
    $regfile = "m32def.dat"
    $framesize = 32
    $swstack = 32
    $hwstack = 32
    
    
    Dim I As Integer
    Dim N As Integer
    Dim Ton As Integer
    
    $crystal = 16000000                                         'Quarzfrequenz
    $baud = 9600
    
    Config Adc = Single , Prescaler = Auto                      'Für Tastenabfrage und Spannungsmessung
    
    Config Pina.7 = Input                                       'Für Tastenabfrage
    Porta.7 = 1                                                 'Pullup Widerstand ein
    
    Config Pina.5 = Input
    Config Pina.6 = Input
    Config Pina.2 = Input
    Config Pina.3 = Input
    Config Porta.4 = Output
    
    
    Dim Taste As Byte
    Dim Volt As Single
    ' Für Linieverfolgung
    'Ports für linken Motor
    Config Pinc.6 = Output                                      'Linker Motor Kanal 1
    Config Pinc.7 = Output                                      'Linker Motor Kanal 2
    Config Pind.4 = Output                                      'Linker Motor PWM
    'Ports für rechten Motor
    Config Pinb.0 = Output                                      'Rechter Motor Kanal 1
    Config Pinb.1 = Output                                      'Rechter Motor Kanal 2
    Config Pind.5 = Output                                      'Rechter Motor PWM
    Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
    Pwm1a = 0
    Pwm1b = 0
    Tccr1b = Tccr1b Or &H02                                     'Prescaler = 8
    
    
    
    
    
    I = 0
    Waitms 5000
    Sound Portd.7 , 400 , 450                                   'BEEP
    Sound Portd.7 , 400 , 250                                   'BEEP
    Sound Portd.7 , 400 , 450
    Print
    Print "**** RN-Control 1.4 *****"
    Print "Das neue Experimentier- und Roboterboard"
    Print "Weitere passende Zusatzboards bei www.robotikhardware.de"
    Print "Projekt Ueberwachungsroboter von Andres"
    Print
    Do
    
    
    
    
    
    
    Do
    
       Taste = Bewegungsmelder()
          If Taste <> 0 Then
    
    Select Case Taste
    
            Case 1
             Pwm1a = 0                                          'Linker Motor aus
             Waitms 1000
             Pwm1a = 1023
             Print "Rechts weisse Linie erkannt"
    
            Case 2
             Pwm1b = 0
             Waitms 1000
             Pwm1b = 1023
             Print "Links weisse Linie erkannt"
    
            Case 3
              Waitms 2000
              Porta.4 = 1
              Waitms 800
              Porta.4 = 0
              Waitms 1000
              Porta.4 = 1
              Waitms 500
              Porta.4 = 0
              Waitms 4000
              Porta.4 = 1
              Waitms 500
              Porta.4 = 0
              Waitms 4000
              Porta.4 = 1
              Waitms 500
              Porta.4 = 0
              Print "Person gesichtet und fotografiert"
              Waitms 5000
              Call Linieverfolgung
              End Select
       End If
    
      Waitms 100
    Loop
    
    End
    
    
    
    
    Function Bewegungsmelder()
    Local B As Word
    Local C As Word
    Local We As Word
    Bewegungsmelder = 0
                                           'Diese Unterfunktion überwacht den Raum und folgt Der Linie
    Start Adc
    B = Getadc(5)
    C = Getadc(6)
    We = Getadc(2)
       If We < 1010 Then
       Select Case We
       Case 380 To 470
          Bewegungsmelder = 3
    
       Case 535 To 720
          Bewegungsmelder = 3
       End Select
       End If
       If B < 1010 Then
       Select Case B
       Case 412 To 820
        Bewegungsmelder = 1
       Case Else
    '   Print "Wert anpassen!ADC Wert B=" ; B
       End Select
       End If
    
    
       If C < 1010 Then
       Select Case C
       Case 412 To 820
        Bewegungsmelder = 2
        Print "Wert anpassen!ADC Wert C=" ; C
       End Select
       End If
    
    
    End Function
    
    
    
    Sub Linieverfolgung()
    
      Waitms 1000
    
    
       'Linker Motor ein
       Portc.6 = 1                                              'bestimmt Richtung
       Portc.7 = 0                                              'bestimmt Richtung
       Portd.4 = 1                                              'Linker Motor EIN
    
       'Rechter Motor ein
       Portb.0 = 1                                              'bestimmt Richtung rechter Motor
       Portb.1 = 0                                              'bestimmt Richtung rechter Motor
       Portd.5 = 1                                              'rechter Motor EIN
    
    
       I = 0
       Do
          Pwm1a = I
          Pwm1b = I
          Waitms 10
          I = I + 5
       Loop Until I > 1023
                                                           '
       Waitms 100
    
      Do
       Pwm1a = 1023
       Pwm1b = 1023
      End
    
    End Sub
    
    
    
      Loop
      Loop

    Und hier der Schaltplan zum ansteuern der CN70's
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken schaltplan_883.jpg  

  10. #20
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.11.2004
    Beiträge
    1.693
    Und da sehe ich schon den ersten Fehler. Der ADC-Port ist hochohmig. Bedeutet es fließt kein Strom und es kann keine Spannung abfallen. Die Spannungsmessung muss als Spannungsteiler erfolgen. Du brauchst also noch ein Widerstand vom Analogport zu Masse.

    Ein CNY70 ist ein Optokoppler, oder? Lässt der sich so 'fein' ansprechen, das man verschiedene Spannungen bekommt?

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Berechtigungen

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

Labornetzteil AliExpress