Forum: Compiler & IDEs VRBOT Serial Protocol 1.6_ C - Programm zur Kommunikation


von Andy S. (andy11)


Angehängte Dateien:

Lesenswert?

Ich benutze einen Atmega8 (8MHz), der mit einem 4*20 Display verbunden 
ist um eine Spracherkennnung zu debuggen.

Das Prinzip meines Programms arbeitet so:

- Initialisierung

Hauptschleife:--------------------
  Starte SD Recog;
  Lese UART ein bis gesprochenes Wort erkannt wurde;

  Wenn erkannt:
    Frage ab welchen Index das Wort hat;
  Ansonsten:
    continue;

  Auswertung();
----------------------------------

Folgendes Problem tauchen auf:
- Das Wort wird erkannt aber die Indexnummer nicht.
- In der Beschreibung des Serial Protocols steht, dass man den gelesenen 
Index decodieren muss (versteh ich auch).
Und dies geschieht so:
1
uart_putc(' '); //get arguments (groupindex)
2
_delay_ms(22);
3
zuletzt_empfangen = uart_getc();
4
5
wortposition = zuletzt_empfangen - 'A';

Jedoch bekomme ich immer ARG_ERROR am Display angezeigt.
Was könnte der Grund dafür sein?

lg andy

von Andy S. (Gast)


Angehängte Dateien:

Lesenswert?

Ich habe mir das einmal angeschaut was im VRBOT EasyPic 5 drinnen steht, 
und muss ehrlich sagen, dass es keine Unterschiede zu meinem Programm 
gibt.

Ich habe mein Programm reingestellt und hoffe dadurch dass mir einer 
helfen kann einen Fehler zu finden.

lg andy

von Andy S. (Gast)


Lesenswert?

Ich glaube ich hab den Fisch raus, und zwar steht in der Dokumentation 
beim Beispiel nicht, dass man encodieren muss, und oben bei den ACKs 
steht auch nicht dabei, dass man bei Argumenten encodieren muss.

siehe diesen Abschnitt:
1
# start recognition in wordset 1
2
SEND 'i'
3
SEND 'B'
4
# wait for reply:
5
# (if 5s timeout has been set, wait for max 6s then abort
6
# otherwise trigger recognition could never end)
7
result = RECEIVE
8
IF result = 's' THEN
9
# successful recognition, ack and read result
10
SEND ' '
11
command = RECEIVE  'A'
12
# perform actions according to command
13
ELSE IF result = 't' THEN
14
# timed out, no word spoken
15
ELSE IF result = 'e' THEN
16
# error code, ack and read which one
17
SEND ' '
18
error = (RECEIVE  'A') * 16
19
SEND ' '
20
error = error + (RECEIVE  'A')
21
# perform actions according to error
22
ELSE
23
# invalid request or reply
24
ERROR
25
END IF

Das decodieren wird hier gemacht, aber das en codieren, auf das wird 
verzichtet, aus irgend einem Grund.

Auch oben steht wie man decodiren kann aber umgekehrt nicht.

Also da musste ich echt tief graben bis ichs raus kappt hab, puuuuhh!!

von Andy S. (Gast)


Lesenswert?

Nein, funktioniert doch nicht.

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.