Serielle ?

  • 1
  • 2
  • 3
  • 4
  • Page 2 of 4
Harry
Moderator
Avatar
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2134
Registered: 03 / 2003
Subject:

Re: Serielle ?

 · 
Posted: 02.08.2015 - 20:47  ·  #9
Hi Frank,

als Satzkennung würde ich immer das gleiche Zeichen (Bei NMEA ist das das "$") verwenden und dann kannst du senden so viel du willst.

Code
Process ReadGPS(20,20:iData);
  Begin
    WaitPipe(RXBuffer);                         // Warte auf Daten im Puffer
    Read(SerInp, Temp);                         // Puffer lesen

    If Temp='$'                                 // Wenn Puffer='$' (Datensatzanfang)
      then
        Read(SerInp, Temp6);
        If Temp6 = 'GPRMC,'
          then
            Read(SerInp, NMEA.Time_UTC, ',');   // GSP Time in UTC
            Read(SerInp, NMEA.Status, ',');     // A=data valid or V=data not valid
            Read(SerInp, NMEA.Latitude, ',');   // ddmm.mmmm
            Read(SerInp, NMEA.Lat_Ind, ',');    // N=north or S=south
            Read(SerInp, NMEA.Longitude, ',');  // dddmm.mmmm
            Read(SerInp, NMEA.Log_Ind, ',');    // E=east or W=west
            Read(SerInp, NMEA.Speed, ',');      // variable speed in knots
            Read(SerInp, NMEA.Angle, ',');      // variable lenght in degrees
            Read(SerInp, NMEA.Date, ',');       // GPS Date ddmmyy
            Read(SerInp, NMEA.Magnetic, ',');   // Magnetic declinason
            Read(SerInp, NMEA.Checksum1, ',');
            NewNMEA:=true;
          EndIf;

        If Temp6 = 'GPGGA,'
          then
            Read(SerInp, NMEA.Time_UTC, ',');   // GSP Time in UTC hhmmss.sss
            Read(SerInp, NMEA.Latitude, ',');   // ddmm.mmmm
            Read(SerInp, NMEA.Lat_Ind, ',');    // N=north or S=south
            Read(SerInp, NMEA.Longitude, ',');  // dddmm.mmmm
            Read(SerInp, NMEA.Log_Ind, ',');    // E=east or W=west
            Read(SerInp, NMEA.StatusDummy, ',');// 0=Invalid, 1=Valid SPS, 2=Valid DGPS, 3=Valid PPS
            Read(SerInp, NMEA.Sat_Track, ',');  // Number of sat in view and used in solution
            Read(SerInp, NMEA.H_Dilution, ','); // dilution error
            Read(SerInp, NMEA.Height, ',');     // height over see
            Read(SerInp, NMEA.Height_Unit, ',');
            Read(SerInp, NMEA.DGPS_Time, ',');
            Read(SerInp, NMEA.DGPS_ID, ',');
            Read(SerInp, NMEA.Checksum2, ',');
          EndIf;
      EndIf;
  End ReadGPS;

Gruss
Harry
TheBeginner
Schreiberling
Avatar
Gender: n/a
Location: Wunsiedel Bayern
Age: 67
Posts: 766
Registered: 06 / 2013
Subject:

Re: Serielle ?

 · 
Posted: 05.08.2015 - 18:14  ·  #10
Hier unter diesen Thema muss ich doch noch was schreiben.

Ich habe jetzt sehr viel Zeit mit Float verbracht, saubere Sache muss ich sagen,
nur geht da auch sehr viele Takte (Zeit) drauf. Aber auch wirklich, einfach zu senden.
Write(LCDout, FloatToStr(MyFloat:7:3:'0'));

Da ich auch mit LongInt Arbeiten könnte (4Byte) weil ich in meiner Berechnung nicht
über 1kkk komme, würde ich gerne 4 Bytes an die Serielle senden.


Wie würdet ihr ein LongInt 4 Byte senden ?

Mit
SerOut(hi(MyLongx))
SerOut(lo(MyLongx))
würden noch 2 Byte fehlen.


Mit
Write(SerOut,LongToStr(MyLongInt));
Geht mir auch noch zu viel Zeit drauf.


Gruß Frank
Harald_K
 
Avatar
 
Subject:

Re: Serielle ?

 · 
Posted: 05.08.2015 - 18:38  ·  #11
probiers doch mit

serout(hi(hiword(long));
serout(lo(hiword(long));
serout(Hi(loword(long));
serout(lo(loword(long));

Die Reihenfolge dabei beliebig ... üblich ist lobyte first und loword first ... dann gehts auch nahtlos nach delphi oder sowas...


oder du legst ein array[0..3] of byte über die long, dann kannst du das direkt per Schleife senden:
for i := 0 to 3 do
serout(array[i]);
endfor;

oder seroutblock(long) nehmen ...
TheBeginner
Schreiberling
Avatar
Gender: n/a
Location: Wunsiedel Bayern
Age: 67
Posts: 766
Registered: 06 / 2013
Subject:

Re: Serielle ?

 · 
Posted: 05.08.2015 - 18:50  ·  #12
Hallo Harald,

Da bekomme ich keine Probleme mit dem senden, wird so von AVRco angenommen.

serout(hi(hiword(MyLong)));
serout(lo(hiword(MyLong)));
serout(Hi(loword(MyLong)));
serout(lo(loword(MyLong)));


Das gefällt mir sehr, :3some: jetzt mal sehen wie die Daten am Copmputer ankommen.

Gruß Frank
miparo
Administrator
Avatar
Gender:
Location: Germany
Age: 58
Posts: 959
Registered: 09 / 2007
Subject:

Re: Serielle ?

 · 
Posted: 05.08.2015 - 19:19  ·  #13
Code

  SerOutBlock(@MyLong,4);
TheBeginner
Schreiberling
Avatar
Gender: n/a
Location: Wunsiedel Bayern
Age: 67
Posts: 766
Registered: 06 / 2013
Subject:

Re: Serielle ?

 · 
Posted: 05.08.2015 - 19:43  ·  #14
Hallo miparo,

das verstehe ich nicht mit diesen @


Gruß Frank
miparo
Administrator
Avatar
Gender:
Location: Germany
Age: 58
Posts: 959
Registered: 09 / 2007
Subject:

Re: Serielle ?

 · 
Posted: 05.08.2015 - 20:18  ·  #15
Hi TheBeginner,
dafür gibt es ja das Manual :)

@ Ist halt ein Pointer auf dein Longword oder sonstwas .

miparo
TheBeginner
Schreiberling
Avatar
Gender: n/a
Location: Wunsiedel Bayern
Age: 67
Posts: 766
Registered: 06 / 2013
Subject:

Re: Serielle ?

 · 
Posted: 28.08.2015 - 06:33  ·  #16
Guten Morgen, da ich hier mit der Seriellen schon Fragen gestellt habe, mache ich mal weiter.
Nicht immer gleich ein neues Tipic öffnen. :-)
----------------------------------------------------------------

Bin gerade mit dem TimeOut beschäftigt.
SerInpBlock_TO(MenueHeader,20);

Bei 115200Baud, habe ich mal 20 eingegeben, ich denke das sollten 20ms sein ?
Kann man den TimeOut auch berechnen bei einer Baudzeit ? Weil ich weiß nicht ob
20 zu hoch oder zu tief sind.?

Weil ich möchte schon, daß ich da so schnell wie möglich raus komme.


Gruß Frank
  • 1
  • 2
  • 3
  • 4
  • Page 2 of 4
Selected quotes for multi-quoting:   0

Registered users in this topic

Currently no registered users in this section

The statistic shows who was online during the last 5 minutes. Updated every 90 seconds.
MySQL Queries: 15 · Cache Hits: 14   137   151 · Page-Gen-Time: 0.039862s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI