3d_killer

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

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

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

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

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

Тут работа без прерываний. Чем смотрите выход UART?

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


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

вот полный листинг теста

/*
 * GccApplication1.c
 *
 * Created: 05.10.2017 18:57:56
 * Author : user
 */ 
//Частота МК
#define  F_CPU 16000000UL
//Основные библиотеки
#include <avr/io.h>
#include <util/delay.h>
//Библиотека сторожевого таймера
#include <avr/wdt.h>
//Подключаем библиотеку прерываний
#include <avr/interrupt.h>

#define FOSC 16000000
// Clock Speed
#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;
}
//*************************************************
//Прерывание по таймеру
//*************************************************
ISR( TIMER1_OVF_vect )
{
	PORTC^= (1>>0);
}



//void USART_Transmit( unsigned char data ) //Функция отправки данных
 //{
	// while ( !(UCSR1A & (1<<UDRE)) ); //Ожидание опустошения буфера приема
	 //UDR1 = data; //Начало передачи данных
// }


	
	
int main(void)
{
	//*************************************************
	//УСТАНОВКА ПОРТОВ
	//*************************************************
	DDRD |= 1>>3;
	PORTC &= ~(1>>3);
	
	
	
	//Установка порта на выход
	DDRC |= 1>>0;
	//Установка на порту 0
	PORTC &= ~(1>>0);
	//*************************************************
	
	USART_Init(MYUBRR);
	//*************************************************
	//Запуск сторожевого таймера
	//*************************************************
	wdt_enable(WDTO_2S);
	//*************************************************
	
	//*************************************************
	//Настройка USART
	//*************************************************
	
	
	//*************************************************
	//Настройка прерывания (ISR( TIMER1_OVF_vect ))
	//*************************************************
	//TCCR1B =(0<<CS12)|(0<<CS11)|(1<<CS10);//1
	//TCCR1B =(0<<CS12)|(1<<CS11)|(0<<CS10);//8
	//TCCR1B =(0<<CS12)|(1<<CS11)|(1<<CS10);//64
	TCCR1B =(1<<CS12)|(0<<CS11)|(0<<CS10);//256
	//TCCR1B =(1<<CS12)|(0<<CS11)|(1<<CS10);//1024
	TIMSK |= (1<<TOIE1);
	//Разрешаем глобальные прерывания
	sei();
	//*************************************************
   
   
   
   //*************************************************
   //Основной цикл программы
   //*************************************************
    while (1) 
    {
		USART_Transmit('d');
		//Инвертирование порта
		//PORTC^= (1>>0);
		_delay_ms(300);
		//USART_Transmit('2');
		//Сброс сторожевого таймера
		wdt_reset();
    }
}

 

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


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

Уберите сторожевой таймер и отключите его фьюзом.

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


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

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

2017-10-06_17-56-21.jpg

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


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

Попробуйте разные скорости. И лучше прогой Com Port Toolkit

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


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

Так одно же сообщение, а они должны валиться раз в секунду, понятно если скорость не та то будут эроглифы, а тут одно иногда проскочит

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


Ссылка на сообщение
Поделиться на других сайтах
snn_krs    14
45 minutes ago, 3d_killer said:

/* Set frame format: 8data, 2stop bit */ UCSR1C = (1<<USBS1)|(3<<UCSZ01);

Надо UCSZ10 и два стоп бита в терминальной программе желательно поставить м скорость

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


Ссылка на сообщение
Поделиться на других сайтах
BARS_    623
Так одно же сообщение, а они должны валиться раз в секунду, понятно если скорость не та то будут эроглифы, а тут одно иногда проскочит
А что в качестве usb-uart адаптера используется?

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


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

Именно ардуина или только uart адаптер на плате?

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


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

Там же встроенный usb com конвертор

Ну на ней адаптер который, цепляюсь тремя проводами, в программе которую вы сказали выбираю порт адаптера и скорость которую задал в программе

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


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

Надо UCSZ10 и два стоп бита в терминальной программе желательно поставить м скорость

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

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


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

Ээээ, вы переходите на Си, а вот в ардуйне как раз был C++...

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


Ссылка на сообщение
Поделиться на других сайтах
snn_krs    14
2 hours ago, 3d_killer said:

/* Set frame format: 8data, 2stop bit */ UCSR1C = (1<<USBS1)|(3<<UCSZ01);

UCSR1C = (1<<USBS1)|(3<<UCSZ10);

Или так с одним стоп-битом

UCSR1C = (1<<UCSZ11)|(1<<UCSZ10);

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


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

Ээээ, вы переходите на Си, а вот в ардуйне как раз был C++...

Там примеров больше и не думаешь какие флаги где поставить есть куча библиотек

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


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

Я ж вам говорил: берете образец кода для МК с единственным USART и дописываете единичку к РЕГИСТРАМ, а вы еще в имена битов полезли... Ну если ленитесь читать даташит, как именно биты поименованы, хотя бы просто делайте 1 в 1 то, что вам советуют. 

Для начала я бы рекомендовал разобраться, как связана у вас прошивка с исходниками - почему вдруг не прошивалось? Лично я такое впервые встречаю, чтобы строчки в программе, не вызывающие ошибку компиляции, каким-то чудом не давали прошивать МК! Разберитесь с чудесами, потом и реальными проблемами можно будет заняться.

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


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

//************************************************* //УСТАНОВКА ПОРТОВ //*************************************************

DDRD |= 1>>3;

Стрелочки сдвига - в обратную сторону.

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


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

Я ж вам говорил: берете образец кода для МК с единственным USART и дописываете единичку к РЕГИСТРАМ, а вы еще в имена битов полезли... Ну если ленитесь читать даташит, как именно биты поименованы, хотя бы просто делайте 1 в 1 то, что вам советуют. 

Для начала я бы рекомендовал разобраться, как связана у вас прошивка с исходниками - почему вдруг не прошивалось? Лично я такое впервые встречаю, чтобы строчки в программе, не вызывающие ошибку компиляции, каким-то чудом не давали прошивать МК! Разберитесь с чудесами, потом и реальными проблемами можно будет заняться.

я такое сам в первый раз заметил на мк атмега 128, на других такого не было

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


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

Могу вечером дать пример кода где у меня пашет два юарта . Мк Атмега128

    

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


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

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

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

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


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

Вот :

    https://drive.google.com/file/d/0BxEy5lBKNE0NajVXdVIwY0pPOU0/view?usp=drivesdk

 

Посмотрел код , в нем прием в двух юартах реализован по прерыванию . А печатает в нулевой только . Но и во второй напечатать без проблем вообще :)

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


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

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

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

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

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

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

Войти

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

Войти сейчас


  • Сообщения

    • Листья на сакуре не из бумаги Ах, если бы можно было писать проги как стихи!  
    • Схема. Может есть у кого какие пожелания? Job1.PDF
    • в интернете нет простой примера   про звук или есть только на codevis   хотел  бы  примера на языке си AVR STUDIO 6.0 примерно при окончание  работы таймера  в конце подавался  звук  пик-пик как на микроволновке или другой вариант при нажаты кнопку первой выдавался один пик на второй два пик, и третий вариант при работы таймера когда переменный i дойдет до какого значение допустим i=20 подавался один раз пик при i=10 подавался 2 раза пик-пик а таймер еще дальше  работает считает до нуля при обратном отчете.  Этот вариант кто если ответит ответ будет универсальный для изучения звука,если можно еще другой вопрос есть 4-х разрядный 7 сегментный индикатор динамическая индикация на наго подается два разных переменный i и r спасибо за ответ как это сделать я получил ответ у меня вопрос такой при обратном отчете когда таймер  считает до нуля     чтобы загорелся на индикаторе слово  как на микроволновке  End то ист занимает три разряда один разряд получаеться с переменного i а два другой с переменного r.Заранее спасибо за ответ это всем пригодиться будет универсальный ответ!!!
    • Опять яйцо в огненном шаре
    • спасибо    не выдержит эта схема ток в 5-7 ампер.
    • Почитал тут. Стабилизатор при напруге менее 160 вольт работать не будет, улетит в защиту, только с сервоприводом, попадались при 120 нормально пашут. при такой просадке делай хорошее заземление,  оно компенсирует огромное сопротивление нулевой линии,  при качественной земмле отключай ноль до счетчика, на место его земля, напруга будет намного стабильней,  если земля позволит варить то просадки у соседей будут в 2 раза меньше. соеденять землю и ноль не советую, у меня напруга падает до 160 вольт, ток кз земля- ноль более 10А и заземление быстро сгорит. Для начала забей метровый штырь в землю и замерь напряжение фаза- земля и ноль - земля. на крайний случай 3 аккумулятора + зарядное, и вари по немногу на постоянке.   Не советую стабилизатор на такой хреновой линии. при сварке  подключай заземление к нулевому проводу, напруга у соседей немного поднимется, при сварке часть тока потечет через землю если поздно ответил, то может кому то поможет мой совет