Atmega UART Befehle senden

Gast #1357742
Lesenswert?

Ja.

Spass beiseite. Bemüht mann gooooogle oder die forensuche findet man 
hier einiges. Sogar im GCC-Tutorial für den AVR im bereich UART findet 
man entsprechende links.

das einfachste ist, einfach das signal SIG_UART_RECV auswerten.
bzw ne FIFO oder nen Puffer bauen.
1
 
2

3
#define BUFLEN 128
4
volatile unsigned char buffer[BUFLEN];
5
volatile unsigned char rx_ptr = 0;
6

7
SIGNAL(SIG_UART_RECV)
8
{
9
  buffer[rx_ptr] = UDR;           
10
  if (++rx_ptr >= BUFLEN) rx_ptr = 0;
11
}

Du definierstt dir einen Puffer, jedesmal, wenn die UART ein Zeichen 
empfängt, hängst du es an den puffer an und inkrementierst den 
Schreibzeiger.
Am besten Pollst du nun oder, wenns nicht zu Komplex ist, bastelst du 
die Auswertung in die SIGNAL ISR mit rein. Pollen kommt aber IMHO 
(wirklich nur meine meinung!) am besten.
Du prüfst nun, ob das zeichen rx_ptr-- == \n (oder was immer du als 
"kommando vollständig" haben möchtest) ist. wenn dies so ist, wertest du 
den Inhalt (abzgl. \n) aus und setzt rx_ptr wieder auf 0.

d.h.
1
void main()
2
{
3
  unsigned char temp_buf [BUFLEN];
4
  while(1)
5
  {
6
     // Do some fancy stuff
7
     if (buffer[rx_ptr-1] == '\n')
8
     {
9
        // Kopiere buffer in temp_buf, damit ein erneutes SIGNAL dir den buf nicht zerschießt
10
       // werte temp_buf aus. nen anhaltspunkt ist ein switch()case-Konstrukt
11
     }
12
}

ich denke, so in etwa müsste es klappen. ich arbeite zwar beruflich viel 
mit c/c++, aber in der uC-Welt bin ich noch nicht allzulange zu hause.
wie gesagt. das meiste findet man bei google......
#1357904
Lesenswert?

Bastinator schrieb:
> das einfachste ist, einfach das signal SIG_UART_RECV auswerten.
> bzw ne FIFO oder nen Puffer bauen.

Das ist schon gar nicht mal so verkehrt.


>      // Do some fancy stuff
>      if (buffer[rx_ptr-1] == '\n')
>      {

Das geht aber mit Sicherheit schief.

Schlag ihm keinen Ringbuffer vor, wenn du ihn noch nicht beherrscht.
Ein stinknormaler linearer Buffer in dem Zeichen bis zum '\n' gesammelt 
werden (in der ISR) tuts fürs erste auch und ist für den TO leichter zu 
beherrschen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren