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

 
 
5 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> 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
Палыч
сообщение Mar 31 2008, 07:59
Сообщение #2


Гуру
******

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



Fuse CKDIV8 надеюсь убран (т.е. значение =1)?
Go to the top of the page
 
+Quote Post
jin_jin
сообщение Mar 31 2008, 08:16
Сообщение #3


Участник
*

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



Извините за тупой ворос а что делает это Fuse CKDIV8

И как посмотреть чему равен Fuse CKDIV8
в Codevision при выборе прочитать fuse пишет ошибку
Go to the top of the page
 
+Quote Post
Палыч
сообщение Mar 31 2008, 08:43
Сообщение #4


Гуру
******

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



Цитата(jin_jin @ Mar 31 2008, 11:16) *
Извините за тупой ворос а что делает это Fuse CKDIV8


Запрограммированный CKDIV8 (а, с завода он приходит запрограммированным) делит тактовую на 8, т.е. все выглядит так, как если бы у Вас был бы подключен кварц на 4:8=0,5 МГц.
Go to the top of the page
 
+Quote Post
jin_jin
сообщение Mar 31 2008, 11:00
Сообщение #5


Участник
*

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



то что делит на 8 это видно по DIV
а как узнать что там 1 или 0 в этом фузе
Go to the top of the page
 
+Quote Post
defunct
сообщение Mar 31 2008, 11:13
Сообщение #6


кекс
******

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



Цитата(jin_jin @ Mar 31 2008, 13:00) *
то что делит на 8 это видно по DIV

Когда всякие странности возникают - играйтесь со скоростью ком порта на компе.
Понижайте, повышайте, до тех пор пока не словите то, что ожидается.

Имея реальную и желаемую скорости, не трудно будет найти насколько МК отстает / опережает.


Цитата
а как узнать что там 1 или 0 в этом фузе

Простите, а чем вы шьете ваш MK? Вот через то, что шьете и можно узнать.
Go to the top of the page
 
+Quote Post
jin_jin
сообщение Mar 31 2008, 11:21
Сообщение #7


Участник
*

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



Я уже все скоростя перепробывал от 100 до 115200

дело в том что когда отсылаю командой
Putchar (..);
то в порт приходит байт на скорости 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);
}

void USART_Transmit( unsigned char data )
{
while ( !( UCSRA & (1<<UDRE)) )
;
UDR = data;
}

USART_Transmit('5');


то приходят одни 00
Go to the top of the page
 
+Quote Post
Палыч
сообщение Mar 31 2008, 11:31
Сообщение #8


Гуру
******

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



Цитата(jin_jin @ Mar 31 2008, 14:21) *
дело в том что когда отсылаю командой
Putchar (..); то в порт приходит байт на скорости 9600 но не тот что надо
Обычно, это - несовпадение скоростей передатчика и приемника. Скорость передатчика (реальная) легко определяется осциллографом: достаточно зациклить передачу какого-либо байта (например, 0х55 - тогда можно увидеть каждый импульс и определить его длительность).
Go to the top of the page
 
+Quote Post
jin_jin
сообщение Mar 31 2008, 11:39
Сообщение #9


Участник
*

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



Дело в том что под руками нет пока осцилографа отдал на поверку.
Как еще можно решить проблему.

Вроде стоит элементарная задача передать в порт 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;


и с таймерами ничего не надо делать??
Go to the top of the page
 
+Quote Post
vet
сообщение Mar 31 2008, 11:46
Сообщение #10


Знающий
****

Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32



ну, это же code wizard настройки сгенерировал - выходит, правильно.
таймеры здесь ни при чём.
проверили состояние fuse-битов?


--------------------
Главная линия этого опуса ясна мне насквозь!
Go to the top of the page
 
+Quote Post
jin_jin
сообщение Mar 31 2008, 11:48
Сообщение #11


Участник
*

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



я и имел в виду кодевизион...

А как проверить состояние Fuse битов??
Go to the top of the page
 
+Quote Post
vet
сообщение Mar 31 2008, 11:50
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32



как - уже писали выше (постинг #6).


--------------------
Главная линия этого опуса ясна мне насквозь!
Go to the top of the page
 
+Quote Post
jin_jin
сообщение Mar 31 2008, 11:58
Сообщение #13


Участник
*

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



Я собрал универсальный программатора с Kievsat
JonisProg

программой пользуюсь PonyProg

в ponyprog выбираю Configuration and securitybits там стоит галочка на CKDIV8

Сообщение отредактировал jin_jin - Mar 31 2008, 11:59
Go to the top of the page
 
+Quote Post
Палыч
сообщение Mar 31 2008, 12:09
Сообщение #14


Гуру
******

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



Цитата(jin_jin @ Mar 31 2008, 14:58) *
программой пользуюсь PonyProg
в ponyprog выбираю Configuration and securitybits там стоит галочка на CKDIV8
В Поне галка - это ноль, т.е. запрограммирован. Имхо, галку с CKDIV8 нужно убрать!
Go to the top of the page
 
+Quote Post
jin_jin
сообщение Mar 31 2008, 12:38
Сообщение #15


Участник
*

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



спасибо . сейчас уже убрал и попробую подсоединить

Отсылаю вот это

delay_ms(1000);
putchar(71);
delay_ms(1000);
putchar(0x47);

и получаю

000032 15:17:26.000 FD ý
000033 15:17:26.468 FF ÿ
000034 15:17:26.953 FD ý
000035 15:17:27.421 FF ÿ
000036 15:17:27.890 FF ÿ
000037 15:17:28.375 FD ý
000038 15:17:28.843 FF ÿ
000039 15:17:29.312 FD ý
000040 15:17:29.796 FD ý
000041 15:17:30.265 FD ý
000042 15:17:30.734 FF ÿ
000043 15:17:31.218 FF ÿ
000044 15:17:31.687 FF ÿ
000045 15:17:32.156 FD ý
000046 15:17:32.640 FF ÿ
000047 15:17:33.109 FF ÿ
000048 15:17:33.593 FD ý
000049 15:17:34.062 FF ÿ
000050 15:17:34.531 FF ÿ
000051 15:17:35.015 FF ÿ
000052 15:17:35.484 FD ý
000053 15:17:35.953 FD ý
000054 15:17:36.437 FF ÿ
000055 15:17:36.906 FF ÿ
000056 15:17:37.375 FF ÿ
000057 15:17:37.859 FD ý
000058 15:17:38.328 FF ÿ
000059 15:17:38.796 FD ý
000060 15:17:39.281 FD ý
000061 15:17:39.750 FD ý


Я правильно отсылаю настроики в эту процедуру???
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);
}
Go to the top of the page
 
+Quote Post
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
jin_jin
сообщение Apr 1 2008, 11:07
Сообщение #31


Участник
*

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



Это получается что для 300
UBRP= (4000000/4800)-1 = 832
это надо перевести в 16 систему = 340

Вот так правильно будет??

USART_Init(340);
Go to the top of the page
 
+Quote Post
Well_Di
сообщение Apr 1 2008, 11:13
Сообщение #32





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



пардон wacko.gif не заметил второй страницы.

Сообщение отредактировал Well_Di - Apr 1 2008, 11:13
Go to the top of the page
 
+Quote Post
Палыч
сообщение Apr 1 2008, 11:16
Сообщение #33


Гуру
******

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



Цитата(jin_jin @ Apr 1 2008, 14:07) *
Это получается что для 300
UBRP= (4000000/4800)-1 = 832
это надо перевести в 16 систему = 340
Вот так правильно будет??
USART_Init(340);
Вычислено - верно. Но, зачем переводить?

Правильно будет

USART_Init(832); или, что тоже самое USART_Init(0x340);
Go to the top of the page
 
+Quote Post
jin_jin
сообщение Apr 1 2008, 11:23
Сообщение #34


Участник
*

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



Спасибо большое
Go to the top of the page
 
+Quote Post
jin_jin
сообщение Apr 2 2008, 06:29
Сообщение #35


Участник
*

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



C устройством разобрался собрал на передачу и прием по ИК
Проблема следующая работает не более чем на 2 метра.
Как можно усилить сигнал предатчика ИК
Пробовал стандартные схемы усиления на 2 транзисторах результат тот же 2 метра и все.
На какое максимальное расстояние можно передавать по ИК связи??
Go to the top of the page
 
+Quote Post
Палыч
сообщение Apr 2 2008, 06:41
Сообщение #36


Гуру
******

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



Цитата(jin_jin @ Apr 2 2008, 09:29) *
На какое максимальное расстояние можно передавать по ИК связи??
Вы меня удивляете... Пульт от телевизора Panasonic (тот же ИК) переключает с метров так десяти. Имхо, все дело в излучателе (излучающем ИК-диоде) и, возможно, скорости передачи.
Go to the top of the page
 
+Quote Post
jin_jin
сообщение Apr 2 2008, 07:01
Сообщение #37


Участник
*

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



Мы и сами сидим удивляемся.
Пульт принимает наша банка с расстоянии 5-8 метров
Мы уже и с разных схем передатчик пробовали на 2 на 1 транзисторе
максимум 2 метра получается
Излучаем с частотой 36 кГц скорость 1200 Baud
Может кто что посоветовать
Go to the top of the page
 
+Quote Post
Палыч
сообщение Apr 2 2008, 07:06
Сообщение #38


Гуру
******

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



Цитата(jin_jin @ Apr 2 2008, 10:01) *
Мы уже и с разных схем передатчик пробовали на 2 на 1 транзисторе
Может, все-таки, не число транзисторов менять, а тип ИК-диода...
Go to the top of the page
 
+Quote Post
jin_jin
сообщение Apr 4 2008, 05:17
Сообщение #39


Участник
*

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



Может кто-нибудь мне подсказать в следующем вопросе.
Можно ли через UART передавать байты с частотой 36 кГц не используя внешний генератор
Чтобы как в RC-5.
Go to the top of the page
 
+Quote Post
Палыч
сообщение Apr 4 2008, 06:09
Сообщение #40


Гуру
******

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



Цитата(jin_jin @ Apr 4 2008, 08:17) *
Можно ли через UART передавать байты с частотой 36 кГц не используя внешний генератор. Чтобы как в RC-5.
Генератор можно взять и внутренний - на таймере. Выходы ОСn таймера и Тх USART объединить внешней логикой.
Go to the top of the page
 
+Quote Post
jin_jin
сообщение Apr 4 2008, 06:23
Сообщение #41


Участник
*

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



Если не затруднит можно ли по подробнее что за OCn таймер и как это связать с Usart
Go to the top of the page
 
+Quote Post
Палыч
сообщение Apr 4 2008, 06:43
Сообщение #42


Гуру
******

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



Цитата(jin_jin @ Apr 4 2008, 09:23) *
можно ли по подробнее что за OCn таймер и как это связать с Usart
ОСn - это не таймер, это - Output Compare pin - один из выходов таймера. В t2313 два таймера и у каждого два Output Compare pin: для таймера 0 - OC0A, OC0B, соответственно для таймера 1 - OC1A, OC1B. Соответствующей настройкой таймера можно получить на OCn некоторую частоту (например, 36 кГц, или около того). Вот Вам и не потребуется внешний генератор. Промодулировать сигнал этого генератора сигналом с Тх USART прийдется внешней обвязкой - это уж придумайте сами - как Вам сподручнее будет сделать.
Go to the top of the page
 
+Quote Post
jin_jin
сообщение Apr 4 2008, 06:54
Сообщение #43


Участник
*

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



А как настроить прваильно таймер на частоту 36кГц??
Go to the top of the page
 
+Quote Post
Палыч
сообщение Apr 4 2008, 07:15
Сообщение #44


Гуру
******

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



