Probleme mit Prog oder Hardware ?

  • 1
  • 2
  • 3
  • 4
  • Page 3 of 4
rh
Administrator
Avatar
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: Probleme mit Prog oder Hardware ?

 · 
Posted: 07.01.2014 - 13:37  ·  #17
Hallo Harry,

ja, beim XMega sollte das gehen. Da gibts ein Enable Flag in einem UART Register.

rolf
Harry
Moderator
Avatar
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2133
Registered: 03 / 2003
Subject:

Re: Probleme mit Prog oder Hardware ?

 · 
Posted: 07.01.2014 - 21:34  ·  #18
Hi Rolf,

leider nicht XMega - bei einem Mega644.

Das Prog hab ich inzwischen für das EvaBoard mit BO9864 angepasst - muß es nur noch mit GPS-Daten testen und schauen, ob das auch resettet bzw. es sich aufhängt. Dann kann ich es dir schicken und es ist reproduzierbar.

Gruss
Harry
Avra
Schreiberling
Avatar
Gender:
Location: Belgrade, Serbia
Age: 53
Homepage: rs.linkedin.com/in…
Posts: 653
Registered: 07 / 2002
Subject:

Re: Probleme mit Prog oder Hardware ?

 · 
Posted: 08.01.2014 - 09:18  ·  #19
Hello Harry,

1) Maybe free GPS simulator can be of use to you, so you don't have to program your own?
http://ezio.ovh.org/index.php?…autopilot-

2) The simplest method to ensure a defined level of an unused pin, is to enable the internal pull-up. You should do that for all floating pins.

3) If you have a division by zero, or strings are not as expected then your application is in problem. This can be intercepted in RunTimeErr function - you can lit a single led there and halt cpu, so no restart can occur and you have visual indication that this has happened. Check out RunTimeErr documentation.

4) As for the GetMemAvail, GetStackFree, GetFrameFree, CheckStackValid and CheckFrameValid, you can use them and display their results before and after each serial character received, so you can monitor online if there is a problem with serial as you are suspecting. You can also put them at other suspicious places. For example, if your frame starts with one number, and then decreases, and decreases, and decreases until it reaches 0 and then reset happens, that is your bingo. You can also check RX buffer status (out of my head I think it's _RXCOUNT or something like that).

5) Do you have watchdog enabled in your application? If you have then can you disable it temporary and test without it?

6) Do you have brown out detection activated with your fuses? If you have then can you disable it temporary and test without it?

7) As for MCUCR register, the very first line in your application should put it's content into some variable, and you should show it on your display. If you have different MCUCR register value after reset, as compared with usual power on, then examine bits which are different and maybe this can give a little clue why reset happened.
Harry
Moderator
Avatar
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2133
Registered: 03 / 2003
Subject:

Re: Probleme mit Prog oder Hardware ?

 · 
Posted: 09.01.2014 - 08:02  ·  #20
Hi Rolf,

ich habe gestern das Programm mit GPS-Daten getestet und auch auf dem EVA-Board gibts Hänger bzw. Resets. Ein kleines Problem: die GPS-Simulatoren, die ich getestet hab (4 oder 5) sind alle Müll. Bei 3en kann man die Baudrate nicht ändern, einer schickt nur immer einen bestimmten Datensatz und der letzte läuft 2 Wochen und kostet dann $250 :angry4:

Außer du hast einen richtigen GPS-Empfänger bei dir rumliegen ?

Gruss
Harry
rh
Administrator
Avatar
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: Probleme mit Prog oder Hardware ?

 · 
Posted: 09.01.2014 - 13:10  ·  #21
Hallo Harry,

ich hatte mit GPS noch nie was zu tun.

rolf
Harry
Moderator
Avatar
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2133
Registered: 03 / 2003
Subject:

Re: Probleme mit Prog oder Hardware ?

 · 
Posted: 10.01.2014 - 14:06  ·  #22
Hi Rolf,

kannst du mir verraten, was genau die internen Variablen _RXInpE0 und _RXCountE0 sind ? Ich möchte den Puffer ein bisschen überwachen.

Der _RXInpE0 geht oft verdächtig nah an die Puffergröße. Der _RXCountE0 liegt bei maximal 60. Puffergröße ist 255.

Gruss
Harry

PS: Hab mal den Takt von 64 auf 16 MHz runter. Jetzt ist _RXInpE0 deutlich höher.
Harry
Moderator
Avatar
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2133
Registered: 03 / 2003
Subject:

Re: Probleme mit Prog oder Hardware ?

 · 
Posted: 10.01.2014 - 15:13  ·  #23
Hab mal den Prozess der die serielle ausliest angehalten und erwartet, daß die Schaltung resettet, da der Puffer nach garantiert 4 sek überläuft - nix wars. Also hat das nichts mit einem Pufferüberlauf zu tun.

Dann hab ich beim gDispRefresh ebenfalls den Prozess, der die serielle liest angehalten und danach wieder gestartet: trotzdem Reset der Schaltung.
Ich halte jetzt mal alle Prozesse an während einem gDispRefresh ........ auch Reset.

Hab inzwischen übrigens den Rx über 78VLC08 angeschlossen und den GPS-Empfänger über eine kleine Induktivität mit Spannung versorgt. Der GPS-Empfänger ist jetzt auch gute 30cm vom Display und µC weg.

