- LiTime Speicher und Akkus         
Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 24

Thema: Assembler Motorsteuerung

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.09.2007
    Beiträge
    168

    Assembler Motorsteuerung

    Hallo Leute,

    mit folgendem Code habe ich ja beide Motoren auf vorwärts geschaltet:

    Code:
    [...]
    		 sbi	  DDRD,   DDD4
    		 sbi	  DDRB,   DDB1
    		 sbi	  PORTB,   PORTB1
    		 
    		 sbi	  DDRB,   DDB2
    		 sbi	  PORTB,   PORTB2
    		 sbi	  DDRB,   DDB4
    [...]
    Warum darf ich keinen Port dazuschalten?
    Und wie kann ich zwischen zwei Geschwindigkeiten ohne großen Quelltext wechseln?

    Für den rückwärtsgang brauche ich ja einfach nur D4 auf D5 ändern und B4 auf B5 ändern oder?
    Und für Bremse einfach die D4 und D5 bzw. B4 und B5 schalten oder?

  2. #2
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    37
    Beiträge
    4.062
    was heisst "keinen port dazuschalten"?
    zum ändern der geschiwindigkeit musst du an der stelle was ändern, wo auch die geschwindigkeit definiert ist. wie ich das sehe, hat du die motoren-pwm vollständig umgangen, kann das sein? normalerweise werden die motoren pwm-gesteuert.
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.09.2007
    Beiträge
    168
    PWM?! ...
    Was ist das?

    Mit den Ports meinte ich folgendes:
    Wenn ich dann noch sbi PORTD, PORTD4 benutze dann läuft garnichts mehr ...
    Deswegen die Frage nach den Ports ...

  4. #4
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    37
    Beiträge
    4.062
    PWM bedeutet PulsWeitenModulation. das lässt sich etwa folgendermaßen kurz beschreiben:

    ein signal mit konstanter frequenz (!!!) wird an die motoren gelegt. wenn dieses signal 50% high und 50% low ist, bekommen die motoren zur hälfte der zeit strom und zur hälfte der zeit keinen strom. da sie recht träge sind, und die frequenz sehr hoch, merkt man das nicht, es sieht so aus als würden die motoren mit halber kraft fahren.

    um schneller zu fahren, wird das tastsignal verändert, z.B. 80% high und 20% low. die motoren fahren mit 80%iger kraft.

    um langsamer zu fahren, andersrum: etwa 20% high und 80% low. macht 20% der höchstgecshwindigkiet.

    diese pwm kann der AVR intern generieren - allerdings nicht ganz unkompliziert. du kannst sehen, wie das funktioniert, indem du dir die beiden funktionen MotorSpeed() und MotorDir() aus der asuro-library mal ansiehst.

    mit deiner ansteuerung von oben bekommen die motoren entweder dauerstrom (100%) oder keinen strom (0%), deshalb ist die geschwindigkeit auf diese weise nicht regelbar.

    weitere infos: http://de.wikipedia.org/wiki/PWM

    pwms werden recht oft verwendet: zum steuern von motoren, zum dimmen von leds (die ja eben eigentlich nur ein oder ausgecshaltet werden können, aber durch die pwm "gedimmt" werden), und auch oft übersehen in der steuerung der mikrowelle: 3 sekunden an, 3 sekunden aus = 50% der leistung. ist halt ne seeehr langsame frequenz, aber das prinzip ist das gleiche.

    was du mit den ports meinst, verstehe ich leider nicht.
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.09.2007
    Beiträge
    168
    Aber das ist doch nicht mit Assembler kombinierbar oder?

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    Hallo, warum soll PWM nicht mit asm kombinierbar sein ?

    Schau mal hier

    Das Programm ganz unten auf der Seite, aber vorsicht, fremde (und nach ein paar Wochen) auch eigene asm Programme zu lesen bereitet Schmerzen

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  7. #7
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    37
    Beiträge
    4.062
    im endeffekt wird der C-code, den man tippt, vom compiler auch nur in assembler umgesetzt, welcher dass für den prozesser assembliert wird...
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.09.2007
    Beiträge
    168
    @izaseba:
    Danke für den Tipp ...
    Jetzt kann ich nur sagen: WAS???
    Erklärst du mir das mal alles ...
    Wir sind fleißige Besucher von deiner Seite ...
    Ich, meine Klasse und der Lehrer ... (ja ich weiß der Esel zuerst!)
    Fehlen mir nicht dann noch Teile?
    Code:
    .include "motoren.asm"
    .include "LED.asm"


    @damaltor:
    Ja schon, aber wir sollen im Moment NUR in Assembler schreiben ...

  9. #9
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    Wir sind fleißige Besucher von deiner Seite ...
    Danke für die Blumen, so was tut gut, dann mache ich das alles doch nicht um sonst...
    Es gibt auch schon wieder ein Update, leider noch Offline, vielleicht lade es am WE hoch.
    Fehlen mir nicht dann noch Teile?
    Wo Du das sagst... Ups, na wo sind sie denn?
    Ich kann morgen gucken, wo ich sie habe, aber so wild ist es nicht.
    Ich habe fast jede Zeile kommentiert, schaue mal :
    Code:
    ;PWM einstellen 
       ldi tmp,(1<<WGM10) | (1<<COM1A1) | (1<<COM1B1) 
       out TCCR1A,tmp 
       ldi tmp,(1<<CS11) 
       out TCCR1B,tmp
    damit wird Timer1 in PWM Mode eingestellt und auf die Ausgänge geschaltet.
    Code:
    ; DDR für Motor Rechts und Statusled green 
       ldi tmp,(1<<PB0) |(1<<PB1) | (1<<PB2) | (1<<PB5) | (1<<PB4) 
       out DDRB,tmp 
       ;DDR für Motor Links,Statusled red, LED für Linienverfolgung und LEDs 
       ;Odometrie und Backleds 
       ldi tmp,(1<<PD2) | (1<<PD4) | (1<<PD5) | (1<<PD6) | (1<<PD7) 
       out DDRD,tmp
    Das dürfte wohl klar sein...
    Code:
    sbi PORTB,fwd 
       sbi PORTD,fwd
    damit wird der Vorwärtsgang eingelegt (schaue bei equ nach fwd)
    Wenn Du jetzt OCR1A und OCR1B Register mit Werten zwischen 0-255 belegst fährt er naja bei 0 wohl nicht, aber je größer die Werte um so schneller...

    Gruß Sebastian

    EDIT:
    Sagmal, was gibt es heute für Schulen, warum durfte ich damals keinen Asuro programmieren
    Ne, ich durfte noch einen SPS mit solch einem blödem Handprogrammiergerät, wo man eben 4 Zeilen Code gesehen hat beglücken Habt Ihr das gut ...
    Software is like s e x: its better when its free.
    Linus Torvald

  10. #10
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.09.2007
    Beiträge
    168
    Wie kommst du eigentlich dazu, dass jetzt zu programmieren?

    Kann ich deine Codebeispiele einfach in meinen Code einfügen oder wie sieht das aus?
    Mir reicht ja schon ein einfacher Code für Vorwärts und Rückwärtsfahren für den Asuro, denn ich habe keinen Bock deinen großen Code wieder denen vorzustellen, denn ich muss das immer dann ...

    Und das macht besonders Spaß, wenn man nicht alles weiß ...

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

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

LiTime Speicher und Akkus