Цитата(jin_jin @ Apr 4 2008, 09:54) *
А как настроить прваильно таймер на частоту 36кГц??
Сначала определитесь с таймером: таймер0 или таймер1. В даташите для каждого таймера есть подраздел "Output Compare Unit" в котором всё подробно написано. Есть даже формулы определения частоты, которая получится на выходе: для таймера0 - на стр. 72, таймера1 - стр. 99. Несложными математическими преобразованиеми этих формул легко получить значения регистров.
Go to the top of the page
 
+Quote Post
jin_jin
сообщение Apr 4 2008, 07:27
Сообщение #45


Участник
*

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



Таймер0 буду использовать. Что то пытался сделать через CodeVisionGenerator выставить значения но что то не получилось

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 15,625 kHz
// Mode: Normal top=FFh
// OC0A output: Toggle on compare match
// OC0B output: Disconnected
TCCR0A=0x40;
TCCR0B=0x04;
TCNT0=0x24;
OCR0A=0x24;
OCR0B=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

Вся проблема в том что у меня проблема с английским.
А даташит на инглише. Если не затруднит вы можtnt помочь расчитать значение таемера на 36 кГц
Go to the top of the page
 
+Quote Post
Палыч
сообщение Apr 4 2008, 07:32
Сообщение #46


Гуру
******

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



Цитата(jin_jin @ Apr 4 2008, 10:27) *
Таймер0 буду использовать. Что то пытался сделать через CodeVisionGenerator выставить значения но что то не получилось
Надеюсь Вы не забыли настроить соответствующую ногу на вывод? В DDB3 - занести единицу.

Цитата(jin_jin @ Apr 4 2008, 10:27) *
Вся проблема в том что у меня проблема с английским.А даташит на инглише.
Найдите в сети перевод или книгу по AVR, но сверяйтесь с оригинальным текстом.
Go to the top of the page
 
+Quote Post
jin_jin
сообщение Apr 4 2008, 07:51
Сообщение #47


Участник
*

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



порт В настроен на выход. Так что то и не разобрался что надо занести в эти регистры чтобы частота была 36

с этой формулой не могу понять что за коэфициент N 1 8 64 256

Что надо занести в настройки для частоты 36кГц

TCCR0A
TCNT0
OCR0A
Go to the top of the page
 
+Quote Post
vet
сообщение Apr 4 2008, 07:55
Сообщение #48


Знающий
****

Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32



Вам не 36, а 72 кГц нужна, бо выход OCn инвертируется по совпадении таймера.
Прочитайте любой перевод любого даташита AVR для общего представления о таймерах, все детали отлично настроит CodeWizard.


--------------------
Главная линия этого опуса ясна мне насквозь!
Go to the top of the page
 
+Quote Post
jin_jin
сообщение Apr 4 2008, 08:01
Сообщение #49


Участник
*

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



Что то я еще больше запутался почему 72 если можно по подробнее
Go to the top of the page
 
+Quote Post
Палыч
сообщение Apr 4 2008, 08:25
Сообщение #50


Гуру
******

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



Цитата(jin_jin @ Apr 4 2008, 10:51) *
с этой формулой не могу понять что за коэфициент N 1 8 64 256
Это - прескалер (выбираем значение N=1)
Цитата(jin_jin @ Apr 4 2008, 10:51) *
Что надо занести в настройки для частоты 36кГц TCCR0A TCNT0 OCR0A
TCCR0A(В) - No prescaling, CTC mode, Toggle OC0A (какие значения регистров А и В этому соответcтвуют - определитесь сами)
TCNT0 - не принципиально
OCR0А - 0x37 (OCR0L= 0x37 OCR0H=0) , что для кварца 4МГц даёт 36036Гц

P.S. Забыл, что таймер 0 - восьмибитный...
Go to the top of the page
 
+Quote Post
jin_jin
сообщение Apr 4 2008, 09:04
Сообщение #51


Участник
*

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



Заношу я вот эти значения сажусь частотомером и ничего вообще не показывает

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

Что я делаю не правильно

И еще забыл уточнить в Codevision Generatore
что надо выбрать в
Clock value
4000 кГц
500
62.5
15.625
3.906
Timer 0 stoped
Go to the top of the page
 
