- 12V Akku mit 280 Ah bauen         
Seite 3 von 3 ErsteErste 123
Ergebnis 21 bis 26 von 26

Thema: Kompassmodul mit USART-Schnittstelle auswerten

  1. #21
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    24.04.2004
    Ort
    Karlsruhe
    Alter
    45
    Beiträge
    1.277
    Anzeige

    Praxistest und DIY Projekte
    Hi Markus,

    ohne das Problem und das Modul zu kennen, würde ich dir empfehlen die UART interruptgesteuert abzurufen.
    Und zwar so lange bis der CR (Carriage Return) ankommt, also 0x13.

    Oben stand ja das Format in dem das Modul sendet.

    "du liest alle 0,5s eine Sequenz ein. Da kommen 4 byte. LSB, MSB, checksum und CR (0x13). Aus LSB und MSB berechnest du den Kompasswert wie folgt:
    x = MSB * 256 + LSB"

    Für den interruptgesteuerten Empfang schau mal hier http://www.rowalt.de/mc/avr/avrboard/04/avrb04.htm vorbei.

    Du könntest es so machen das du, wie in dem Link beschrieben, ein Array aus 4 Byte solange auffüllst bis das 4. Byte den Wert 0x13 hat.
    Aus dem 1. und 2. Byte berechnest du dann deine Werte.
    Also x = MSB * 256 + LSB.
    MSB ist übrigens das "Höherwertige Byte" und LSB das "niederwertige Byte" deiner gesuchten Zahl. Auf englisch "Most" und "Least significant Byte".

    x ist dann eine 16Bit Zahl, also max. 65535, wie z.B. Integer. Ich denke aber das man das dann nochmal umrechnen muss. Vielleicht x * 0,00549, aber ohne Gewähr...

    Das 3. Bit ist die Prüfsumme, sofern du die nicht brauchst kannst du die über Board werfen.

    Zusammengefasst:

    4 Byte einlesen, das 4. Bit mus 0x13 sein.
    Wenn das erfüllt ist x = 2. Byte * 256 + 1. Byte, danach eventuell umrechnen.
    3. Bit ist die Prüfsumme und vorerst nicht benötigt, 4. Bit dient als Trennzeichen der Sequenz, wird zum berechnen nicht benötigt.

    Gruß, Sonic
    Bild hier  
    If the world does not fit your needs, just compile a new one...

  2. #22
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    24.04.2004
    Ort
    Karlsruhe
    Alter
    45
    Beiträge
    1.277
    Zitat Zitat von MarkusH
    ...wäre dann würden da nicht so viele 19er kommen. und vor allem wären dann wohl nicht genau 3 bytes dazwischen kommen, trozdem kann ich mit den bytes dazwischen nix anfangen weil sie viel zu gross und zu komisch sind. Das ist total verwirrend, ich glaub ich dreh voll am rad.
    Wieso funktioniert doch

    Was ist 0x13 im Dezimalsystem? 19, genau das ist das Trennzeichen zwischen den gesendeten Bytes...also einlesen bis du 0x13(19) empfängst, die nächsten 2 Bytes speichern, das 3. verwerfen (checksum),
    das 4. müsste wieder 0x13 sein und stöst die Aktion von vorne an

    Gruß, Sonic
    Bild hier  
    If the world does not fit your needs, just compile a new one...

  3. #23
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.06.2004
    Beiträge
    118
    WOW! Der link ist super! Da lernt man richtig was im gegensatz zu den anderen avr-seiten. Wenn ich das so mache wies dort beschrieben ist funktionierts! Mit eben dieser riesigen Integer-Zahl bin ich nicht klar gekommen weil ich dachte wenn ich das richtig mache muss da was zwischen 0 und 360 rauskommen. Wenn ich sie aber mit 0,00549 malnehme kommt was brauchbares raus. Wie kommst du darauf das man das nochmal umrechnen muss und wie kommst du die blöde zahl??? Also nochmal ein riesiges DANKE an euch beide! Wenn man sowas noch nie gemacht hat, hat mans ohne hilfe echt schwer...

  4. #24
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    24.04.2004
    Ort
    Karlsruhe
    Alter
    45
    Beiträge
    1.277
    Zitat Zitat von MarkusH
    WOW! Der link ist super! Da lernt man richtig was im gegensatz zu den anderen avr-seiten. Wenn ich das so mache wies dort beschrieben ist funktionierts! Mit eben dieser riesigen Integer-Zahl bin ich nicht klar gekommen weil ich dachte wenn ich das richtig mache muss da was zwischen 0 und 360 rauskommen. Wenn ich sie aber mit 0,00549 malnehme kommt was brauchbares raus. Wie kommst du darauf das man das nochmal umrechnen muss und wie kommst du die blöde zahl??? Also nochmal ein riesiges DANKE an euch beide! Wenn man sowas noch nie gemacht hat, hat mans ohne hilfe echt schwer...
    Danke, danke, leider funktionierts bei mir nicht so wie es in der Seite beschrieben ist aber das liegt wahrscheinlich an meiner Hardware ,-(

    Zu deinen Fragen, aus bestimmten Gründen werden Binärzahlen manchmal in 2 Teilen übertragen, eben einmal MSB und einmal LSB.
    Zusammensetzen tut man die eben wieder mit der genannten Formel.

    Und da 2 Byte insgesamt 16 Bit sind wird insgesamt eine 16Bit Zahl in 2 8Bit Wörtern übertragen.

    Mit 16 Bit kannst du bis 65535 zählen. Ich hab angenommen das der Kompass den kompletten Zahlenraum der 16Bit ausschöpft.
    Daraus wiederum folgt 360° / 65535 = 0,00549.....

    Die 360° werden dann also in 65535 Schritte unterteilt (allerdings ist das eine extrem unrealistische Genauigkeit, müsste aber im Datenblatt was drüber stehen, das sind immerhin 5/1000el Gradschritte ,-)

    Gruß, Sonic
    Bild hier  
    If the world does not fit your needs, just compile a new one...

  5. #25
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.06.2004
    Beiträge
    118
    Hi, also eine Frage hab ich noch. Muss man das ding Kalibrieren? Braucht man die Kalibration blos um permanente Störquellen auszuschließen? Muss man den nach jedem einschalten kalibrieren oder nur ein einziges mal???

  6. #26
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    04.11.2003
    Ort
    Dresden
    Alter
    60
    Beiträge
    409
    Hallo Markus,

    sorry, war ne Weile nicht hier, die Kalibrierung ist nur notwendig, wenn permanente Magnetfelder in unmittelbarer Nähe (Dauermagnete von Motoren o.ä.) ausgeglichen werden sollen.
    Der Wert bleibt im internen E2PROM gespeichert.

    Viele Grüße
    Jörg

Seite 3 von 3 ErsteErste 123

Berechtigungen

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

Solar Speicher und Akkus Tests