while ( !( UCSRA & (1<<UDRE)) ); // ceka na vyprazdneni zasobniku
UDR = *"AA311A"; //printf ("AA311A");
Do registru UDR můžeš vložit jenom 1 znak (1 bajt).
Takže znaky musíš poslat postupně po jednom:
while ( !( UCSRA & (1<<UDRE)) );
UDR = 'A';
while ( !( UCSRA & (1<<UDRE)) );
UDR = 'A';
while ( !( UCSRA & (1<<UDRE)) );
UDR = '3';
while ( !( UCSRA & (1<<UDRE)) );
UDR = '1';
while ( !( UCSRA & (1<<UDRE)) );
UDR = '1';
while ( !( UCSRA & (1<<UDRE)) );
UDR = 'A';
To samé napsal Piityy pomocí smyčky “for”.
Jesli to funguje dle tvých představ tak výborně. Akorát tam zatím stále nemáš žádné zabezpečení. Už jednoduchý XOR (nebo součet) značně zlepší šanci na detekci chyby. Nyní rozpoznáš chybu pouze tehdy, když nepřijdou zasebou dvě A nebo bude neznámý příkaz. Chybu v nastavení řádku nebo zapisovaného znaku nepoznáš.
Zabezpečení každého bajtu řeším ještě sudou paritou. Bohužel nemám žádnou zpětnou vazbu, takže takové zabezpečení bude muset stačit. A v praxi podle mých testů to prozatím dostačuje, všechny informace se na displeji zobrazují v pořádku. Používám vysokofrekvenční moduly, které mají dosah 300m jenom na pár metrů, navíc teď nemám stejně čas řešit nějaké lepší zabezpečení. Zrovna bojuju s USB HID komunikací.
Tak to sis nabral trochu moc. Neumět ani odeslat řetězec po uartu a pokoušet se o usb mi přijde jako by se truhlář jal stavět jadernou elektrárnu. Ve tvém přpadě to snad alespoň nemůže nikoho ohrozit.
Ten čas, který do toho investuješ, za to rozhodně nestojí, alespoň ne se současnými dovednostmi. Převodník USB<->UART stojí kolem stovky. Má tvůj měsíční boj (jesli se to vůbec podaří) cenu <100,-? Pochybuji. To bych si šel tu stovku radši vydělat na brigádě v kravíně(za 2h mám hotovo).
Jsem rád, že budím dojem kvalitního programátora.
Hardware je hotovej takže dodělávám jenom software. Připojení k PC řeším V-USB (Virtual USB) a v pohodě to funguje jako HID zařízení, všechno je na konfigurovaný a funkční. Jenom musím vytvořit ovládací software pravděpodobně v Builderu. Přes tento soft hodlám pouze posílat data do UART a nic víc. Prozatím jsem to ovládal pouze přes příkazový řádek a nebylo to moc pohodlné.
Vzhledem k tomu ,že budu část obsahující USB předělávat na SMD abych dosáhl kompaktnější velikosti, tak jsi nechám rád poradit nějaký převodník. Třeba se to na desku ještě nějak vleze a předělám to.
Zkus mi tedy doporučit nějaký USB převodník, který podle tebe zvládne i programátor mých kvalit )
Jesli ti to chodí ke spokojenosti a umíš s tím na PC komunikovat z vlastního sw tak není problém a vyjde tě to naopak levněji (i tiny2313 nebo podobný se dá koupit v smd).
To máš 2 mcu (jeden s v-usb firmwarem a druhý svůj) nebo jen jeden a přijatá data zpracováváš v něm?
V C(++) asi tvoje řídicí aplikace na PC nebude. Jiný jazyk umíš?
Vlastní zkušenosti mám s obvody FTDI. V OS se obvod přihlásí jako COM a stejným způsobem s ním komunikuješ. Lze také využít nativní usb ovladače od výrobce.
FT232 má na výstupu uart, FT245 je paralelní, nejnovější FT2232 umí několik režimů včetně předchozích dvou a je rychlejší. Verze s “R” mají integrovanou eeprom, takže nepotřebují externí.
Na PC se to příhlásí jako HID zařízení a lze s tím komunikovat jako běžným HID zařízeným. Teď to chci jenom ovládat přes nějaké jednoduché grafické prostředí.
Desku jsem maximálně zjednodušil, hardware to je totiž moje. Mám tam jednu ATmega8, tři odpůrky, dvě zenerky, krystal(12MHz), pár kondíků a VF modul s anténou.
Takže všechno řídí jedna ATmega8. Je zbytečný tam toho dávat víc, mikrokontroléry mají při správném softwaru obrovské možnosti využití. Celý jsem to vymýšlel s ohledem na jednoduchost, účelnost a cenu.
Původně jsem uvažoval o použití FT232RL, ale myslím že bych musel použít ATmega s dvěma USART. Potom by podle mě celý zapojení vypadalo strašně složitě a cena by byla taky úplně jinde. Navíc bych to celý mnohem hůř cpal na desku velikosti flashky.
Proč nemůže být moje řídící aplikace na PC v C++?
Já bohužel jiný jazyk neumím:(
Už jsi něco v C na win psal? Právě podle obsahu toho tématu mi to tak nepřijde. Potřebné znalosti C++ pod win jsou na trochu jiné úrovni než pro mcu.
Pro C# se tu odemne dají najít příklady a IDE udělá spoustu práce za tebe. Jde tam psát metodou pokus omyl díky automatickýmu doplňování kódu, ale nedokážu si představit jak bojuješ s C na windows, kde bude před napsáním nějakýho řádku probíhat několik vteřin/minut hledání názvu nebo syntaxe. Jiná prostředí třeba doplňvání kódu umějí i v C, ale znám jen VS a to to neumí.
Už jsem asi před třema rokama něco málo psal v Builderu. Nějakej základ mám ,ale za moc to nestojí. Chci udělat jenom nějaký okno s pár tlačítky a komunikaci s HID zařízením. Snad to nějak zvládnu.
Ty máš nějaký zkušenosti s HID zařízením a posíláním přes reporty?
Nikoli. Známej s tím bojoval v bakalářce. Došel jsem k tomu, že mi to za tu námahu nestojí. Až to bude zaměstnavatel požadovat (u současného to nehrozí ) nebo se budu neuvěřitelně nudit, pak se uvidí.