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

 
 
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

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

 


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


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