- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 26

Thema: Kompassmodul mit USART-Schnittstelle auswerten

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.06.2004
    Beiträge
    118

    Kompassmodul mit USART-Schnittstelle auswerten

    Anzeige

    Praxistest und DIY Projekte
    Hallo an alle!
    Ich hab ein Kompassmodul namens 2XCM-I von Kaot-dar. Das hat laut Datenblatt ne USART-Schnittstelle. Wenn ich die zwei pins TX und RX direkt an die serielle Schnittstelle an pin 2&3 anschließe kommt nur müll raus. Wenn ich es statt dessen über den MAX232 ähnlichen Baustein des STK500 von Atmel anschließe alledings auch. Wenn ich ihn über das STK500 anschließe kann man aber beobachten das sich die Kryptischen Zeichen je nach position des Kompass verändern. Hab aber schon alle Terminal-Typen ausprobiert, da kommt nie was halbwegs sinnvolles raus nur so ein "°""°"" Müll.
    Mach ich da grundsätzlich was falsch?
    Ich muss dazu sagen das ich relativ neu auf dem Gebiet bin.
    Danke schonmal im Voraus.

    Gruß, Markus

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

    Wenn ich die zwei pins TX und RX direkt an die serielle Schnittstelle an pin 2&3 anschließe kommt nur müll raus.
    TX vom Modul muss an RX des Controllers und umgekehrt.
    Um Befehle zu übertragen (Parametrierung, Umschaltung), braucht man noch einen weiteren Ausgang am Controller, den man mit CS des Moduls verbindet.

    Wenn ich es statt dessen über den MAX232 ähnlichen Baustein des STK500 von Atmel anschließe alledings auch.
    HALT!!! Damit zerstörst du das Modul, falls du die Sendeleitung des Treibers mit dem Modul verbindest!!!

    Mach ich da grundsätzlich was falsch?
    Hört sich evtl. nach ner falschen Baudrate an (9600,8,N,1).

    HTH und Viele Größe
    Jörg

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.06.2004
    Beiträge
    118
    Danke für die schnelle Antwort.
    Also der Rs232-Controller geht noch (ich hab noch nen Atmega8 den ich dran anschließen kann). Baudrate ist auch richtig (9600,8,N,1) wie es in der beschreibung des Moduls steht. Das Modul hat tatsächlich einen CS-Pin. Da der aber in der Beschreibung nie erwähnt wird, hab ich ihn nicht angeschlossen. Was muss ich damit jetzt verbinden?

    Gruß, Markus

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

    Also der Rs232-Controller geht noch (ich hab noch nen Atmega8 den ich dran anschließen kann).
    naja, das Modul war ja in Gefahr, nicht der Treiber.

    Das Modul hat tatsächlich einen CS-Pin. Da der aber in der Beschreibung nie erwähnt wird, hab ich ihn nicht angeschlossen. Was muss ich damit jetzt verbinden?
    Also das CS-Pin (taucht übrigens in der Beschreibung in fast allen Diagrammen auf) wird gebraucht, wenn man einen Befehl an das Modul schicken möchte. Z.B. um die Betriebsart umzuschalten (->Temperatur oder ->Sleep) oder um die Kalibrierung zu starten.
    Du verbindest ds CS-Pin am besten mit einem freien Ausgang am Mega8.

    Nochmal zur Verdrahtung, Pin7 (TX) vom Modul muss an Pin2 (RX) des Mega8 und Pin8 (RX) vom Modul muss an Pin3 (TX) des Mega8. Gleichzeitig darf nichts anderes (auch kein RS-232-Treiber) am Pin2 des Mega8 angeschlossen sein.

    Nach dem Einschalten geht das Modul normalerweise in den Kompass-Mode und sendet kontinuierlich die Messwerte.
    Wenn jetzt etwas verkrüppeltes empfangen wird, liegt das u.U. neben einer falschen Baudrateneinstellung auch an einer falschen Fuse-Setting (interner 1MHz-Takt statt externer Takt). Vielleicht auch mal den Empfang im Mega8 mit einer anderen Quelle testen.

    HTH und Viele Grüße
    Jörg

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.06.2004
    Beiträge
    118
    Vielleicht hab ich mich falsch ausgedrückt, ich will das Modul vorerst ohne Atmega8 an den Com-Port anschließen. Nur zum kucken was da überhaupt rauskommt. Weil ich ja noch nicht weiß wie ich es mit dem Atmega ansprechen soll. Den Atmega hab ich nur erwähnt um zu sagen das wenn ich den an die RX/TX Pins des Schnittstellenmoduls des STK500 anschließe was sinnvolles rauskommt. Und wenn ich das Kompassmodul ansschließe eben nicht. Wenn irgend ein Modul einen USART-Ausgang hat, bedeutet das dann das ich es direkt an die schnittstelle anschleißen kann oder das ich da noch nen "Treiber" dazwischen schalten muss? Der CS-Pin hat wenn er nicht angeschlossen ist immer 5V, den brauch ich ja aber vorerst nicht wenn ich nur empfangen will wenn ich das richtig verstanden hab. In der Anleitung steht das Signale nur gesendet werden wenn der CS-Pin HIGH ist. Das ist ja der fall und es kommt ja auch irgendwas undefinierbares raus.

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

    Vielleicht hab ich mich falsch ausgedrückt, ich will das Modul vorerst ohne Atmega8 an den Com-Port anschließen.
    In der Tat, dann brauchst du natürlich den Pegelwandler. Am PC kommen an der Schnittstelle -12V/+12V raus. Habe ja schon mehrfach betont, dass das nicht mit dem Kompass-Modul verbunden werden darf.
    Der Pegelwandler macht aus den -12V -> +5V und aus den +12V -> 0V das heißt er invertiert das ganze zusätzlich noch.

    Wenn irgend ein Modul einen USART-Ausgang hat, bedeutet das dann das ich es direkt an die schnittstelle anschleißen kann oder das ich da noch nen "Treiber" dazwischen schalten muss?
    USART sagt erst mal überhaupt nichts über den Pegel aus. USART ist halt ein Schnittstellenbaustein, der asynchrone und synchrone serielle Übertragung beherrscht.
    Generell gilt. An Mikrocontrollern kommt an der seriellen Schnittstelle zumeist nur TTL-Pegel raus (5V/0V). Das darf man ohne weitere Maßnahmen nicht direkt mit dem PC verbinden. Dazu gibt es dann Pegelwandler, z.B. den verbreiteten MAX232 oder Äquivalente.

    Der CS-Pin hat wenn er nicht angeschlossen ist immer 5V, den brauch ich ja aber vorerst nicht wenn ich nur empfangen will wenn ich das richtig verstanden hab. In der Anleitung steht das Signale nur gesendet werden wenn der CS-Pin HIGH ist. Das ist ja der fall und es kommt ja auch irgendwas undefinierbares raus.
    Der CS hat einen internen Pull-Up.
    Wenn du dir die Ausgaben des Moduls mit einem Terminal angucken willst (Hyperterm) kommt tatsächlich etwas undefinierbares heraus, da das Modul keine ASCII sondern Binärwerte sendet.

    Das heißt, es war schon eigentlich alles OK, nur ich habe nicht verstanden, was du eigentlich ausdrücken wolltest. Die Sache mit dem Mega8 (Pin2 und 3) machte die Verwirrung perfekt.

    Ich rate dir, die Werte jetzt mit einem Mega8 einzulesen und den Wert entsprechend der Doku Seite 9 zu berechnen.
    Dann wird alles gut

    HTH und Viele Grüße
    Jörg

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.06.2004
    Beiträge
    118
    Also gut, ich hatte es also richtig angeschlossen, nur das Hyperterminal die Signale nicht unterpretieren kann. Gibt es ein anderes Terminal-Programm das das kann? Ich glaube nämlich das ich mit der Berechnung im Atmega anhand des Handbuchs vorerst gnadenlos überfordert bin
    Da brauch ich ja noch den Timer des Atmegas dafür so wie das aussieht. Mit dem hab ich mich bis jetzt noch garnicht auseinander gesetzt. Außerdem müsst ich ja dann zwei UART's an den Atmega anschließen, einen zum Kopass und einen zum PC. Das wollt ich eben anfangs vermeiden und mich langsam vorarbeiten weil es mir sonst zu viele Fehlerquellen auf einmal gibt. So wie das aussieht hast du das wohl schonmal gemacht. Hast du da vielleicht noch irgendwelche Code-Schnipsel? Wär echt toll weil ich mit Google fast nix zu dem Thema finde. Ich arbeite bisher mit Bascom weil ich Basic ganz gut kann und mir das AVR-Studio mit Assemblersprache zu umständlich war. Danke für deine Hilfe. Gruß, Markus

  8. #8
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    04.11.2003
    Ort
    Dresden
    Alter
    60
    Beiträge
    409
    Hi Markus,

    Also gut, ich hatte es also richtig angeschlossen, nur das Hyperterminal die Signale nicht unterpretieren kann. Gibt es ein anderes Terminal-Programm das das kann?
    Nein. Du kannst dir natürlich mit Delphi oder VB o.ä. schnell ein Programm schreiben, was das macht. Ist aber dann kein Terminal mehr.

    Ich glaube nämlich das ich mit der Berechnung im Atmega anhand des Handbuchs vorerst gnadenlos überfordert bin
    warum, 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
    Wenn du möchtest, kannst du mit der Prüfsumme noch überprüfen, ob ein Übertragungsfehler aufgetreten ist:
    Dazu werden 0xff, das MSB und das LSB XOR verknüpft. Das Ergebnis muss mit der Checksum übereinstimmen.

    Da brauch ich ja noch den Timer des Atmegas dafür so wie das aussieht. Mit dem hab ich mich bis jetzt noch garnicht auseinander gesetzt.
    Nein, da braucht man keine Timer. Zum Ausprobieren wartest du halt, bis Daten über die serielle Schnittstelle kommen. Die werden nach obiger Formel ausgewertet und der Kompasswert irgendwie zur Anzeige gebracht.

    Außerdem müsst ich ja dann zwei UART's an den Atmega anschließen, einen zum Kopass und einen zum PC.
    ????

    HTH und Viele Grüße
    Jörg

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.06.2004
    Beiträge
    118
    So, ich hab mal ein wenig in der Bascom-Hilfe rumgekramt und hab was gefunden wie man von einem USART was einliest:

    $crystal = 3686400
    $baud = 9600
    Ddrd = 0
    Portd = 0
    Dim Var As String * 10

    Serin Var , 0 , D , 4 , 9600 , 0 , 8 , 1
    'Serin Variable, Länge(unwichtig weil die variable string ist), portnummer, Baudrate, flussteuerung, datenbits, stoppbits
    Wait 1
    Print "var"

    Wenn ich den code laufen lasse hängt er bei der serin zeile und weigert sich weiter zu machen. Ich hab so das gefühl das der auf diese 13H-Endmarkierung wartet und diese aber nicht erkennt weil ich die crysatl-variable falsch gesetzt hab. Kann das sein? Wenn ich die Crystalvariable aber veränder kommt auf der siellen konsole zum pc nu blädsinn raus. In der Bascom hilfe steht das auf ein return(13H) gewartet wird wenn ein string als variable verwendet wird.

    Gruß, Markus

  10. #10
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.06.2004
    Beiträge
    118
    Hoppla, die beschreibung von Serin war in falscher reihenfolge,
    SERIN var , bytes , port , pin, baud , parity , dbits , sbits

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

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

12V Akku bauen