-
        

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 16

Thema: IR Hindernisserkennung

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    17.08.2005
    Alter
    33
    Beiträge
    685

    IR Hindernisserkennung

    Anzeige

    Hallo, ich habe ein Problem mit rc5 (ja, das altbekannte Thema

    Also ich will mit einer IR-Diode (SFH415) senden, in einem Programm funktioniert und mit einem IR-Empfänger (SFH5110-36) empfangen (was auch in einem Programm funktioniert.

    Habe den Empfänger mal mit einer rc5 Fernbedienung getestet und es funktioniert.

    Code:
      $regfile = "m32def.dat"
     ' $framesize = 32
      '$swstack = 32
      '$hwstack = 32
      $crystal = 16000000
      $baud = 9600
      $lib "mcsbyte.lbx"
    
    Config Pina.7 = Input                                       'out-pin vom ir empfänger
    Config Pinc.3 = Output                                      'Status-LED
    Config Rc5 = Pina.7
    Porta.7 = 1
    
    Enable Interrupts
    Dim Adress As Byte , Command As Byte
    
    Do
    
    
       Getrc5(adress , Command)
       Waitms 150
       If Adress < 255 Then
       Print "Adress: " ; Adress ; "Command: " ; Command ; " - "
       End If
    
       If Command = 2 Then                                      'wenn die Taste 2 gedrückt, dann Status-LED an
       Portc.3 = 1
       Elseif Command = 255 Then
       portc.3=0
       End If
    
    Loop
    End

    Will ich aber beide Befehle in einem Programm abarbeiten, akzeptiert Bascom den rc5send Befehl nicht:

    Code:
      $regfile = "m32def.dat"
     ' $framesize = 32
      '$swstack = 32
      '$hwstack = 32
      $crystal = 16000000
      $baud = 9600
      $lib "mcsbyte.lbx"
    
    Config Pind.5 = Output                                      'ir-led
    Config Pina.7 = Input                                       'out-pin vom ir empfänger
    Config Pinc.3 = Output                                      'Status-LED 1
    Config Pinc.4 = Output                                      'Status-LED 2
    Config Rc5 = Pina.7
    Porta.7 = 1
    
    Enable Interrupts
    Dim Togbit As Byte , Adress As Byte , Command As Byte
    
    
    Command = 12
    Togbit = 0
    Address = 0
    
    
    
    Do
    Waitms 500
       Rc5send Togbit , Address , Command
    
    
       Getrc5(adress , Command)
       Waitms 150
       If Adress < 255 Then
       Print "Adress: " ; Adress ; "Command: " ; Command ; " - "
       End If
    
       If Command = 2 Then                                      ' wenn Taste 2 gedrückt, dann Status-LED 1 an
       Portc.3 = 1
       Elseif Command = 255 Then
       Portc.3 = 0
       End If
    
       If Command = 12 Then                                     'wenn command 12, dann Status-LED 2 an
       Portc.4 = 1
       Elseif Command = 255 Then
       Portc.4 = 0
       End If
    Loop
    End
    Besagt die Zeile command = 12 vor do eigentlich, was gesendet wird?

    Könnt ihr mir weiterhelfen?

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    17.08.2005
    Alter
    33
    Beiträge
    685
    Habe gerade ein Fehler erkannt (Bascom hat einmal address und das andere mal adress geschrieben).

    Also der neue Code ist:
    Code:
     $regfile = "m32def.dat"
     ' $framesize = 32
      '$swstack = 32
      '$hwstack = 32
      $crystal = 16000000
      $baud = 9600
      $lib "mcsbyte.lbx"
    
    Config Pind.5 = Output
    Config Pina.7 = Input                                       'out-pin vom ir empfänger
    Config Pinc.3 = Output
    Config Rc5 = Pina.7
    Porta.7 = 1
    
    
    Enable Interrupts
    Dim Togbit As Byte , Adress As Byte , Command As Byte
    
    Command = 6
    Togbit = 0
    Adress = 0
    
    Do
    
       Waitms 150
       Rc5send Togbit , Adress , Command
       Waitms 150
    
       Getrc5(adress , Command)
       Waitms 150
       If Adress < 255 Then
       Print "Adress: " ; Adress ; "Command: " ; Command ; " - "
       End If
    
       If Command < 255 Then
       Portc.3 = 1
       Wait 1
       Elseif Command = 255 Then
       Portc.3 = 0
       End If
    
    Loop
    End
    Dieser schein in sich schlüssig zu sein, jedoch habe ich ein Problem beim senden.
    Wenn ich die Stromversorgung des Atmel´s ausschalte, leuchtet die IR-LED ununterbrochen (ist +5V ---> A LED K -----> 220 Ohm > pind.5).
    Wenn die Stromversorgung des Atmel's an ist, flackert die IR-LED periodisch (so, dass man es mit einer trägen Digicam sehen kann - das Flackern, also kann das best. nicht die "Codierung" sein).

    Werde die IR-LED mal über einen Transistor ansteuern, mal schauen, was rauskommt.
    Vielleicht seht ihr ja noch ein Fehler, denn Bascom beschreibt die Schaltung ja wie oben

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    17.08.2005
    Alter
    33
    Beiträge
    685
    Morgen.

    Kann mir denn keiner ein Tipp geben?

    Das mit dem Transistor funktioniert tadellos, die IR.LED leuchtet jetzt, wenn diese es soll.
    Ich kann nebenher mit dem Empfänger die Daten einer externen Quelle auslesen, aber eben nicht die, die vom Atmel selbst kommen.

    Aber ist es überhaupt möglich mit einem Atmel Daten über die IR.LED zu senden und diese! gleichzeitig zu empfangen (dies wäre ja Multitasking, was nicht funktioniert), oder irre ich mich?

    Danke für eure Hilfe.

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    17.08.2005
    Alter
    33
    Beiträge
    685
    Kann mir keiner weiterhelfen?
    Ist es überhaupt möglich, dieses mit einem Controller zu lösen (Empfang evtl. über adc)?

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    20.06.2004
    Beiträge
    1.941
    Aber ist es überhaupt möglich mit einem Atmel Daten über die IR.LED zu senden und diese! gleichzeitig zu empfangen (dies wäre ja Multitasking, was nicht funktioniert), oder irre ich mich?
    nein......................du irrst nicht.

    1 AVR zum senden-------------1 AVR zum empfangen

    mfg pebisoft

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    17.08.2005
    Alter
    33
    Beiträge
    685
    Hallo,
    ich habe meinen Roboter jetzt halbwegs fertig.
    Vorne habe ich eine IR-Bake gebastelt.
    Über portd.5 wird ein rc5code zu einem Transistor geschickt (mit 4,7kohm Widerstand). Dieser schaltet alle IR-Dioden auf Masse. Die ganzen 5 IR-Dioden sind über ein Vorwiderstand direkt an VCC und die Kathode jeweils an einem Transistor (werden mit seperaten port auf den anderen Transistor vom Portd.5 gelegt).
    Dies funktioniert, es kommt ein Signal an (ich kann auch für jede einezelne IR-Diode einen seperaten Code senden, wenn diese durch den Transistor auf Masse gelegt ist).

    Aber: Wie kann ich die Sendeleistung verringern? Ich habe schon mit den Vorwiderständen rumprobiert (von der IR-Diode und von den Empfängern), aber keine zufriedenstellende Lösung erhalten.
    (IR-Diode = SFH 415 , Empfänger = SFH 5110-36
    Könnt ihr mir helfen?

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    16.05.2005
    Beiträge
    734
    Hallo Reeper,

    die Sendeleistung kann man entweder über den Vorwiderstand oder über das Tastverhältnis einstellen. Hast Du schon meinen Beitrag zur IR-Hinderniserkennung gesehen. Vielleicht kannst Du da was übernehmen, es werden auch die gleichen Bauteile verwendet.

    Aber warum sendest Du einen Code? Warum nicht nur den 36kHz-Träger?

    Wenn Du weniger Leistung brauchst, dann sollten auch die Transistoren überflüssig sein und die Dioden direkt vom AVR angesteuert werden können.

    Gruß Waste

  8. #8
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    17.08.2005
    Alter
    33
    Beiträge
    685
    Hallo waste

    habe heute meine ganze Bake nochmal neu konstruiert, sie funktioniert jetzt mit einem 220Ohm Widerstand für die IR-Dioden und 470Ohm für die Empfänger (werde für die IR-Dioden aber noch höhere ptobieren).

    Die Transistoren verwende ich, da ich alle 5 IR-Dioden über einen einzigen Port steuere (das wollte ich diesen nicht zutrauen, wenn alle ab und zu gleichzeitig leuchten sollen, reichen doch die 20mA des Ports nicht).
    Mit den Transistoren schalte ich jeweils nur eine IR-Diode auf Masse (zB. der Portc.2 ist mit dem Transistor verbunden, den schalte ich auf high und somit diese eine IR-Diode auf Masse und schicke nun über portd.5 (der wiederum an einen Transistor hängt und die Verbindung von allen Transistoren - Emitter letzendlich mit GND verbindet, einen rc5Code).

    Den Code verwende ich, damit ich weiß, wo sich das Hinderniss ungefähr befindet.
    Doch wie erzeuge ich mit Bascom nur ein 36khz Trägersignal (das wäre interessant)?

    Ach ja, deinen genialen Beitrag habe ich auch für den Asuro genutzt (jedenfalls Hardware - mäßig). Aber programmieren mit C fällt mir noch sehr schwer, da ich überhaupt keine Vorkenntnisse im Programmieren habe (außer CNC \/ ) und mich erst seit August mit Robotik beschäftige.
    Bascom ist für mich als Anfänger logischer und intuitiv.

  9. #9
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    16.05.2005
    Beiträge
    734
    Hallo Reeper,

    so ganz ist mir Deine Schaltung noch nicht klar. Kannst Du mal einen Schaltplan zeichnen?

    Ich kenn mich mit Bascom nicht aus, aber damit sollte auch ein 36kHz-Signal mit einstellbarem Tastverhältnis (PWM) möglich sein. Vielleicht kann Dir da ein Bascom-Experte weiterhelfen.

    Gruß Waste

  10. #10
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    17.08.2005
    Alter
    33
    Beiträge
    685
    Ich habe mal ein Teil des Schaltplans gezeichnet:



    Habe mittlerweile 860 Ohm Vorwiderstände für die IR-Dioden genommen (probiere aber weiterhin versch.).

    Ein Programm zum testen habe ich hier:

    Code:
      $regfile = "m32def.dat"
     ' $framesize = 32
      '$swstack = 32
      '$hwstack = 32
      $crystal = 16000000
      $baud = 9600
    
    Config Pind.5 = Output
    Config Pinc.2 = Output
    Config Pinc.3 = Output
    Config Pinc.4 = Output
    Config Pinc.5 = Output
    Config Pinc.6 = Output
    Config Pinb.0 = Output
    Config Pinb.1 = Output
    
    Dim Togbit As Byte
    Dim Command1 As Byte , Command2 As Byte , Command3 As Byte , Command4 As Byte , Command5 As Byte
    Dim Address As Byte
    
    Command1 = 11
    Command2 = 12
    Command3 = 13
    Command4 = 14
    Command5 = 15
    Togbit = 0
    Address = 1
    
    Do
    
       Portb.0 = 1
       Portb.1 = 1
    
       Portc.6 = 1
       Print "1"
       Rc5send Togbit , Address , Command1
       Portc.6 = 0
       Portc.5 = 1
       Print "2"
       Rc5send Togbit , Address , Command2
       Portc.5 = 0
       Portc.4 = 1
       Print "3"
       Rc5send Togbit , Address , Command3
       Portc.4 = 0
       Portc.3 = 1
       Print "4"
       Rc5send Togbit , Address , Command4
       Portc.3 = 0
       Portc.2 = 1
       Print "5"
       Rc5send Togbit , Address , Command5
       Portc.2 = 0
    
    Loop
    
    End
    Der andere Atmel 32 empfängt die Daten und verwertet diese entsprechend dem gespeicherten Programm, benutze also 2 Controller.

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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