+Quote Post
Палыч
сообщение Apr 4 2008, 09:09
Сообщение #52


Гуру
******

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



Цитата(jin_jin @ Apr 4 2008, 12:04) *
Заношу я вот эти значения сажусь частотомером и ничего вообще не показывает
TCCR0B=0x00;
Что я делаю не правильно
Таймер надо всё-таки включить!
TCCR0B=0x01; /* No prescaling */
Go to the top of the page
 
+Quote Post
jin_jin
сообщение Apr 4 2008, 11:21
Сообщение #53


Участник
*

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



Спасибо большое и человеческое. Сел частотомером и частота 35.2 кГц
Сейчас попробую промодулировать с UART выходом


Ну вот и получилось можно сказать общими усилиями.
Обвязал логикой и все ок.
Теперь на одном иК диоде получил 3 метра и это без усиления. А раньше 6 диодов и каскад транзисторов давали 3 метра.
Единственное что смущает это вот смещения иногда символов. Но мне кажется это я паузы между передачей байтов сделал маленькой.

010609 13:07:53.546 4A 45 4E 59 41 JENYA
010610 13:07:53.546 4A 45 4E 59 41 JENYA
010611 13:07:53.640 4A 45 4E 59 41 JENYA
010612 13:07:53.640 4A 45 4E 59 41 JENYA
010613 13:07:53.734 4A 45 4E 59 41 JENYA
010614 13:07:53.828 4A 45 4E 59 41 JENYA
010615 13:07:53.828 4A 45 4E 59 41 JENYA
010616 13:07:53.921 4A 45 4E 59 41 JENYA
010617 13:07:54.015 4A 45 4E 59 41 JENYA
010618 13:07:54.015 4A 45 4E JEN
010619 13:07:54.125 59 41 4A 45 4E YAJEN
010620 13:07:54.125 59 41 4A 45 4E YAJEN
010621 13:07:54.218 59 41 4A 45 4E YAJEN
010622 13:07:54.218 59 41 4A 45 4E YAJEN
010623 13:07:54.312 59 41 4A 45 4E YAJEN
010624 13:07:54.406 59 41 4A 45 4E YAJEN
010625 13:07:54.406 59 41 4A 45 4E YAJEN
010626 13:07:54.500 59 41 4A 45 4E YAJEN
010627 13:07:54.593 59 41 4A 45 4E YAJEN
010628 13:07:54.593 59 41 4A YAJ
010629 13:07:54.703 45 4E 59 41 4A ENYAJ
010630 13:07:54.703 45 4E 59 41 4A ENYAJ
010631 13:07:54.796 45 4E 59 41 4A ENYAJ
010632 13:07:54.796 45 4E 59 41 4A ENYAJ
010633 13:07:54.890 45 4E 59 41 4A ENYAJ
010634 13:07:54.984 45 4E 59 41 4A ENYAJ
010635 13:07:54.984 45 4E 59 41 4A ENYAJ
010636 13:07:55.078 45 4E 59 41 4A ENYAJ
010637 13:07:55.171 45 4E 59 41 4A ENYAJ
010638 13:07:55.171 45 4E 59 ENY
010639 13:07:55.281 41 4A 45 4E 59 AJENY
010640 13:07:55.281 41 4A 45 4E 59 AJENY
010641 13:07:55.375 41 4A 45 4E 59 AJENY
010642 13:07:55.375 41 4A 45 4E 59 AJENY
010643 13:07:55.468 41 4A 45 4E 59 AJENY
010644 13:07:55.562 41 4A 45 4E 59 AJENY
010645 13:07:55.562 41 4A 45 4E 59 AJENY
010646 13:07:55.656 41 4A 45 4E 59 AJENY
010647 13:07:55.703 41 00 A.


НУ вот проблема была с задержкой Delay_ms(2); стало нормально из 15000 посылок не одной ошибки

