- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: IR-Sensor, PWM, Fehler ?

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    05.09.2006
    Beiträge
    644

    IR-Sensor, PWM, Fehler ?

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo,

    ich bin gerade(schon ein bischen länger) dabei ein Programm zu schreiben, das, wenn der IR-Sensor etwas erkennt der Roboter nach hinten fährt. Mein Problem ist aber, dass er schon beim Start rückwärts fährt. Hier mein Programm, was ist der Fehler ?

    Code:
      $crystal = 8000000
     $regfile = "m8def.dat"
    
      Dim Result As Word
    
      Config Pinb.0 = Output
    Config Pind.7 = Output
    Config Pinb.1 = Output
    Config Pinb.2 = Output
    
    Config Adc = Single , Prescaler = Auto , Reference = Avcc
    
    Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 1
    
    Start Adc
    
    Do
     Compare1a = 255
     Compare1b = 255
     Portb.0 = 1
     Portb.1 = 0
     Portd.7 = 0
     Portb.2 = 1
    
      Result = Getadc(6)
      If Result > 450 Then
     Compare1a = 255
     Compare1b = 255
     Portb.0 = 0
     Portb.1 = 1
     Portd.7 = 1
     Portb.2 = 0
    
     Waitms 1000
     Compare1a = 255
     Compare1b = 255
     Portb.0 = 0
     Portb.1 = 1
     Portd.7 = 1
     Portb.2 = 0
    End If
    
    
    Loop
    
    End
    mfg Jonas

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    01.03.2004
    Ort
    Bielefeld (JA, das gibt es!)
    Alter
    36
    Beiträge
    1.614
    wäre vllt ganz sinnig, wenn du uns auch schreiben könntest um was für einen ir-sensor es sich handeln tut und an welchen ports was hängt ^^

    dankö,
    Martin
    Ich will Microsoft wirklich nicht zerstören. Das wird nur ein gänzlich unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds, Entwickler von Linux

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    05.09.2006
    Beiträge
    644
    hi,

    sorry, hier die Daten:

    Der Sensor ist ein IR-Sensor von Sharp und ist das Model GP2Di2 F 67(das steht auf ihm drauf), er ist an ADC6. Die Motoren sind an pinD7,pinB3 und pinB0, pinB1.

    Viele grüße
    mfg Jonas

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    01.03.2004
    Ort
    Bielefeld (JA, das gibt es!)
    Alter
    36
    Beiträge
    1.614
    bist du sicher dass das GP2DI2 ist? und nicht sowas wie GP2D12? und was heißt die motoren wären auf pinD7 [...] ?? kannst du das bitte nochmal näher erläutern? hast du die motoren über PWM angesteuert? welcher chip liegt dann dazwischen?

    Maddin
    Ich will Microsoft wirklich nicht zerstören. Das wird nur ein gänzlich unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds, Entwickler von Linux

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.12.2005
    Ort
    Nähe Mainz
    Alter
    32
    Beiträge
    3.467
    Problem:
    Du lässt den Bot erst nach vorne fahren, fragst dann den ADC ab. Wenn dieser über 450 ist, dann fährst du rückwärts. Sollte also stimmen.
    bleibt offen:
    Ist der ADC Wert für den Sensor richtig? Welcher Entfernung entsprechen denn 450?

    Probiere es mal so:
    Code:
    $crystal = 8000000
    $regfile = "m8def.dat"
    
    Dim Result As Word
    
    Config Pinb.0 = Output
    Config Pind.7 = Output
    Config Pinb.1 = Output
    Config Pinb.2 = Output
    
    Config Adc = Single , Prescaler = Auto , Reference = Internal
    
    Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 1
    
    Start Adc
    
    Do
     Compare1a = 255
     Compare1b = 255
     Portb.0 = 1
     Portb.1 = 0
     Portd.7 = 0
     Portb.2 = 1
    
     Result = Getadc(6)
     	If Result > 450 Then
     		Compare1a = 255
     		Compare1b = 255
     		Portb.0 = 0
     		Portb.1 = 1
     		Portd.7 = 1
     		Portb.2 = 0
                    wait 1
    	End If
    Loop
    
    End
    Der Abschnitt mit den "waitms 1000" und dem danach ist nicht wichtig. (Das kann man kürzen. Hab ich gemacht.)
    Und auch kannst du wahrscheinlich die interne Referenzspannung verwenden, da die meisten Sensoren maximal 2,6 Volt liefern. So ist du Auflösung genauer.

    jon
    Nice to be back after two years
    www.roboterfreak.de

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    05.09.2006
    Beiträge
    644
    Hi,

    die Motoren werden über PWM angesteuert (mit dem BA6845). Ja, es kann auch eine 1 sein also GP2D12.

    Viele Grüße

    P.s: Werde das Prog von Jon gleich testen in ca. 1h
    mfg Jonas

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    05.09.2006
    Beiträge
    644
    Hi,

    bei dem Prog. von Jon fährt de Roboter nur gerade aus und fährt nicht rückwärts wenn ein Gegenstand da ist.

    Viele Grüße
    mfg Jonas

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.12.2005
    Ort
    Nähe Mainz
    Alter
    32
    Beiträge
    3.467
    Sind die 450 richtig??

    jon
    Nice to be back after two years
    www.roboterfreak.de

  9. #9
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    05.09.2006
    Beiträge
    644
    Hi,

    der Thread kann gelöscht werden, da der michael (von team-iwan) mir per icq das richtige geschickt hat(danke nochmal). Hier das Prog.:

    Code:
    $crystal = 8000000                                          'interne Oszillatorfrequenz (bereits fertig eingestellt)
    $regfile = "m8def.dat"                                      'Definitionsdatei, damit der Compiler weiß, welcher Chip es ist
    
    'AD-Wandler einschalten:
    Config Adc = Single , Prescaler = Auto , Reference = Internal
    Start Adc
    
    'Timer für PWM konfigurieren und einschalten:
    Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 1024
    Start Timer1
    
    Ddrb = &B00000111                                           'Datenrichtungsregister PortB (0=Eingang, 1=Ausgang)
    Ddrd = &B10000000                                           'Datenrichtungsregister PortD (0=Eingang, 1=Ausgang)
    Ddrc = &B00000000
    
    Dim Result As Word
    Dim X As Byte                                               '2 Variablen vom Typ Byte
    Dim Y As Byte                                               'also von 0-255
    Motor1_dir Alias Portd.7                                    'Motor1 Richtung
    Motor2_dir Alias Portb.0                                    'Motor2 Richtung
    
    
    X = 255
    Y = 255
    
    Do                                                          'Schleifenanfang
    Result = Getadc(6)
    
    
    Pwm1a = X                                                   'Motor1 PWM
    Pwm1b = Y                                                   'Motor2 PWM
    
    If Result > 400 Then
    Motor1_dir = 0                                              'Motor1 Richtung wechseln
    Motor2_dir = 1                                              'Motor1 Richtung wechseln
    Else
    Motor1_dir = 1
    Motor2_dir = 1
    End If
    
    Waitms 10                                                   '10ms warten
    
    Loop                                                        'Schleifenende
    
    End
    Viele Grüße
    mfg Jonas

  10. #10
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.12.2005
    Ort
    Nähe Mainz
    Alter
    32
    Beiträge
    3.467
    Ich verstehe das nicht ganz *g*
    Wie soll das mit der Richtungsänderung funktionieren??
    Du stellst ja nur einen Pin pro Motor um. Was ist mit dem anderen Pin los? Da wird ja nirgends im Programm gesagt ob low oder high.
    Sonst: Umständlich geht es auch

    jon
    Nice to be back after two years
    www.roboterfreak.de

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress