PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Baudrate anzeigen



Zapo.
22.03.2007, 20:20
hi,

kann mir jemand schnell verraten wie ich welchen Register auslesen/auswerten muß um die momentane Baudrate auszulesen und auf dem Display anzuzeigen?

in meine Quelltext ändere ich diese und nun möchte ich eben wissen welche gerade aktiv ist, bzw. der Anwender eingestellt hat.

ich verwende einen Mega32

oder geht das nur wenn ich umständlich bei jeder Baudratenänderung einen Text (String) beschreibe und die dann anzeigen lasse???

danke schonmal!

SIGINT
22.03.2007, 21:36
Hi zapo.,
mal ne blöde Frage: Wenn du die Baudrate einstellst, warum weisst du dann nicht, daß die Register UBRRL und UBRRH die aktuelle Baudrate enthalten?

Gruß,
SIGINT

Zapo.
22.03.2007, 21:58
nun, ich habe mich auch etwas blöde ausgedrückt,

die beiden Register sind mir wohl bekannt, nur da ich nicht so der VOLLProgrammierer bin und den Befehl in BASCOM BAUD = xxx anwende weiß ich eben nicht wie ich an einer beliebigen Stelle des Programms nun das / die Register auslese um zu sehen was gerade eingestellt ist.

@SIGINT
ich bin der Meinung: es gibt keine blöden Fragen... nur blöde Antworten! ...(außer meine Frage ganz oben..:-) die ist etwas doof)

SIGINT
23.03.2007, 14:58
Doch, meine Frage war blöd ;)
Ich hätte vorher mal nachschauen sollen, in welchem Unterforum ich Frage:
BASCOM hat ja extra die Baud Variable zum einstellen der Baudrate... da hat man mit den Registern nichts am Hut. Das ist auch ein Grund warum ich eigentlich kein Fan von BASIC bin.
Also:
Anscheinend musst du dir die Baudrate aus den Registern zusammenbasteln, da die Variable baud anscheinend nur schreibend genutzt werden kann.
Ich würde erst UBRRH in einer LONG Variablen speichern, dann 8mal links schieben (oder mal 256 nehmen) und UBRRL dazu addieren. Dann enthält diese Variable den UBRR Wert... bei bekanntem Quarz kannst du die Übertragungsrate mit folgender Formel bestimmen:
BAUD= fosc/16*(UBRR+1) (steht im Datenblatt)


Gruß,
SIGINT

Zapo.
23.03.2007, 17:56
okay, danke erstmal! werds mal bei Gelgenheit probieren!

Lemonsquash
23.03.2007, 22:25
Darf ich mich hier mal gleich anschließen?

Ich möchte die aktuelle TATSÄCHLICHE Baudrate anzeigen lassen (ähnlich der übertragungsgeschwindigkeit, die in den Browsern bei Downloads angezeigt wird) und zwar Live, also wärend der Übertragung. Kann ich das auch mit oben genannter Formel machen?

Danke und MFG,
Lemon

Bluesmash
23.03.2007, 22:33
die übertragungsgeschwindigkeit ist doch immer gleich? da die baudrate ja fix ist...
entweder wird gesendet oder nicht... und während dem senden ist die übertragungsgeschwindigkeit immer gleich...

gruss bluesmash

SIGINT
24.03.2007, 09:22
@Bluesmash: Genaus das...

@Lemonsquash:
Wie Bluesmash schon sagte ist die Übertragungsrate, einmal eingestellt, für die Übertragung konstant. Es macht keinen Sinn diese dynamisch anzupassen, es sei denn man möchte vor der Übertragung die Baudrate automatisch erkennen. Was du meinst ist der Datendurchsatz... das ist die effektive Übertragungsrate der Nutzdaten. Da kannst du aber nicht die Baudrate nehmen, da diese nur die maximal mögliche Übertragungsrate von Nutzdaten+Rahmendaten angibt... die effektive Übertragungsrate kannst du nur ermittel, indem du die Anzahl der gesendeten Daten über einen bestimmten Zeitraum ermittelst.

Gruß,
SIGINT

Lemonsquash
24.03.2007, 19:31
@SIGINT:

Genau, ich meinte Übertragungsgeschwindigkeit... :oops: Demnach sollte ich mir also ein Protokoll überlegen, welches
für jeden gesendeten/empfangenen Frame eine Antwort von der Gegenseite
erforderlich macht. So kann ich dann also

1. Herausfinden, ob alle Frames korrekt gesendet/empfangen wurden, und
2. die exakte Übertragungsgeschwindigkeit messen

SIGINT
24.03.2007, 19:46
Nummer 1 ist empfehlenswert aber eigentlich nicht notwendig, wenn eine sichere Verbindung garantiert werden kann, oder fehlerhafte Daten keinen Fehler verursachen.

Für Nummer 2 musst du halt in einer bestimmten Zeit die Anzahl der gesendeten Zeichen in diesem Zeitabschnitt ermitteln. Dieser Zeitabschnitt gibt dann die Latenz zwischen der aktuellen und angezeigten Übertragungsrate ab. Soll heißen: Wenn du eine Sekunde lang die Zeichen zählst, dann bekommst du immer die Übertragungsrate von der letzten Sekunde... und nie die im aktuellen Moment.

Gruß,
SIGINT

Lemonsquash
24.03.2007, 23:37
klar, eine gewisse Verzögerung ist immer dabei ;)

Aber damit kann ich leben... Das hört sich doch gut an, dann mach ich es so.

Danke derweil mal :D

Mfg.
Lemon