Jump to content

Где я накосячил? Atmega328


chert2008
 Share

Recommended Posts

ISR(USART_TX_vect) // прерывание по завершению отправки
{
	cli();
	
	if (bufferIndexOut <= 13)
	{

		UDR0 = inString[bufferIndexOut];
		bufferIndexOut++; // Увеличиваем индекс
	}
	else if (bufferIndexOut > 13) // Вывели весь буффер?
	{

		PORTD &= ~0b00000100; // Поднимаем ножку направления PD2 по прерыванию начала отправки данных
		bufferIndexOut = 0;
		
		UCSR0B &= ~(1 << TXCIE0);
		
		UCSR0B |= (1 << RXCIE0);
		
	}
	sei();
}


ISR(USART_RX_vect) // прерыванию по окончанию приема модуля USART
{

	cli();
	
	inchar = UDR0;
	if (inchar == 0x2A)
		bufferIndexIn = 0;
	if (bufferIndexIn < 14)
	{
		
		
		inString[bufferIndexIn] = inchar;
		bufferIndexIn++;
	}

	
	if (bufferIndexIn > 13) // весь буффер?
	{
		
		bufferIndexIn = 0;	// Сбрасываем индекс массива
		bufferIndexOut = 0; // Сбрасываем индекс массива
		
		UCSR0B &= ~(1 << RXCIE0);
		UCSR0B |= (1 << TXCIE0);
		PORTD |= 0b00000100; // Поднимаем ножку направления PD2 по прерыванию начала отправки данных
		UDR0 = inString[bufferIndexOut];
		
		bufferIndexOut++;
		
	}
	sei();
}
int main()
{
	while(1)
      {
	    out(outs);
      }
}

void out(uint16_t x)
{
	PORTD |= 0xC0;
												// OE1,2 disable
	DDRB = 0b00001111;										// portB out
	DDRC = 0b00011111;										// portC out
	PORTB = (PORTB & 0xF0) | (uint8_t)(x & 0x000F);			// 1nd 4bit write
	PORTC = (PORTC & 0xF0) | (uint8_t)((x & 0x00F0) >> 4);	// 2nd 4bit write
	PORTD |= 0x10;
											// CLK1 OUT ENABLE
	PORTD &= 0xEF;
											// CLK1 OUT DISABLE
	PORTB = (PORTB & 0xF0) | (uint8_t)((x & 0x0F00) >> 8);	// 3nd 4bit write
	PORTC = (PORTC & 0xF0) | (uint8_t)((x & 0xF000) >> 12); // 4nd 4bit write
	PORTD |= 0x20;	
										// CLK2 OUT ENABLE
	PORTD &= 0xDF;
											// CLK2 OUT DISABLE
	DDRB = 0b00000000;										// portB IN
	DDRC = 0b00010000;										// portC IN
}

Контроллер связан с компьютером через rs485. Со связью вроде разобрались все работает. Но как только  подключаем функцию out(outs); все рушится. Ножка направления передачи PD2 начинает жить своей жизнью. И здесь мне совсем уж непонятно что не так и какой участок кода дергает ножку.

Link to comment
Share on other sites

ИП MEAN WELL для медицинских и промышленных устройств на складе Компэл

Компэл расширяет складскую программу по специальным ИП для применения в медицинских приборах и промышленных устройствах. Представлены ИП в диапазоне мощности от 5 до 500 Вт, по медицинскому стандарту EN60601-1 с двумя мерами защиты пациента (2хMOPP; тип BF) для устройств, контактирующих с пациентом.  

Все эти надежные источники питания могут применяться не только в медицинских устройствах, но и в промышленных устройствах и информационных системах.  Подробнее>>

Posted (edited)
1 час назад, snn_krs сказал:

Попробуйте при изменении порта D запрещать прерывания

Попробую так сделать.

1 час назад, BARS_ сказал:

Ошибка как минимум тут

Ошибки нет число уже само по себе инвертировано.

Edited by Falconist
Оверквотинг
Link to comment
Share on other sites

Важные «мелочи» в технической документации: выбираем оптимальную батарейку FANSO EVE Energy
Часто разработчик уделяет недостаточно внимания батарейкам. Однако от них зависит стабильная работа выпускаемого устройства, поскольку даже безупречно спроектированная продукция может начать сбоить. Для сохранения стабильных характеристик очень важно учесть все многочисленные тонкости эксплуатации ХИТ. 

Читать статью >>

В 28.06.2022 в 15:52, snn_krs сказал:

Попробуйте при изменении порта D запрещать прерывания

Сделал так и потестил. Ошибок больше небыло.

Раньше было так.. Когда передача заканчивалась ножка опускалась и сразу же вскакивала обратно (синий канал). Сейчас такого не произошло за час ни разу. Отсюда вопрос как это вообще получается?

 

photo_2022-06-29_20-08-50.jpg

Link to comment
Share on other sites

Функционал LED-драйверов MEAN WELL в вопросах и ответах

В статье на примере схемотехнических особенностей и рабочих характеристик LED-драйверов MEAN WELL рассмотрены вопросы, связанные с устройством современных светодиодных светильников и их комплектующих – осветительных светодиодов и LED-драйверов . Поставки продукции MEAN WELL в Россию продолжаются. Наш материал поможет вам выбрать LED-драйвер, соответствующий вашим задачам.

Подробнее>>

Для изменения содержимого порта компилятор может использовать три команды

1. Чтение порта во временный регистр

2. Изменение значения во временном регистре

3. Сохранение временного регистра в порт.

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

Команды cli() и sei() в прерывании не нужны, они прерывание запрещается и разрешается аппаратно. При приеме по 485 используют таймаут. Если нет приема дольше нескольких мСек ( обычо длительность передачи 3.5 символов ), значит прием закончен, или ошибка. Если этого не сделать обмен может зависнуть.

Link to comment
Share on other sites

LIF/R2 от Mornsun – источники питания с коррекцией мощности на DIN-рейку
Производитель источников питания Mornsun расширил линейку продукции в форм-факторе Industrial для монтажа на DIN-рейку. В настоящий момент доступны источники питания (ИП) с каскадом коррекции коэффициента мощности семейства LIF/R2. Новая продукция относится ко второму поколению (R2) и характеризуется компактными размерами, высокой эффективностью и надежностью.

Читать подробнее >>

2 часа назад, snn_krs сказал:

Если между этими командами произойдет прерывание

Огромнейшее спасибо за советы. Буду тестить дальше. За две недели мучений это большой прорыв для меня.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...