реклама на сайте
подробности

 
 
5 страниц V  < 1 2 3 4 > »   
Reply to this topicStart new topic
> ATTINY2313 и UART, ATTINY2313 и UART
megachip
сообщение Mar 31 2008, 12:47
Сообщение #16


Участник
*

Группа: Новичок
Сообщений: 29
Регистрация: 13-06-05
Пользователь №: 5 967



Цитата(jin_jin @ Mar 31 2008, 15:38) *
/* Set frame format: 8data, 2stop bit */
UCSRC = (1<<USBS)|(3<<UCSZ0);

В приемной программе надо не забыть указать 2 стопа.

В конфиге проекта похоже надо указать 4 Мгц.
Go to the top of the page
 
+Quote Post
jin_jin
сообщение Mar 31 2008, 12:49
Сообщение #17


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 15-02-08
Пользователь №: 35 071



000123 15:47:34.515 CC C8 ми
000124 15:47:34.515 CC C8 ми
000125 15:47:34.906 CC C8 ми
000126 15:47:34.906 CC C8 ми
000127 15:47:34.906 CC C8 ми
000128 15:47:34.906 CC C8 ми
000129 15:47:35.281 CC C8 ми
000130 15:47:35.281 CC C8 ми


Все стало принимать стабильно 2 байта которые отсылаю но только если в компе скорость выставить 300 Baud

а в проге устанавливаю 9600

USART_Init(9600);

#asm("sei")

while (1)
{
delay_ms(100);
USART_Transmit(80);

delay_ms(100);
USART_Transmit(90);

};


и почему приходит МИ если по таблице (80 это P) а (90 это Z)


и как это все настроить на скорости 9600
мне кажется что я не правильно засылаю настройку USART_Init(9600);
Go to the top of the page
 
+Quote Post
Палыч
сообщение Mar 31 2008, 12:56
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(jin_jin @ Mar 31 2008, 15:38) *
Я правильно отсылаю настроики в эту процедуру???
USART_Init(9600);

void USART_Init( unsigned int baud )
{
/* Set baud rate */
UBRRH = (unsigned char)(baud>>8);
UBRRL = (unsigned char)baud;
/* Enable receiver and transmitter */
UCSRB = (1<<RXEN)|(1<<TXEN);
/* Set frame format: 8data, 2stop bit */
UCSRC = (1<<USBS)|(3<<UCSZ0);
}




Параметр baud - шестнадцатибитное значение, которое заносится в UBRR (не путать со скоростью передачи/приема !). Если не можите расчитать его сами, то взять его нужно из таблиц 56-59 даташита.
Go to the top of the page
 
+Quote Post
jin_jin
сообщение Mar 31 2008, 13:06
Сообщение #19


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 15-02-08
Пользователь №: 35 071



что то я в дадашите смотрю нету таблиц на этих страницах

и еще когда я отправляю

delay_ms(1000);
USART_Transmit(0x50);
delay_ms(100);
USART_Transmit(0x51);
delay_ms(100);
USART_Transmit(0x52);

то получаю что 1 и 3 одинаковый байт

000027 16:03:55.781 C8 C9 C8
000028 16:03:56.343 C8 C9 C8
000029 16:03:56.906 C8 C9 C8



Привожу полный листинг измененный который хоть 2 байта правильно выдает на скорости 300 baud в компе


#include <tiny2313.h>
#include <delay.h>

#define RXEN 4
#define TXEN 3
#define USBS 3
#define UCSZ0 1

#define RXB8 1
#define TXB8 0
#define UPE 2
#define OVR 3
#define FE 4
#define UDRE 5
#define RXC 7

#define FRAMING_ERROR (1<<FE)
#define PARITY_ERROR (1<<UPE)
#define DATA_OVERRUN (1<<OVR)
#define DATA_REGISTER_EMPTY (1<<UDRE)
#define RX_COMPLETE (1<<RXC)

// USART Transmitter buffer
#define TX_BUFFER_SIZE 8
char tx_buffer[TX_BUFFER_SIZE];

#if TX_BUFFER_SIZE<256
unsigned char tx_wr_index,tx_rd_index,tx_counter;
#else
unsigned int tx_wr_index,tx_rd_index,tx_counter;
#endif

// USART Transmitter interrupt service routine
interrupt [USART_TXC] void usart_tx_isr(void)
{
if (tx_counter)
{
--tx_counter;
UDR=tx_buffer[tx_rd_index];
if (++tx_rd_index == TX_BUFFER_SIZE) tx_rd_index=0;
};
}

#ifndef _DEBUG_TERMINAL_IO_
// Write a character to the USART Transmitter buffer
#define _ALTERNATE_PUTCHAR_
#pragma used+
void putchar(char c)
{
while (tx_counter == TX_BUFFER_SIZE);
#asm("cli")
if (tx_counter || ((UCSRA & DATA_REGISTER_EMPTY)==0))
{
tx_buffer[tx_wr_index]=c;
if (++tx_wr_index == TX_BUFFER_SIZE) tx_wr_index=0;
++tx_counter;
}
else
UDR=c;
#asm("sei")
}
#pragma used-
#endif

