buggiga terminalprogram (serieport)...

Elektronik- och mekanikrelaterad mjukvara/litteratur. (T.ex schema-CAD, simulering, böcker, manualer mm. OS-problem hör inte hit!)
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

buggiga terminalprogram (serieport)...

Inlägg av jesse »

Jag håller på att testa gränserna för min nya UART-rutin på en ATmega. dvs. jag vill köra en massa olika sätt att skicka och ta emot en massa data med olika fördröjningar etc... för att avslöja eventuella buggar i min AVR-programvara.

(Min UART-kod för AVR är helt interruptbaserad och har två buffertar: en in och en ut. Så när processorn väl skickat en mening så ligger den i bufferten tills alla tecken är skickade. Om bufferten blir full kommer processorn att få vänta.
Med inbufferten är det så att om den blir full så skippas sista meningen helt (skilda med <CR> och eventuellt <LF>) Just den här varianten är dessutom specialbyggd för NMEA.protokollet. Inga data läggs in i bufferten förrän starttecken ('$') kommit in.)


Men det strular till sig på ett sätt det inte borde. När PC-n sänder massor av text till AVR så blir utgående meddelanden korrupta, trots att de är helt skilda rutiner och inte borde påverka varandra. EN sak jag upptäckte var att HyperTerminal som jag använder drog enorma mängder processorkraft när det fick för mycket data, och torskade ihop helt då och då, så att jag fick gå in i aktivitethanteraren och döda processen. Detta skedde misstänkt ofta i samband med att inkommande data blev fel.

Så jag ladda ner några andra terminalprogram, bla. följande:

* Realterm
* HHD Free serial port monitor
* Free Serial Port Terminal

Och det visade sig att dessa var ännu buggigare... de klarade inte av mycket data, trots att jag har så låg hastighet som 4800 baud (eller kanske på grund av?)

Bevisligen så blev det fel i mottagningen, eftersom de olika terminalprogrammen fick olika typ av fel på indata. Realterm hamnar ur synk och spottar ut en massa rubbish, samtidigt som jag ser på HHD Free Serial Port Monitor att inkommande data faktiskt är OK.

Det verkar som om vissa av dessa program går in på bitnivå på porten och försöker tolka vad som kommer in, och så fort processorn blir det minsta upptagen så hinner de inte med. Jag som trodde allt sköttes av samma dll. Kan det vara någon drivrutin i min PC som är felaktig eftersom alla mina terminalprogram tenderar att få problem?

Hur ska jag hitta en terminal som är pålitlig och som verkligen visar vad min AVR skickar ut? Får väl köra en AVR i andra änden också i så fall.... men det blir ju lite extra jobb att fixa det.

Jag var lite misstänksam mot hårdvaran också.... Vid processorn sitter ett hemmasnicrat NMEA-interface som klarar specen för både standard (4800 Baud) och High-speed (38400 baud). Till denna har jag anslutit en egen tillverkad NMEA-till-RS232 omvandlare med diskreta komponenter.... noggrant testad med oscilloskop innan den sattes i drift. Det som talar emot att det är hårdvarufel är att jag fått exakt samma överföringsfel när jag haft AVR --> MAX232 --> PC....

Ska testa att ansluta en annan PC och köra HyperTerminal för att se om det skiljer.
Senast redigerad av jesse 26 mars 2011, 15:18:37, redigerad totalt 1 gång.
sodjan
EF Sponsor
Inlägg: 43249
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: buggiga terminalprogram (serieport)...

Inlägg av sodjan »

Jag använder alltid en riktig terminalemulator.
Reflection från Attachmate är min favorit, har kört den i 20 år.
http://www.attachmate.com/Products/Term ... o2/ruo.htm
Du kan ladda ner en evaluation och se om du får samma fenomen med den...

HyperTerminal gillar jag inte alls...
Användarvisningsbild
AndLi
Inlägg: 18257
Blev medlem: 11 februari 2004, 18:17:59
Ort: Knivsta
Kontakt:

