Zdravim Vas. Uz dva dni sa pasujem s problemom rozchodit USART na mega8-ke no zatial bez uspechu a uz dochadzaju mi vysvetlenia preco to nefachci. Problem je taky ze napisany program v AVR studiu pi odsimulovani v virtual terminal (proteus) funguje podla ocakavani, avsak v skutocnom zapojeni , prijimam uplne nezmyselne znaky (konkretne pri odoslani znaku A prijimam 3x po sebe nasledujuce znaky 0x00. Prepojenie medzi procakom a PC pouzivam prevodnik USB/SERIAL s FT232RL (s TTL urovnami). Diky za kazdy napad...
Tak nejdřív ten procesor vytáhni z patice a propoj na ní RxD a TxD a data se ti musí nezměněná vracet do PC (nebo tam, odkud je posíláš). Tím vyloučíš/zjistíš případný hw problém.
tak vem log sondu sondu nebo oscilo a mrkni zda ti pri vysilani data z PC jdou do toho spravneho pinu nebo naopak kdyz vysilas z MCU tak koukni na to zda jdou data na spravny pin toho prevodniku.
jeste jedna drobnost, nebude ten prevodnik vyzadovat handshake tj, propojit rts/cts, dtr/dsr? to muze byt taky problem.
rychlost sice v tabulce neni ale da se, jak rikas, dopocitat. a spocital sis taky odchylku rychlosti tebou napocitanou od normovane? musi byt pod tusim pod 2%
program mas v C a to zatim nemuzu slouzit. to si vygoogluj.
jo az ted jsem si vsiml ze jedes na interni RC oscilator. a ten vis ze jede na 2MHz nebo jenom veris? tady taky muze byt zakladni problem. proste odchylka rychlosti od normovane je velka a pc jej nevezme. To by vysvetlovalo ze ti loopback chodi. mas rychlost, napr 1168b (chybovost mi vychazi na 2.66%) a pro RX a TX MCU. to funguje, proc ne. Ale pokud to chces pripojit s necim jinym, tak to fungovat nebude.
Program mas zkompilovany pro 2MHz,mas na procesoru nastavené pojistky pro interní rc oscilátor 2MHz? Rekl bych ze ne,default hodnota je 1MHz. Pokud pošleš z uP jednou znak 0x0A a přijdou ti tři nuly na PC,máš pravděpodobně menší baudrate na uP,nebo pomalejší hodiny.
bohumilfulin píše:jo az ted jsem si vsiml ze jedes na interni RC oscilator. a ten vis ze jede na 2MHz nebo jenom veris? tady taky muze byt zakladni problem. proste odchylka rychlosti od normovane je velka a pc jej nevezme. To by vysvetlovalo ze ti loopback chodi. mas rychlost, napr 1168b (chybovost mi vychazi na 2.66%) a pro RX a TX MCU. to funguje, proc ne. Ale pokud to chces pripojit s necim jinym, tak to fungovat nebude.
mega skutocne bezi na 2MHz. Aj pri tej odchylke ktoru si vypocital, by predsa 97,44% udajov prisla spravne nie?
S baudrate som skusal hybat hore dole a nic. Akurat som skompiloval tento program pre TINY2313, a je zaujimave ze bezi na 1. sup. Tak sa zda je mega ma nejake vyhrady k tomu programu....
kde je definovano F_CPU ? Pokud ho to bere jako 0, pak se UBRR dostane 0xffff, coz bude ultranizka rychlost, s dlouhy startbitem, ktery PC vyhodnoti jako 0x00, pokud mu nebude vadit, ze nejde stopbit.
F_CPU je definovane v <avr/io.h> nulove nieje , a pokial by nebolo definovane vobec , prekladac by hned hlacil chybu. Ale aj to bola jedna z veci ktore som tipoval ako zavadu, skusal som aj konkretnu frekvenciu CPU
>>>mega skutocne bezi na 2MHz. Aj pri tej odchylke ktoru si vypocital, by predsa 97,44% udajov prisla spravne nie?
-------------------
to ani nahodou!!! jednoducho se ti nezasynchronizuje port PC a neprijmes ani byte.
Tak ked to nejde lahko vezmi overeny kod a overene zapojenie HW z nejakeho tretieho zdroja a pokus sa postupne zistit kde je chyba.
mrkni oscilom co vysielas a s akymi bitovymi casmi,... Vsetko ostatne je len mudrovanie.
Tvrdis ze FW je OK, HW je OK, seriovy kabel je OK a nefunguje to. Asi nejake tvoje tvrdenie nebude uplne pravdive. V takomto pripade sa asi bez oscila nikam nepohnes. Podla toho co som cital za odpovede, vsetky zakladne moznosti chyby sme vycerpali. Tie nezakladne bez merania nemusis rychle objavit alebo vobec.
U megy8 sdílí registr UCSRC adresu s registrem UBRRH, rozlišují se nejvyšším bitem zapisovaných dat (URSEL), pro zápis do UCSRC musí být URSEL=1, v tom programu to nevidím.
Jak píše Andrea, zápis UCSRC = (0<<USBS)|(1<<UCSZ1)|(1<<UCSZ0);
přepíše UBRRH.
Kromě toho je zbytečný . Po resetu je nastaveno UCSZ0=1, UCSZ1=1, jak je vidět v popisu UCSRC v datašítu .