mikrocontroller.net

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


Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: ichmirselber (Gast)
Datum:

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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also so in etwa :

ISR(USART_RXC_vect) //Empfangsinteruppt wird ausgelößt sobald ein Byte empfangen wurde
      {        
      PORTC^= (1<<PC0);
      }



Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eher so:
volatile uint8_t timeout;
:
:
ISR(USART_RXC_vect) 
      {        
          timeout = 255;     
      }
und in der mainloop (quick and dirty):
      if(timeout) {
         PORTC |= (1<<PC0);  -- LED einschalten
         timeout--;
      }
      else 
         PORTC &= ~(1<<PC0); -- nach gewisser Zeit: LED aus 

Autor: ... ... (docean) Benutzerseite
Datum:

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

Achtung LOW-CURRENT LED nehmen.

Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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??

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.