3d_killer

2 и более USART порта & Atmel studio

50 сообщений в этой теме

3d_killer    3

Не могу попробовать передачу и прием данных в Atmel Studio, МК atmega 128.

пишу такой код (везде в интернете работа только с одним портом, поэтому единички подставлял я в регистрах)

UBRR1H=0;
UBRR1L=25;
UCSR1B |=(1<<RXCIE1)|(1<<RXEN)|(1<<TXEN)|(UDRIE1);
UCSR1C |=(1<<URSEL)|(1<<UPM1)|(1<<UCSZ1)|(1<<UCSZ0);

начиная со второй строки код не зашивается, при верификации ошибка,

на URSEL студия ругается что такого регистра нет.

Есть у кого пример кода когда более 1 порта как его инициализировать, принять и передать данные?

Поделиться сообщением


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

Быстрый заказ печатных плат

Полный цикл производства PCB по низким ценам!

  • x
    мм
Заказать Получить купон на $5.00
3d_killer    3

такой регистр есть, я его пробовал, все равно программа не пишется в контроллер, примеров случайно нету?

http://narodstream.ru/avr-urok-14-usart-svyaz-mk-s-pk-chast-3/

http://www.customelectronics.ru/avr-rabota-s-uart/

вот примеры статей, видео, везде этот регистр, все что тут показывается не работает...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
ARV    306

Какой регистр?! UMSEL не регистр, а название бита в регистре UCSR1C!

Вы бы даташит читали бы все-таки, а то у вас явные проблемы с пониманием того, что происходит в коде.

Кстати, "не пишется" и "не компилируется" - это разные вещи. В контроллер пишется всё, что угодно, даже стихи Пушкина можно прошить. А вот программа с ошибками не скомпилируется и потом, естественно, не запишется. Разницы в настройках разных модулей USART нет никакой - 0 на 1 меняется в названиях регистров и всё. А если не работает - это в коде надо разбираться.

  • Одобряю 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
3d_killer    3

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

Я вижу что это название бита, но везде в примерах совсем другой, и все равно оно не работает

2017-10-06_15-45-48.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
BARS_    623
9 минут назад, 3d_killer сказал:

прошу пример

А может просто в даташит сходить?.. ну и на прошивку код никак не должен влиять, даже кривой и нерабочий. Если скомпилился - должен зашиться.

Изменено пользователем BARS_

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
ARV    306

Смотрите: по умолчанию во всех AVR c USART есть регистры UCSRA, UCSRB и т.д. В МК, где USARTов больше одного, эти регистры нумеруются, т.е. превращаются в UCSR0A и UCSR1A и т.д.

В каждом регистре есть биты RXC, UDRE и т.п., которые так же получают номера, если модулей USART несколько. При этом, так как биты ОДИНАКОВО располагаются в регистрах разных модулей, можно продолжать пользоваться НЕНУМЕРОВАННЫМИ наименованиями битов - ошибки не будет. Но регистры, само собой, надо нумеровать правильно.

Поэтому если у вас есть пример для USART без номера - просто ДОПИШИТЕ к названию регистров нужный номер, не трогая всё остальное. Или перенумеруйте ВСЕ в соответствии с тем, что я написал.

Никакой другой разницы нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
3d_killer    3

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

2017-10-06_15-58-24.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
BARS_    623
Только что, 3d_killer сказал:

даже эти 2 строчки после компиляции не пишутся в контроллер

Значит пишите криво. Код никак не влияет на запись в МК.

  • Одобряю 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
ARV    306

Потому что во второй строчке у вас указан UMRSEL1, которого в природе не существует. Читайте выше - я описал алгоритм того, как надо делать.

Изменено пользователем ARV

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
3d_killer    3

это как??

2017-10-06_16-01-33.jpg

2017-10-06_16-01-48.jpg

по поводу UMRSEL1 я же закоментировал эти строки

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
BARS_    623
8 минут назад, 3d_killer сказал:

как?

Так, что в даташит надо смотреть прежде чем что-то писать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
3d_killer    3

думаете не открывал? нужной информации я не нашел, вы если не хотите или не можете помочь, то зачем пишите?

2017-10-06_16-16-52.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
BARS_    623
4 минуты назад, 3d_killer сказал:

нужной информации я не нашел

Как так, если там подробно расписано, как запустить UART? Мало того, там дан кусок кода на Си, который этим занимается. Только надо открывать англоязычный даташит, а не криво переведенный русский. http://eu.mouser.com/ds/2/36/Atmel-8151-8-bit-AVR-ATmega128A_Datasheet-464632.pdf

