www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Programm bearbeiten. wie?


Autor: Björn ^^ (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Abend.
ich bin neu in Sachen µC und auch neu in diesem Forum.
ich habe mich bis jetzt nur wenig mit dem µC befasst.
und das nur in Basic.
habe im Netz folgendes projekt gefunden:
http://www.kh-gps.de/gpsdec1.htm
finde ich sehr interresant, aber ich brauche die Geschwindigkein 
natürlich in km/h, und nicht in Knoten.
habe den Quelltext angesehen, und finde trotz aller Bemühungen keine 
Stelle, wo die Daten in Knoten umgewandelt werden, um diedann wiederrrum 
in km/h zu umwandelt.
Könnte mir jemand helfen?
Quelltext:




$regfile = "m8def.dat"
$crystal = 16000000
$baud = 4800

Config Lcd = 16 * 2
Cls
Cursor Off

Dim C As Byte
Dim I As Byte
Dim Time As String * 6
Dim Av As String * 2
Dim Lat As String * 8
Dim Ns As String * 2
Dim Lon As String * 9
Dim Ew As String * 2
Dim Spd As String * 6
Dim Crs As String * 6
Dim Leng As Byte
Dim Mrk As String * 2
Dim Xx As Bit

Declare Sub Wait_for_string(byval S As String)
Declare Function Read_string() As String

Wait 1
   Upperline
   Lcd "WAITING FOR DATA"
Wait 3

Mrk = "-"

Config Serialin = Buffered , Size = 100                     ' Konfig. 
der ser. Eingabe
Enable Interrupts
' $GPRMC,hhmmss.ss,A,llll.ll,a,yyyyy.yy,a,x.x,x.x,ddmmyy,x.x,a*hh
Do
   Call Wait_for_string( "$GPRMC,")                         ' Warte auf 
$GPRMC

   Time = Read_string()
   Av = Read_string()

   Lat = Read_string()
   Leng = Len(lat) - 1
   Lat = Left(lat , Leng)

   Ns = Read_string()
   Leng = Len(ns) - 1
   Ns = Left(ns , Leng)

   Lon = Read_string()
   Leng = Len(lon) - 1
   Lon = Left(lon , Leng)

   Ew = Read_string()
   Leng = Len(ew) - 1
   Ew = Left(ew , Leng)

   Spd = Read_string()
   Leng = Len(spd) - 1
   Spd = Left(spd , Leng)

   Crs = Read_string()
   Leng = Len(crs) - 1
   Crs = Left(crs , Leng)

   Upperline
   Locate 1 , 2
   Lcd Lat ; Ns
   Locate 1 , 12
   Lcd Spd

   Lowerline
   Lcd Lon ; Ew
   Locate 2 , 12
   Lcd Crs

   If Av = "V," Then Av = "*"
   If Av = "A," Then Av = " "
   Locate 1 , 1
   Lcd Av

   If Xx = 1 Then Mrk = "-"
   If Xx = 0 Then Mrk = "+"
   Toggle Xx
   Locate 1 , 11
   Lcd Mrk

Loop

End

'------------------------------------------------------
Sub Wait_for_string(byval S As String) As String
Local Ii As Byte
Local Cc As Byte
Ii = 1
M1:
   Cc = Waitkey()
   If Cc <> Mid(s , Ii , 1) Then
      Goto M1
   Else
      Incr Ii
      If Ii > Len(s) Then Goto M2
      Goto M1
   End If
M2:
End Sub

'------------------------------------------------------
Function Read_string() As String
Local Cc As Byte
Local Ss As String * 10
Ss = ""
Do
   Cc = Waitkey()
   Ss = Ss + Chr(cc)
Loop Until Cc = ","
Read_string = Left(ss , 10)
End Function
End

Autor: Björn ^^ (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Keine Ideen?

Autor: Walter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>und finde trotz aller Bemühungen keine
>Stelle, wo die Daten in Knoten umgewandelt werden

da wird nix in Knoten umgewandelt, die Strings sind wohl in Knoten.
Da hat jemand beim Programmieren Tastendrücke gespart sonst müsste man 
nicht raten ob z.B.
Spd Speed bedeutet

Autor: Nils (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Björn,

bin weder Basic-Programmierer noch kenne ich mich besonders gut mit GPS 
aus, aber aus dem Code meine ich zu lesen, dass Spd die Geschwindigkeit 
ist.

Die scheint schon in Knoten vom GPS-Empfänger zu kommen, denn 
umgerechnet wird hier nichts. Du mußt Dir eigentlich nur Spd greifen, 
und von Knoten in km/h umrechnen.

Gruß, Nils

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da ist die Stelle:

>   Spd = Read_string()
>   Leng = Len(spd) - 1
>   Spd = Left(spd , Leng)

Der einfache Weg:
Aus dem String Spd machst du eine float Zahl tempo.
Wie man das in Basic macht weiss ich nicht.
Gibt es da überhaupt einen Befehl ?
tempo ist jetzt noch in Knoten.
Umrechnen in km/h = Knoten * 1.85 ungefähr.
tempo = tempo * 1.85;
Dann aus der float Zahl tempo einen neuen String in Spd
machen. Fettig!

Mit Festkommaarithmetik spart man sich den float Kram.
Dann muss man den String Spd aber wohl von Hand
in Vorkomma- und Nachkommastellen zerlegen.

Autor: Björn ^^ (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke erstmal an alle!
die Überlegung ist:

Dim kmh as byte

Spd = Read_string()
Leng = Len(spd) - 1
Spd = Left(spd , Leng)

kmh = Spd*1.85

   Upperline
   Locate 1 , 2
   Lcd Lat ; Ns
   Locate 1 , 12
   Lcd kmh


so im etwa?

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Dim kmh as byte

byte geht nur bis 255 km/h ;)

>Spd = Read_string()
>Leng = Len(spd) - 1
>Spd = Left(spd , Leng)

Ist Groß-/Kleinschreibung in Basic egal ?

>kmh = Spd*1.85

Geht nicht. Spd ist ein Text. Aus Spd musst du erst eine Zahl
machen bevor du multiplizieren kannst.

>   Lcd kmh

kmh ist eine Zahl. Aus der musst du erst einen Text
machen bevor du sie auf dem Display ausgeben kannst.

Autor: Björn ^^ (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
und noch was:
es steht da auf der Seite
"Insgesamt kommt man für alle Bauteile des Decoders auf Kosten in der 
Größenordnung von etwa Euro 10."
wie ist das gemeint?
mit dem µC und lcd? und was ist mit dem GPS empfänder?
ich glaube ich habe was falsch verstanden, oder?
ist das normale RS232 GPS-Empf? wo krigt man den? bei eBay sind schon 
alle USB, rs232 findet man noch kaum.
klärt mich bitte auf.
Danke schön ^^

Autor: Björn ^^ (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>byte geht nur bis 255 km/h ;)
reicht ;)


>Spd ist ein Text. Aus Spd musst du erst eine Zahl machen
wie kann man das machen? das wird ja schon so Empfangen, oder?

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>>Spd ist ein Text. Aus Spd musst du erst eine Zahl machen
>wie kann man das machen?

Das steht im Handbuch deines BASIC Compilers.

> das wird ja schon so Empfangen, oder?

Rüchtüch.

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit dem Befehl "VAL" kannst Du die Werte, die Du aus dem String 
herausgesägt hast, in einen numerischen Wert umwandeln.

MfG Paul

Autor: Björn ^^ (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Paul
danke

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.