Re: buggiga terminalprogram (serieport)...

Inlägg av AndLi »

På windows använder jag putty till serieportarna om jag behöver ett terminalprogram.
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: buggiga terminalprogram (serieport)...

Inlägg av jesse »

så här kan det se ut i Hyperterminal när man stressar på utan pauser:

Kod: Markera allt

---TESTAR NMEA UART----
----TESTAR NMEA UART----
----TESTAR NMEA UART----
----TESTAR NMEA UART----
----TESTAR NMEA UART----
+$mening22:
U©©©I¨øü----TESTA§MEAàART----
+$mening24:
Ö+$mening25:
----TESTAR NMEA UART----
+$mening28:
----TESTAR NMEA UART----
+$mening29:
----TESTAR NMEA UART----
+$mening30:
----TESTAR NMEA UART----
+$AAAAAA
----TESTAR NMEA UART----
----TESTAR NMEA UART----
----TESTAR NMEA UART----
I det här exemplet skickar AVR ut meningen "----TESTAR NMEA UART----\n" 4 gånger per sekund, vilket är problemfritt så länge inga tecken kommer in. Men när jag sedan överför en textfil med ett antal meningar så ska dessa skickas tillbaks mellan de ordinarie ---TESTA... meningarna...
Senast redigerad av jesse 26 mars 2011, 15:30:30, redigerad totalt 1 gång.
sodjan
EF Sponsor
Inlägg: 43249
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: buggiga terminalprogram (serieport)...

Inlägg av sodjan »

Det säger ju inte så mycket utan att veta vad de olika
texterna kommar ifrån.
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: buggiga terminalprogram (serieport)...

Inlägg av jesse »

Nej... :roll: jag lade till en förklaring.

(den skriver ut ett '+' innan den skickar tillbaks inkommande mening för att se vad som är vad)

här ett annat exempel med samma program:
här skriver jag $aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa med tangentbordet:

Kod: Markera allt

----TESTAR NMEA UART----
----TESTAR NMEA UART----
----TESTAR NMEA UART----
ü----TESTAR NMEA UART----
----TESTAR NMEA UART----
üU©©©I¨øü----TEST R NMEA UART----
----TESTAR NMEA UART----
 ----TESTAR NMEA UART----
+
$aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
----TESTAR NMEA UART----
----TESTAR NMEA UART----
----TESTAR NMEA UART----
----TESTAR NMEA UART----
----TESTAR NMEA UART----
(har lagt till "ny rad" efter '+' tecknet)

När jag trycker enstaka tangenter så brukar det inte störa sändningen, men när jag håller ner en knapp (i detta fallet 'a') så uppträder en massa skräp... Att svaret inte kommer genast beror på att jag dröjer någon halv sekund innan jag trycker på enter. Svaret blir ju korrekt.
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: buggiga terminalprogram (serieport)...

Inlägg av jesse »

Ett liknande försök övervakat med Free serial port monitor ansluten till HyperTerminal:

Kod: Markera allt

2D 2D 2D 2D 0A 0D 2D 2D 2D 2D 54 45 53 54 41 52   ----..----TESTAR
 20 4E 4D 45 41 20 55 41 52 54 2D 2D 2D 2D 0A 0D    NMEA UART----..
 2D 2D 2D 2D 54 45 53 54 41 52 20 4E 4D 45 41 20   ----TESTAR NMEA 
 55 41 52 54 2D 2D 2D 2D 0A 0D 2D 2D 2D 2D 54 45   UART----..----TE
 53 54 41 52 20 4E 4D 45 41 20 55 41 52 54 2D 2D   STAR NMEA UART--
 2D 2D 0A 0D 2D 2D 2D 2D 54 45 53 54 41 52 20 4E   --..----TESTAR N
 4D 45 41 20 55 41 52 54 2D 2D 2D 2D 0A 0D 2D 2D   MEA UART----..--
 2D 2D 54 45 53 54 41 52 20 4E 4D 45 41 20 55 41   --TESTAR NMEA UA
 52 54 2D 2D 2D 2D 0A 0D                           RT----..        

