Schade, ich werde die Frage mal unter "Bascom Programmierung" posten. Trozdem mal vielen dank für deine hilfe. Jetzt weis ich wenigstens wo ich anfangen soll.
Gruß, Markus
Hallo Markus,
hier kann ich momentan nicht weiterhelfen, da ich von BASCOM, wie schon mehrfach geschrieben, keine Ahnung habe .
Da aber Bascom hier sehr stark verbreitet ist, müsste es doch jemanden geben, der helfen kann.
Nur soviel, ich würde die Werte nicht in einen String einlesen. Du willst ja anschließend mit den einzelnen Bytes rechnen, ein String dürfte dafür aber denkbar ungeeignet sein.
Viele Grüße
Jörg
Schade, ich werde die Frage mal unter "Bascom Programmierung" posten. Trozdem mal vielen dank für deine hilfe. Jetzt weis ich wenigstens wo ich anfangen soll.
Gruß, Markus
Hallo Markus,
habe mir mal die Hilfe zu Bascom vorgenommen:
Demnach liest du in deinem Programmbeispiel von D4 (Pin6) ein. Weiter oben war aber die Rede von Pin2 (RXD).Port The name of the port to use. This must be a letter like A for portA.
Pin The pin number you want to use of the port. This must be in the range from 0-7.
Allerdings fällt mir bei der Literatur der Hilfe auf, dass Bascom die Hardwareroutinen des Mega8 wohl gar nicht nutzt. Deshalb kann man auch jeden beliebigen Pin für die Funktion angeben.
Zurück zu deinem Programm. Wenn der Wert in einen String eingelesen ist und anschließend mit Print ausgegeben wird, wird mit Sicherheit wegen des Binärformats irgendwelcher Müll ausgegeben (siehe Terminal).
Besser ist doch, gleich in Variable einzulesen mit denen man auch was anfangen kann.
Allerdings darf die Ausgabe mit Print nicht an das Kompassmodul geschickt werden, sondern muss zum PC (Terminal). Achso, der Code oben ist nicht getestet sondern einfach so aufgeschrieben. Vielleicht kann ja jemand mit BASCOM-Erfahrung da mal draufgucken. Was erreicht werden soll steht ein paar Postings weiter oben.Code:$regfile = "m8def.dat" $crystal = 3686400 $baud = 9600 Ddrd = 0 Portd = 0 Dim Heading As Word Dim H_low As Byte Dim H_high As Byte Dim Check As Byte Dim Strtemp As String * 10 Do Serin Strtemp , 0 , D , 0 , 9600 , 0 , 8 , 1 ' wartet auf CR (synch) Serin H_low , 1 , D , 0 , 9600 , 0 , 8 , 1 Serin H_high , 1 , D , 0 , 9600 , 0 , 8 , 1 Serin Check , 1 , D , 0 , 9600 , 0 , 8 , 1 Heading = H_high * 256 Heading = Heading + H_low Print "Kompass: " ; Heading Loop
Viele Grüße
Jörg
Hey, super, vielen dank, das werd ich mal ausprobiern. Der pin ist schon richtig glaub ich, die serielle konsole zum pc ist auf portD0 und 1. Das ist bei Bascom anscheinend standardmässig so wenn man einfach nur print "irgendwas" schreibt. Und jetzt versuch ich eben noch zusätzlich an nem anderen pin was einzulesen.
Funktioniert nicht
Wenn ich irgendwas in einen string einlese bleibt er generell hängen. Vermutlich weil er das CR nicht lesen kann. Wenn ich was in byte einlese kommt immer null raus. Ich hab jetzt von dem Sandard USART-Port (also D0 und D1) die TX leitung mit dem PC verbunden und die RX mit dem Kompas. So krig ich wenigstens was rein weils ja an anderen ports mal garnicht funktioniert. Die einzigste möglichkeit überhaupt was vom kompas zu empfangen ist mit dem Waitkey()-befehl aber der wartet natürlich nur auf ASCII-Zeichen und gibt die dann auch so weiter. Ds heißt es sieht genau so aus als wenn ich den kompas direkt anschließe. Hast du den gleichen Kompas oder hast du jetzt extra wegen meinem problem die anleitung durchgelesen??? Falls du den gleichen hast, wie hast du das gemacht?
Hallo Markus,
zu dem seriellen Problem in Bascom kann ich dir leider nicht weiterhelfen. Das Programm oben entstand quasi im "Blindflug", durch Vergleich von deinem Programm und den bei Bascom mitgelieferten Beispielen.
Es ist, wie weiter oben geschrieben, nicht getestet.
Allerdings verstehe ich auch nicht, wenn fast jeder redet, dass er in Bascom programmiert und wie toll das System ist, dass keiner ne Lösung beitragen kann.
Eine andere Geschichte ist der Kompass, hierzu kann ich dir durchaus Tips geben, die jedoch momentan dein Problem nicht lösen. Ich kanns blöderweise auch nicht mehr nachvollziehen, da alle 2XCXM-I, selbst meine stille Reserve, ausverkauft sind.
Ja genau, allerdings die von BASCOM.Hast du den gleichen Kompas oder hast du jetzt extra wegen meinem problem die anleitung durchgelesen???
Viele Grüße
Jörg
Kann es denn sein das die $crystal variable falsch ist? Oder kommt es nur auf die $baud variable an? Irgendwie stehen die doch in abhängigkeit zueinander oder? wenn ich was anderes nehme als 3686400 kommt immer nur schrott raus. Vielleicht braucht der Kompass ja nen anderen wert wie die verbindung zum pc.
Hallo Markus,
$crystal ist die Angabe der Taktfrequenz des Mega8, 3,6864MHz ist eine gebräuchliche Größe, bei der die Baudraten 100%ig exakt sind. Ich gehe mal davon aus, dass du einen entsprechenden Quarz im System hast.
Nein, sofern die korrekte Baudrate ($baud = 9600) eingestellt ist.Vielleicht braucht der Kompass ja nen anderen wert wie die verbindung zum pc.
Viele Grüße
Jörg
Ich habs jetzt geschafft indem ich mit "Variable = Waitkey()" auf die 19 warte, was ja 13H entspricht. Dann lese ich die nächsten 3 byte auch mit Waitkey ein. da kommt dann je nach dem wie man den kompass dreht folgendes raus:
140,130,241 oder 122,130,7. Aber laut der anleitung müsst ich ja die 130 jetzt mal 256 nehmen... da kommen dann ja so große zahlen raus das man die nicht vernünftig umrechnen kann. Kann es sein das ich an der falschen stelle anfange mit einlesen? Oder ist das erste bit von dem gesendeten byte vielleicht ein start-bit das nicht mitgerechnet wird? Wenn ich bei jeder zahl die reinkommt das erste bit weglasse (also 128 abziehe) dann komm ich auf ein endergebniss das wenigstens zwischen 0 und 360 liegt. allerdings kommen erst jedes dritte mal werte die man dafür verwenden kann. Kann ich irgendwie sicher gehen das er das byte tatsächlich von anfang an einliest und nicht irgendwo in der mitte beginnt und noch die hälfte vom nächsten dazu nimmt?
Hmm... ich glaub das mit dem 128 abziehen funktioniert nur in ganz wenigen fällen... ich hab mal 5 bytes nacheinander eingelesen: 19+97+130+28+19+97
Wenn das irgendwie bitmässig versetzt 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.
Lesezeichen