- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 10 von 26

Thema: Laser-Positionsscanner

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #16
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    31.05.2009
    Beiträge
    270
    Und nun die gesamte Slave-Software:
    (Scanner_106.BAS)

    Scanner (Slave) -Register :
    (ScannerRegister.zip)


    Im Anhang sind die Slave-Register aufgelistet. Die Register 1..9 sind zum Schreiben, die Register 10…19 zum Lesen vorgesehen.
    Wichtig ist das schreiben der Parameter AB und BC (Baken-Abstand) nach einem Reset. Ohne diese Werte kommt nur X=0 und Y=0 zurück.


    Der Master (Roboter) steuert den Scanner (z.B. für Initialisieren) so an:
    - Register 5 (AB) = 480 schreiben 'AB=480cm
    - Register 6 (BC) = 560 schreiben 'BC=560cm
    - Register 1 schreiben 'Initialisieren (Motor ein / Laser ein / Orientieren)

    Code:
    Scanner_Initialisierung:
    call Scanner_readregister(10 , 0)
    
    if Scanner_Status.3 = 0 then
       T_lob = low(ab)                                                              'T_ab>SLAVE
       T_hib = high(ab)
       call Scanner_writeregister(5 , T_lob , T_hib)
       T_lob = low(bc)                                                              'T_bc>SLAVE
       T_hib = high(bc)
       call Scanner_writeregister(6 , T_lob , T_hib)
    end if
     
    if Turm_Status.0 = 0 then
       call Scanner_writeregister(2 , 70 , 0)                                         'Turm Geschw.
       waitms 500                                                                                     ' !!! Sicherheit !!!
       call Scanner_writeregister(3 , 1 , 0)                                           'Laser ein
       call Scanner_writeregister(1 , 0 , 0)                                           'Initialisieren
    end if
    Return
    Nun läuft der Scanner und liefert (hoffentlich) die gewünschten Daten.
    Der Master (Roboter) bekommt die Werte nach dem Handshake (z.B. ATMega256 >PCint an PINK.7):
    Code:
    Isr_pcint2:
    If pink.7 = 1 Then                                                                      
       call Scanner_readregister(10 , 0)                                               'Status
       call Scanner_readregister(11 , 0)                                               'Pos. X
       call Scanner_readregister(12 , 0)                                               'Pos. Y
       call Scanner_readregister(14 , 0)                                               'Winkel2
       call Scanner_readregister(16 , 0)                                               'Baken
       call Scanner_readregister(17 , 0)                                               'Impulse
     
       Winkel_gemessen_ Scanner = Winkel2 / 100
       Pcifr.pcif2 = 1                                                              
    End If
    Return
    Der Master (Roboter) steuert den Scanner (z.B. für AUS) so an:
    Code:
    Scanner _ausschalten:
    Timeout = 0
    do
       call Scanner _writeregister(3 , 0 , 0)                                           ' Scanner -Laser AUS
       call Scanner _writeregister(2 , 0 , 0)                                           ' Scanner -Motor AUS
       call Scanner _readregister(10 , 0)                                                ' Status
       if Timeout > 60 then
          Print  "TIMEOUT Scanner ausschalten !!!"
          Print  " Scanner _status=" ; Scanner _status
          exit do
       end if
    loop until Scanner _status.5 = 0 and Scanner _status.4 = 0
    Return
    ….und wieder EIN:

    Code:
    Scanner _einschalten:
    Timeout = 0
    do
       call Scanner_writeregister(2 , 70 , 0)                                    ' Scanner -Motor EIN
       waitms 500                                                                                                   ' !!! Sicherheit !!!
       call Turm_writeregister(3 , 1 , 0)                                          ' Scanner -Laser EIN
       call Turm_readregister(10 , 0)
       if Timeout > 60 then
          Print  "TIMEOUT Scanner  einschalten !!!"
          Print  " Scanner_status=" ; Scanner_status
          exit do
       end if
    loop until Scanner_status.5 = 1 and Scanner_status.4 = 1
    Return
    Der TWI-Code:

    Code:
    Sub Scanner_writeregister(byval Befehl as Byte , byval Wert_L as Byte , byval Wert_H as Byte )           
       I2cstart
       I2cwbyte Scanner_slaveid                                       'D0
       I2cwbyte Befehl                                                     '1….9
       I2cwbyte Wert_L
       I2cwbyte Wert_H
       I2cstop
    End Sub
    Code:
    Sub Scanner_readregister(byval ScannerRegister as Byte , byval ScannerWert as Byte)
       I2cstart
       I2cwbyte Scanner_slavewrite                                'D0
       I2cwbyte ScannerRegister                                     '10……19
       I2cwbyte ScannerWert                                         'für künftige Erweiterungen
       I2cstop
       I2cstart
       I2cwbyte Scanner_slaveread                                  'D1
       I2crbyte Hib , Ack
       I2crbyte Lob , Nack
       I2cstop
       Select case ScannerRegister
          case 10
             Scanner_Status = Makeint(lob , Hib)
          case 11
             X_gemessen = Makeint(lob , Hib)
          case 12
             Y_gemessen = Makeint(lob , Hib)
          case 13
             Winkel1 = Makeint(lob , Hib)
          case 14
             Winkel2 = Makeint(lob , Hib)
          case 15
             Winkel3 = Makeint(lob , Hib)
          case 16
             Baken = Makeint(lob , Hib)
          case 17
             Baken_Impulse = Makeint(lob , Hib)
       end select
    End Sub
    Ich hoffe, ich habe nichts vergessen...............
    Damit ist das Projekt (vorerst) abgeschlossen und ich wünsche Euch viel Erfolg damit.
    Angehängte Dateien Angehängte Dateien
    mfG
    Willi

Ähnliche Themen

  1. 25W Laser
    Von Schottky im Forum Elektronik
    Antworten: 25
    Letzter Beitrag: 05.11.2009, 15:45
  2. Laser Abstandsmessung
    Von filth im Forum Sensoren / Sensorik
    Antworten: 22
    Letzter Beitrag: 02.06.2009, 18:05
  3. Laser?
    Von oratus sum im Forum Sensoren / Sensorik
    Antworten: 28
    Letzter Beitrag: 11.01.2007, 13:26
  4. Laser Sensoren? Abtasten und erkennen mit Laser? Möglich ?
    Von PsychoElvis64 im Forum Sensoren / Sensorik
    Antworten: 16
    Letzter Beitrag: 11.10.2006, 18:29
  5. Laser-Datenübertragung
    Von Murus im Forum Vorstellungen+Bilder von fertigen Projekten/Bots
    Antworten: 19
    Letzter Beitrag: 28.01.2006, 20:31

Berechtigungen

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

12V Akku bauen