Только вот проблема решилась не полностью. Я избавился от ЛА7 где был собран генератор на 36кГц
дальность чуть чуть стала лучше при 5 вольтах и одном транзисторе расстояние получаю 2 метра где идут стабильно данные.
Но опять же пульты работают в среднем 5-7 метров. Я уже и диоды менял. И подключал к схеме от пульта свой выход, все равно 2 метра.
Может кто подскажет в чем может быть дело.

Конечно выход есть собрать 4 каскада транзисторов и 8 ИК диодов и подключив на 12Вольт. Этим я получу свое расстояние. Но как на одном диоде расстояние повысить

Заметил сейчас такую штуку когда питание включаю то в течении 1 секунды посылки проходят даже на 5 метрах . а в комнате в другую сторону направляю включаю питание посылки проходят где 12-15 правильно и все останавливаются.
Такое ощущение что идет мощный импульс а затем все
Go to the top of the page
 
+Quote Post
Палыч
сообщение Apr 4 2008, 12:05
Сообщение #54


Гуру
******

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



Цитата(jin_jin @ Apr 4 2008, 14:21) *
Единственное что смущает это вот смещения иногда символов.
Не стоит обращать внимание - это смещение результат работы (фича) терминалки

Цитата(jin_jin @ Apr 4 2008, 14:21) *
Такое ощущение что идет мощный импульс а затем все
Нагрев диода, транзистора? Неполное закрытие ключа?
Go to the top of the page
 
+Quote Post
jin_jin
сообщение Apr 4 2008, 12:08
Сообщение #55


Участник
*

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



При 5 вольтах все холодное
При12 греется транзистор с омными резисторами и чуть чуть диодИК
Go to the top of the page
 
+Quote Post
jin_jin
сообщение Apr 7 2008, 07:33
Сообщение #56


Участник
*

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



Народ подскажите с таким вопрросом. Стандартный пульт RC5 с какой скоростью передает 300 600 1200 или 2400
Go to the top of the page
 
+Quote Post
Палыч
сообщение Apr 7 2008, 08:01
Сообщение #57


Гуру
******

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



RC-5 - это совсем не USART. Такт длится 1.778 мс; двухфазное кодирование; два стартовых; 1 управляющий; 5 адресных; 6 командных
Go to the top of the page
 
+Quote Post
jin_jin
сообщение Apr 7 2008, 08:09
Сообщение #58


Участник
*

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



Я просто думаю что может у меня проблема в дальности потому что я передаю по ИК 3 байта через USART /. Может все переписать для протокола RC5 и модулировать через какую нибудь ножку
Как вы думаете поможет мне это
Go to the top of the page
 
+Quote Post
jin_jin
сообщение Apr 7 2008, 10:12
Сообщение #59


Участник
*

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



Ну вроде проблема решилась.
Заработало через всю комнату причем IRDA повернута задней частью.
ПОМЕНЯЛ IRDу поставил не большую а маленькую с круглой линзой.
Стало стабильно принимать на расстоянии 4 метра (вся комната)
Go to the top of the page
 
+Quote Post
sKWO
сообщение Apr 7 2008, 12:37
Сообщение #60


Местный
***

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



Цитата(jin_jin @ Apr 7 2008, 13:12) *
Ну вроде проблема решилась.
Заработало через всю комнату причем IRDA повернута задней частью.
ПОМЕНЯЛ IRDу поставил не большую а маленькую с круглой линзой.
Стало стабильно принимать на расстоянии 4 метра (вся комната)

Извиняюсь, а какой транзистор для управления вы поставили?
Может тока через ик диод не хватает? Может и у Вас будет дальность как у Панасоника.
Я бы поставил КТ972 или ему подобный и поигрался бы с током через диод.
В лучшем случае, учитывая ваши скоростя подошол бы полевик с низким сопротивлением канала сток - исток.

Сообщение отредактировал sKWO - Apr 7 2008, 12:43


--------------------
нельзя недооценивать предсказуемость глупости
Go to the top of the page
 
+Quote Post
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   1 2 3 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th August 2025 - 21:50
Рейтинг@Mail.ru


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