Vítejte na Elektro Bastlírn?
Nuke - Elektro Bastlirna
  Vytvořit účet Hlavní · Fórum · DDump · Profil · Zprávy · Hledat na fóru · Příspěvky na provoz EB

Vlákno na téma KORONAVIRUS - nutná registrace


Nuke - Elektro Bastlirna: Diskuzní fórum

 FAQFAQ   HledatHledat   Uživatelské skupinyUživatelské skupiny   ProfilProfil   Soukromé zprávySoukromé zprávy   PřihlášeníPřihlášení 

mega8 USART

 
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Programování PIC, ATMEL, EEPROM a dalších obvodů
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
jano80



Založen: Nov 16, 2008
Příspěvky: 73
Bydliště: Michalovce

PříspěvekZaslal: čt prosinec 02 2010, 18:22    Předmět: mega8 USART Citovat

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...

kód:
/*

USART MEGA8
cpu/clk 2MHz (interny RC oscilator)

*/

#include <avr/io.h>
#include <util/delay.h>

#define USART_BAUD 1200ul
#define USART_UBBR_VALUE ((F_CPU/(USART_BAUD*16))-1)

unsigned char send_byte = 0;

//USART TX / RX DATA

void USART_vInit(void)

{

// Set baud rate

UBRRH = (uint8_t)(USART_UBBR_VALUE>>8);

UBRRL = (uint8_t)USART_UBBR_VALUE;

// 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);
   }


}//end
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Atlan



Založen: May 10, 2004
Příspěvky: 4507
Bydliště: Košice

PříspěvekZaslal: čt prosinec 02 2010, 19:17    Předmět: Citovat

aku komunikacnu rychlost pouzivas ...lebo 1200Bd to nepodporuje vid tabulka 60
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Andrea



Založen: Sep 07, 2007
Příspěvky: 9340

PříspěvekZaslal: čt prosinec 02 2010, 19:18    Předmět: Citovat

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.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
jano80



Založen: Nov 16, 2008
Příspěvky: 73
Bydliště: Michalovce

PříspěvekZaslal: čt prosinec 02 2010, 19:34    Předmět: Citovat

To ze rychlost 1200 nieje v tabulke neznamena ze ju nepodporuje, predsa je na vypocet nejaky vzorec.

Prepojit TX s RX na pätici som skusal ako prve, data sa vracali nezmenene pri akejkolvek rychlosti.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
bohumilfulin



Založen: Jan 12, 2010
Příspěvky: 109

PříspěvekZaslal: čt prosinec 02 2010, 21:00    Předmět: Citovat

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.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
bohumilfulin



Založen: Jan 12, 2010
Příspěvky: 109

PříspěvekZaslal: čt prosinec 02 2010, 21:06    Předmět: Citovat

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.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
ceeert



Založen: Apr 05, 2009
Příspěvky: 105
Bydliště: Plzen

PříspěvekZaslal: čt prosinec 02 2010, 21:26    Předmět: Citovat

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
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
jano80



Založen: Nov 16, 2008
Příspěvky: 73
Bydliště: Michalovce

PříspěvekZaslal: čt prosinec 02 2010, 21:45    Předmět: Citovat

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?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
jano80



Založen: Nov 16, 2008
Příspěvky: 73
Bydliště: Michalovce

PříspěvekZaslal: čt prosinec 02 2010, 21:48    Předmět: Citovat

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....
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
WLAB



Založen: Sep 13, 2005
Příspěvky: 867
Bydliště: Praha

PříspěvekZaslal: čt prosinec 02 2010, 22:08    Předmět: Citovat

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
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
jano80



Založen: Nov 16, 2008
Příspěvky: 73
Bydliště: Michalovce

PříspěvekZaslal: čt prosinec 02 2010, 22:16    Předmět: Citovat

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
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
bohumilfulin



Založen: Jan 12, 2010
Příspěvky: 109

PříspěvekZaslal: st prosinec 08 2010, 22:18    Předmět: Citovat

>>>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.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Andrea



Založen: Sep 07, 2007
Příspěvky: 9340

PříspěvekZaslal: st prosinec 08 2010, 22:32    Předmět: Citovat

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.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
AB1



Založen: Nov 23, 2009
Příspěvky: 312

PříspěvekZaslal: čt prosinec 09 2010, 6:12    Předmět: Citovat

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 .

Stačí
kód:
void USART_vInit(void)
{
   UBRRH = (uint8_t)(USART_UBBR_VALUE>>8);
   UBRRL = (uint8_t)USART_UBBR_VALUE;
   UCSRB = (1<<RXEN)|(1<<TXEN);
}

Pak kód chodí, pokud je v pořádku nastavení oscilátoru.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Programování PIC, ATMEL, EEPROM a dalších obvodů Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
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

Powered by phpBB © 2001, 2005 phpBB Group
Forums ©
Nuke - Elektro Bastlirna

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.


PHP-Nuke Copyright © 2005 by Francisco Burzi. This is free software, and you may redistribute it under the GPL. PHP-Nuke comes with absolutely no warranty, for details, see the license.
Čas potřebný ke zpracování stránky 0.16 sekund