-         

Ergebnis 1 bis 1 von 1

Thema: Servo über I2C (SD21) mit dem Atmega8 ansteurn

  1. #1
    Benutzer Stammmitglied Avatar von Wombatz
    Registriert seit
    10.06.2011
    Beiträge
    70
    Blog-Einträge
    1

    Servo über I2C (SD21) mit dem Atmega8 ansteurn

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    Hallo zusammen,

    jetzt kommt von mir mal etwas produktives. Ich habe mich immer gefreut, wenn man gerade als Anfänger Beispiele kopieren kann und diese dann ausprobieren kann.
    Da ich mir nun länger an der I2C-Geschichte den Kopf zerbrechen musste und nun glaube ich den Durchbruch geschafft habe, will ich denen die es interessieren könnte einen Servo mit dem Servoboard SD21 über den Atmega8 (Über die USART-Schnittstelle) zu steuern, die Arbeit vereinfachten.

    Arbeitsutensilien:

    Atmega8
    SD21 Servoboard
    Servo (an der Schnittstelle 1 des SD21 angeschlossen).

    Ziel:

    Also wenn ich über das Terminalprogramm (z.B.Realterm) eine 1 sende, soll der Servo den Linksanschlag anfahren.
    Wenn ich die 2 sende, dann soll er den Rechtsanschlag anfahren. Wenn ich eine 3 bis Unendlich sende, dann fährt er die Mitte an.

    Ich habe versucht alles im Code zu beschriften...Nun hoffe ich, dass es einem bei seiner "Studie" hilft.

    Viel Spaß damit

    Code:
    '*******************************************************************************
    '*          Die LED Portb.0 soll blinken, wenn eine 1 über die USART           *
    '*          gesendet wird, wird ein Interrupt ausgerufen, der in ein           *
    '*          vorgegebenes Label (Linksanschlag) springt.                        *
    '*          Wird eine 2 gesendet, wird das Label Rechtsanschlag ange-          *
    '*          sprungen. Hier dreht der Motor entweder nach rechts oder           *
    '*          links.                                                             *
    '*******************************************************************************
    
    
    $regfile = "m8def.dat"
    
    $crystal = 3686400                                          'Quarzfrequenz
    $baud = 9600                                                'Baud für USART
    
    '************** I2C ************************************************************
    
    Config Scl = Portc.5                                        'Ports fuer IIC-Bus
    Config Sda = Portc.4
    
    Const Servo_adr = &HC2                                      'I2C Adress Servo Controller
    
    Dim Tnr As Byte                                             'Servoanzahl
    Dim Lsb As Byte                                             'Lowbyte
    Dim Msb As Byte                                             'Highbyte
    Dim Posit As Word                                           'Position
    
    I2cinit
    
    '************** USART **********************************************************
    
    On Urxc Anschlag                                            'Interruptroutine
    
    Dim I As Byte                                               'I für UDR Variable
    
    Enable Urxc                                                 'Interrupt einschalten
    
    Enable Interrupts                                           'Interrupt Global freigeben
    
    '*************** Portkonfiguration *********************************************
    
    Tnr = 1                                                     ' number of servo  (0-x)
    
    Ddrb = &B00000001                                           'Portb.0 Eingang
    
    '************** Hauptschleife **************************************************
    Do
    
    Toggle Portb.0                                              'LED blinken
    Wait 1                                                      'jede Sekunde
    
    Loop
    
    '************** Label Anschlag *************************************************
    
    Anschlag:
         Print "Empfangen"                                      '"Empfangen" in Terminal ausgeben
         I = Udr                                                'UDR auslesen
         If I = "1" Then                                        'Wenn I = 1 dann Linksanschlag
         Goto Linksanschlag
         Elseif I = "2" Then                                    'Wenn I = 2 dann Rechtsanschlag
         Goto Rechtsanschlag
         Else
         Goto Mitte
         End If
    Return
    
    '************** Label Linksanschlag ********************************************
    
    Linksanschlag:
          Print "Links"
          Posit = 800                                           ' position (1000 - 2000)
          Lsb = Low(posit)
          Msb = High(posit)
          I2cstart
          I2cwbyte Servo_adr                                    ' serv CTRL I2C Addr
          I2cwbyte 0                                            ' servo nr
          I2cwbyte 50                                           ' speed
          I2cwbyte Lsb                                          ' lsb of position
          I2cwbyte Msb                                          ' Msb of position
          I2cstop
    
    Return
    
    '************* Label Rechtsanschlag ********************************************
    
    Rechtsanschlag:
          Print "Rechts"
          Posit = 2300                                           ' position (1000 - 2000)
          Lsb = Low(posit)
          Msb = High(posit)
          I2cstart
          I2cwbyte Servo_adr                                    ' serv CTRL I2C Addr
          I2cwbyte 0                                            ' servo nr
          I2cwbyte 50                                           ' speed
          I2cwbyte Lsb                                          ' lsb of position
          I2cwbyte Msb                                          ' Msb of position
          I2cstop
    
    Return
    
    '************* Label Mitte *****************************************************
    
    Mitte:
          Print "Mitte"
          Posit = 1500                                          ' position (1000 - 2000)
          Lsb = Low(posit)
          Msb = High(posit)
          I2cstart
          I2cwbyte Servo_adr                                    ' serv CTRL I2C Addr
          I2cwbyte 0                                            ' servo nr
          I2cwbyte 50                                           ' speed
          I2cwbyte Lsb                                          ' lsb of position
          I2cwbyte Msb                                          ' Msb of position
          I2cstop
    
    Return
    Geändert von radbruch (07.10.2011 um 20:12 Uhr) Grund: Code-Tag eingefügt

Ähnliche Themen

  1. SD21 servo programm befehl speicherung problem
    Von michel999 im Forum Schaltungen und Boards der Projektseite Mikrocontroller-Elektronik.de
    Antworten: 0
    Letzter Beitrag: 17.01.2011, 17:13
  2. 24Servos per PWM mit einem Pic16F690 ansteurn
    Von El_Salvador im Forum PIC Controller
    Antworten: 9
    Letzter Beitrag: 04.01.2008, 04:01
  3. RP6 mit Servo Modul SD21
    Von Mex78 im Forum Robby RP6
    Antworten: 3
    Letzter Beitrag: 08.12.2007, 11:32
  4. Servoansteuerung von PC nach SD21 über Java
    Von Morbius im Forum PC-, Pocket PC, Tablet PC, Smartphone oder Notebook
    Antworten: 16
    Letzter Beitrag: 17.03.2005, 14:52
  5. Servoansteuerung von PC nach SD21 über Java
    Von Morbius im Forum PC-, Pocket PC, Tablet PC, Smartphone oder Notebook
    Antworten: 3
    Letzter Beitrag: 05.03.2005, 21:50

Berechtigungen

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