// Standard Input/Output functions
#include <stdio.h>

// Declare your global variables here

void USART_Init( unsigned int baud )
{
/* Set baud rate */
UBRRH = (unsigned char)(baud>>8);
UBRRL = (unsigned char)baud;
/* Enable receiver and transmitter */
UCSRB = (1<<RXEN)|(1<<TXEN);
/* Set frame format: 8data, 2stop bit */
UCSRC = (1<<USBS)|(3<<UCSZ0);
}
void USART_Transmit( unsigned char data )
{
/* Wait for empty transmit buffer */
while ( !( UCSRA & (1<<UDRE)) )
;
/* Put data into buffer, sends the data */
UDR = data;
}


void main(void)
{

#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

DDRA=0x00;

PORTB=0x00;
DDRB=0x2A;

PORTD=0x00;
DDRD=0x00;

TCCR0A=0x00;
TCCR0B=0x00;
TCNT0=0x00;
OCR0A=0x00;
OCR0B=0x00;

TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

GIMSK=0x00;
MCUCR=0x00;

TIMSK=0x00;

// Universal Serial Interface initialization
// Mode: Disabled
// Clock source: Register & Counter=no clk.
// USI Counter Overflow Interrupt: Off
//USICR=0x00;

// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: Off
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 9600
//UCSRA=0x00;
//UCSRB=0x48;
//UCSRC=0x06;
//UBRRH=0x00;
//UBRRL=0x19;

ACSR=0x80;

USART_Init(9600);

#asm("sei")

while (1)
{
delay_ms(1000);
USART_Transmit(0x50);
delay_ms(100);
USART_Transmit(0x51);
delay_ms(100);
USART_Transmit(0x52);

};
}
Go to the top of the page
 
+Quote Post
Палыч
сообщение Mar 31 2008, 13:08
Сообщение #20


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(jin_jin @ Mar 31 2008, 16:04) *
что то я в дадашите смотрю нету таблиц на этих страницах
Это - не сномера страниц, а номера таблиц... Для Fosc=4МГц из таблицы 57 находим, что для скорости 9600 бод значение UBRR = 25 (или 51 для U2X=1)
Go to the top of the page
 
+Quote Post
jin_jin
сообщение Mar 31 2008, 13:26
Сообщение #21


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 15-02-08
Пользователь №: 35 071



Извините не так понял точно в таблице 25 сейчас попробую

Вот это теперь приходит при настрйк5е порта 9600

000042 16:16:05.953 FE FF FE þÿþ
000043 16:16:06.531 FE FE FE þþþ
000044 16:16:07.093 FE FF FE þÿþ
000045 16:16:07.671 FE FF FE þÿþ



может я не правильно отправляю

USART_Transmit(0x50);
delay_ms(100);
USART_Transmit(0x51);
delay_ms(100);
USART_Transmit(0x52);



УРАААА yeah.gif заработало из за не внимательности в настройке Baud отослал USART_Init(25); а надо USART_Init(0x25);

теперь отсылаю while (1)
{
delay_ms(1000);
USART_Transmit('A');
delay_ms(100);
USART_Transmit('B');
delay_ms(100);
USART_Transmit('C');
delay_ms(100);
USART_Transmit(55);
delay_ms(100);
USART_Transmit(99);
};

и вот что в ком порте вижу

000104 16:25:46.953 41 42 43 37 63 ABC7c
000105 16:25:47.609 41 42 43 37 63 ABC7c
000106 16:25:48.281 41 42 43 37 63 ABC7c
000107 16:25:48.937 41 42 43 37 63 ABC7c
000108 16:25:49.609 41 42 43 37 63 ABC7c
000109 16:25:50.281 41 42 43 37 63 ABC7c
000110 16:25:50.937 41 42 43 37 63 ABC7c
000111 16:25:51.609 41 42 43 37 63 ABC7c
000112 16:25:52.265 41 42 43 37 63 ABC7c
000113 16:25:52.937 41 42 43 37 63 ABC7c
000114 16:25:53.593 41 42 43 37 63 ABC7c
000115 16:25:54.265 41 42 43 37 63 ABC7c
000116 16:25:54.937 41 42 43 37 63 ABC7c
000117 16:25:55.593 41 42 43 37 63 ABC7c
000118 16:25:56.265 41 42 43 37 63 ABC7c
000119 16:25:56.921 41 42 43 37 63 ABC7c
000120 16:25:57.593 41 42 43 37 63 ABC7c
000121 16:25:58.250 41 42 43 37 63 ABC7c
000122 16:25:58.921 41 42 43 37 63 ABC7c

Только теперь ком порт настроен на 14400 ставлю 9600 байты теряются можете мне это объяснить
Go to the top of the page
 
