Ich habe folgendes Problem: Ich habe ein Touch-Display (EA-KIT 240-6 von Electronic Assemblly) das über RS232 angesteuert wird. Soweit o.k., senden über UART funktioniert mit damit: void uart_nachricht(char* senden) { for (; *senden != '\0'; senden++) { loop_until_bit_is_set(UCSRA, UDRE); UDR=*senden; } loop_until_bit_is_set(UCSRA, UDRE); UDR = 13; } Nur um das Display zu steuern (Makrofunktionen, Touchmakros, Text positionieren,.....) brauche ich die fprintf-Funktionen. fprintf(stdaux, "\x1BZL%c%c%s\x00", 7, 3, "Test"); [Beispiel aus der Doku vom Display: kurz: \x1B = 'ESC' ZL= Zeichenfolge, linksbündig x-Position:7 y-Pos.:3 \x00= Endekennung für das Display] Ich versuche es nun seit 3 Tagen und bin noch auf keinen grünen Zweig gekommen. Vielleicht kann mir hier ja jemand helfen. Bevor Fragen aufkommen: ich programmiere mit WinAVR und habe einen 90S8535. Bin euch schonmal Dankbar für die Hilfe..... Gruß Danny
Thread ohne Frage......guten Morgen..... Also die Frage ist nun: wie muss der fprintf-Befehl für den µC aussehen damit er die Zeichen über UART rausgibt?
Ich kann Dir nur sagen, wie es in C aussieht, uCs habe ich damit noch nicht programmiert. Wenn Du sprintf hast, dann kannst Du damit wie mit fprintf arbeiten,was rauskommt ist dann eine Zeichenkette, die Du an Deine andere Funktion verfüttern kannst char buf[32]; sprintf(buf, "Bla%c%s", 1, "bla"); uart_nachricht(buf); wobei sprintf das ganze automatisch mit \0 terminiert. Steht Dir das nicht zur Verfügung, mußt Du den String selbst zusammenzimmern, z.B. char buf[32], *p = buf, *text="Test"; *(p++) = 0x1b; *(p++) = 'Z'; *(p++) = 'L'; *(p++) = 7; *(p++) = 3; while (*text) *(p++) = *(text++); *p = '\0'; uart_nachricht(buf); aber falls Du kein sprintf hast, schreit es förmlich danach, das nachzubauen, wobei es bei Ziffern natürlich ätzend wird. Hast Du aber fprintf, wirst Du sicher auch sprintf haben, üblicherweise verwendet das intern alles vsprintf.
Hallo, hast du schonmal probiert, das Display über den Terminal anzusteuern, um zu prüfen, ob die Übertragung funktioniert?
Danke für die Hilfe, aber ich habs heute hinbekommen.... Das Display funktioniert einwandfrei. Mein Problem war nicht das \x1b sondern das \x00. Das \x1b braucht das Display damit es weiß, wann ein Befehl kommt und das \x00 markiert das Befehlsende. Hab dann einfach so gelöst: ... {uart_send("\x1bZL%c%c%s",7,3,"TEST"); (OHNE \x00!!) loop_until_bit_is_set(USR, UDRE); UDR=0x00; ... Damit funktioniert es. Geht aber auch mit: char buf[32]; sprintf(buf, "\x1bZL%c%c%s", 7, 3, "Was auch immer"); uart_nachricht(buf); loop_until_bit_is_set(USR, UDRE); UDR=0x00; Hab nur noch nicht rausbekommen warum das nicht funktioniert: sprintf(buf, "\x1bZL%c%c%s\x00", 7, 3, "Was auch immer"); Wenn \x1b geht, warum dann nicht \x00? Trotzdem Danke für die Hilfe! Gruß Danny
Eine Frage, die hier etwas abschweift aber für mich derzeit ein unlösbares Problem Darstellt: Funktioniert der Zugriff auf com1 mit stdaux unter winXP nicht? hab in etwa folgendes: #include <stdio.h> #include <string.h> int main() { sprintf(toWrite,"\x1BDL"); fprintf(stdaux,toWrite); } Richtig, ich versuch auch auf das EA KIT270-7 zu schreiben! mfg Franz
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.