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...
// Set frame format to 8 data bits, no parity, 1 stop bit
UCSRC = (0<<USBS)|(1<<UCSZ1)|(1<<UCSZ0);
// Enable receiver and transmitter
UCSRB = (1<<RXEN)|(1<<TXEN);
UCSRA = (0<<U2X);
}
//UASRT TX
void USART_Transmit( unsigned char data )
{
/* Wait for empty transmit buffer */
while ( !( UCSRA & (1<<UDRE)) )
;
/* Put data into buffer, sends the data */
UDR = data;
}
//USART RX
unsigned char USART_Receive( void )
{
/* Wait for data to be received */
while ( !(UCSRA & (1<<RXC)) )
;
/* Get and return received data from buffer */
return UDR;
}
int main ()
{
DDRD |=(1<<1);//PORTD,1 nastaveny ako vystup
USART_vInit();//incializacia USART
send_byte = 'A';
while(1)
{
USART_Transmit(send_byte);//odosle znak A kazdu sekundu
_delay_ms(1000);
}
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. _________________ Ceeert
Založen: Nov 16, 2008 Příspěvky: 73 Bydliště: Michalovce
Zaslal: čt prosinec 02 2010, 21:45 Předmět:
bohumilfulin napsal(a):
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?
Založen: Nov 16, 2008 Příspěvky: 73 Bydliště: Michalovce
Zaslal: čt prosinec 02 2010, 21:48 Předmět:
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....
Založen: Sep 13, 2005 Příspěvky: 867 Bydliště: Praha
Zaslal: čt prosinec 02 2010, 22:08 Předmět:
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. _________________ de omnibus dubitandum est
Založen: Nov 16, 2008 Příspěvky: 73 Bydliště: Michalovce
Zaslal: čt prosinec 02 2010, 22:16 Předmět:
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 .
Nemůžete odesílat nové téma do tohoto fóra. Nemůžete odpovídat na témata v tomto fóru. Nemůžete upravovat své příspěvky v tomto fóru. Nemůžete mazat své příspěvky v tomto fóru. Nemůžete hlasovat v tomto fóru. Nemůžete připojovat soubory k příspěvkům Můžete stahovat a prohlížet přiložené soubory
Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.