Debug Ausgaben

Gast #4620926
Lesenswert?

Guten Abend ich wollte den unten stehenden Code von Peter Dannegger 
verwenden.
Leider habe ich einige Probleme damit.
Ich wollte den Code für Debug Ausgaben verwenden bei Programmen wo keine 
Uart vorgesehen ist.
Sollte der Code auch mit Rc Oszillator funktionieren?
Wer verwendet den Code
Danke und Lg
1
#define F_CPU           8e6
2
#define BAUD            9600
3
#define STX_PORT        PORTB
4
#define STX_BIT         0
5

6
#define TX_SRAM         0
7
#define TX_FLASH        1
8

9
#include <util/delay.h>
10
#include <avr/io.h>
11
#include <avr/pgmspace.h>
12

13
void sputchar( uint8_t c )
14
{
15
  c = ~c;
16
  STX_PORT &= ~(1<<STX_BIT);            // start bit
17
  for( uint8_t i = 10; i; i-- ){        // 10 bits
18
    _delay_us( 1e6 / BAUD );            // bit duration
19
    if( c & 1 )
20
      STX_PORT &= ~(1<<STX_BIT);        // data bit 0
21
    else
22
      STX_PORT |= 1<<STX_BIT;           // data bit 1 or stop bit
23
    c >>= 1;
24
  }
25
}
26

27
void sputs( char *pt, uint8_t flag )
28
{
29
  uint8_t val;
30

31
  for(;;){
32
    if( flag )
33
      val = pgm_read_byte( pt );
34
    else
35
      val = *pt;
36
    if( val == 0 )
37
      return;
38
    sputchar( val );
39
    pt++;
40
  }
41
}
42

43
prog_char ftext[] = { "Hallo Peter\n" };
44

45
int main()
46
{
47
  for(;;){
48
    sputs( ftext, TX_FLASH );
49
    sputs( "Text im SRAM\n", TX_SRAM );
50
    _delay_ms( 1000 );
51
  }
52
}
Gast #4621237
Lesenswert?

user schrieb:
> Leider habe ich einige Probleme damit.

Was für Probleme? Kommt nicht das richtige Zeichen?

user schrieb:
> Sollte der Code auch mit Rc Oszillator funktionieren?

Er kann mit Sicherheit. Wenn allerdings der interne Oszillator zu 
ungenau ist und du dadurch keine genaue Baudrate bekommst, geht es 
direkt halt nicht. Evtl. kannst du den Oszillator trimmen, damit es 
passt!?
Gast #4621246
Lesenswert?

Erkläre uns doch mal, welche Probleme du hast.

Oder ich muss annehmen, dass das Problem mal wieder vor dem Rechner 
sitzt.
Und sei mal nicht so ungeduldig. Es gibt Leute die schlafen Nachts.

Vg
Thomas
Gast #4621450
Lesenswert?

Guten Morgen,
entschuldige das ich heute Morgen nochmal gestresst habe.

Mein Problem ist das von 5-6 Zeichen die ich schicken will die Hälfte 
falsch ankommen!
Wie kann ich den Rc Oszillator trimmen?
Vielen Dank & Liebe Grüße
#4621645
Lesenswert?

Para Noid schrieb:
> Außerdem
> würde ich erstmal 1200 als Baudrate versuchen, falls der Prozessor sehr
> ungenau takten sollte

Die Baudrate ist da fast völlig Wurst. Die Abweichungen werden sich 
prozentual nicht ändern.

Er bräuchte sowas wie das Autobauding vom LPC17xx UART. Das 
synchronisiert sich mit dem "A" (z.B. von "AT") auf die jeweilige 
Baudrate. Für den PC gibts sowas AFIAK leider nicht fertich.

Um den RC OSC zu trimmen bräuchte man eine Referenz Taktquelle zum 
Vergleich.

Es ist einfacher mit einem DSO die exakte Baudrate zu messen und die 
dann am PC einzustellen.
Gast #4621699
Lesenswert?

Para Noid schrieb:
> Hast du inzwischen mal das DDR als Ausgang gesetzt?

Ja das habe ich!

Jim M. schrieb:
> Hätte ich fast vergessen: Deine Debug Ausgaben funktionieren nicht mehr
> wenn Interrupts auftreten. Die verlängern das delay_us Timing.

In dem Testprogramm wo ich es probieren wollte habe ich keine 
Interrupts!

Oh D. schrieb:
> .. hihi ... datenblatt ...

was meinst du damit?
Lg und Danke

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren