Rychlé posílání 24b po UARTU s rozdilným baud rate

Ahojte.
Potřebuju co nejrychleji poslat 24b UARTem z jednoho PIC do druhého.
Oba PIC jsou 16F1936
Vysílací PIC fičí na 20MHz, příjmací na 16MHz. Na odeslání dat mám jen nějakých 70us. Je to vůbec reálné takto rychle přenést? cca 45kB/s

Potřebuju je co nejvyšší rychlostí poslat do druhého pic, ale mám mezi PIC rozdílný baudrate, chyba do 5%. Co se bude dít? Bude to příjmat ptákoviny?

Varianta nataktovat oba MCU na shodný takty je až ta poslední.

No zrovna tieto frekvencie ne su vhodne pre UART :smiley: vyber z tabulky co je v datasete pripadne vypocitaj podla vzorca. Cim mensia chyba lepsie… pri dlhsej vzdialenosti mozes mat probem s primom vyslanych znakov.

Přenosová trasa je v pohodě, je jen 35cm dlouhá. 4 káblíky VCC, GND, TX a RX zakroucený do sebe. Když na to kouknu oscilem, tak to vyladá super, jak na výstupním pinu MCU. O to bych se vůbec nebál, mám bez problémů vyzkoušený RS232 při rychlosti 115kBaud po 40m dlouhým UTP (2 satelitní příjmače propojený mezi sebou).

Zkusím na oba PIC nahodit 20MHz krystal a rozhulákat co to půjde. Podle datasheetu zvládaj max 32MHz a bez problému se dal okotlit na 80 a vcelku dobře počítal, takže rozjet UART na víc než 115kBaud by mohl taky zvládnout. Navíc nikdy nebude k tomu připojený nic jinýho, takže není potřeba kompatibilita s okolním světem.

Ak mas obe PICna rovnakej frekvencii, tak staci obom zhodne nastavit UARTy. Npariklad pre BRG=1 a BRG16 = 1 by na 20MHz mala byt maximalna rychlost USARTu 5Mbps.
Ak mas na jednom 20MHz oscilator, na druhom 16MHz oscilator, tak maximalnu rychlost bez akychkolvek rozdielov v baudovej rychlosti dosiahnes na 1Mbps - jednemu nastavis SPBRG na 4 (tomu rychlejsiemu) a druhemu na 3 (tomu pomalsiemu). Do 70us sa zrejme zmestis.

Pocital som to narychlo z hlavy, je mozne ze som sa zmylil - treba to preverit podla datasheetu.

USART sa da na viac nez 115kBaud rozbehat aj s 1MHz krystalom.
Pretaktovavat nie je potrebne, navyse je to aj znacne nepredvidatelne.

Mimochodom, pokial ide o prenos len jednym smerom, da sa pouzit USART v synchronnom rezime, alebo pouzit SPI - to by bolo vhodnejsie nez pouzivat USART v asynchronnom rezime.

Jaromir: Díky.
Já myslel, že to co je psáno v datasheetu (115kBaud) je max hodnota co UART dá.
Data budu posílat obousměrně.

Hlavně teď narážím na problém, že se mi nedaří ošetřit přenos 3 znaků. Nikdy jsem takto data nikam neposílal a moje algorytmy s tím mají problém.

Přenos jednoho znaku tam a sem je bezproblémový.

Tie tabulky su len pre ilustraciu, aby si clovek vedel overit, ci su jeho vypocty OK, resp. aby bez pocitania rychlo prisiel k zelanej hodnote.
Hodnota SPBRG moze byt lubovolna, aka sa do registra zmesti a podla toho bude USART pracovat.

Co to znamena?
Zapises byte do TXREG a cakas kym sa zmeni TXIF - ten sa zmeni, ked je TXREG schopny prijat dalsi bajt, to je este pocas odosielania predchadzajuceho bajtu. Alebo mozes cakat na TRMT, ten sa zmeni az vtedy, ked je bajt kompletne odoslany. Ak zapises byte skor ako je nastaveny TXIF, tak sa predosly byte neodosle a mas problem.
Alebo som problem nepochopil, skus viac rozpisat, kde je problem.