Hilfe bei fprintf......

Gast #112836
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
Gast
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?
Gast
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.
Gast
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
Gast
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.