Forum: Mikrocontroller und Digitale Elektronik baud einstellung beim httpserv projekt


von baur (Gast)


Lesenswert?

suche jemanden der mir bei meinen problem etwas auf die sprünge helfen 
könnte.
derjenige sollte sich im httpserv projekt etwas auskennen.
dort ist eine baud von 115200 eingestellt und ich sollte sie halbieren
das geht über u2x, den auf 0 setzten. dfas ist mir klar nur ich lese 
mich durch sämtliche dokus durch und finde den übergang zu meinem 
projekt nicht.
es ist egal wo und wie ich die werte verändere sie haben keine 
auswirkung oder sie werden nicht ausgeführt. ich bräuchte da eventuel 
eine erklärung warum nicht oder wo ich da am besten ansetzte.

keine anleitung wie es gemacht wird nur eine hilfestellung!!

dbaur

von Stefan (Gast)


Lesenswert?

Welcher µC? Wie sieht der Sourcecode an dieser Stelle aus? Welche 
Taktrate benutzt dein µC?

von Stefan (Gast)


Lesenswert?

Habe mir jetzt die Sourcen von Arthernet angesehen.

Die Einstellung der Baudrate ist über die Bibliotheksfunktion _ioctl() 
gekapselt und die direkte Manipulation der UART-Register bringt dir 
nichts.

