- 12V Akku mit 280 Ah bauen         
Seite 1 von 4 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 32

Thema: RNB FRA 1.22 oder RN Control über I2C ansprechen

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    09.04.2005
    Ort
    47608 Geldern
    Alter
    67
    Beiträge
    55

    RNB FRA 1.22 oder RN Control über I2C ansprechen

    Anzeige

    Powerstation Test
    Hallo Roboterspezialisten!
    Hat jemand schon Kenntnisse darüber, wie ich meine RNB-FRA 1.22 Roboterkarte über den I2C-Bus von der RN-Control (oder umgekehrt)ansprechen kann? Oder wie ich die Karten über den I2C-Adapter vom PC aus ansprechen kann - bzw. ganz einfach: Hat die RNB-FRA eine I2C-Slave adresse? Bei der Beschreibung der RN-Control ist so ein I2C-Netz angedeutet und es sah alles ganz einfach aus....
    Ich möchte die RNB-FRA mit bestimmten Schrittfolgen für die Schrittmotoren programmieren und diese dann per I2C-Befehl abrufen.
    Für Hilfe bin ich sehr dankbar!!! =D>
    Ulli

    Wenn jemand sucht, hat er einen Blick nur für das, was er sucht - alles andere entgeht ihm (vielleicht auch die Lösung)! (frei nach Hermann Hesse - Siddharta)

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    09.04.2005
    Ort
    47608 Geldern
    Alter
    67
    Beiträge
    55
    Hallo Leute,
    nach stöbern im Forum habe ich die Möglichkeit entdeckt, die Kommunikation der beiden Kareten über einen RS232 Ringbus zu bewerkstelligen. Ich Suche derzeit noch nach einer Möglichkeit mit Bascom die Schnittstelle Interrupt-gesteuert abzufragen - so wie mit dem Befehl "OnCom" in VB.
    Grüße
    Ulli

    Wenn jemand sucht, hat er einen Blick nur für das, was er sucht - alles andere entgeht ihm (vielleicht auch die Lösung)! (frei nach Hermann Hesse - Siddharta)

  3. #3
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Hi, Dottore, durch die Angabe
    config serialin=buffered, size=nn
    mach Bascom den Input mit Interrupt, mit der Frage
    if ischarwaiting() = 1 then
    databyte = inkey()
    end if
    kann man das dann pseudo-asynchron lesen
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    09.04.2005
    Ort
    47608 Geldern
    Alter
    67
    Beiträge
    55
    Danke PicNick,
    reicht eigentlich nicht auch:

    Enable Interrupts
    Enable Int0 (Pin0, Port D für RS232 ?)
    On Int0 Subroutine
    End

    Sub Subroutine()
    if gerät=ich then
    Tu was
    else
    schicke weiter zum nächsten Gerät
    end if
    Return
    end

    MfG,
    Ulli.
    Ulli

    Wenn jemand sucht, hat er einen Blick nur für das, was er sucht - alles andere entgeht ihm (vielleicht auch die Lösung)! (frei nach Hermann Hesse - Siddharta)

  5. #5
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Als Meta-Code ist das ja auch richtig, es gehört aber noch einiges Bit-Gefummel dazu, und sowas delegiert man besser, ind diesem Falle an den AVR u. den BasCom, die beiden sind bezahlt und sollen nun was tun.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    09.04.2005
    Ort
    47608 Geldern
    Alter
    67
    Beiträge
    55
    Hallo PicNic,
    danke für deine Unterstützung!
    "die beiden sind bezahlt und sollen nun was tun" ist genau richtig!
    Werde am Weekend mal die beiden Versionen durchtesten.
    Viele Grüße
    Ulli

    Wenn jemand sucht, hat er einen Blick nur für das, was er sucht - alles andere entgeht ihm (vielleicht auch die Lösung)! (frei nach Hermann Hesse - Siddharta)

  7. #7
    Administrator Robotik Visionär Avatar von Frank
    Registriert seit
    30.10.2003
    Beiträge
    5.116
    Blog-Einträge
    1
    Man kann auch Interrupt Auslösen wenn Daten über RS232 empfangen wird. Ich glaub irgendwo in der Bascom Hilfe hatte ich da ein Beispiel gesehen. Kann aber auch sein das es im Kühnel Buch war, bin mir nicht ganz sicher.
    Aber ich würde auch die Verfahrensweise von PicNick empfehlen. Man muss dann halt immer wenn man Zeit hat schaun ob schon ein paar Zeichen angekommen sind. Abe rwegen den Buffer ist das nicht sehr zeitkritisch. Im Prinzip läufts auch per Interrupt, nur man hat damit nix zu tun weils Bascom intern macht.


    Gruß Frank

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    09.04.2005
    Ort
    47608 Geldern
    Alter
    67
    Beiträge
    55
    Hallo Frank,
    der oben von mir zitierte Code mit "Enable Interrupts" und "Enable INT0" ist aus der Bascom-Hilfe.
    Vielen Dank für die Unterstützung!
    Herzliche Grüße!
    Ulli

    Wenn jemand sucht, hat er einen Blick nur für das, was er sucht - alles andere entgeht ihm (vielleicht auch die Lösung)! (frei nach Hermann Hesse - Siddharta)

  9. #9
    Administrator Robotik Visionär Avatar von Frank
    Registriert seit
    30.10.2003
    Beiträge
    5.116
    Blog-Einträge
    1
    Hi,

    ich meinte mehr dieses konkrete Demo-Beispiel. Ist zwar für anderen Controller aber müsste eigentlich auch mit Mega gehen

    Code:
    '--------------------------------------------------------------------
    '                      SERINT.BAS
    '                  (c) 1999-2003 MCS Electronics
    '  serial interrupt example for AVR
    ' also look at CONFIG SERIALIN for buffered input routines
    '--------------------------------------------------------------------
    '$regfile = "8535def.dat"
    Const Cmaxchar = 20                                         'number of characters
    
    Dim B As Bit                                                'a flag for signalling a received character
    Dim Bc As Byte                                              'byte counter
    Dim Buf As String * Cmaxchar                                'serial buffer
    Dim D As Byte
    
    'Buf = Space(20)
    'unremark line above for the MID() function in the ISR
    'we need to fill the buffer with spaces otherwise it will contain garbage
    
    Print "Start"
    
    On Urxc Rec_isr                                             'define serial receive ISR
    Enable Urxc                                                 'enable receive isr
    
    
    
    Enable Interrupts                                           'enable interrupts to occur
    
    Do
      If B = 1 Then                                             'we received something
         Disable Serial
         Print Buf                                              'print buffer
         Print Bc                                               'print character counter
    
    
         'now check for buffer full
         If Bc = Cmaxchar Then                                  'buffer full
            Buf = ""                                            'clear
            Bc = 0                                              'rest character counter
         End If
    
         Reset B                                                'reset receive flag
         Enable Serial
      End If
    Loop
    
    Rec_isr:
      Print "*"
      If Bc < Cmaxchar Then                                     'does it fit into the buffer?
         Incr Bc                                                'increase buffer counter
    
    
         If Udr = 13 Then                                       'return?
            Buf = Buf + Chr(0)
            Bc = Cmaxchar
         Else
            Buf = Buf + Chr(udr)                                'add to buffer
         End If
    
    
        ' Mid(buf , Bc , 1) = Udr
        'unremark line above and remark the line with Chr() to place
        'the character into a certain position
         'B = 1                                                    'set flag
      End If
      B = 1                                                     'set flag
    Return

  10. #10
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Hallo Frank !
    Ich halte das für overkill und würd es nicht empfehlen.
    die Config serialin=buffer .... - Angabe generiert bei einer ausreichenden Buffergröße eine tadellose, asynchrone Ringbuffer-routine. Mit dem "ischarwaiting" werden write- und read pointer verglichen, bei "=" wird null, sonst 1 zurückgegeben. dadurch kann ein folgendes inkey() auch für transparente daten (inclusive &00) verwendet werden.
    Beim Beispiel ist das "print" in der ISR auch nur akzeptabel, wenn gleichzeitig config serialout= ( output ringbuffer) verwendet wird.
    Blocking functions in einer ISR sind absolut "pfui"
    Das Einzige, was man sich vorstellen könnte, wäre eine Terminator-definition, dh "On CR gosub .. " oder " on fill=70 gosub..." (overflow)
    Weil aber der Buffer u. die Pointer eh definiert sind, kann man das auch selbst machen
    (sich periodisch um seine Kinderchen zu kümmern, ist im Grunde die einzige Aufgabe der Haupt Do..LOOP Schleife)
    *schnauf*
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

Seite 1 von 4 123 ... LetzteLetzte

Berechtigungen

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

Solar Speicher und Akkus Tests