UART Status abfragen

  • 1
  • 2
  • Page 1 of 2
pvs-deck
PowerUser
Avatar
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1341
Registered: 02 / 2009
Subject:

UART Status abfragen

 · 
Posted: 10.05.2011 - 13:25  ·  #1
Hallo Leute.

Ich möchte gerne eine LED auf meinem Board entsprechend der aktivität meiner UARTs ansteuern.

Mit der normalen PINx Abfrage geht das nicht, muss ich dazu ein bestimmtes register abfragen?
Und wenn ja welches?

Ich wollte das in etwa so machen:
Code

// COM LED Status

OUT_LED_COM  :=  (UART_RXD0 OR UART_TXD0 or UART_RXD1 
                               or UART_TXD1 or UART_RXD2 OR UART_TXD2);



Eine Idee?

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

Re: UART Status abfragen

 · 
Posted: 10.05.2011 - 15:25  ·  #2
Hallo Thorsten,

Vorsicht beim UART Register auslesen! Das kann Veränderungen in den Registern nach sich ziehen!
Besser wäre es vielleicht das RxStat abzufragen.

rolf
pvs-deck
PowerUser
Avatar
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1341
Registered: 02 / 2009
Subject:

Re: UART Status abfragen

 · 
Posted: 13.05.2011 - 19:18  ·  #3
Hallo Rolf.

Quote by rh

Besser wäre es vielleicht das RxStat abzufragen.


OK, habe ich mal schnell getestet, aber habe ich hier einen Denkfehler oder sind die Bits einfach nicht lange genug HIGH/LOW ?

Code

// COM LED Status
OUT_LED_COM := ( ucsr0a.7 ) OR (ucsr0a.6 );


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

Re: UART Status abfragen

 · 
Posted: 13.05.2011 - 21:41  ·  #4
Hallo Thorsten

und warum nicht
OUT_LED_COM:= RxStat;

rolf
pvs-deck
PowerUser
Avatar
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1341
Registered: 02 / 2009
Subject:

Re: UART Status abfragen

 · 
Posted: 14.05.2011 - 13:56  ·  #5
Hallo Rolf ;)
Quote by rh

Hallo Thorsten

und warum nicht
OUT_LED_COM:= RxStat;

rolf


Das ist natürlich auch eine Möglichkeit :-/

Werde ich mal probieren.

Gruß
Thorsten
pvs-deck
PowerUser
Avatar
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1341
Registered: 02 / 2009
Subject:

Re: UART Status abfragen

 · 
Posted: 14.05.2011 - 14:11  ·  #6
Hallo Rolf.
Quote by rh

Hallo Thorsten

und warum nicht
OUT_LED_COM:= RxStat;

rolf


Also mein Compiler kennt "RxStat" nicht, brauche ich dafür einen speziellen Import für den 2560?
Ich dachte der ist File vom 2560?

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

Re: UART Status abfragen

 · 
Posted: 14.05.2011 - 21:09  ·  #7
Hallo Thorsten,

sorry, ich meinte SerStat

rolf
pvs-deck
PowerUser
Avatar
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1341
Registered: 02 / 2009
Subject:

Re: UART Status abfragen

 · 
Posted: 03.01.2014 - 12:15  ·  #8
Quote by rh

Hallo Thorsten,

sorry, ich meinte SerStat

rolf


Hallo Rolf,

das hat jetzt in einer ganzen Menge Projekten ziemlich lange funktioniert.
Aber seit einigen Updates läuft das nicht mehr?

Oder ist mein uC zu schnell ;) 14,7456MHz

Ich bin mir sicher das hatte damals funktioniert man hat immer ein pulsen auf der LED erkennen können. mittlerweile ist diese nur noch dunkel.
Da ich jetzt etwas Zeit habe bin ich mal auf die Suche gegangen, Mega1284P mit 14,7456MHz

Da ich es mit der Funktion "OUT_LED_COM:= SerStat2;" nicht mehr hinbekomme, nutze
ich den SerCtrl2 zum ansteuern der LED, leider habe ich aber somit nur ein blitzen auf der LED wenn mein uC selbst auf senden schaltet und nicht wenn Daten ankommmen.

Ich bin mir eigentlich sicher das es mal eine ganze Zeit funktioniert hatte:

Code

.......
Define
//Serport1
  SerPort        = 19200, Stop1;    {Baud, StopBits|Parity}
  RxBuffer       = 064, iData;
  TxBuffer       = 064, iData;

//Serport2
  SerPort2    = 19200, Databit8,parNone, Stop1;
  RxBuffer2       = 255, iData;
  TxBuffer2       = 100, iData;
  SerCtrl2        = PortB, 2, positive; {control line for RS485 driver}
  ModBus      = SerPort2, 40, iData, 240;
  ModBusMode  = {ASCII;} RTU, Timer1;

........
var
...........
 OUT_LED_COM          [@PortD, 5 ] : bit;
 OUT_RSEnable         [@PortB, 2 ] : bit;

........
// Anzeige des COMSTATUS
procedure COMLED;
begin
 OUT_LED_COM:= NOT( OUT_RSEnable );
end; // ENDE COMLED
.....

{ Main Program }
{$IDATA}
begin
  COMLED; // Anzeige des COMSTATUS



Hier ist der ASM-Code von der Funktion mit SerCtrl2
Code
PVS_ILS_CPU.COMLED:
                        .RETURNS   0
                        .BLOCK    922
                        .LINE     923
                        CLR       _ACCA
                        SBIC      025h, 002h
                        SER       _ACCA
                        COM       _ACCA
                        CLT
                        TST       _ACCA
                        BREQ      PVS_ILS_CPU._L0476
                        SET



Das ist der ASM-Code der leider nicht mehr läuft:
Code
PVS_ILS_CPU.COMLED:
                        .RETURNS   0
                        .BLOCK    922
                        .LINE     925
                        CALL       SYSTEM.SERSTAT2

                        CLT
                        TST       _ACCA
                        BREQ      PVS_ILS_CPU._L0476
                        SET

Vielleicht habe ich auch einen Denkfehler.

AVRco ist die aktuelle Version

Gruss
Thorsten
  • 1
  • 2
  • Page 1 of 2
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   141   155 · Page-Gen-Time: 0.037753s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI