- LiFePO4 Speicher Test         
Ergebnis 1 bis 10 von 22

Thema: Pan & Tilt Videoschiene. Mein erstes Projekt. Wie fange ich an?

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Einstein Avatar von Geistesblitz
    Registriert seit
    15.03.2011
    Ort
    Dresden
    Alter
    37
    Beiträge
    1.937
    Hmm, wie lässt du denn jetzt die Schrittsignale generieren? Normalerweise würde man da einen Timer nehmen und dem dann mittels einer Variablen die Zeit vorgeben, bis er wieder ausgelöst wird. Variable wird kleiner -> Timer löst häufiger aus, Variable wird größer -> Timer löst weniger häufig aus. In der ISR dann nur den Step-Ausgang kurz an- und wieder ausschalten. So kannst du dann die Geschwindigkeit des Steppers steuern.
    Hier mal, wie es in einem meiner Codes steht:
    Code:
    Isr1:
       Load Timer1 , Zeit
       Porta.1 = 1
       Porta.3 = 1
       Porta.5 = 1
       Waitus 10
       Porta.1 = 0
       Porta.3 = 0
       Porta.5 = 0
    Return
    Wobei bei mir drei Schrittmotoren gleich angesteuert werden, die Step-Ausgänge befinden sich auf Porta.1, Porta.3 und Porta.5. Zeit hab ich bei mir einfach die Variable genannt, die für die ISR zuständig ist. Durch Load wird das gleich so verrechnet, dass die ISR erst in Zeit*Prescale Taktzyklen ausgelöst wird. Wenn beide Motoren unterschiedlich eingestellt werden sollen, wirst du wohl zwei Timer brauchen. Lies dir am besten mal den Abschnitt zu Timern im Tutorial durch, das wird da alles gut erklärt.

    Ansonsten sehen deine If-Verzweigungen noch ein wenig wirr aus. Mach am besten mal die Einrückungen ordentlich, der Übersicht zuliebe. Und wenn hinter dem else nix steht, kannst du es auch weglassen. Und elseif verwenden, das ist günstiger als zwei ähnliche ifs hintereinander.
    Der erste Teil in der Hauptschleife lässt sich beispielsweise so zusammenfassen:
    Code:
    if W1=0 then
       Portd.6 = 1
    else
       Portd.6 = 0
    end if
    Wenn du eine Variable mehrfach abfragst, kannst du auch eine Case-Struktur verwenden, macht sich besser als zig ifs hintereinander.
    AI - Artificial Idiocy

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    26.12.2013
    Beiträge
    38
    Also erst mal muss ich einen ganz großen Danke aussprechen, das du dir die Zeit nimmst für mich.

    Dann zu dem Takt. Ich weis auch nicht, wo er aktuell her kommt, ich denke durch die Schleife, die immer wieder abgearbeitet wird. Aktuell dreht sich der Motor mit ca. 30-40Hz.
    Zum testen für die Richtung und die Stufen, war das ok, aber das muss noch irgendwie weg.

    Mehr Probleme habe ich mit den Timern und die Einbindung in die Schaltung.
    Gehen wir erst mal von einem Motor mit 2 Richtungen und 2 Geschwindigkeiten aus.

    Das mit der Richtung läuft ja schon ganz gut. Nun kommt aber die Geschwindigkeit.
    Wie kann ich:
    A. Sagen, das der Timer seine Geschwindigkeit/Takt ändern soll?
    oder
    B. einen bzw dann 2 Timer in die Schaltung mit z.B. einer AND Anweisung einbinden.
    Code:
    If W1 =< 1 Or W1 => 100 AND Timer1 = 1  Then
    Portc.3 = 1
    Darüber habe ich nichts gefunden.

    Aus der SPS Programierung kenne ich noch die Merker. Damit konnte man schön solche zusammenhänge realisieren.


    Zur Struktur. Sorry, ich Kopiere/Schiebe/Lösche/Klammer,.. so viel rum. Da fällt das echt schwer. Aber ich werde mir mühe geben, das ordentlicher zu halten.


    Nachtrag. Ich glaube ich habe da was gefunden. Das gucke ich mir morgen mal in Ruhe an.

    Code:
    
    $regfile = "m8def.dat"
    $framesize = 24
    $swstack = 32
    $hwstack = 32
    $crystal = 1000000
    
    
    
    Config Pinb.1 = Output
    
    Dim Timer1reload As Word
    Timer1reload = 1
    Config Timer1 = Timer , Prescale = 64
    Timer1 = Timer1reload
    Enable Timer1
    On Timer1 Timer1_isr
    Enable Interrupts
    
    
    &#39;TimerRelaod Werte mit "AVR Timer.exe" berechnet
    
    Const Akku_leer = 63193 ****** ca. 0,3 Sekunden
    Const Akku_halb_voll = 60849 &#39;ca. 0,6 Sekunden
    Const Akku_voll = 49911 ****** ca. 1 Sek
    
    Dim Adc_wert As Word
    
    Do
    
    ADC_wert = Getadc(3) ****** Beispiel
    
    Select Case ADC_wert
    
    Case 800 to 1024
    Timer1reload = Akku_voll
    
    Case 700 to 799
    Timer1reload = Akku_halb_voll
    
    Case 0 to 699
    Timer1reload = Akku_leer
    
    End select
    
    Loop
    
    End
    
    Timer1_isr:
    Timer1 = Timer1reload
    Toggle Pinb.1 ****** PIN anpassen
    Return
    Geändert von AtomicIX (31.10.2014 um 00:35 Uhr)

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von Geistesblitz
    Registriert seit
    15.03.2011
    Ort
    Dresden
    Alter
    37
    Beiträge
    1.937
    Nein, so funktioniert das nicht, du fragst den Timer nicht ab, sondern der Timer selber löst eine kleine Unterfunktion (ISR, Interrupt Service Routine) aus, in der du dann deine Pins umschalten kannst. Du musst dir das so vorstellen, dass du einmal deine Hauptschleife hast, in der allgemeine Sachen drin stehen und die sich immer wiederholt, wenn sie abgearbeitet wurde -> Abarbeitungszeit ist nicht konsistent, da durch abweichende Abläufe die Zeit verändert werden kann (zB. in einer If-Verzweigung wird nur ein Pin abgefragt und im Else-Zweig kommen eine komplexe berechnung und Ausgabe auf einem Display -> dauert viel länger). Die Timer sind nun so, dass man ihnen eine Zahl vorgeben kann, welche die Anzahl an Taktzyklen ist, die der Timer zählt, bis er sich wieder zurücksetzt und die ISR auslöst. Dadurch wird das, was in der ISR ist, in einem festen Intervall ausgeführt. In der ISR lässt sich dann der der Zählwert wiederrum verändern, wodurch man auch Einfluss auf das Intervall hat. Die ISR an sich sollte eher kurz gehalten werden, alles, was länger braucht, gehört in die Hauptschleife. So bekommt man mit den Timern eine ziemlich gute zeitliche Kontrolle und kann so recht präzise zeitliche Abläufe koordinieren. Und guck dir wirklich mal den Artikel im Tutoril zu den Timern an, anscheinend hast du das nicht gemacht, sonst wär dir das mittlerweile klar.
    AI - Artificial Idiocy

Ähnliche Themen

  1. Pan Tilt Head
    Von SmokeT im Forum Vorstellung+Bilder+Ideen zu geplanten eigenen Projekten/Bots
    Antworten: 8
    Letzter Beitrag: 23.05.2014, 22:30
  2. Verkaufe Pan & Tilt - Kopf mit Servos
    Von kellerkind im Forum Kaufen, Verkaufen, Tauschen, Suchen
    Antworten: 1
    Letzter Beitrag: 14.11.2013, 18:04
  3. Verkaufe Räumung:US-Sensor, IR-Sensor,Displays,MTreiber,Servorboard, Pan&Tilt Köpfe
    Von kellerkind im Forum Kaufen, Verkaufen, Tauschen, Suchen
    Antworten: 3
    Letzter Beitrag: 18.06.2012, 17:42
  4. Projekt - wie fange ich am besten an :)
    Von Tobias Vonau im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 8
    Letzter Beitrag: 05.03.2012, 17:55
  5. Wie erstelle ich mein erstes Programm?
    Von Fabian1992 im Forum Asuro
    Antworten: 2
    Letzter Beitrag: 08.03.2009, 15:35

Berechtigungen

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

LiFePO4 Speicher Test