Ik zou 20MHz kiezen, dat geeft veel mooiere deeltallen bij timing loops alsdan een 18.432 kristal.
Dat is maar wat je timen wilt. Als het klok-gerelateerd is (zo'n ding wat de tijd aan geeft, niet iets wat virtueel tikt in een controller), dan is 20MHz helemaal niet zo mooi...
met 115k2 moet je serieus aan de bak om geen bytes te missen...
Kom op zeg... nog geen 12000 interrupts per seconde. Ruim 1500 cycles tussen de interrups. Tenzij je in een onmogelijke taal werkt of een beroerde architectuur hebt doe je dat binnenhalen en in een buffer mikken met 2 vingers in je neus. Of je de processing ook redt is natuurlijk afhankelijk van hoe complex die is.
baudsnelheid van de UART voor een optimale verwerking van de data.
We zullen het maar over een bitrate hebben - dat is wat eenduidiger (de uitdrukking 'Baud' komt uit modemland en heeft lang niet altijd een relatie met de bitrate; met een beetje handige modulatie kan 1 Baud best 4 of 16 bits per seconde doen).
De ontvanger wordt na elk frame gesynchroniseerd. Aangenomen dat je iets met N81 doet, is dat dus elke 10 bits op de lijn, zijnde elke byte. De gebruikelijke manier voor een UART om te ontvangen is op de leading flank van de startbit een timer starten die 150% van de bittijd loopt. Daarna wordt de lijn gesampeld, bit wordt bewaard, timer wordt gelijktijdig weer gestart op 1 bit tijd en daarna herhaalt het spelletje zit. Je moet dus feitelijk 9 bits 'gelijk genoeg' blijven lopen om minder dan een halve 'bittijd' verkeerd te zitten - en dus geen (framing)errors te krijgen (waarbij gemakshalve de aanname wordt gedaan dat de andere kant 'exact' is qua timing; de fout kun je natuurlijk prima 'delen' en Murphy schrijft voor dat de ene te snel en de andere te langzaam is
). 2.1% afwijking is niet de moeite waard daarin. Als je ellende hebt, dan zit die ergens anders.
Buffering blijkt voor veel programmeurs toch moeilijk. Interrupts ook. En beiden zijn doorgaans wenselijk voor betrouwbare communicatie. Zou het kunnen dat daar je ellende zit?