Request: 2011-03-26 15:39:41.05664 (+0.0625 seconds)

 61                                                a               

Answer: 2011-03-26 15:39:41.25964 (+0.2031 seconds)

 2D 2D 2D 2D 54 45 53 54 41 52 20 4E 4D 45 41 20   ----TESTAR NMEA 
 55 41 52 54 2D 2D 2D 2D 0A 0D 2D 2D 2D 2D 54 45   UART----..----TE
 53 54 41 52 20 4E 4D 45 41 20 55 41 52 54 2D 2D   STAR NMEA UART--
 2D 2D 0A 0D                                       --..            

Request: 2011-03-26 15:39:42.57164 (+0.0625 seconds)

 61 61 61 61 61                                    aaaaa           

Answer: 2011-03-26 15:39:42.75964 (+0.0469 seconds)

 FC                                                ü               

Request: 2011-03-26 15:39:42.77564 (+0.0156 seconds)

 61 61 61 61 61 61 61 61                           aaaaaaaa        

Answer: 2011-03-26 15:39:42.02564 (+0.0469 seconds)

 FC                                                ü               

Request: 2011-03-26 15:39:42.07164 (+0.0469 seconds)

 61 61 61 61 61 61 61 61                           aaaaaaaa        

Answer: 2011-03-26 15:39:42.27564 (+0.0313 seconds)

 2D 2D 2D 2D 54 45 53 54 41 7E 20 4E 4D 45 41 20   ----TESTA~ NMEA 
 55 41 52 54 2D 2D 2D 2D EA C3                     UART----êà      

Request: 2011-03-26 15:39:42.27564 (+0.0000 seconds)

 61 61 61 61 61 61 61 61                           aaaaaaaa        

Answer: 2011-03-26 15:39:43.54064 (+0.0313 seconds)

 2D 2D 2D 2D 54 45 53 54 41 52 20 4E 4D F5 41 20   ----TESTAR NMõA 
 55 41 52 54 2D 2D 2D 2D 0A 0D                     UART----..      

Request: 2011-03-26 15:39:43.54064 (+0.0000 seconds)

 61 61 61 61 61                                    aaaaa           

Answer: 2011-03-26 15:39:43.79064 (+0.1250 seconds)

 2D 2D 2D 2D 54 45 53 54 41 52 20 4E 4D 45 41 20   ----TESTAR NMEA 
 55 41 52 54 2D 2D 2D 2D 0A 0D 2D 2D 2D 2D 54 45   UART----..----TE
 53 54 41 52 20 4E 4D 45 41 20 55 41 52 54 2D 2D   STAR NMEA UART--
 2D 2D 0A 0D                                       --..            

Request: 2011-03-26 15:39:43.13464 (+0.0938 seconds)

 0D 0A                                             ..              

