Prenášanie nameraných dát cez UART, CRC

Ahojte Páni!

Obraciam sa na Vás, lebo mi dochádzajú nápady :confused:

Dostal som sa do štádia, kedy potrebujem v PC vykresliť dáta namerané v MCU cez ADC. Jedna sa o prúdy pri spínačke PWM 10 kHz. Všetko okolo merania beží v poho, problém je zasielanie dat.

V MCU (Freecale@Kinetis) mam 12b ADC@10kHz, a dáta z neho potrebujem dostať do PC. UART je 8b, 115200,default.

  1. Môžem to poslať ako string, 4096 -> “4” + “0” + “9” + “6” + “CR”
    čož bude 40 bitov najmenej.

  2. Poslať to ako byte, 4096 -> HI(16) , LO(0) , CR(10)
    Tu je problém, ze CR(10) môžem dostať náhodne hocikedy…

  3. Použiť metódu 2, s tým, ze PC vždy potvrdí prijatie 24bitov, potvrdením, sa pošle nasledujúca trojica, poprípade dvojica (synchro prenos?)

4)… ?

S tým spracovaním v PC, doteraz som na čítanie dát a vykreslenie priebehu z UARTU používal Matlab, Ale 115200 sa mu nepáči, alebo môj (ne)vhodne napísaný kod. Druha otázka znie, aká je najvhodnejšia voľba na záznam dat a následne vykreslenie do priebehu (plot)? Napísať GUI vo WINAPI/QT alebo zabojovať s Matlabom (pre mňa asi prijateľnejšia voľba), alebo do tretice…?

Zhrnutie: 12b ADC@10 kHz -> UART 115200@8b -> PC
PC -> vykreslenie nameraných priebehov

PS: Rád zodpoviem na všetko, v túto nočnú hodinu ma nemuselo všetko napadnúť :slight_smile:

Díky Fero.

:arrow_right: administrator: přesunuto z "Elektronika s mikrokontroléry, procesory"

:arrow_right: administrator: přejmenováno z "Data cez UART"

Ahoj.
Dělal jsem autíčko řízené mobilem přes bluetooth modul, který simuloval rs232 komunikaci.
žádné CRC jsem neposílal a komunikace běžela, dokud autu nedošly baterky, tak jsem se na nejake crc vyrezignoval.
Protokol byl ve tvaru Ridici slovo (LEFT) mezera WORD. nebo RGHT mezera WORD. Tak jsem vzdycky vedel ze mam prijmout 7 byte a bylo to v pohodě.
Ovládací program byl napsaný pro android, takže to je něco jiného.
Pokud se Matlabu nelíbí tak rychlá kominukace, sniž to na 19200 a bude to uplne v pohode. Ty data staci posilat co sekudnu a nic se nestane.

Ahojte, vedel som že som niečo zabudol :slight_smile:.

Uvažoval som o realtime vykresľovaní, z dôvodu že sa jedná o riadenie motora, kedy by som potreboval vidieť presné priebehy prúdov, napätí nameraných cez ADC. Ale, tato požiadavka, vykresliť okno v Matlabe 10000 za sekundu je asi nereálna požiadavka, neviem.

Alebo použijem buffer, nabbuferujem hodnoty, potom ich presuniem cez UART, alebo použijem circular buffer, a budem hodnoty posielať priebežne.

Komunikácia na 115200 funguje, horšie je že túto rýchlosť neviem využiť naplno, MCU posiela, ale Matlab sa zasekne…

Môžem večer posunúť aj M-file, ak niekto riešiť takúto komunikáciu.

Diky, Fero.

Ahojte.
Tak po dlhšej úvahe, som to vyriešil tak, že, posielam 12 bitove čislo, kde ho v 16b premennej shiftenm o dve rady dolava, 1 a 15 bit dam do 1, ostatne ostavaju v nule, respektive podla hodnoty ktoru chcem preniest.

Potom cislo poslem cez uart, a len skontrolujem, ci prijaty retazec, 2x8b ma bity na spravnom mieste, ak hej akceptujem.

snad to niekomu nabuduce pomoze :slight_smile:

Fero.