+Quote Post
Палыч
сообщение Mar 31 2008, 14:03
Сообщение #22


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(jin_jin @ Mar 31 2008, 16:26) *
заработало из за не внимательности в настройке Baud отослал USART_Init(25); а надо USART_Init(0x25);
Черти-что... Правильно было бы записать USART_Init(25), а не USART_Init(0x25). Вы уверены, что у Вас кварц на 4МГц? У меня складывается впечатление, что кварц все-таки 6МГЦ...
Go to the top of the page
 
+Quote Post
defunct
сообщение Mar 31 2008, 14:25
Сообщение #23


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Палыч @ Mar 31 2008, 16:03) *
Черти-что... Правильно было бы записать USART_Init(25), а не USART_Init(0x25). Вы уверены, что у Вас кварц на 4МГц? У меня складывается впечатление, что кварц все-таки 6МГЦ...

Судя по тому что афтар пишет, что работает на 14400 и делитель 0x25 == 37 (вместо 25).

получается что кварц - 4Mhz * (14400 / 9600 * 37 / 25) = 8Mhz

либо кварц таки 4Mhz но установлен бит U2X.
Go to the top of the page
 
+Quote Post
Палыч
сообщение Mar 31 2008, 14:54
Сообщение #24


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(defunct @ Mar 31 2008, 17:25) *
либо кварц таки 4Mhz но установлен бит U2X.
Ага. Либо микроконтроллер работает от внутреннего RC-генератора на 8МГц!

Автор! Fuses - в студию! Особено интересно значения CKSEL3..0!
Go to the top of the page
 
+Quote Post
jin_jin
сообщение Apr 1 2008, 06:29
Сообщение #25


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 15-02-08
Пользователь №: 35 071



Кварц точно на 4 MHz я уже и другой ставил

бит U2X точно не установлен я когда генерировал в Codevision то 2 скорость не включал галочку





Fuse

Галочки стоят на
SUT0
CKSEL3
CKSEL1
CKSEL0

на остальных отключено
Go to the top of the page
 
+Quote Post
Палыч
сообщение Apr 1 2008, 07:08
Сообщение #26


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(jin_jin @ Apr 1 2008, 09:29) *
Галочки стоят на SUT0 CKSEL3 CKSEL1 CKSEL0 на остальных отключено


Если - это Пони, т.е. галочка - ноль (запрограммирован), то CKSEL = 0100, что в соответствии с DS (Rev. I) таблица 2 на странице 25 соответсвует "Calibrated internal RC Oscillator 8MHz". Для переключения на кварц 4 МГц необходимо (см. таблица 4 на стр. 26) убрать галку с CKSEL3.

"Тщательнее надо" даташиты читать...

Go to the top of the page
 
+Quote Post
jin_jin
сообщение Apr 1 2008, 07:20
Сообщение #27


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 15-02-08
Пользователь №: 35 071



Большое спасибо сейчас попробую

Палыч Большое спасибо все заработало на скорости 9600
USART_Init(25) правильно

Теперь попробую связать это все дело через ИРДА
Go to the top of the page
 
+Quote Post
jin_jin
сообщение Apr 1 2008, 10:50
Сообщение #28


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 15-02-08
Пользователь №: 35 071



Народ помогите еще с одним вопросиком
Мне надо пекредавать на скорости на 300 600 1200 Baud
Что мне надо записать в UBRP на эти скоростя
А то в таблице по даташиту минимальное 2400

Кварц 4 Mhz
Go to the top of the page
 
+Quote Post
Палыч
сообщение Apr 1 2008, 11:03
Сообщение #29


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(jin_jin @ Apr 1 2008, 13:50) *
Мне надо пекредавать на скорости на 300 600 1200 Baud. Что мне надо записать в UBRP на эти скоростя? Кварц 4 Mhz
Формула простая

UBRR= (Fosc / ( 16 * baud) ) - 1 для U2X=0

UBRR= (Fosc / ( 8 * baud) ) - 1 для U2X=1

Для Вашего случая Fosc= 4000000, baud= 300 или 600 или 1200
Go to the top of the page
 
+Quote Post
Well_Di
сообщение Apr 1 2008, 11:07
Сообщение #30





Группа: Новичок
Сообщений: 13
Регистрация: 1-11-07
Пользователь №: 31 948



Цитата(jin_jin @ Mar 31 2008, 15:39) *
Дело в том что под руками нет пока осцилографа отдал на поверку.
Как еще можно решить проблему.

Вроде стоит элементарная задача передать в порт 3 байта а решить уже не могу 3 день.

И еще вопрос правильно ли я указа скорость

// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: Off
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UCSRA=0x00;
UCSRB=0x48;
UCSRC=0x06;
UBRRH=0x00;
UBRRL=0x19;
и с таймерами ничего не надо делать??


Попробуй вместо :
UBRRH=0x00;
UBRRL=0x19;
Отослать
UBRRH=0x00;
UBRRL=0x1А;- это немного изменит делитель

Мне помогло
Go to the top of the page
 
+Quote Post

5 страниц V  < 1 2 3 4 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 17th June 2025 - 10:12
Рейтинг@Mail.ru


Страница сгенерированна за 0.01507 секунд с 7
ELECTRONIX ©2004-2016