Forum: Mikrocontroller und Digitale Elektronik RS 232 Befehle


von Guy N. (Firma: Student) (lechristiano)


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 die Ausgangsspannung einzustellen.
Zur testen der  Schnittstellen RS 232 habe ich folgende Funktionnen 
getestet und alles hat wunderbar funktionniert: ich konnte Daten vom PC 
nach uC  senden.

Meine sorge ist folgendes: Ich werde später nicht nur Zahlen zur uC 
senden zw. empfangen sondern Zeichen wie ZB:  700V
Wie kann man das in der uC einprogrammieren ? Gibt es ein Protokol 
dafür, die man seine Befehle einprogrammieren muss ??

Kann jemand mir bitte dabei weiterhelfen ??

vielen Danke
1
/*
2
 * RS_232.c
3
 *
4
 * Created: 29.10.2012 10:11:53
5
 *  Author: HP_Advanced
6
 */ 
7
8
9
#include <avr/io.h>                   // Register Definition fuer Atmega 2560      
10
#include <delay.h>                    // Für Delay-Funktion
11
12
13
# define FOSC  8 000 000              // Clock Speed = Oscillator-Freq
14
#define  BAUD  9600                   //  Baudrate
15
#define MYUBRR FOSC/16/BAUD-1         // Geschwindigkeit der Kommunikation
16
17
18
/*------------------------------------------------------------------
19
Funktionen zum USART - RS232
20
------------------------------------------------------------------*/
21
void USART_Init( unsigned int ubrr )
22
{
23
  
24
    UBRR0H = (unsigned char)(ubrr>>8);
25
    UBRR0L = (unsigned char)ubrr;  
26
  UCSR0B = (1<<RXEN0)|(1<<TXEN0);       /* Enable receiver and transmitter */  
27
  UCSR0C = (1<<USBS0)|(3<<UCSZ00);      /* Set frame format: 8data, 2stop bit */
28
  
29
}
30
31
32
/* 8 Bit Wort senden */
33
void USART_Transmit( unsigned char data )
34
{
35
  
36
  while ( !( UCSR0A & (1<<UDRE0)) );    /* Wait for empty transmit buffer */    
37
  UDR0 = data;                          /* Put data into buffer, sends the data */
38
}
39
40
/* 8 Bit Wort Emfangen */
41
unsigned char USART_Receive( void )
42
{
43
  while ( !(UCSR0A & (1<<RXC0)) );    /* Wait for data to be received */  
44
  return UDR0;     /* Get and return received data from buffer */
45
}
46
47
48
49
50
int main(void)
51
{   
52
  USART_Init(MYUBRR);
53
 
54
    while(1)
55
    {
56
        USART_Transmit(65);
57
    _delay_ms(1000);
58
      // USART_Receive()
59
        
60
    }
61
}
62
63
}

von Reinhard Kern (Gast)


Lesenswert?

Guy Ngamy schrieb:
> Gibt es ein Protokol
> dafür

Nein, dafür nicht - du sendest einfach die ASCII-Zeichen '7','0','0' und 
'V'. Am besten noch ein 'CR', damit der Empfänger weiss, dass der Befehl 
jetzt vollständig ist, aber das kann man noch nicht als Protokoll 
bezeichnen. Protokolle kommen ins Spiel, wenn du die Übertragung gegen 
Fehler absichern willst, weiss nicht ob das bei dir erforderlich ist.

Gruss Reinhard

von Route_66 H. (route_66)


Lesenswert?

Hallo!
Das, was du suchst, nennt sich Protokoll. Da gibt es keine festen 
Vorgaben. Jeder Anwender denkt sich meist etwas Eigenes aus. Das kann 
rudimentär oder komfortabel sein.
Ein gewisser Komfort ergibt sich schon mal, wenn mann mit einem Sniffer 
die Befehle im Klartext mitlesen kann. Besser wird das Protokoll, wenn 
Sicherheitsmaßnahmen gegen Störungen, Verfälschungen, Unterbrechungen 
o.ä. eingebaut werden. Auch die Prüfung von Sinnhaftigkeiten ist üblich. 
Es kann z.B. eine bestimmte Reihenfolge nötig sein. Manchmal sind 
Time-Outs brauchbar - oder enge zeitliche Abstände. Es gibt auch 
Protokolle, die können eine gewisse Menge an Übertragungsfehler selbst 
korrigieren (abhängig von der Hamming Distanz).

Also, denkt euch was aus.

von Bronco (Gast)


Lesenswert?

Guy Ngamy schrieb:
> Gibt es ein Protokol
> dafür, die man seine Befehle einprogrammieren muss ??

Du bestimmst das Protokoll selbst!
Wenn Du z.B festlegst, daß "700V" bedeutet, daß der Generator 700V 
generieren soll, ist das schon ein Stückchen Protokoll.

von Guy N. (Firma: Student) (lechristiano)


Lesenswert?

vielen Dank für eure Hilfe

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.