Hallo
Ich hab's nur kurz überflogen, aber müßte es nicht
for(int x=0;x<=5;x++)
lauten? Und am Ende der Ausgabe noch ein writeString_P("\n\r"); sonst wird die Ausgabe erst nach einem Rest sichtbar.
Gruß
mic
Guten tag ers ma an alle.
Ich zweifle langsam an meinem verstand....
Ich habe ein warscheinlich sehr simples problem und zwar möcht ich einfach daten an den rp6 schicken und er soll mir sie zurück schicken.
Mein code gibt aber ersteinmal garnichts zurück und wenn ich dann die start/stop taste drücke nur einen teil hier ist mein code
Ich wäre sehr dankbar für ein einfaches beispiel.Code:#include "RP6RobotBaseLib.h" char eingang[15]; void empfangen(void) { writeString_P("Bitte etwas eingeben -max 10 Zeichen-"); int i= getBufferLength(); writeChar('\n'); writeInteger(i,DEC); readChars(eingang,10); for(int x=0;x>=5;x++) writeChar(eingang[x]); } int main(void) { initRobotBase(); // Initialisierung – IMMER ALS ERSTES AUFRUFEN! powerON(); empfangen(); while(true) { } // Endlosschleife return 0; }
PS : Ja ich weiß das es dazu ein beispiel auf der cd gibt aber das ist mir zu undurchsichtig als anfänger.
gruß christian
Hallo
Ich hab's nur kurz überflogen, aber müßte es nicht
for(int x=0;x<=5;x++)
lauten? Und am Ende der Ausgabe noch ein writeString_P("\n\r"); sonst wird die Ausgabe erst nach einem Rest sichtbar.
Gruß
mic
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
mti der for schleife gebe ich dir recht aber was bewirkt denn das \r ?
EDIT:
Er gbit nur kleine vierecke aus ^^ es sieht so aus als wäre der string leer und wenn ich getBufferLength(); aufrufe steht dort auch nichts drin bis jetzt sieht der code so aus:
Code:#include "RP6RobotBaseLib.h" char eingang[15]; void empfangen(void) { writeString_P("Bitte etwas eingeben -max 10 Zeichen-"); int i= getBufferLength(); writeChar('\n'); writeInteger(i,DEC); writeString_P("\n\r"); do { readChars(eingang,10); }while(readChar()!='\n'); for(int x=0;x<=getBufferLength();x++) { writeChar(eingang[x]); } writeString_P("\n\r"); } int main(void) { initRobotBase(); // Initialisierung – IMMER ALS ERSTES AUFRUFEN! powerON(); empfangen(); while(true) { } // Endlosschleife return 0; }
Hallo
Ich bin auch verwirrt, irgendwie scheint der Lesebuffer der UART-LIB nicht richtig zu funktionieren:
Die Ausgabe dazu:Code:#include "RP6RobotBaseLib.h" char eingang[15]; int main(void) { char i; initRobotBase(); // Initialisierung – IMMER ALS ERSTES AUFRUFEN! powerON(); while(true) { writeString_P("Bitte etwas eingeben -max 10 Zeichen-"); writeString_P("\n\r"); i=0; do { while(!getBufferLength()); //warten solange keine Zeichen im Buffer while(getBufferLength()) // Zeichen aus Buffer einlesen eingang[i++]=readChar(); }while(i==0); eingang[i]=0; // Endekennung String nach letztem Zeichen writeString(eingang); writeString_P("\n\r"); } // Endlosschleife return 0; }
Aber ich kenne mich damit nicht wirklich aus. Vielleicht mal eine aktuellere Lib installieren? Es gab da mal ein Update beim Zeicheneinlesen soweit ich mich erinnere.Code:Terminal cleared! s Bitte etwas eingeben -max 10 Zeichen- # 1 1 Bitte etwas eingeben -max 10 Zeichen- Bitte etwas eingeben -max 10 Zeichen- # 12 1 Bitte etwas eingeben -max 10 Zeichen- 2 Bitte etwas eingeben -max 10 Zeichen- # 1234 1 Bitte etwas eingeben -max 10 Zeichen- 234 Bitte etwas eingeben -max 10 Zeichen- # 1234567890 1 Bitte etwas eingeben -max 10 Zeichen- 234567890 Bitte etwas eingeben -max 10 Zeichen-
Wichtig ist zu wissen, dass der RP6Loader keine einzelnen Zeichen schicken kann (leider) sondern immer die komplette Zeile nach [Return]. Das Hyperterminal kann das aber (mit 34800Baud).
Gruß
mic
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Also das es da ein update gabd as stimmt ich habe die neuste lib eingebunden ich probiere jetzt mal deinen code. Mal sehen obs klapt sons liegts an irgend etwas hier bei mir.
EDIT: Also es klapt habe die gleich ausgabe wie du nur sehr elegant is das ja nicht mh....
Aber danke für deine hilfe ich werde mich jetzt ers mal mit was anderem befassen bin aber weiter für lösungen offen ^^
christian
Ein frage ist mir jetzt aber doch noch eingefallen wie bekomme ich es hin das ich mit hilfe von zB hyperterminal mit dem rp6 kommunizieren kann. jedes mal wenn ich eine verbindung auf bauen will schaltet der rp6 ab egal mit welchem programm.
Welche verbindungs eigenschaften muss man wählen ich möcht nämlich später dann mit C# eine alternative zum loader schreiben.
Danke schon einmal für die hilfe
Hallo,
liegt sicherlich daran, dass HyperTerminal den Pin RTS von der seriellen Schnittstelle auf low setzt. RTS ist nämlich mit dem Reset Pin des Mikrocontrollers verbunden.
Teste es doch erstmal lieber mit HTerm:
http://www.der-hammer.info/terminal/
Hier wie es Konfiguriert werden muss:
http://www.arexx.com/rp6/downloads/HTerm_RP6.gif
Nene der funktioniert schon richtig, ist ein Ringpuffer und wird über einen INTERRUPT aufgefüllt - d.h. asynchron zum restlichen Programm.Ich bin auch verwirrt, irgendwie scheint der Lesebuffer der UART-LIB nicht richtig zu funktionieren:
D.h. zunächst ist da wirklich nur das erste Zeichen im Puffer, die anderen kommen dann direkt danach, das bekommt dein Programm da oben aber schon nicht mehr mit.
Du könntest aber z.B. ein kleines delay einbauen, oder eleganter auf das Zeilenende warten (\n).
Wenn ich mal irgendwann in ferner Zukunft wieder Zeit hab...Wichtig ist zu wissen, dass der RP6Loader keine einzelnen Zeichen schicken kann (leider) sondern immer die komplette Zeile nach [Return].
MfG,
SlyD
Hallo
Aha, das macht Sinn und funktioniert auch schon besser:Du könntest aber z.B. ein kleines delay einbauen, oder eleganter auf das Zeilenende warten (\n).
Die Ausgabe dazu:Code:#include "RP6RobotBaseLib.h" char eingang[15]; int main(void) { char i; initRobotBase(); // Initialisierung – IMMER ALS ERSTES AUFRUFEN! powerON(); while(true) { writeString_P("Bitte etwas eingeben -max 10 Zeichen-"); writeString_P("\n\r"); i=0; do { while(!getBufferLength()); //warten solange keine Zeichen im Buffer while(getBufferLength()) // Zeichen aus Buffer einlesen eingang[i++]=readChar(); }while((i<10) && (eingang[i-1] != '\n')); sleep(50); clearReceptionBuffer(); eingang[i]=0; // Endekennung String nach letztem Zeichen writeString(eingang); writeString_P("\n\r"); } // Endlosschleife return 0; }
Der Unterschied beim Zeilenvorschub kommt davon dass bei Strings <10 das \n vom Senden auch im String ist. Aber das ist eher ein kosmetischer Fehler...Code:Terminal cleared! Bitte etwas eingeben -max 10 Zeichen- # 123 123 Bitte etwas eingeben -max 10 Zeichen- # 1234567890 1234567890 Bitte etwas eingeben -max 10 Zeichen- # 11223344556677889900 1122334455 Bitte etwas eingeben -max 10 Zeichen- # juhu juhu Bitte etwas eingeben -max 10 Zeichen-
Gruß
mic
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Lesezeichen