Forum: Mikrocontroller und Digitale Elektronik Debug Ausgaben


von user (Gast)


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
}

von user (Gast)


Lesenswert?

hat jemand eine Idee?

von Frank (Gast)


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!?

von Para Noid (Gast)


Lesenswert?

Ich verwende den Code. Du setzt den Pin nicht als Ausgang. Außerdem 
würde ich erstmal 1200 als Baudrate versuchen, falls der Prozessor sehr 
ungenau takten sollte

von Frank (Gast)


Lesenswert?

Und gleich noch die banalste aller Fragen hinterher: hast du schon die 
8MHz gemessen? ClkDiv vielleicht noch angeschalteten?

Und hier ein möglicher Artikel wo der Code her sein könnte: 
Beitrag "Software UART mit delay"

von Thomas (Gast)


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

von user (Gast)


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

von Pandur S. (jetztnicht)


Lesenswert?

> .. Wie kann ich den Rc Oszillator trimmen?


.. hihi ... datenblatt ...

von Jim M. (turboj)


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.

von Jim M. (turboj)


Lesenswert?

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

von Para Noid (Gast)


Lesenswert?

Hast du inzwischen mal das DDR als Ausgang gesetzt?

von user (Gast)


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

von proggen (Gast)


Lesenswert?

user schrieb:
> Oh D. schrieb:
>> .. hihi ... datenblatt ...
>
> was meinst du damit?

RTFM! ;)

von user (Gast)


Lesenswert?

proggen schrieb:
> RTFM! ;)

verstehe ich jetzt nicht:-(

von proggen (Gast)


Lesenswert?

user schrieb:
> proggen schrieb:
>> RTFM! ;)
>
> verstehe ich jetzt nicht:-(

Read The Fu**ing Manual! ;)

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

Dies sollte dir wohl sagen, dass du die gesuchten Informationen im 
Datenblatt deines uC findest... ;)

von user (Gast)


Lesenswert?

proggen schrieb:
> Read The Fu**ing Manual! ;)
>
> Oh D. schrieb:
>> .. hihi ... datenblatt ...
>
> Dies sollte dir wohl sagen, dass du die gesuchten Informationen im
> Datenblatt deines uC findest... ;)

Oh nicht gut!
 Werde es mir ansehen!
Ist das allein das Problem?
Lg

von Para Noid (Gast)


Lesenswert?

Wie sind denn die Fusebits gesetzt?

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.