Jetzt wird's interessant: wenn ich während das Prog läuft die serielle Verbindung kappe (also keine Daten mehr zum µC kommen), gibt's keinen Reset. Da ein Pufferüberlauf ausscheidet (vorher ja schon mal den Prozess angehalten und somit den Puffer garantiert zum überlaufen gebracht) ..... wie können serielle Daten einen Reset verursachen ??????
Der Empfänger ist weiterhin angeschlossen und die Displayhelligkeit ist auf maximal - also schliesse ich die Spannungversorgung (die ich ja auch schon mit dem oszi angeschaut hab) aus.

Hier der Code, für das auslesen der seriellen:
Code

Process ReadGPS($80,$80:iData);
  Begin
    WaitPipe(RXBufferE0);                        // Warte auf Daten im Puffer
    Read(SerInpE0, Temp);                        // Puffer lesen
    If Temp='$'                                  // Wenn Puffer='$' (Datensatzanfang)
      then
        Read(SerInpE0, Temp6);
        If Temp6 = 'GPGGA,'
          then
            Read(SerInpE0, NMEA.UTCTime, ',');   // GSP Time in UTC hhmmss.sss
            Read(SerInpE0, NMEA.GPSLat, ',');    // ddmm.mmmm
            Read(SerInpE0, NMEA.GPSLatInd, ','); // N=north or S=south
            Read(SerInpE0, NMEA.GPSLon, ',');    // dddmm.mmmm
            Read(SerInpE0, NMEA.GPSLonInd, ','); // E=east or W=west
            Read(SerInpE0, NMEA.GGAQual, ',');   // 0=Invalid, 1=Valid SPS, 2=Valid DGPS, 3=Valid PPS
            Read(SerInpE0, NMEA.GGASat, ',');    // Number of sat in view and used in solution
            Read(SerInpE0, NMEA.GGADilu, ',');   // dilution error
            Read(SerInpE0, NMEA.GGAHeight, ','); // height over see
            Read(SerInpE0, NMEA.GGAHeightU, ',');// height unit
            Read(SerInpE0, NMEA.GGAHeightD, ','); // height differential
            Read(SerInpE0, NMEA.GGAHeightDU, ',');// height differential unit
            Read(SerInpE0, NMEA.GGADGPST, ',');
            Read(SerInpE0, NMEA.GGADGPSID, '*');
            ReadLn(SerInpE0, NMEA.GGAChecksum);
            NewGGA:=true;

            NewLife:=true;
          EndIf;

        If Temp6 = 'GPGSA,'
          then
            Read(SerInpE0, NMEA2.GSAAM, ',');
            Read(SerInpE0, NMEA2.GSANavMode, ',');
            Read(SerInpE0, NMEA2.GSASV1, ',');
            Read(SerInpE0, NMEA2.GSASV2, ',');
            Read(SerInpE0, NMEA2.GSASV3, ',');
            Read(SerInpE0, NMEA2.GSASV4, ',');
            Read(SerInpE0, NMEA2.GSASV5, ',');
            Read(SerInpE0, NMEA2.GSASV6, ',');
            Read(SerInpE0, NMEA2.GSASV7, ',');
            Read(SerInpE0, NMEA2.GSASV8, ',');
            Read(SerInpE0, NMEA2.GSASV9, ',');
            Read(SerInpE0, NMEA2.GSASV10, ',');
            Read(SerInpE0, NMEA2.GSASV11, ',');
            Read(SerInpE0, NMEA2.GSASV12, ',');
            Read(SerInpE0, NMEA2.GSAPDOP, ',');
            Read(SerInpE0, NMEA2.GSAHDOP, ',');
            Read(SerInpE0, NMEA2.GSAVDOP, '*');
            Read(SerInpE0, NMEA2.GSAChecksum);
            NewGSA:=true;
          EndIf;

        If Temp6 = 'GPRMC,'
          then
            Read(SerInpE0, NMEA.UTCTime, ',');   // GPS Time in UTC
            Read(SerInpE0, NMEA.RMCStatus, ','); // A=data valid or V=data not valid
            Read(SerInpE0, NMEA.GPSLat, ',');    // ddmm.mmmm
            Read(SerInpE0, NMEA.GPSLatInd, ','); // N=north or S=south
            Read(SerInpE0, NMEA.GPSLon, ',');    // dddmm.mmmm
            Read(SerInpE0, NMEA.GPSLonInd, ','); // E=east or W=west
            Read(SerInpE0, NMEA.RMCSpeed, ',');  // variable speed in knots
            Read(SerInpE0, NMEA.RMCAngle, ',');  // variable lenght in degrees
            Read(SerInpE0, NMEA.RMCDate, ',');   // GPS Date ddmmyy
            Read(SerInpE0, NMEA.RMCMagn, ',');   // Magnetic declinason
            Read(SerInpE0, NMEA.RMCMagnV, ',');
            Read(SerInpE0, NMEA.RMCMode, '*');
            ReadLn(SerInpE0, NMEA.RMCCheckSum);
            NewRMC:=true;
          EndIf;

        STrack:=StrToInt(NMEA.GGASAT);       // Number of sat in view and used in solution

        Temp2:=Copy(NMEA.UTCTime,5,2);       // Uhrzeit alle 60s
        If Temp2='00'
          then
            NewTime:=true;
          EndIf;
      EndIf;
  End ReadGPS;
rh
Administrator
Avatar
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: Probleme mit Prog oder Hardware ?

 · 
Posted: 10.01.2014 - 16:46  ·  #24
Hallo Harry,

passiert das reproduzierbar, z.B. jedesmal wenn eine GPS Message da ist?
Oder ist das random, alle x Messages?

rolf
  • 1
  • 2
  • 3
  • 4
  • Page 3 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   133   147 · Page-Gen-Time: 0.032625s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI