Seite 35 von 39 ErsteErste ... 253334353637 ... LetzteLetzte
Ergebnis 341 bis 350 von 381
  1. #341
    Registriert seit
    09.01.2016
    Beiträge
    1.425

    Standard

    Zitat Zitat von haribo Beitrag anzeigen
    gibt es einen C-befehl der die loop frequenz steuert? oder muss man dazu irgendwie millis hochzählen bis es einem passt?
    also um die sampels definiert auszuführen

    (nem steueranfäger sag ich: schau nur alle 10s oder seltener auf den kompass, halt lieber die wolken fest...)
    Hallo,

    ja, die Baudrate des i2c.

    Bsp.: i2c 9600 Baud (9600 Datentelegramme/s)
    Die 9600 verteilen sich auf die Anzahl der Achsen und der Sensoren.
    Ein Kompass-Datum kann auch zwei Telegramme belegen, wegen der Datenlänge bzw. Genauigkeit
    Zusammenaddier erhälst du eine "Summe".

    Dann teilst du die 9600/"Summe" und erhälst die
    - Abtastrate (sample rate) . Als
    - Grenzfrequenz
    nehm man 0,1 Hz, iss später leicht korrigierbar.


    Peter

  2. #342
    Registriert seit
    12.02.2009
    Beiträge
    2.655

    Standard

    so nun bin ich bei PWM angelangt und hab mal wieder ne frage
    PWM braucht einen INT wert zwischen 0-255, ein analoger eingang liefert auch INT werte von 0-1023

    also muss man ~durch 4 teilen, wähle ich als teiler auch eine INT variable dann wäre das ergebnis ggfls keine ganzzahl mehr,
    in einem beispiel wird im teiler ein (.0) angehängt, ist das eine vereinbarung damit dass das ergebnis ne ganzzahl bleibt? ich finde nichts dazu?

    hell = analogRead(A1) * (255 / 1023.0); // an A1 hängt ein poti
    analogWrite(LED2, hell);

    es funktioniert so, aber ich kann es irgendwie nicht nachvolziehen/verstehen

    haribo

  3. #343
    Registriert seit
    07.10.2012
    Ort
    Mittelfranken, weit vom Wasser
    Beiträge
    2.618

    Standard

    Hallo haribo, ja Du ist auf der richtigen Spur.
    Wenn Du eine Varable als Integer deklarierst, werden in jedem Fall sämtliche Nachkommazahlen abgeschnitten.
    Weil schon am Anfang der Magnetwert als Int gelesen wird, macht es wenig Sinn, zwischendurch mit float zu rechnen, wie hier schon angeregt wurde, ganz abgesehen davon, daß float mehr Speicherplatz braucht, und das Rechnen damit mehr Zeit.

    Wenn Du für das PWM den Wertebereich überschreitest,wird alles was drüber oder drunter ist, einfach abgeschnitten. Ich finde es ist jedoch für die Übersichtlichkeit besser, keine unsinnigen Werte zuzulassen.

    Funktioniert Dein Kompaß mittlerweile?
    Viele Grüße
    nw
    Πάντα ῥεῖ (*)
    * Man kann nicht zweimal auf dem selben Fluß fahren.

  4. #344
    Registriert seit
    09.01.2016
    Beiträge
    1.425

    Standard

    Zitat Zitat von haribo Beitrag anzeigen
    so nun bin ich bei PWM angelangt und hab mal wieder ne frage
    PWM braucht einen INT wert zwischen 0-255, ein analoger eingang liefert auch INT werte von 0-1023
    Hallo,

    dazu nimmt man Schiebebefehle, bei /4 sind es zwei Bits nach rechts.


    Peter

  5. #345
    Registriert seit
    12.02.2009
    Beiträge
    2.655

    Standard

    ok, und wie geht das mit den schiebebefehlen? ist eine verschiebung einer INT-zahl immer auch eine INT-zahl ?



    ich würde trotzdem gerne etwas verstehen wie eine ganzzahl gerechnet wird (bzw wann es sich umwandelt in eine float) wenn das divisionsergebnis nicht mehr ganzzahlig ist

    hell = analogRead(A1) * (255 / 1023); // an A1 hängt ein poti der in mittelstellung 506 anzeigt
    offenbar wird erst innerhalb der klammer ausgerechnet und diese zu null abgeschnitten und dann sind ---> hell = 506 * 0 = 0

    und bei
    hell = analogRead(A1) * (255 / 1023.0); // mit punkt null an einer zahl, an A1 hängt ein poti der in mittelstellung 506 anzeigt

    und im zweiten fall ist es in der klammer eine kommazahl und es wird erst nach der multiplikation abgeschnitten
    ---> 506 * 0,249= 126,12 ---> hell = 126

    das ist schon mal wieder ziemlich verwirrend

  6. #346
    Registriert seit
    07.10.2012
    Ort
    Mittelfranken, weit vom Wasser
    Beiträge
    2.618

    Standard

    Hallo Haribo, Schiebebefehle machen Sinn, wenn Du ein Programm komplett oder wenigstens in Teilen in Maschinensprache schreibst. Prinzipiell geht das mit dem Arduino auch, macht aber alles unnötig kompliziert. Das ist sicher was für fortgeschrittenes Programmieren, was zumindest bei meinem AP ganz bewußt nicht vorgesehen ist. Im Arduino-IDE gibt es keine Schiebebefehle. Es gibt zwar "Compound operators", aber ich halte das schon für grenzwertig.
    Ich nehme an, Du hast da eine Eingangsgleichspannung per Poti mit LED+ PWM kombiniert. Da wirst Du sehen, daß die LED Außerhalb des PWM-Bereichs einfach nicht mehr reagiert, der Nutzbereich des Potis wird eingeschränkt.
    Bring die Ausgangsspannung des Potis durch eine schlichte Multiplikation mit dem Wertebereich des PWM in Einklang und gut is.

    Das Poti wirst Du auch für den Ruderlagegeber nutzen. Bereite Dich darauf vor, daß Du eben Durch so eine Multiplikation den Wertebereich des Potis, der durch die Ruderbewegung von Anschlag bis Anschlag entsteht, erst später anpassen kannst, wenn Du das Ding am Schiff installierst.

    Sehe auch vor, daß das für die Begrenzung des Ruderausschlags genutzt wird, damit Dir das Ruder nicht full power in den Anschlag fährt!
    Viele Grüße
    nw

    PS: Doch es gibt schon Schiebebefehle, aber man sollte sie sehr vorsichtig handhaben, weil dann immer alle Bits in einem Byte verschoben werden. Man muß sich dann sehr sicher sein, welche Funktionen die einzelnen Bits haben, und wohin und woher da geschoben wird!
    Geändert von sucher (10.05.2020 um 11:03 Uhr) Grund: Ergänzug
    Πάντα ῥεῖ (*)
    * Man kann nicht zweimal auf dem selben Fluß fahren.

  7. #347
    Registriert seit
    09.01.2016
    Beiträge
    1.425

    Standard

    Zitat Zitat von haribo Beitrag anzeigen
    ok, und wie geht das mit den schiebebefehlen? ist eine verschiebung einer INT-zahl immer auch eine INT-zahl
    Hallo,

    alles in "C":

    var_256 = var_1024 >> 2;

    gleichfalls
    var_1024 = var_1024 >> 2; die neue var_1024 ist tatsächlich nur 8 bit-ig.

    gleichfalls
    var_1024 = var_1024 / 4;

    gleichfalls
    var_256 = var_1024 / 4;

    Schau mal unter Shift Operatoren.
    https://de.wikipedia.org/wiki/Bitweiser_Operator
    Eigentlich findet man alles, wirklich alles im Netz.
    Dein Vorzeichen muß gesondert ausgewertet werden, das Vorzeichen polt den Motortreiber um.

    Ich habe noch mal genauer nachgesehen, atmel:
    x <<= 2;// Multiplikation 4
    x >>= 2;// Division 4


    Peter
    Geändert von K.Lauer (10.05.2020 um 11:56 Uhr)

  8. #348
    Registriert seit
    09.01.2016
    Beiträge
    1.425

    Standard

    Zitat Zitat von K.Lauer Beitrag anzeigen
    ...

    Ich habe noch mal genauer nachgesehen, atmel:
    x <<= 2;// Multiplikation 4
    x >>= 2;// Division 4
    Hallo,

    und bedenke:
    var_1028 ist "uint16_t", während
    var_254 "uint8_t" ist.
    https://www.avrfreaks.net/forum/conv...uint16t-uint8t

    Merke: Jede Funktion braucht eine Deklaration, in welchem Zahlensystem gerechnet wird, das ist dringende Grundlage.

    Und, ansonsten, siehe "type cast".


    Peter
    Geändert von K.Lauer (10.05.2020 um 12:48 Uhr)

  9. #349
    Registriert seit
    12.02.2009
    Beiträge
    2.655

    Standard

    moin,
    testbeitrag

    ich hatte drei wochen forums zugangsprobleme, die jetzt wohl behoben sind...

    inzwischen hab ich nen MPU-9250 angeschlossen bekommen und kann auch schon die Acc und Gyro daten benutzen
    bzw mit den beschleunigungen die kleine drift im gyro (roll+pitch) ausgleichen

    bin also guten mutes irgendwie auch die zugänge zu den magnet-daten zu finden... um dann noch yaw zu stabilisieren

    laut sucher hätte ich damit dann die hälfte geschafft... mal sehn
    haribo

  10. #350
    Registriert seit
    07.10.2012
    Ort
    Mittelfranken, weit vom Wasser
    Beiträge
    2.618

    Standard

    Hallo haribo, nimm das Programm zum Scannen des I2C- bus ( https://playground.arduino.cc/Main/I2cScanner/ ). Identifiziere die I2c-Adressen anhand der Reaktionen der angezeigten Daten. Du mußt damit rechnen, daß diese Adressen NICHT identisch sind mit denen aus den vielen Programmen, die zur Auswertung von Kompaß-Daten im Netz herumschwirren.
    Nimm das Kompaßprogramm Deiner Wahl, ändere darin die I2C-Adressen auf die Deines Sensors, und dann solltest Du im Display oder im Serial Monitor einen passablen Kompaßkurs dargestellt haben. Du wirst sehen, es geht weder schnell noch einfach.
    Erst dann hast Du die 50%

    Sei zufrieden wenn es einigermaßen stimmt, wirklich linear wird es nicht sein, vor allem wenn Du einen billigen, nicht kompensierten Sensor hast. Es dürfen vor allem keine Schleifen oder Rekursionen darin sein.

    Ein nächster Schritt wäre das Motormanagement, also PWM, Fehlerbehandlung (Überstrom), Ruderlageauswertung etc. Da gibt es meiner Erfahrung nach wenig Beispiele im Netz. Hast Du schon Deinen Leistungstreiber?
    Viel Glück
    nw
    Πάντα ῥεῖ (*)
    * Man kann nicht zweimal auf dem selben Fluß fahren.

Ähnliche Themen

  1. Open Source Navigation
    Von macjena im Forum Technik & Elektronik
    Antworten: 5
    Letzter Beitrag: 22.03.2011, 12:51
  2. Rettet Jeantex - Gründung einer Genossenschaft
    Von Wladimir im Forum Fragen, Antworten & Diskussionen
    Antworten: 0
    Letzter Beitrag: 01.03.2010, 21:06
  3. Die böse Open Source Community
    Von Contrast33 im Forum Klönschnack
    Antworten: 2
    Letzter Beitrag: 19.05.2009, 20:58
  4. Wer hat Erfahrung mit GARMIN MAP-SOURCE: world map
    Von rolf im Forum Technik & Elektronik
    Antworten: 1
    Letzter Beitrag: 29.05.2001, 16:52

Berechtigungen

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