Answer: 2011-03-26 15:39:43.38464 (+0.2500 seconds)

 2D 2D 2D 2D 54 45 53 54 41 52 20 4E 4D 45 41 20   ----TESTAR NMEA 
 55 41 52 54 2D 2D 2D 2D 0A 0D 2B 0A 0D 24 61 61   UART----..+..$aa
 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61   aaaaaaaaaaaaaaaa
 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61   aaaaaaaaaaaaaaaa
 61 0A 0D 2D 2D 2D 2D 54 45 53 54 41 52 20 4E 4D   a..----TESTAR NM
 45 41 20 55 41 52 54 2D 2D 2D 2D 0A 0D 2D 2D 2D   EA UART----..---
 2D 54 45 53 54 41 52 20 4E 4D 45 41 20 55 41 52   -TESTAR NMEA UAR
 54 2D 2D 2D 2D 0A 0D 2D 2D 2D 2D 54 45 53 54 41   T----..----TESTA
 52 20 4E 4D 45 41 20 55 41 52 54 2D 2D 2D 2D 0A   R NMEA UART----.
 0D 2D 2D 2D 2D 54 45 53 54 41 52 20 4E 4D 45 41   .----TESTAR NMEA
 20 55 41 52 54 2D 2D 2D 2D 0A 0D 2D 2D 2D 2D 54    UART----..----T
 45 53 54 41 52 20 4E 4D 45 41 20 55 41 52 54 2D   ESTAR NMEA UART-
 2D 2D 2D 0A 0D 2D 2D 2D 2D 54 45 53 54 41 52 20   ---..----TESTAR 
 4E 4D 45 41 20 55 41 52 54 2D 2D 2D 2D 0A 0D 2D   NMEA UART----..-
 2D 2D 2D 54 45 53 54 41 52 20 4E 4D 45 41 20 55   ---TESTAR NMEA U
 41 52 54 2D 2D 2D 2D 0A 0D 2D 2D 2D 2D 54 45 53   ART----..----TES
 54 41 52 20 4E 4D 45 41 20 55 41 52 54 2D 2D 2D   TAR NMEA UART---
 2D 0A 0D 2D 2D 2D 2D 54 45 53 54 41 52 20 4E 4D   -..----TESTAR NM
 45 41 20 55 41 52 54 2D 2D 2D 2D 0A 0D            EA UART----..   

Port closed

I det här fallet stämmer indata i Hyperterminal med data i monitorn. Men det är alltså inte alltid fallet. Ibland ballar det ur helt i HyperTerminal, men "rätt data" kommer in enligt monitorn.

Felaktiga 'ü' hoppar in mellan meningarna och bokstäver förstörs mitt i, t.ex.
"----TESTA~ NMEA UART----êÃ"

Om detta genereras i AVR:en så undrar jag hur??? Som sagt får jag exakt samma problem med en helt annan UART-rutin som sänder alla tecken ett och ett helt utan buffert eller interrupt. Om det kan vara nåt konstigt med UART-modulen i AVR som jag inte lyckats begripa? Att det blir nån flagga som signalerar fel av nån orsak... men in- och ut ska ju vara helt separata processer - de borde inte påverka varandra.
sodjan
EF Sponsor
Inlägg: 43249
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: buggiga terminalprogram (serieport)...

Inlägg av sodjan »

Det man skulle vilja verifiera är hur det ser ut på
själva "linjen" mellan AVR'en och PC'n. D.v.s verifiera
i vilken ände traffiken blir korrupt. Du har ingen linje-
lyssnare eller logikanalysator med UART dekodning ?

Eller, för att minska riskerna att det är i PC'n som det
inte hinns med (eller vad det nu är), två olika PC, en
för att skicka till AVR'en och en som bara loggar trafiken
ut från AVR'en.
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: buggiga terminalprogram (serieport)...

Inlägg av jesse »

>>en som bara loggar trafiken ut från AVR'en.

Det där var ju en smart idé. Det borde ju eliminera problemet. Om det sen visar sig att det fortfarande är knasiga data ut får man börja felsöka AVR-programmet och även hårdvaran... (jag har ju gjort buggiga program förut :roll: )

håller precis på att ladda ner Attachmate's "Reflection Standard Suite 2011 R1 Evaluation" om det nu hjälper i det här fallet...
blueint
Inlägg: 23238
Blev medlem: 4 juli 2006, 19:26:11
Kontakt:

Re: buggiga terminalprogram (serieport)...

Inlägg av blueint »

Felkällor:
* Typ av asynkronkrets, 16550A ?
* Operativsystem: "Windows"
* Hyperterminal
* Inställningar
* Ledningens egenskaper: glapp, kapacitans, induktans, interferens

I detta fall verkar det mest sannolikt med fel i ATmegas mjukvara :P, eller att den är för slö. Ibland kan det löna sig att gå över till polling läge. Detta används bl.a av FreeBSD vid extremt intensiv nätverkstrafik.

En test setup med en PC som läser av både RX & TX skulle vara optimalt. Detta förutsätter att två separata asynkronkretsar används. Och att dessa kan hantera hastigheten.
sodjan
EF Sponsor
Inlägg: 43249
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: buggiga terminalprogram (serieport)...

Inlägg av sodjan »

> ...om det nu hjälper i det här fallet...

Nja, om det hjälper vet vi ju inte, men personligen har jag större
förtroende för den än för HyperTerminal. Det finns många fler
konfigureringar på en lågre nivå t.ex.

Hojta till om det är något du undrar över. Sitter med Reflection
igång just nu med lite jobb... :-)

En snabb intro:
(Jag kör V 14.0, men förhoppningsvis stämmer det med 2011'an).

- Connection -> Connection Setup
Välj "Serial" och aktuell COM-port.
Välj 8/None för bit/paritet (antar jag).

- Setup -> Display
Öka eventuellt "Display memory" ifall default är för litet.
Ändra "Control characters" från "Interpret" till "Display" och du vill...
ie
EF Sponsor
Inlägg: 1372
Blev medlem: 23 oktober 2006, 13:12:57
Ort: Tyresö

Re: buggiga terminalprogram (serieport)...

Inlägg av ie »

Bygla ihop RX och TX på PC's och skicka ut en "stor" fil och se om det som kommer tillbaka blir korrupt.

Gör en enkel rutin i AVR'en som skickar t ex alafabetet 20 ggr och se om det fortfarande blir fel. (Mindre risk för fel i en enkel rutin.)

Du kollar vär att TX-buffern är tom innan du skickar nästa tecken i AVR'en?
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: buggiga terminalprogram (serieport)...

Inlägg av jesse »

>Gör en enkel rutin i AVR'en som skickar t ex alafabetet 20 ggr och se om det fortfarande blir fel. (Mindre risk för fel i en enkel rutin.)

Det är just det som är så märkligt. Vilken sändrutin jag än använder, och hur enkel den än är, så blir det störda tecken ut om jag får flera tecken in samtidigt.

Samma sak med hårdvaran: Jag får som sagt exakt samma problem med en likadan processor, fast med helt annan hårdvara runt om. I ena fallet en MAX232, i det andra fallet en hemmabyggd optiskt isolerad NMEA-länk.

Så antingen är det något grundläggande i USART-modulen i processorn som jag inte begriper mig på / gör fel... som till synes fungerar men att det uppstår något synkproblem när det händer för mycket....

eller så är det på PC-sidan något lurigt....
Men att flera av terminalprogrammen inte lyckas hålla reda på indata korrekt när de samtidigt skickar har jag kunnat verifiera... (eftersom det blir olika resultat beroende på viket program jag använder. HyperTerminal t.o.m. kraschar om den får för mycket data in) så jag är misstänksam... :doubt:

Kanske beror det på att PC:n skulle behöva ha DTR/CTS handskakning (eller vad det heter) men processorn bara är ansluten med RX och TX.
sodjan
EF Sponsor
Inlägg: 43249
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: buggiga terminalprogram (serieport)...

Inlägg av sodjan »

Men vid låga hastigheter (4800, 9600 eller liknande) så har jag svårt
att tro att en modern PC inte skulle hänga med. Som någon annan sa
så kan det ju vara något missförstånd kring hur AVR'en fungerar.
Den bör dock inte ha något problem med att sända och mottaga
samtidigt, d.v.s i själva USART modulen. Soen om programvaran har
någon bugg är ju lite svårt att veta/säga. D.v.s din programvara.

> Kanske beror det på att PC:n skulle behöva ha DTR/CTS handskakning

Hur har du ställt in porten/emulatorerna ? Kör du utan både mjuk
och/eller hård handskakning (vilket är rimligt eftersom AVR'en väl inte
per default har någon handskakning).
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: buggiga terminalprogram (serieport)...

Inlägg av jesse »

jag ska göra några enklare grundläggande programsnuttar och se vad jag kommer fram till.
Skriv svar