Forum: Mikrocontroller und Digitale Elektronik Wie bekomme ich eine Status Led für Uart


von Thorsten (Gast)


Lesenswert?

Hallo,
Ich benutze den C-Code aus dem Tut hier für die uart initialisierung und 
sende einfach den Zustand von einem Port auf den anderen Atmega und gebe 
ihn dort wieder aus .
Jetzt möchte ich gerne eine Status Led am Empfangsatmega haben, die 
anzeigt, wenn er etwas empfängt oder eben einen fehler anzeigt, wenn er 
nichts empfängt.

Wie kann ich sowas softwaremäßig realisieren oder wo muss ich anfangen ?

mfg Thorsten

von ichmirselber (Gast)


Lesenswert?

Kannst doch in der Interrupt-Routine nen Port für ne LED ansteuern.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> wenn er etwas empfängt
Das geht so ohne weiteres nicht.
Du kannst eine LED erst anschalten, wenn er etwas empfangen hat, denn 
erst dann bekommst du das mit. An dieser Stelle wäre dann auch der 
richtige Zeitpunkt, irgendwelche Fehlerflags (Overrun/Parity) 
auszuwerten und anzuzeigen.

> wenn er nichts empfängt.
Das ist für eine "übliche" SIO kein Fehler. Denn wenn nichts gesendet 
wird, kann auch nichts empfangen weren. In deiner Anwendung kann das 
aber ein Fehler sein, weil du evtl. dauernd sendest.

von Thorsten (Gast)


Lesenswert?

Also so in etwa :
1
ISR(USART_RXC_vect) //Empfangsinteruppt wird ausgelößt sobald ein Byte empfangen wurde
2
      {        
3
      PORTC^= (1<<PC0);
4
      }

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Das toggelt die LED mit jedem empfangenen Zeichen.
Und das ist sicher nicht, was du willst....

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Eher so:
1
volatile uint8_t timeout;
2
:
3
:
4
ISR(USART_RXC_vect) 
5
      {        
6
          timeout = 255;     
7
      }
und in der mainloop (quick and dirty):
1
      if(timeout) {
2
         PORTC |= (1<<PC0);  -- LED einschalten
3
         timeout--;
4
      }
5
      else 
6
         PORTC &= ~(1<<PC0); -- nach gewisser Zeit: LED aus

von ... .. (docean) Benutzerseite


Lesenswert?

vlt. einfach eine LED mit an den RX Pin, dann blinkt die LED wie wild 
wenn was ankommt...

Achtung LOW-CURRENT LED nehmen.

von Thorsten (Gast)


Lesenswert?

also wird demnach die Led erst angeschaltet, wenn die daten  bereits zum 
teil empfangen wurden, also nach einer bestimmten zeit und wenn halt in 
dieser Zeit nichts empfangen wurde, leuchtet sie eben nicht richtig??

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> also wird demnach die Led erst angeschaltet, wenn die daten  bereits zum
> teil empfangen wurden,
Das kommt darauf an, was man daraus macht...
Auf jeden Fall reagiert der Empfangsinterrupt erst, wenn 1 Byte komplett 
empfangen wurde.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.