Изменено пользователем BARS_

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
BARS_    623

В компиляторе есть предупреждения при сборке?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
3d_killer    3

в методе USART_Init

1,2 и 4 строки вызывают ошибку при записи

нет в компиляторе пусто

если использовать 0 порт то тоже ошибка

2017-10-06_16-33-13.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
BARS_    623

Раз компилятор пропускает, значит все нормально с кодом. Попробуй через AVR-Burn-O-Matt прошить

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
3d_killer    3

он шьет через winavr, установил и прикрутил к atmel studio, прошил без ошибок, щас попробую передачу, то есть код написан верно?

2017-10-06_17-06-35.jpg

2017-10-06_17-10-15.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
BARS_    623

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
3d_killer    3
#define FOSC 16000000
#define BAUD 57600
#define MYUBRR FOSC/16/BAUD-1

void USART_Init(unsigned int ubrr)
{
	/*Set baud rate */
	UBRR1H = (unsigned char)(ubrr>>8);
	UBRR1L = (unsigned char)ubrr;
	UCSR1B = (1<<RXEN1)|(1<<TXEN1);
	/* Set frame format: 8data, 2stop bit */
	UCSR1C = (1<<USBS1)|(3<<UCSZ01);
}
void USART_Transmit( unsigned char data )
{
	/* Wait for empty transmit buffer */
	while ( !( UCSR1A & (1<<UDRIE1)) )
	;
	/* Put data into buffer, sends the data */
	UDR1 = data;
}
int main(void)
{
	USART_Init(MYUBRR);
    while (1) 
    {
		USART_Transmit('3');
		//Инвертирование порта
		//PORTC^= (1>>0);
		_delay_ms(1500);
		//USART_Transmit('2');
		//Сброс сторожевого таймера
		wdt_reset();
    }
}

все равно тишина на порту

Изменено пользователем 3d_killer

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
BARS_    623

А порты кто настраивать будет?.. Ну и функция инита нигде в коде не вызывается.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
3d_killer    3

она есть я поменял тут код, а порты настраивать это какие?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
BARS_    623

Ту ножку, на которой Tx находится, настроить на выход

Поделиться сообщением


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

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сообщения

    • я не нашел с одним контролером, если вы знаете где можно купить поделитесь ссылкой, спасибо! 
    • драствуйте после замены всех ключей инвертор работает,но ток не регулируется держит 40 Ампер на балласте,на кручение резистора тока,нет реакции где копать уже не знаю за рание спасибо.схема та что давал олег на 1 странице
    • пофлужу малость,  играюсь с миниатюрной пальчиковой лампочкой, триодик  304TL, накал 5в х 25А  
    • Читал, ничего там нет особенного. В полумосте переменка через электролиты протекает? Естественно. А если бы электролиты в нем не участвовали, что тогда она не протекала бы? Никуда они не денутся. ВЧ переменка течет и через электролиты в варианте с пленочным делителем, каким бы это странным не казалось. И всегда течет, когда имеется импульсное потребление тока от них. Приведенный вами случай отличный пример китайской халтуры, но не приговор полумосту с электролитами. У меня на фото ЗУ с максимумом 14,5В 20А. Делитель полумоста - пленка, а электролиты 2*220мкФ 400В параллельно (вне моста). Компактно. Эквивалентный вариант - 2*820мкФ 200В (последовательно как делитель) - более габаритно, да и нет у меня таких электролитов. Оба варианта смоделированы по отдельности. Но собран первый. Результаты такие (при 250Вт на выходе): В делителе на пленке протекает только ВЧ-ток по 1,2А на плечо. Через фильтрующий электролит протекает НЧ и ВЧ ток 2,5А действ. Его ESR около 0,2 Ом, 2 в параллель. В делителе на электролитах протекает НЧ и ВЧ-ток, 2,76А действ. на каждое плечо. Но ESR 200В электролита в 4 раза ниже (0,05Ом - обычное значение) Потери в электролитах получаются близкими (0,6 Вт и 0,72 Вт).
    • Да, они есть разные. Но может проще заказать с одним контроллером
    • Прочитал всё. Полное ощущение, что все "постулаты" я уже неоднократно читал в статьях о развеянии аудио-мифов, которые ещё в прошлом веке писал Сухов и литературе разных лет наших и зарубежных авторов.