Debug Ausgaben

Gast #4620926
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
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
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
Gast
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
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
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
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
Gast
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.