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

 
 
> ATTINY2313 и UART, ATTINY2313 и UART
jin_jin
сообщение Mar 31 2008, 07:04
Сообщение #1


Участник
*

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



Народ помогите пожайлуста разобраться.
Надо посылать посылки по 3 байта в ком порт.
Когда отсылаю в UART
putchar('g');
или
putchar(71);

то в компе в отладочной програмее для ком порта приходит все что угодно но только не мой код

очень много ошибок идет
к ком порту подключен через max232
кварц на 4Mhz
com1 9600 8n1

КАК правильно отсылать байты в этот UART????? помогите разобраться


ПОЛНЫЙ листинг


#include <tiny2313.h>
#include <delay.h>
#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)

#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

#include <stdio.h>



void main(void)
{

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


PORTA=0x00;
DDRA=0x00;

PORTB=0x00;
DDRB=0x00;


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;


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


#asm("sei")

while (1)
{
putchar(71);
delay_ms(1000);


};
}







да и еще
кварц на 4 мгц

дело в том что в порт приходит байт но не соответствуетт кодировке. А если отсылаю три байта и каждый раз разные прошиваю то при чтении они практически не отличаются
к примеру отсылай с мк
50 100 200 (3 байта)
66 144 222 ()

получай в ком порте
111 239 255
111 200 255
Go to the top of the page
 
+Quote Post
5 страниц V  « < 3 4 5  
Start new topic
Ответов (60 - 67)
sKWO
сообщение Apr 7 2008, 17:58
Сообщение #61


Местный
***

Группа: Участник
Сообщений: 355
Регистрация: 27-03-07
Из: Україна, Чуднів
Пользователь №: 26 530



Пока дошол домой, возникла мысль что увеличить дальность и безошибочный приём можна ещё наверное если заменить кварц 4 Мгц на стандартный УАРТовый, ну к примеру близкий по параметрам кварц 3,6864 Мгц.


--------------------
нельзя недооценивать предсказуемость глупости
Go to the top of the page
 
+Quote Post
Палыч
сообщение Apr 8 2008, 05:20
Сообщение #62


Гуру
******

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



Заменять кварц - нет смысла. На таких скоростях, которые нужны автору, ошибка скорости не превышает 0.2%, что очень хороший результат.
Go to the top of the page
 
+Quote Post
jin_jin
сообщение Apr 8 2008, 07:00
Сообщение #63


Участник
*

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



Транзисторы использовал разные и КТ972 и КТ630 и КТ815.
Делал схемы с составными транзисторами.
Вся проблема в том что я свою схему усиления подключал к обычному пульту на выход с микросхемы и дальность через окно составила 15 метров.
Вот я и подумал что может мне надо было модулировать RC5 на выход какой нибудь ноги МК а не передавать байты через UART
Вообщем пока дальность 4 метра на скорости 2400 передает 5 байт без ошибок.
Go to the top of the page
 
+Quote Post
Катушка
сообщение Apr 22 2008, 12:37
Сообщение #64





Группа: Новичок
Сообщений: 1
Регистрация: 22-04-08
Пользователь №: 37 000



День добрый, уважаемые!
Как правильно выставить фьюзы для настройки Attiny2313 , внешний кварц подключен на 11.0592 МГц. Прошиваю AvReal+STK200.

Попытка прошить так:
avreal32.exe +tiny2313 -p1 -as -fcksel=f, ckdiv8=1,sut=1 -e -w -v -o11.0592MHZ hexfile.hex -n
pause=null
все-равно не дает правильную частоту.

а пример взят отссюда http://caxapa.ru/36834.html?todo=full , правда непонятно как правильно выставить частоту осциллятора.
Заранее спасибо.
Go to the top of the page
 
+Quote Post
defunct
сообщение Apr 22 2008, 21:09
Сообщение #65


кекс
******

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



Цитата(Катушка @ Apr 22 2008, 14:37) *
Попытка прошить так:
avreal32.exe +tiny2313 -p1 -as -fcksel=f, ckdiv8=1,sut=1 -e -w -v -o11.0592MHZ hexfile.hex -n
pause=null
все-равно не дает правильную частоту.

Предположу что параметр "-o" указывает AVReal'у на какой частоте работает MK, в соответсвии с чем AVReal пытается максимально быстро клокать SPI.

Но МК у вас не работает на частоте кварца, до тех пор пока вы не установите фузы CKSEL3..0 / CKDIV в "1111 / 1".

По умолчанию t2313 тактируется от внутреннего осциллятора 1Mhz, иногда попадаются экземпляры с заводскими настройками на 500Khz. Что в разы ниже чем клок которым AVReal будет пытаться общаться с вашим МК. Как результат работать ничего и не будет. Поэтому в опции -o указывайте частоту не более минимальной частоты на которой может работать МК (в данном случае это 500Khz). Еще лучше перестраховаться и поделить эту минимальную частоту на 4, т.е. 125Khz.

Понизив частоту клока AVReal'a, вы однозначно выиграете в качестве связи с МК, а проиграть можно только в скорости программирования, но для таких чипов как t2313 с 2k флеша, что 125kHz, что 5Mhz, что 11Mhz, программироваться 2kb будут все ту же 1 секунду.
Go to the top of the page
 
+Quote Post
DI HALT
сообщение Apr 26 2008, 23:14
Сообщение #66


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 17-12-07
Пользователь №: 33 346



Цитата(defunct @ Apr 23 2008, 00:09) *
По умолчанию t2313 тактируется от внутреннего осциллятора 1Mhz



Вообшет у тини2313 дефолтный skel = 0100 а значит частота 8 мгц.


--------------------
Байки промышленного ремонтника в цикле рассказов Последний Герой Труда. Ну и, кроме того, в моём блоге еще есть что почитать.
Go to the top of the page
 
+Quote Post
dx40
сообщение Apr 28 2008, 06:45
Сообщение #67


Частый гость
**

Группа: Свой
Сообщений: 147
Регистрация: 4-05-06
Пользователь №: 16 779



Цитата(DI HALT @ Apr 27 2008, 03:14) *
Вообшет у тини2313 дефолтный skel = 0100 а значит частота 8 мгц.


Не совсем, еще запрограммирован CKDIV8, соответственно получается 1 МГц
Go to the top of the page
 
+Quote Post
DI HALT
сообщение Apr 28 2008, 07:41
Сообщение #68


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 17-12-07
Пользователь №: 33 346



Цитата(dx40 @ Apr 28 2008, 09:45) *
Не совсем, еще запрограммирован CKDIV8, соответственно получается 1 МГц


А ну да, вы правы. Просто у меня уже рефлекс переписать регистры делителей программно в самом начале, так что данный фуз меня не волнует обычно.


--------------------
Байки промышленного ремонтника в цикле рассказов Последний Герой Труда. Ну и, кроме того, в моём блоге еще есть что почитать.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 28th July 2025 - 05:53
Рейтинг@Mail.ru


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