Welcher Controller/ Modul(e) für Motorsteuerung und Kamera, Akku?

  • Hallo Steve


    Danke dir für die Ausführung.


    Wie ich das verstanden habe, habe ich als Test mal so im Code umgesetzt:



    Getestet habe ich den Code noch nicht, werde ich aber mit nem terminal oder LCD Testen.


    Meintest du es so?


    Natürlich wird neben dem PWM in jeder IF Abfrage noch ein Ausgangs-Pin hinzu kommen welche dann auf 1 oder 0 steht.
    Messwert1 bedeutet sowas wie Motor 1, oder Linke Seite Antrieb.
    Die Rechte seite oder Messwert2 habe ich jetzt nicht dazu geschrieben, da diese Parallel aussehen würde.


    Sind da meine Gedankwege schon so richtig?


    Grüße und danke


    Denis

  • Ein Programm egal ob mit C oder Bascom geschrieben macht immer ein Schritt nach dem anderen, am Ende angekommen fängt er von vorne wieder an.


    Rechne mal was passiert wenn dein Messwert1 127,128, 129, 250, 255 ist.
    Bei 127 ist die erste Abfrage wahr und dein Messwert wird (*2,0078 ) auf 256,9 erhöht, passt das überhaupt in ein "word". Das zweite Problem, bei 127 wolltest du eigentlich das "Stop1" ausgeführt wird, was nicht eintreffen wird, da du mit jedem Messwert1 größer gleich 127 durch die Weiterverrechnung immer über 127 bleibst. In meinem Beispiel habe ich deshalb eine Hilfsvariable genommen. Somit bleibt der Messwert unberührt.
    Deine dritte Abfrage beinhaltet auch ein "=126" du fragst schon in der ersten Abfrage nach größer gleich 126, dann musst du bei der anderen nur noch kleiner 126 fragen, sonst wären ja beide Abfragen wahr bei einem Wert von 126, das willst du ja nicht. ( Ok, bei dir wird durch die Verrechung bei der ersten Abfrage die dritte ausgeschlossen).


    Bevor du also auf dem µC testet, prüf einfach was passiert wenn du eine Hand voll Werte durch dein Programm jagst, mit Stift und Papier (oder Hirn ;) ) Dabei nimmst du Werte um die interessanten Grenzen herum und einpaar zufällige. Passt das grob, dann simulierst/ testest du auf dem µC.

  • Hallo Steve und Basti


    Also erstmal, hatte ich mir Steve's vorherigen Post noch mal ganz in Ruhe durch gelesen, dann wusste ich was ich machen musste.
    Dann nach dem zweiten jetzt, hat mich die Erkenntnis im Nachhinein fast erschlagen:



    Was Ihr da seht, ist der Codel auf 8 Bit und an einem LCD ausgegeben.
    Der macht jetzt genau das was er soll, wie ich es vorher beschrieben hatte.
    (Fehlt aber jetzt noch die Poti Kalibrierung, sodass wirklich jeder Teilbereich ein Messergebnis von 128 Bit liefert...)


    Nur habe ich jetzt nicht die zwei Bits in der "Mitte" (bei 8 Bit waren das Bit 127 und 128) zum Stoppen, bzw Positionserkennung genutzt, sondern einfach mit in die Anfrage eingefügt.
    Ich müsste X oder Y nur noch mit einer 8 Bit PWM gleich stellen und der Motor würde sich entsprechend drehen.


    Habe mir das SEDU mal schnell zum testen genommen.


    Jetzt habe ich deinen Post erst gelesen Basti.
    Leider kann ich jetzt gerade nicht behaupten, das ich wissen würde, was du genau meinst...
    ...Stehe gerade da etwas auf dem Schlauch.


    Meintest du, ich sollte das ADC Messergebnis auf 16 Bit hoch rechnen, und damit arbeiten, wie ich es im Code gemacht habe?


    Danke euch und Grüße


    Denis.


    PS: Wer hätte ein Beispiel/Idee, wie ich es besser machen könnte?!


    EDIT:


    So sieht dann die ganze Motor Steuerung aus:


  • floating point , Gleitkomma, in einem Post vor meinem hattest du noch den Messwert mal 2,009 oder so nehmen wollen, man versucht so was zu vermeiden, das es auf einem µC länger braucht.
    Sein Vorschlag war statt einer 8-bit Variable eine 16-bit Variable zu nehmen und nur die obersten 8-bit zu nutzen. Da du das nicht mehr machst, entfällt das, musst dir kein Kopf mehr drüber machen.


    Nur ne Anmerkung:
    Ein Trick gibts noch, statt mit 2 oder 4 oder 8 zu multiplizieren oder zu teilen, kann man die bits um 1 oder 2 oder 3 nach rechts oder links verschieben.
    z.b. 0100 binär = 4 dezimal, teilt man das durch 2 bekommt man 0010 binär = 2 dezimal, verschiebt man dagegen die bits um 1 nach rechts hat man auch mit 2 geteilt.
    z.b. unter C
    unsigned char a = 0b00000100;
    a >> 1; wäre um eins nach rechts geschoben bzw. durch 2 geteilt ;) ( in a steht dann 0b00000010)


    egal, solang dein Code das macht was du willst ist alles bestens