Hallo Gemeinde,
ich habe hier ein seltsames Verhalten bei printf(). Währen printf()
ausgeführt wird, schaltet der PORT PB1 auf '0'.
Folgenden Code verwende ich auf dem AtMega168:
1 | void vfd_write( char data)
|
2 | {
|
3 | while ( ( UCSR0A & ( 1 << UDRE0)) == 0)
|
4 | ;
|
5 | UDR0 = data;
|
6 | }
|
7 |
|
8 | int vfd_put ( char data, FILE * stream )
|
9 | {
|
10 | vfd_write ( data );
|
11 | return (0);
|
12 | }
|
13 |
|
14 | FILE * vfd_out;
|
15 |
|
16 | int main ( void )
|
17 | {
|
18 | vfd_out = fdevopen ( vfd_put, NULL);
|
19 | while ( 1 )
|
20 | {
|
21 | vfd_write ( 0x10 ); // irgend etwas
|
22 | vfd_write ( 0x18 ); // noch etwas
|
23 | printf ("abcdef");
|
24 |
|
25 | [ ... noch viel anderes ... ]
|
26 | }
|
27 | return (0);
|
28 | }
|
Wenn ich das Programm starte wird während printf() PB1 auf '0' gelegt.
wie man in Bild scope_11 erkennen kann, sind die Impulse sogar
verschieden lang. Nehme ich printf() raus, bleibt PB0, wie er war.
Grün ist TxD und gelb ist PB1.
Weiß jemand Rat?
Gruß