Forum: Mikrocontroller und Digitale Elektronik RS_232 Kommunikation


von Claude (Gast)


Lesenswert?

Hallo an Alle,
Ich bin Student (Praktikant) und wir wollen einen Leistungsgenerator:
1KV_Ausgangspannung und dazu ein  Kommunikationsboard aufbauen. Auf dem
Kommunikationsboard sollte 3
Kommunikationsschnittstellen (RS 232, USB und Ethernet) zur Verfügung
gestellt werden. Von diese Schnittstellen(RS 232, USB und Ethernet)
sollte es möglich sein durch uC(Atmega2560) die Ausgangsspannung 
einzustellen.
Der Test der  Schnittstellen RS 232  hat wunderbar funktionniert: ich 
konnte Daten vom PC nach uC  senden.

Meine sorge ist aber folgendes: Ich werde später nicht nur Zahlen zur uC
senden bzw. empfangen sondern Befehle wie ZB:  volt 700
Ich habe mir dafür ein Protokol  ausgedacht und  das code ist unten zu 
finden.Ich lese zu erst das ganze Befehl als ein String und mache eine 
Auswertung mit strcmp damit habe ich volt, ich werde später Daten 
Auswertung mit atoi machen.


Fragen:

1- Ist mein code soweit  sinnvoll ?
2- Gibt es bessere alternative ?
3- Warum erkennt AVR der Typ boolean nicht?


Kann jemand mir bitte dabei weiterhelfen ??

vielen Danke
1
#include <avr/io.h>
2
#include <interrupt.h>
3
4
5
#define LENG 15;                        // Länge des gesamten  Befehlsvector: read_buff[LENG];
6
7
volatile  char komd_1[] = "volt";      // Befehl_1
8
volatile  char komd_2[] = "curr";      // Befehl_1
9
10
volatile unsigned int i;               // Index von  read_buff[LENG];
11
volatile  boolean read_rcv;            // Zum Kontrolieren ob Data empfangen wurde
12
volatile  char read_buff[LENG];        // Tabelle um das gesamte Befehl einzulesen
13
14
15
SIGNAL(SIG_USART1_RECV)                // Interrupt zum Einlesen der empfangenen Daten ( Befehl) 
16
{  
17
    read_buff[i] = UDR;                // Schreiben eines Bits aus UDR ins read_buff[i]
18
    if(++i>=15)                      // Kontroliert ob man schon am Ende vom read_buff[i]
19
    {
20
    i=0;  
21
    }
22
  read_rcv = True;
23
}
24
25
26
int main(void)
27
{
28
    while(1)
29
   {  
30
    sei()
31
      if (read_rcv == TRUE) 
32
    { 
33
      if (strcmp(komd_1,read_buff[0,3]==0))     // Vergleich vom konstanten Komd_1 mit dem 4 erste Charakters des Befehls: Auswertung
34
        {
35
        // do something
36
        
37
      }  else if (strcmp(komd_2,read_buff[0,3]==0))      // Vergleich vom konstanten Komd_2 (curr) mit dem 4 erste Charakters des Befehls
38
    
39
          {
40
                 // do something
41
           }       
42
    
43
    }  else  
44
         { transmit_Felh ("Fehler");

: Gesperrt durch User
von Karl H. (kbuchegg)


Lesenswert?


Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.