Перейти к содержанию

Пример Работы Uart На Atmega16


svip

Рекомендуемые сообщения

помогте разобраться в протоколе UART.

нужно по нему соеденить два микроконтроллера.

Если кто может приведите пример прошивки на си с использованием uart

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

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

это было под первым пунктом..

вам нужно просто бросать байтики с 1 мк на другой ? или нужен протокол обмнеа.. определитесьс этим

у людей есть свои проблемы и тд.. и тратить свое время на подобные вопросы, которые являются не какой-либо проблемой, а просто банальной ленью и нежеланием делать и думать самому..

«Как сердцу выразить себя? … Мысль изреченная есть ложь!»

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

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

это было под первым пунктом..

вам нужно просто бросать байтики с 1 мк на другой ? или нужен протокол обмнеа.. определитесьс этим

у людей есть свои проблемы и тд.. и тратить свое время на подобные вопросы, которые являются не какой-либо проблемой, а просто банальной ленью и нежеланием делать и думать самому..

я обыскал все что только можно.

А протокол uart нужен для связи мк c радиомодулем. два микроконтроллера будут соединятся через радиосвязку.

Извените что задаю глупые вопросы, но на примерах учится легче. а я в этом деле новичек и многого не понимаю

посмотрел даташит по 16 меге

http://www.atmel.ru/Disks/AVR%20Technical%.../m16_O0307s.pdf

http://www.promelec.ru/pdf/atmega16.pdf

но нигде нет хоть намека на пример прошивки

Изменено пользователем svip
Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Читай. Если что спрашивай.

Вот http://a_v_r123.nm.ru/05a.htm

ИЗ ССЫЛКИ НАДО УБРАТЬ ДВА ЗНАКА _ _ и только потом вводить адрес в браузер.

Я был механик, я есть механик, я буду механик

Ссылка на комментарий
Поделиться на другие сайты

еще раз повторяю думайте.. не 0.5-1 раз а все 10 ..

даташит качаем полный а не ознакомительную листовку ...

каким бы небыл канал связи .. протокол обмена присутствовать будет ..

_http://atmel.com/dyn/resources/prod_documents/doc2466.pdf

150 страница ...

«Как сердцу выразить себя? … Мысль изреченная есть ложь!»

Ссылка на комментарий
Поделиться на другие сайты

но вот проблема codevisionAVR пишет неизвестный RXEN и TXEN

что делать?

В кодвижн все просто

настраиваеш УАРТ в визарде

а в программе пишеш например putchar(чтото);

или putsf или printf для отправки строки....

1 километр = 1024 метр

Ссылка на комментарий
Поделиться на другие сайты

но вот проблема codevisionAVR пишет неизвестный RXEN и TXEN

что делать?

В кодвижн все просто

настраиваеш УАРТ в визарде

а в программе пишеш например putchar(чтото);

или putsf или printf для отправки строки....

Конечно Вам все просто, а для меня это просто ужас. пытаюсь разобраться да все никак. можно поподробнее что именно указать в визарде

и как потом использовать. может у когото есь пример похожий с комментариями???

Ссылка на комментарий
Поделиться на другие сайты

в даташите расписано все про уарт.. в визарде для обоих контроллеров нада одинаковые натсройки ...

поставьте для начала бодрэйт 1200 no parity и 1 stop bit

кодвижна под рукой нету.. но проще чем там и правда только в сказке.. а вообще если хотите изучить контроллеры то начинали бы с ассемблера.. в авр студии..

«Как сердцу выразить себя? … Мысль изреченная есть ложь!»

Ссылка на комментарий
Поделиться на другие сайты

Конечно Вам все просто, а для меня это просто ужас. пытаюсь разобраться да все никак. можно поподробнее что именно указать в визарде

и как потом использовать. может у когото есь пример похожий с комментариями???

Почитай это...

_http://forum.cxem.net/z5.htm

;)

тоесть это

a_v_r_1_2_3.n_m_.r_u/z_5.h_t_m

:wacko:

(из ссылки убери все знаки _ )

1 километр = 1024 метр

Ссылка на комментарий
Поделиться на другие сайты

bekor Эту ссылку я выложил в своём 1 посте, будь внимателнее :)

А ссылки не отображаютьса коректно, изза того, что "авр123" втоматически заменяетьса на "forum.cxem.net"

svip Если ты так сильно хочешь код, то вот тебе код :)

#include <mega16.h> //обычный хидер
#include <m8_128.h> //хидер для битов
#include <delay.h>

#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 Receiver buffer
#define RX_BUFFER_SIZE 100
char rx_buffer[RX_BUFFER_SIZE];

