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

 
 
> USART на АTmega48, не работает
NikitoS-86
сообщение Dec 9 2008, 16:27
Сообщение #1


Участник
*

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



Доброго времени суток. Значит так, собрал платку на 48 Атмеге, работает, необходимо отправлять данные на ПК... Как топорный вариант выбрал COM-порт. Для этого была взята схемка MAX232, ну вобщем всё по книжке... Однако, не получается даже сделать простешего зеркала=/. При этом ситуация следующая:
- Атмега работает от внешнего кварца в 20 МГц;
- скорость - не важно, пробовал на многих, ни на одной не работает...
- МАХ рабочий, тупо закорачивал ноги - сигнал возвращался тут же...
- если оциллографом смотреть на ногах самой Атмеги, то приходит всегда то, что нужно, а в ответ уходит какая-то ересь... (в моём случае это 0x80)

Ну вот собственно код:
Код
#include <avr/io.h>
#include <avr/interrupt.h>

#define FOSC 20000000 // Clock Speed
#define BAUD 2400
#define MYUBRR FOSC/16/BAUD-1

void USART_Init (unsigned int);

volatile unsigned char buff;

ISR (USART_RX_vect, ISR_BLOCK)
{
    buff=UDR0;
    while ( !( UCSR0A & (1<<UDRE0)) );
    
    UDR0 = buff;    
}

ISR (USART_TX_vect, ISR_BLOCK)
{
    buff=0;
}



void main( void )
{
    sei();
    USART_Init(MYUBRR);
    for(;;);
}

void USART_Init(unsigned int ubrr)
{
UBRR0H = (unsigned char)(ubrr>>8);            
UBRR0L = (unsigned char)ubrr;

UCSR0B |= (1<<RXCIE0);            
UCSR0B |= (1<<TXCIE0);

UCSR0B |= (1<<RXEN0)|(1<<TXEN0);            

UCSR0C = (1<<USBS0)|(3<<UCSZ00);            
}



Может быть кварц слишком быстрый? Но по даташиту ограничения нету на его частоту никаких...
Спасибо.

Сообщение отредактировал NikitoS-86 - Dec 9 2008, 16:29
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
=GM=
сообщение Dec 9 2008, 19:01
Сообщение #2


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(NikitoS-86 @ Dec 9 2008, 16:27) *
- если оциллографом смотреть на ногах самой Атмеги, то приходит всегда то, что нужно, а в ответ уходит какая-то ересь... (в моём случае это 0x80)

Мне кажется, поведение вашего кода можно объяснить следующим. После принятия очередного байта программа обработки прерывания приёмника начинает анализировать флаг готовности передатчика, но прерывание от передатчика срабатывает быстрее и успевает обнулить ваш буфер, так что вы всё время передаёте чистый нуль. А 0х80 возможно получается из-за того, что неправильно выбрана скорость приёмника писюка или вы неправильно измерили.

Чтобы проверить мои предположения, вам нужно удалить обработчик прерывания от передатчика, всё равно он там ни к селу ни к городу и запустить программу. Ну или записывайте в буфер некое число, отличное от нуля, например, 0х41.

Если не поможет, то проверьте передачу символов от МК на ПК. Передавайте в цикле известный символ, например, В
Код
while(1)
{
UDR0=0х42;
delay(10000);    
}


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- NikitoS-86   USART на АTmega48   Dec 9 2008, 16:27
- - Палыч   Вы уверены что вот это будет подсчитано правильно ...   Dec 9 2008, 16:36
|- - NikitoS-86   Цитата(Палыч @ Dec 9 2008, 19:36) Вы увер...   Dec 9 2008, 16:43
|- - Палыч   Цитата(NikitoS-86 @ Dec 9 2008, 19:4...   Dec 9 2008, 16:49
|- - NikitoS-86   Цитата(Палыч @ Dec 9 2008, 19:49) Ну, поч...   Dec 9 2008, 16:53
- - Сергей Борщ   Цитата(NikitoS-86 @ Dec 9 2008, 18:2...   Dec 9 2008, 16:54
|- - Палыч   Может fuse CKDIV8 остался запрограммирован? С заво...   Dec 9 2008, 17:01
|- - Палыч   Цитата(Сергей Борщ @ Dec 9 2008, 19:54) С...   Dec 9 2008, 17:07
|- - NikitoS-86   Цитата(Сергей Борщ @ Dec 9 2008, 19:54) С...   Dec 9 2008, 17:10
||- - Сергей Борщ   Цитата(NikitoS-86 @ Dec 9 2008, 19:1...   Dec 9 2008, 17:44
|- - gormih   Цитата(Сергей Борщ @ Dec 9 2008, 19:54) А...   Dec 9 2008, 17:37
|- - Сергей Борщ   Цитата(gormih @ Dec 9 2008, 19:37) А если...   Dec 9 2008, 17:49
|- - gormih   Цитата(Сергей Борщ @ Dec 9 2008, 20:49) И...   Dec 9 2008, 18:13
- - man with no name   попробуйте uart включать после окончательной иници...   Dec 9 2008, 17:04
- - gormih   AVR CALCULATOR Хватит уже п**у мучать, товарищи...   Dec 9 2008, 17:46
- - NikitoS-86   Значится так... 1) Всем спасибо, поскольку полезно...   Dec 10 2008, 09:07
- - Сергей Борщ   Цитата(NikitoS-86 @ Dec 10 2008, 11...   Dec 10 2008, 09:53
- - NikitoS-86   Цитата(Сергей Борщ @ Dec 10 2008, 12:53) ...   Dec 10 2008, 13:11
- - Сергей Борщ   Цитата(NikitoS-86 @ Dec 10 2008, 15...   Dec 10 2008, 13:22


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

 


RSS Текстовая версия Сейчас: 23rd August 2025 - 15:32
Рейтинг@Mail.ru


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