Hallo Liebe Gemeinde,
nach Jahren stillen mitlesen, brauch ich nun eure Hilfe bei einem
Projekt wo ich selbst nur helfen möchte. :)
Für die Uni wird gefragt: wie man die Baudrate des UART berechnet.
Board: XYLINX NEXYS4 DDR, hat wohl eine Baudrate von 12Mbaud
das Bild von der Kamera ist downscaled auf 640x480/4 = 76800bytes
stimmt dann diese Rechnung: [(12M/10)/(640*480/4)] ?
1200000bit/S / 76800bytes
1200000bit/s / 614400bit
kann mir da jemand weiterhelfen? Vielen Dank im voraus!
Wieviel Start und Stopbits? Wenn du von einem Start- und einem Stopbit
ausgehst, stimmt deine Rechnung. Von einem UART mit 12MBaud hab ich
allerdings noch nie was gehört, das muss aber nichts heißen.
Die Rechnung verstehe ich nicht ganz. Warum 12M/10?
Edit:
Ja, man kann durch 10 teilen, dann sollte beim Ergebnis aber Byte stehen
und nicht Bit.
/Edit
Auf dem Board ist ein FT(2)232H, der kann maximal 12 MBaud. Was wirklich
gemacht wird hängt davon ab was du einstellst und was dein UART im FPGA
kann.
Ja, Achtung: Viele IP UARTs (auch die von Xilinx mit AXI) können ohne
Modifikationen keine 12 MBaud. Du müsstest also einen UART schreiben
oder suchen und verwenden.
Zusätzlich musst du auf den Takt achten. Bei 12 MBaud ist ein Bit 83.333
ns lang. Wenn du einen 100 MHz Takt verwendest und ein Bit 8 Takte lang
machst, dann ist jedes Bit um 3.333 ns zu kurz. Bei 9 Bits (Start+Daten)
sind das dann schon 30 ns. Das könnte grenzwertig oder fehlerhaft
werden. Also mit einer PLL einen geeigneteren Takt erzeugen, z. B. 120
MHz oder 96 MHz.
Dann zur Rechnung:
Die Baudrate ist noch nicht die Nutzdatenrate. Von den 12 MBaud können
im Idealfall 8/10 genutzt werden.
Datenrate = 12 MBaud*8/10 = 9,6 MBit/s.
Datenmenge = 640*480/4 Bytes = 76800 Bytes.
Zeitdauer = Datenmenge/Datenrate = 76800 Bytes / 9,6 MBit/s = 64 ms.
https://www.wolframalpha.com/input/?i=%28640*480%2F4%29Bytes%2F%2812*8%2F10%29MBit%2Fs
Vielen Dank für die schnellen Antworten, das hilft mir sehr.
mir ist leider ein Fehler unterlaufen, Datenmenge ist bit nicht byte:
Datenmenge = 76800bit
und konkret weiß ich, dass
Takt = 25MHz
kann ich so sagen wie ich die baudrate für das board berechne? diese
12Mbaud sind ja weit hergeholt, ich brauch ja nichtmal 9,6Mbaud...es
geht halt schon darum wie man den UART selbst schreibt und was die
Rechnung dahinter ist.
Würde mich über weitere Antworten sehr freuen :)
Rza D. schrieb:> Datenmenge = 76800bit
Schreib doch einfach welche Auflösung dein Bild und wie viel Bit jedes
seiner Pixel hat.
Rza D. schrieb:> Takt = 25MHz
Das ist recht egal, da du im FPGA eine andere Frequenz erzeugen kannst
und bei 25 MHz vermutlich auch machen musst wenn du mit höheren
Baudraten arbeiten willst.
Rza D. schrieb:> kann ich so sagen wie ich die baudrate für das board berechne?
Nein.
Rza D. schrieb:> ich brauch ja nichtmal 9,6Mbaud
Wie kommst du auf den Wert?
Die Information die fehlt ist:
In welcher Zeit soll die Datenmenge übertragen werden?
Wenn du da eine Sekunde Zeit hast, dann kommt eine deutlich geringere
minimale Baudrate raus wie wenn du nur wenige Millisekunden Zeit hast
für die Übertragung.
Rza D. schrieb:> es geht halt schon darum wie man den UART selbst schreibt> und was die Rechnung dahinter ist.
OK, du willst also den UART selber schreiben. Dann guck dir an wie
generell UART funktioniert.
https://de.wikipedia.org/wiki/Universal_Asynchronous_Receiver_Transmitter
Um deinen UART zu schreiben und zu testen brauchst du auch keine
Bilddaten oder so, du kannst dir einfach einzelne Bytes hin und her
schicken. Sinnvoll ist ein Loopback.
PC schickt zum UART, der empfängt, gibt Byte aus, das gleiche Byte wird
wieder dem UART gegeben, der sendet es zum PC und der vergleicht.
Du kannst auch noch eine Logik dahintersetzen die im empfangenen Byte
alle Bits invertiert und das dann sendet oder um 1 hochzählt und sendet,
...
Viel Spaß, einen UART zu schreiben ist eine schöne und sinnvolle
Übungsaufgabe.
Hallo,
also das Bild hat 640*480 pixel wird aber durch 4 geteilt (downscale)
1pixel entspricht 1bit
Ich hab mir schon gedacht, dass das ein anspruchsvolles Projekt ist.
Aber egal ich will das jetzt lernen.
Das Problem ist das ich bits und bytes etwas verdrehe.
Gustl B. schrieb:> Wie kommst du auf den Wert?
Ich dachte Mbaud = Mbit, deshalb habe ich deine Rechnung mit 8/10
angenommen
Gustl B. schrieb:> im Idealfall 8/10 genutzt werden.> Datenrate = 12 MBaud*8/10 = 9,6 MBit/s.
So wie du mir das jetzt erklärt hast, habe ich verstanden
Maximale Baudrate/Bild Größe = Bilder pro sekunde
bloß woher bekomme ich die Maximale Baudrate
Wirklich vielen Dank bis hier hin.
Grüße
Rza D. schrieb:> bloß woher bekomme ich die Maximale Baudrate
Du siehst den Schaltplan deiner Baugruppe an, und dann die Datenblätter
der im Signalpfad verwendeten Komponenten, und dann nimmst du den
niedrigsten Wert, den du dort an Datenrate findest. Das wars. Und dann
teilst du diese "Bruttomaximaldatenrate" noch durch 2, wenns
unkompliziert sein soll.
Rza D. schrieb:> diese 12Mbaud sind ja weit hergeholt, ich brauch ja nichtmal 9,6Mbaud...
Das ist im Grunde das selbe. Denn die 12MBd ist der Wert, wenn kein
Teilnehmer irgendeinen Schluckauf bekommt und zwischendurch "ein wenig
bremst". Erst wenn du mal einen Faktor von 2 oder gar eine Zehnerpotenz
drüber oder drunter bist, dann kannst du von "nichtmal" reden.
Jonas B. schrieb:> Der Meister hat es doch schon vorgekaut
Vermutlich könnte das hier sogar noch wesentlich einfacher ausfallen,
weil ja nur gesendet werden muss. Dafür ist das Timing viel leichter
herzustellen, weil ja kein Oversampling zur Erkennung der Bitmitte nötig
ist.