Forum: Compiler & IDEs printf() am ATmega16 benutzen


von Tobias Neumann (Gast)


Lesenswert?

Hallo zusammen,
ich programmiere einen ATmega16 und will folgendes tun:

Ich will meiner stdio sagen das sie den Text den ich an printf() 
uebergebe an die Serielle Schnittstelle senden soll. Ich habe jedoch 
keine Ahnung wie ich das implementieren soll. Ich habe bereits einiges 
mit dem ATmega16 gemacht.. kenne mich mit den Eigenschaften des 
Controllers recht gut aus. Jedoch weiß ich nicht wie ich das umsetzten 
soll.. kann mir da jemand helfen?

von Hc Z. (mizch)


Lesenswert?

http://www.nongnu.org/avr-libc/user-manual/group__avr__stdio.html

Da ist Beispielcode dabei.  Zur Verfügung stellen musst Du nur eine 
Routine, die ein Zeichen ausgibt (und eine, die eines einliest, falls Du 
die umgekehrte Richtung auch benötigst).

von Tobias Neumann (Gast)


Lesenswert?

danke!
Ich lese es mir mal durch. :)

von Tobias Neumann (Gast)


Lesenswert?

Hallo,
ich kann den richtigen Beispielcode irgendwie nicht finden.. könntest du 
einen vielleicht hierein quoten?.. Wäre super.. Danke schonma im Voraus!

von Hc Z. (mizch)


Lesenswert?

Na ja ... er ist kurz, also:
1
    #include <stdio.h>
2
3
    static int uart_putchar(char c, FILE *stream);
4
5
    static FILE mystdout = FDEV_SETUP_STREAM(uart_putchar, NULL,
6
                                             _FDEV_SETUP_WRITE);
7
8
    static int
9
    uart_putchar(char c, FILE *stream)
10
    {
11
12
      if (c == '\n')
13
        uart_putchar('\r', stream);
14
      loop_until_bit_is_set(UCSRA, UDRE);
15
      UDR = c;
16
      return 0;
17
    }
18
19
    int
20
    main(void)
21
    {
22
      init_uart();
23
      stdout = &mystdout;
24
      printf("Hello, world!\n");
25
26
      return 0;
27
    }

Ein Programm, das bis auf init_uart() komplett ist und via printf() 
einen String am UART ausgibt.  Natürlich muss Du die UART-Register auf 
Deinen µC anpassen.

von Tobias Neumann (Gast)


Lesenswert?

Wie konnte ich das denn übersehen.. :)

Ich probiers gleich mal aus :)

von Tobias Neumann (Gast)


Lesenswert?

Funktioniert einwandfrei.. Vielen Dank!

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
Noch kein Account? Hier anmelden.