httpserv.c (bzw. Originalversion httpserv.c__)
1
int main(void)
2
{
3
    // Definieren der Wunschbaudrate
4
    u_long baud = 57600; // bzw. 115200; in httpserv.c__
5
    u_char i;
6
7
    /*
8
     * Initialize the uart device.
9
     */
10
#if defined(__AVR__) || defined(WOLF)
11
    NutRegisterDevice(&devDebug0, 0, 0);
12
    freopen("uart0", "w", stdout);
13
#else
14
    NutRegisterDevice(&devDebug2, 0, 0);
15
    freopen("sci2dbg", "w", stdout);
16
#endif
17
18
    // Setzen der Wunschbaudrate
19
    _ioctl(_fileno(stdout), UART_SETSPEED, &baud); 
20
    ...

D.h. in der modifizierten Source ist die Baudrate bereits auf 57600 
halbiert. Du brauchst die Source bloss noch so zu übernehmen.

Allerdings musst du im Hinterkopf haben, dass aus dem angegebenen 
Wunschwert und der Taktrate die Werte für die Baudratenregister der UART 
berechnet werden.

Je nach Taktrate deines µC können dabei Werte herauskommen die einen 
mehr oder minder grossen Baudratenfehler besitzen.

Es kann sich lohnen einen Quarz mit "krummen" Frequenzen zu benutzen, 
bei dem Baudraten mit möglichst geringem Fehler möglich sind - einen 
sog. Baudratenquarz.

Welche Kombinationen von Baudrate/Taktrate gut geeignet sind, steht 
typischerweise im µC Datenblatt/Manual z.B. in den Tabellen "Examples of 
Baudrate Setting"

von Timo (Gast)


Lesenswert?

Rein Interesse halber: Du machst den ganzen Kram ja für eine 
Abschlussarbeit, oder? Wofür denn? Schule, Ausbildung, Studium?

von baur (Gast)


Lesenswert?

ok danke stefan
werde das mal übernehmen

von baur (Gast)


Lesenswert?

re timo

ja das ist mein abschlussprojekt meiner weiterbildung als 
elektrotechniker


dbaur

von baur (Gast)


Lesenswert?

RE: stefan

hab das übernommen:

nur beim builden mekert er mir:

!E F:\nut\app\httpd\httpserv.c(326): undeclared identifier `devDebug2'
!E F:\nut\app\httpd\httpserv.c(326): type error in argument 1 to 
`NutRegisterDevice'; found `pointer to int' expected `pointer to struct 
_NUTDEVICE'
F:\icc\bin\imakew.exe: Error code 1
Done: there are error(s). Exit code: 1


kann ich aus dem 'devdebug2' auch 'devdebug1' machen?

von Sven (Gast)


Lesenswert?

>kann ich aus dem 'devdebug2' auch 'devdebug1' machen?

Verstehst du eigentlich, was du da tust?

Wenn ich mir deine anderen Threads ansehe, dachte ich bisher eigentlich 
du bist ~12 Jahre alt, die Prüfung zum Techniker überrascht mich dann 
doch etwas.

von baur (Gast)


Lesenswert?

deshalb frage ich ja nach

von Stefan (Gast)


Lesenswert?

Du hast vermutlich (sehe deine Sourcezeile um 326 nicht) nicht die 
richtigen Defines gesetzt.

Der devdebug2 Fall ist in meiner Source aktiv, wenn _AVR_ und WOLF 
nicht definiert sind.
1
int main(void)
2
{
3
    u_long baud = 57600;
4
    u_char i;
5
6
  /* init LED */
7
  DDRB |= (1<<PB5);
8
  PORTB &= ~(1<<PB5); /* "visual alive" */
9
10
    /*
11
     * Initialize the uart device.
12
     */
13
#if defined(__AVR__) || defined(WOLF)
14
    NutRegisterDevice(&devDebug0, 0, 0);
15
    freopen("uart0", "w", stdout);
16
#else
17
    NutRegisterDevice(&devDebug2, 0, 0); // LINE 559
18
    freopen("sci2dbg", "w", stdout);
19
#endif
20
    _ioctl(_fileno(stdout), UART_SETSPEED, &baud);
21
    NutSleep(200);
22
    printf("\n\nNut/OS %s HTTP Daemon...", NutVersionString());

devdebug2 wäre für ein UART2, ich kenne jedoch nur AVR mit UART0 und 
max. UART1.

Du kannst sicher devdebug2 oder devdebug0 in devdebug1 ändern. Dann 
würde stdout auf UART1 kommen. Setzt voraus, dass dein AVR UART1 hat.

Ich würde aber zuerst dem Problem nachgehen, wieso in deiner 
Entwicklungsumgebung der Sourceteil übersetzt wird, der nicht für AVR 
angepasst ist.

von Sven (Gast)


Lesenswert?

Ja okay, nachfragen ist natürlich immer nicht schlecht, aber ich denke 
ich bin nicht der einzige der verwundert ist, dass du SO viel fragen 
musst. War dafür nicht die Zeit deiner Weiterbildung gedacht? Habt ihr 
da denn überhaupt nichts mit µC Programmierung gemacht? Dir scheinen 
einfach sehr viele Grundlagen zu fehlen.

von baur (Gast)


Lesenswert?

nein speziell µc haben wir nichts gemacht. und nur die wichtigsten 
grundlagen in c haben wir durchgemacht.

ich weis das c nicht ganz mein fall ist. dafür kann ich allerdings nicht 
viel. und das projekt muss gemacht werden. ob ich das kann oder nicht.

und das ich es mit fragen formulieren auch nicht wirklich drauf hab kann 
ja jeden sehen. hab halt nicht die weisheit gefressen so wie manche das 
von jemandem als grungvorraussetzung halten.

dbaur

von Karl H. (kbuchegg)


Lesenswert?

baur wrote:
> nein speziell µc haben wir nichts gemacht. und nur die wichtigsten
> grundlagen in c haben wir durchgemacht.
>
> ich weis das c nicht ganz mein fall ist. dafür kann ich allerdings nicht
> viel. und das projekt muss gemacht werden. ob ich das kann oder nicht.
>
> und das ich es mit fragen formulieren auch nicht wirklich drauf hab kann
> ja jeden sehen. hab halt nicht die weisheit gefressen so wie manche das
> von jemandem als grungvorraussetzung halten.

Niemand verlangt hier das man die Weisheit mit Löffeln
gefressen hat.

Wenn allerdings eine Abschlussarbeit das Herstellen eines
Aluteils beinhaltet und dann kommt die Frage wie rum man
denn die Feile zu halten habe, dann ist das etwas befremdlich.

von baur (Gast)


Lesenswert?

also gut dan gebe ich es auf.


noch schöne tage ohne mich


dbaur

von Sven (Gast)


Lesenswert?

Es geht wirklich nicht um Weisheit! Entschuldige, wenn ich dir zu nahe 
trete, aber deine Fragestellung ist größtenteils unter aller Sau! Wenn 
du dir dieses Problem selbst bewusst bist, musst du dich umso mehr 
bemühen die Fragen vernünftig zu stellen und dich nicht einfach damit 
abfinden, dass du es nicht kannst, und gekränkt sein, wenn jemand das 
Thema anspricht.

Du musst Fragen so stellen, dass ein "Unbeteiligter" dir nur durch lesen 
der Frage eine Antwort geben kann.

Das heißt, es müssen ALLE relevanten Informationen darin enthalten sein 
und du selbst musst GANZ genau wissen, was du erfragen möchtest und zwar 
nicht Marke: "Das geht alles nicht, was mache ich falsch?".

Als Techniker ERWARTET man einfach von dir solche grundlegenden 
Fertigkeiten  in deinem späteren Arbeitsleben, du tust also gut daran, 
dich in diesem Gebiet DEUTLICH zu verbessern!

von Gast (Gast)


Lesenswert?

Naja, da sich der inhaltliche Teil mit dem Ausstieg des Ursprungsposters 
ja erledigt hat, kann man ja mal ein wenig OT werden.

Ich lese hier zwar nur passiv mit, aber mir ist in letzter Zeit auch 
immer mehr aufgefallen, dass viele Fragen zu irgendwelchen 
Abschlussarbeiten/Diplomarbeite/... kommen. Die Frager haben meist gar 
keine oder kaum vorhandene Kenntnisse zu den verwendeten 
Mikrocontrollern oder den Problemen drum herum.

Ich verstehe das nicht, ist denn nicht deren Ausbildung davor(!) dafür 
zuständig die Grundlagen zu lernen. Zumindest das Lesen eines 
Datenblattes oder div. Webseiten sollte doch drin sein - und das hat 
absolut nichts mit Weisheit fressen zu tun (finde ich!). Konkrete Fragen 
stellen kann man dann immer noch.

Aber wer im Glashaus sitzt soll nicht mit Steinen werfen. Ich soll im 
Rahmen meiner Tätigkeit (FH) demnächst auch ein paar Studies die 
Grundlagen zur C-Programmierung am Beispiel eines kleinen Atmels 
beibringen. Gar nicht so einfach.

Schönen Tag noch....

von Jörg B. (manos)


Lesenswert?

Mach einfach einen Thread auf und wir machen das für Dich :)

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.