#if RX_BUFFER_SIZE<256
unsigned char rx_wr_index,rx_rd_index,rx_counter;
#else
unsigned int rx_wr_index,rx_rd_index,rx_counter;
#endif

// This flag is set on USART Receiver buffer overflow
bit rx_buffer_overflow;

// USART Receiver interrupt service routine
interrupt [USART_RXC] void usart_rx_isr(void)
{
char status,data;
status=UCSRA;
data=UDR;
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
  {
  rx_buffer[rx_wr_index]=data;
 rx_wr_index ++; // инкремент индекса
 if (rx_wr_index == RX_BUFFER_SIZE)
  { 
 rx_wr_index=0;
  };

 ++rx_counter;
  if (rx_counter == RX_BUFFER_SIZE)
  {
  rx_counter=0;
  rx_buffer_overflow=1;
  };
  };
}

#ifndef _DEBUG_TERMINAL_IO_
// Get a character from the USART Receiver buffer
// взять символ из созданного буфера USART
#define _ALTERNATE_GETCHAR_
#pragma used+
char getchar(void)
{
char data;
while (rx_counter==0);
data=rx_buffer[rx_rd_index];
if (++rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0;
#asm("cli")
--rx_counter;
#asm("sei")
return data;
}
#pragma used-
#endif

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

// Глобальные переменные

void main(void)
{
// Локальные переменные

PORTD=0x00;
DDRD=0x00;

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


// Global enable interrupts
#asm("sei")

delay_ms(100);//пауза
printf("Hello world\r\n"); //отправляем строчку и переходим на новую строчку, и возвращаем калитку.
delay_ms(100);//пауза
printf("-=gga=-\r\n");	
}

Я был механик, я есть механик, я буду механик

Ссылка на комментарий
Поделиться на другие сайты

Вот и ещё одно подтверждение того, что к курсу от авр123 нужно относиться осторожно...

Если кто будет разбирать данный код (выше на пост), просто, возьмите на заметку, как делать не надо. Возможно, пример и рабочий, но так программы не пишут. :)

То что бросилось:

- инкрементировать (++) 2-х байтные числа не корректно. правильнее ставить variable += 1;

- проверять буфер на равенство (==) аналогично. нужно использовать > или <

- а запрещать прерывания и потом их разрешать это полное ламерство. если вся программа ограничится этим кодом, можно такое допустить, но а если прога будет расти, то столько глюков наловите при отладке...

Ссылка на комментарий
Поделиться на другие сайты

- инкрементировать (++) 2-х байтные числа не корректно. правильнее ставить variable += 1;

- проверять буфер на равенство (==) аналогично. нужно использовать > или <

Ну тот участок кодаЯ, в котором вы нашли эти "неточности" был написан не автором курса, а генератором начального кода в код визхарде :)

Я был механик, я есть механик, я буду механик

Ссылка на комментарий
Поделиться на другие сайты

а кто выбрал данный компилятор и визард вместе с ним ?

я почитав курс, когда еще ничо не знал в мк, ушол аттуда падальше .. найдя страничку Николаева был счастлив ))

«Как сердцу выразить себя? … Мысль изреченная есть ложь!»

Ссылка на комментарий
Поделиться на другие сайты

Да согласен, курс немного непонятливый, ну и очень занудный (особенно шрифт) но полезного в нём тоже много.

Дай ссылку на страничку Николаева, может и я стану счастливым :)

Я был механик, я есть механик, я буду механик

Ссылка на комментарий
Поделиться на другие сайты

то plexor! :

Зачем же нести такую чуш!!!! И сбивать с толку людей!!!

Любой себя уважающий компилятор поёмйт что == или <> одно и тоже и сделает всёравно одинаково... Инкримент на 1 ИМЕННО правильно делать через ++ !!!!! Опять таки уважающий себя компилятор проверяет если в циклу не прибавляем 1 и ЗАМЕНИТ += 1 на ++ !!!!!

Запрещать прерывания в критических местах ИМЕННО РЕКОМЕНДОВАНО!!!!

Так что сразу видно что Вы неизучали асеммблер... И вообще прежде чем писать это лучше возьмите себе здрояк от GCC и поизучайте его... Или на крайний случай дизасемблируйте то что вам ненравится и посмотрите как это сделал компилятор... Будете удивлён!!!!!! Успехов..

Ссылка на комментарий
Поделиться на другие сайты

Расуж реч пошол об учебниках

киньте пожалуйста ссылку на учебник AVR на Си

как avr123 но чтоб професианальности было побольше

и про периферию много подробностей

1 километр = 1024 метр

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...