mikrocontroller.net

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


Autor: Andy S. (andy11)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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:
uart_putc(' '); //get arguments (groupindex)
_delay_ms(22);
zuletzt_empfangen = uart_getc();

wortposition = zuletzt_empfangen - 'A';

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

lg andy

Autor: Andy S. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Andy S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
# start recognition in wordset 1
SEND 'i'
SEND 'B'
# wait for reply:
# (if 5s timeout has been set, wait for max 6s then abort
# otherwise trigger recognition could never end)
result = RECEIVE
IF result = 's' THEN
# successful recognition, ack and read result
SEND ' '
command = RECEIVE  'A'
# perform actions according to command
ELSE IF result = 't' THEN
# timed out, no word spoken
ELSE IF result = 'e' THEN
# error code, ack and read which one
SEND ' '
error = (RECEIVE  'A') * 16
SEND ' '
error = error + (RECEIVE  'A')
# perform actions according to error
ELSE
# invalid request or reply
ERROR
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!!

Autor: Andy S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, funktioniert doch nicht.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.