3d_killer

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

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

snn_krs    4

А общее разрешение прерываний есть ?

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


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

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

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

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

Тут работа без прерываний. Чем смотрите выход 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_    530

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

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


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

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

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

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


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

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

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


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

и так не стоит совместимости, пробовал и так и так

 

2017-10-06_18-04-34.jpg

2017-10-06_18-04-54.jpg

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


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

Скорость не совпадает

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


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

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

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


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

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

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

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


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

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


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

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

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


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

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

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

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


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

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

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

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


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

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

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


Ссылка на сообщение
Поделиться на других сайтах
snn_krs    4
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    214

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

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

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


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

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

DDRD |= 1>>3;

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

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


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

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

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

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

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


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

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

    

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


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

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

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

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


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

Вот :

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

 

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

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


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

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

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

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

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

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

Войти

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

Войти сейчас