- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 14 von 14

Thema: Roboter hexapod servo ansteuerung

  1. #11
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.11.2004
    Beiträge
    451
    Anzeige

    Praxistest und DIY Projekte
    So ich hab jetzt mal den code rausgesucht, aber noch nicht editiert.

    Das ganze ist die noch nicht ganz so elegante lösung ohne Timer. Das Programm läuft folgender masen ab:

    Ausgabe1:
    - an Portb werden alle pins high geschaltet.
    - es wird 1ms gewartet (kann auch über timer gemacht werden)
    - danach werden die servo werte nacheinander abgeglichen und bei gleichheit der entsprechende pin ausgeschaltet (es wird erster Register "A1" geschrieben und dann am ende eines durchlaufes A1 nach portb geschoben)
    - wenn das ganze 255mal durchgelaufen ist, springt er aus dem unterprogramm

    bei Ausgabe2 ist es das gleiche nur mit einem anderen port.

    Code:
    ;-------------------------------------------------------------------
    ;UP zur ansteuerung der Servos, wird später durch Interrups ersetzt.
    ;-------------------------------------------------------------------
    
    Ausgabe1:
    		clr X1
    		ser A1
    		cli
    		out Portb,A1
    		ldi R30,low(Servo1)
    		ldi R31,high(Servo1)
    		ldd var1,z+3
    		ldd var2,z+4
    		ldd var3,z+5
    		ldi R30,low(Servo2)
    		ldi R31,high(Servo2)
    		ldd var4,z+3
    		ldd var5,z+4
    		ldd var6,z+5
    Servoinit:
    		ldi B1,250
    loop1:	ldi B2,6
    loop:	dec B2
    		brne loop
    		dec B1
    		brne loop1
    
    Se1:	
    		cp X1,var1
    		brne wait1
    		subi A1,0b00000001
    		nop
    		rjmp Se2
    wait1:	
    		nop
    		nop
    		nop
    Se2:	
    		cp X1,var2
    		brne wait2
    		subi A1,0b00000010
    		nop
    		rjmp se3
    wait2:		
    		nop
    		nop
    		nop				
    Se3:	
    		cp X1,var3
    		brne wait3
    		subi A1,0b00000100
    		nop
    		rjmp se4
    wait3:
    		nop
    		nop
    		nop
    
    Se4:	
    		cp X1,var4
    		brne wait4
    		subi A1,0b00001000
    		nop
    		rjmp se5
    wait4:
    		nop
    		nop
    		nop
    
    Se5:	
    		cp X1,var5
    		brne wait5
    		subi A1,0b00010000
    		nop
    		rjmp se6
    wait5:
    		nop
    		nop
    		nop
    Se6:	
    		cp X1,var6
    		brne wait6
    		subi A1,0b00100000
    		nop
    		rjmp se7
    wait6:
    		nop
    		nop
    		nop
    Se7:	
    		nop
    		out portb,A1
    		nop
    		ser A2
    		cp X1,A2
    		brne se8
    		sei
    ret
    se8:	
    		inc X1
    		rjmp Se1
    
    ;==================================================
    
    Ausgabe2:
    		clr X1
    		ser A1
    		cli
    		out Portd,A1
    		ldi R30,low(Servo3)
    		ldi R31,high(Servo3)
    		ldd var1,z+3
    		ldd var2,z+4
    		ldd var3,z+5
    		ldi R30,low(Servo4)
    		ldi R31,high(Servo4)
    		ldd var4,z+3
    		ldd var5,z+4
    		ldd var6,z+5
    		rjmp Servoinit2
    Servoinit2:
    		ldi B1,250
    loop12:	ldi B2,6
    loop2:	dec B2
    		brne loop2
    		dec B1
    		brne loop12
    
    
    Se12:	
    		cp X1,var1
    		brne wait12
    		subi A1,0b00000100
    		nop
    		rjmp Se22
    wait12:	
    		nop
    		nop
    		nop
    Se22:	
    		cp X1,var2
    		brne wait22
    		subi A1,0b00001000
    		nop
    		rjmp se32
    wait22:		
    		nop
    		nop
    		nop				
    Se32:	
    		cp X1,var3
    		brne wait32
    		subi A1,0b00010000
    		nop
    		rjmp se42
    wait32:
    		nop
    		nop
    		nop
    
    Se42:	
    		cp X1,var4
    		brne wait42
    		subi A1,0b00100000
    		nop
    		rjmp se52
    wait42:
    		nop
    		nop
    		nop
    
    Se52:	
    		cp X1,var5
    		brne wait52
    		subi A1,0b01000000
    		nop
    		rjmp se62
    wait52:
    		nop
    		nop
    		nop
    Se62:	
    		cp X1,var6
    		brne wait62
    		subi A1,0b10000000
    		nop
    		rjmp se72
    wait62:
    		nop
    		nop
    		nop
    Se72:	
    		nop
    		out portd,A1
    		nop
    		ser A2
    		cp X1,A2
    		brne se82
    		sei
    ret
    se82:	
    		inc X1
    		rjmp Se12
    hier noch die variablen:
    Code:
    .def A1   = R16		;Bearbeitungs Register
    .def A2   = R17		;Bearbeitungs Register
    .def B1   = R18		;Bearbeitungs Register
    .def B2   = R19		;Bearbeitungs Register
    
    .def Heben= R20
    
    .def var1 = R7		;frei zur verfügung stehende Variablen
    .def Var2 = R8		;frei zur verfügung stehende Variablen
    .def Var3 = R21		;frei zur verfügung stehende Variablen
    .def Var4 = R22		;frei zur verfügung stehende Variablen
    .def Var5 = R23		;frei zur verfügung stehende Variablen
    .def Var6 = R24		;frei zur verfügung stehende Variablen
    
    .DSEG
    
    Servo1: .BYTE 10 ;X,Y,Z,a,ß,y,Werte umdrehen(YY>128,Bein in der Luft,-,-,-,a,ß,y),Abweichung(a,ß,y)
    
    Servo2: .BYTE 10 ;X,Y,Z,a,ß,y,Werte umdrehen(YY>128,Bein in der Luft,-,-,-,a,ß,y),Abweichung(a,ß,y)
    
    Servo3: .BYTE 10 ;X,Y,Z,a,ß,y,Werte umdrehen(YY>128,Bein in der Luft,-,-,-,a,ß,y),Abweichung(a,ß,y)
    
    Servo4:	.BYTE 10 ;X,Y,Z,a,ß,y,Werte umdrehen(YY>128,Bein in der Luft,-,-,-,a,ß,y),Abweichung(a,ß,y)
    
    GlVar:	.byte 5  ;X,Y,Z,a,Globale Flags(Bein in der Luft, )
    
    .CSEG
    eine Initialisierung ist nicht notwendig, es müssen nur die ports als ausgänge geschalten werden.

    Der code bietet noch viele möglichkeiten zur optimierung, aber ich denke mal, das er dir schonmal ein wenig weiterhelfen wird.

    Es werden auch nur jeweils 6 Servos angesteuert, da ich nicht mehr benötigte ist aber auch auf 8 Servos leicht erweiterbar, muss man nur schaun, dass ein durchlauf nicht länger als 1/255ms ist.[/code]

  2. #12
    Neuer Benutzer Öfters hier
    Registriert seit
    08.12.2009
    Ort
    Berlin
    Alter
    38
    Beiträge
    6
    Danke für eure hilfe. @spiekerchris danke für den link Ich hab mir schon fast alle Hexapodbeiträge komplett durchgelesen und die guten Links gemerkt *g*. Ich muss jetzt in praktischen Tests eure Ideen aufgreifen und dann werde ich mich hilfesuchend an euch wenden .

    @Robin dein Quellcode würde mich auf jedenfall interessieren. An irgendwas muss man sich am Anfang halt klammern

    mfg zwiebel

    *edit*
    PS: ah da hast du schneller gepostet Super in Assembler wollte ich das auch programmieren. ich werd den code am wochenende bei einer Tasse Milch nachvollziehen -.- vllt find ich ein paar Schwachstellen

  3. #13
    Erfahrener Benutzer Fleißiges Mitglied Avatar von High Light
    Registriert seit
    21.08.2009
    Ort
    Baden Württemberg
    Beiträge
    142
    Hallo zusammen,

    ich bin auch im Moment damit beschäftigt einen Hexabot
    zubauen.
    Ich habe für jeden Fuß einen Kontroller und einen als Master
    der sagt wo es lang geht. Alles Atmega88.
    Kommunikation wird über I2C stattfinden und programmiert
    wird er mit Bascom.

    Was ich noch dazu sagen muss, habe erst heute meine Paltinen
    fertig gelötet, also auch noch nicht viel ausgetestet.
    Spannung stimmt und die Grundprogrammierung funktioniert.
    I2C habe ich noch nicht getestet.
    Aufgebaut wurde alles auf drei Streifenrasterplatinen. (Billiger als welche zuätzen!)

    Gruß High Light

  4. #14
    Neuer Benutzer Öfters hier
    Registriert seit
    08.12.2009
    Ort
    Berlin
    Alter
    38
    Beiträge
    6
    oi aber für jeden Fuss einen Controller find ich zu viel. Ich kann dir gleich sagen Bascom ist zu langsam. Spätestens bei der ik wirst du es merken. Zumindest sagen das die Roboprofis hier. Ich freunde mich lieber glei mit Assembler an. -.-

    Bei sovielen Controllern muss sehr viel über I2C kommuniziert werden. Sonst kommen sich deine Füsse in die Quere etc.. Aber du hast dir sicher was dabei gedacht und Erfahrung damit. Der "Marvin" Erbauer hat ja auch so begonnen.
    -> http://www.vreal.de
    Doch inzwischen verwendet er nur einen controller .

    Ich bau auch alles auf Lochraster und wenn ich mit dem Ergebniss zufrieden bin wird geätzt und in smd gebaut. Also nie Ich freu mich schon meinem robo ins leben zu rufen und wenn er dann erstmal in die schule geht lol .

    mfg zwiebel

Seite 2 von 2 ErsteErste 12

Berechtigungen

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

LiFePO4 Speicher Test