Forum: PC-Programmierung LabVIEW - serielle Kommunikation µC


von W123 (Gast)


Lesenswert?

Hallo,

ich habe den ATmega32 von Pollin. Er ist fertig programmiert und 
schaltet ein Licht ein, wenn ich in Hyperterminal -> "Licht" eingebe. 
Der µC ist über RS232 mit dem PC verbunden. Jetzt möchte ich diese 
Funktion über VISA in LabView realisieren, doch leider ohne Erfolg.
Wenn ich dem VISA WRITE Bausteil die Konstante "Licht" gebe macht der µC 
nix. Müssen vieleicht noch Steuerzeichen vor und hinter "Licht"?

Danke für Antworten!

von Marco G. (stan)


Lesenswert?

Könnte es sein dass nach "Licht" noch ein <CR> oder <LF> kommen muss?
Welches Pollin-Board hast du genau? Link? Sourcecode?

von Marco G. (stan)


Lesenswert?

aus der Anleitung von AVR-NET-IO:
"Die nachfolgenden Kommandos können sowohl als TCP/IP-Anfrage als auch 
während einer direkten Terminalverbindung
verwendet werden. Jede Anfrage muss mit einem „\r\n“ abgeschlossen 
werden, als auch jede Antwort der AVR-NET-IO mit
einem „\r\n“ terminiert wird."

von W123 (Gast)


Lesenswert?

Es ist das AVR-NET-IO von Pollin.


Auszug aus der cmd.c
1
COMMAND_STRUCTUR COMMAND_TABELLE[] = // Befehls-Tabelle
2
{
3
  {"licht",command_licht},
4
5
.
6
.usw.
7
.
8
//------------------------------------------------------------------------------
9
//Commando auswerten
10
unsigned char extract_cmd (char *string_pointer)
11
{
12
  //Stringzeiger;
13
  char *string_pointer_tmp;
14
  unsigned char cmd_index = 0;
15
16
    string_pointer_tmp = strsep(&string_pointer," ");
17
18
  //Kommando in Tabelle suchen
19
  while(strcasecmp(COMMAND_TABELLE[cmd_index].cmd,string_pointer_tmp))
20
    {
21
        //Abruch Whileschleife und Unterprogramm verlassen
22
        if (COMMAND_TABELLE[++cmd_index].cmd == 0) return(0);
23
    }
24
25
    //Variablen finden und auswerten
26
  for (unsigned char a = 0; a<MAX_VAR;a++)
27
  {
28
        string_pointer_tmp = strsep(&string_pointer,"., ");
29
    variable[a] = strtol(string_pointer_tmp,NULL,0);
30
  }
31
32
    //Kommando ausführen
33
  COMMAND_TABELLE[cmd_index].fp();
34
  return(1);
35
}
36
37
//------------------------------------------------------------------------------
38
.
39
.usw
40
.
41
42
43
void command_licht (void)
44
{
45
  // 
46
   PORTA = 0x01;
47
    usart_write("Licht ist an! \r\n");
48
  
49
}

von Bobby (Gast)


Lesenswert?

@W123:
Du könntest auf den Gedanken kommen, die Anregung von Marco
zumindest auszuprobieren.
Ansonsten: In Deinem Code fehlt die Empfangsroutine !

von W123 (Gast)


Lesenswert?

Hallo Marco,

Danke für deine hilfreiche Antwort!

Es funktioniert!!! Danke! Merci! ...

Hat noch jemand eine Idee wie man in Labview die BOOL Anzeige-Elemente 
(LED-SIM) bei nochmaligem Durchlauf zurücksetzen kann?

Und wie man in Labview das letzte gesendete Byte solange buffert bis ein 
Neues kommt, damit bei neuem Durchlauf keine Null übernommen wird?

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.