www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Hilfe bei fprintf......


Autor: Danny (Gast)
Datum:

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

Autor: Danny (Gast)
Datum:

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

Autor: Zotteljedi (Gast)
Datum:

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

Autor: chrigu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
hast du schonmal probiert, das Display über den Terminal anzusteuern,
um zu prüfen, ob die Übertragung funktioniert?

Autor: Danny (Gast)
Datum:

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

Autor: Franz (Gast)
Datum:

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

Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wofür gibts wohl das forum pc-programmierung. da werden sie geholfen :)

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.