Anonymní profil rudla – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil rudla – Programujte.comAnonymní profil rudla – Programujte.com

 

Příspěvky odeslané z IP adresy 90.181.44.–

rudla
C / C++ › USART u ATtiny2313
15. 5. 2014   #190220

#16 hlucheucho

Pro normal mode vyjde 64,1. Zaokrouhlím na celé číslo, t.j. 64.


Pardon za rejp, ale ještě jsem si to celé prošel a všiml jsem si u výpočtu, že podle vzorce pro normal mode UBRR=[fosc÷(16BAUD)]-1 výjde UBRR 65,1 a ne 64,1. Teda aspoň mně, pokud počítám správně. :D

rudla
C / C++ › USART u ATtiny2313
15. 5. 2014   #190216

#16 hlucheucho
Za podrobné vysvětlení děkuju. Motám se stále v kruhu. Problém je v tom, že jsem neměl příležitost si kapitolu o USART přečíst podrobně, což samozřejmě nevysvětluje mou neschopnost. :D To přerušení jsem teda nastavil a na sei se hned jdu podívat - už jsme ho před časem řešili.

Tak snad velké díky, teoreticky by to aspoň trošku mohlo fungovat, ale skutečnost si ověřím až zítra, jelikož čip 2313 po ruce nemám. :)

rudla
C / C++ › USART u ATtiny2313
15. 5. 2014   #190213

#14 hlucheucho
Kdybych aspoň došel k tomu "pochopit". Problém je v tom, že to musím mít dnes hotové. Jakš takš jsem zakomponoval výstup na LCD s obsahem UDR, ale dál prostě nevím. :(

rudla
C / C++ › USART u ATtiny2313
15. 5. 2014   #190207

Dobře, je toho víc, čemu nerozumím.
 

void USART_Init( unsigned int baud )
{
/* Set baud rate */
UBRRH = (unsigned char)(baud>>8); // TADY MÁ BÝT 19200?
UBRRL = (unsigned char)baud;
/* Enable receiver and transmitter */
UCSRB = (1<<RXEN)|(0<<TXEN); // ZDE POKUD NECHCI VYSÍLÁNÍ, TAK 0?
/* Set frame format: 8data, 2stop bit */
UCSRC = (1<<USBS)|(3<<UCSZ0); // A TADY TEDA JEN (1<<USBS)??
}

Trochu mě to zmátlo. Díky.

rudla
C / C++ › USART u ATtiny2313
15. 5. 2014   #190206

#11 hlucheucho
A void USART_Init má být před unsigned char USART_Receive, že?

A ještě dotaz: u UCSRC = (1<<USBS)|(3<<UCSZ0); je napsané, že jsou nastaveny 2 STOP bity. Jak nastavit jen jeden?

Díky.

rudla
C / C++ › USART u ATtiny2313
15. 5. 2014   #190204

#9 hlucheucho
Našel jsem někde na internetu jakýsi USART_config(), pomůže mi to v něčem? :D

bool USART_Config(void)
{
  USART_InitTypeDef USART_InitStructure;
 
  /* set the Stop bit*/
  switch (linecoding.format) {
  case 0:
    USART_InitStructure.USART_StopBits = USART_StopBits_1;
    break;
  case 1:
    USART_InitStructure.USART_StopBits = USART_StopBits_1_5;
    break;
  case 2:
    USART_InitStructure.USART_StopBits = USART_StopBits_2;
    break;
  default :
    //      USART_Config_Default();
    return (FALSE);
  }
 
  /* set the parity bit*/
  switch (linecoding.paritytype) {
  case 0:
    USART_InitStructure.USART_Parity = USART_Parity_No;
    break;
  case 1:
    USART_InitStructure.USART_Parity = USART_Parity_Even;
    break;
  case 2:
    USART_InitStructure.USART_Parity = USART_Parity_Odd;
    break;
  default :
    return (FALSE);
  }
 
  /*set the data type : only 8bits and 9bits is supported */
  switch (linecoding.datatype) {
  case 0x07:
    /* With this configuration a parity (Even or Odd) should be set */
    USART_InitStructure.USART_WordLength = USART_WordLength_8b;
    break;
  case 0x08:
    if (USART_InitStructure.USART_Parity == USART_Parity_No) {
      USART_InitStructure.USART_WordLength = USART_WordLength_8b;
    } else {
      USART_InitStructure.USART_WordLength = USART_WordLength_9b;
    }
    break;
  default :
    return (FALSE);
  }


Díky.

rudla
C / C++ › USART u ATtiny2313
15. 5. 2014   #190201

#7 hlucheucho
V datasheetu jsem našel příklad a když jsem ho zakomponoval do úvodníku, tak mám tohle, jenomže nevím, jak nadefinovat sudou paritu, 8 bitů pro data a 1 STOP bit. Nebo to už se nastavuje jen v programu Terminal? 

#include <avr/io.h>
#define F_CPU 20000000UL
#define BAUD 19200
#include<util/setbaud.h>
#include<avr/interrupt.h>

unsigned char USART_Receive( void )
{
/* Wait for data to be received */
while ( !(UCSRA & (1<<RXC)) )
;
/* Get and return received data from buffer */
return UDR;
}

Díky.

rudla
C / C++ › USART u ATtiny2313
14. 5. 2014   #190166

#3 hlucheucho
co se má s přijatými daty udělat?

O tom v zadání nebylo ani slovo. Jen to, že máme program otestovat v aplikaci Terminal (SDK).

rudla
C / C++ › USART u ATtiny2313
8. 5. 2014   #189941

Zdravím,

mám dotaz ohledně psaní programu pro ATtiny 2313, kde bych měl posílat data z PC do 2313. Problém je v tom, že jsem ve škole zrovna na USART nebyl, tudíž nevím, o co se jedná. Když jsem se ptal učitele, nic mi ko tomu neřekl. Normálka. Od spolužáků tomu nějak výrazně nerozumím. V podstatě jen vím, že bránu B mám nastavit jako výsupní a D jako vstup.
Podle  zadání je přenosová rychlost 19200 Bd, datový rámec: 8 bitů pro data, 1 STOP bit a sundá parita.

Popravdě vůbec nechápu, o co se jedná. Mám k dispozici kód od spolužačky, ze kterého poznám asi jen podle názvu, že jde o USART.

#include <avr/io.h>
#define F_CPU 20000000UL
#define BAUD 9600
#include<util/setbaud.h>
#include<avr/interrupt.h>
static void USART_init(void)
{
	UBRRH = UBRRH_VALUE;
	UBRRL = UBRRL_VALUE;
	UCSRB = (1<<RXEN)|(1<<TXEN)|(1<<RXCIE);
	UCSRC = (1<<USBS)|(3<<UCSZ0);
}

/*void USART_init() // 9600 Bd => jedna možnost
{
	UBRRH = 0;
	UBRRL = 0x81;
	UCSRB = (1<<RXEN) | (1<<TXEN);
	UCSRC = (1<<USBS); //2 stop bity
}
*/
int main(void)
{
	USART_init();  // 9600 Bd 
	//sei();  
	UDR = 'A'; //0x41
    while(1)
    {

    }
}

Prosím, je tu někdo, kdo by byl s tím schopen trochnu hnout? Díky moc.

Zatnaktel
C / C++ › Tlačítka
8. 5. 2014   #189940

Vlastně ani to ne. On nám toho nikdy moc neřekl.

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý