Мелкие вопросы по МК и ПЛИС.

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

можно попробовать восстановить как нагенерил Codevision
т.е. убрать lcd_out=1;
и так сделать:

Код: Выделить всё

if (rx_buffer_overflow)
{
lcd_clear();
for (i=0; i<10; i++)
{
lcd_puts(&rx_buffer[i]);
}
//delay_ms(200); это зачем - пока пауза могут прийти данные с компорта многократно
rx_buffer_overflow = 0;
rx_wr_index= 0;
rx_counter = 0;
} 
а вот когда посылаем надо выдержать паузу между посылками - пока микроконтроллер выводит на индикатор:

Код: Выделить всё

while (1)
if (PINC.2==1)
{
for (i=0; i<10; i++)
{
unsigned char symbol = d[i];
USART_transmitter(symbol);
}
delay_ms(200);
}
Реклама
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 174
Зарегистрирован: Вт сен 11, 2012 09:13:52
Откуда: Брест, Беларусь

Сообщение sphincs »

oleg110592 писал(а)://delay_ms(200); это зачем - пока пауза могут прийти данные с компорта многократно
я отправляю по нажатию кнопки пока что. паузы были потому что отслеживал выполнение программы светодиодами :)

премного благодарен. все заработало, но с небольшими комментариями:
конструкция

Код: Выделить всё

for (i=0; i<10; i++)
{
lcd_puts(&rx_buffer[i]);
}

не нужна. в rx_buffer хранится вся принятая строка и выходит так, что она целиком выводится на дисплей командой lcd_puts(&rx_buffer[0]). в случае for'a она просто 10 раз подряд пишется и с какими-то искажениями уже (индекс в скобках обозначает символ, с которого начинается передача строки. поставил экран побольше и проверил)
ну и задержка в передатчике понадобилась при исправленном приемнике (а то лишнее докидывал передатчик), хотя до этого и без нее обходилось, начиная со второй передачи :)
Контактная информация:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

тогда наверное можно просто так выводить строку из массива:
lcd_puts(rx_buffer);
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 174
Зарегистрирован: Вт сен 11, 2012 09:13:52
Откуда: Брест, Беларусь

Сообщение sphincs »

oleg110592 писал(а):lcd_puts(rx_buffer);
да, действительно работает
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Модератор
Аватара пользователя
Сообщения: 4618
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

Имя массива - указатель на его первый элемент. Т.е. он эквивалентен &rx_buffer[0]
Реклама
Chettuser

Сообщение Chettuser »

Как в XC8 (PIC16F887) отследить окончание записи в EEPROM? Не пойму что использовать:

Код: Выделить всё

while (WR);
или

Код: Выделить всё

while (!EEIE);
Реклама
Модератор
Аватара пользователя
Сообщения: 4618
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

Chettuser писал(а):Как в XC8
Собственно, как и в любом другом компиляторе - бит окончания записи. Бит найдёте в даташите в разделе "EEPROM".
Chettuser

Сообщение Chettuser »

Тады для чего флаг прерывания нужен?
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич

Сообщение Alexeyslav »

Чтобы вызвать прерывание по окончании записи, разве нет?
Контактная информация:
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 174
Зарегистрирован: Вт сен 11, 2012 09:13:52
Откуда: Брест, Беларусь

Сообщение sphincs »

симулирует ли протеус работу кварца? можно ли в нем проверить работу часов реального времени на атмеге32 с кварцем на TOSC1/TOSC2?
Контактная информация:
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич

Сообщение Alexeyslav »

А зачем туда симулировать кварц? подай меандр с генератора...
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Сообщение FreshMan »

вопрос относителтно ATmega8a
используется Т2 в режиме FastPWM
задействованы обработчики прерываний по переполнению и совпадению
OCR2 принимает значения от 0 до 250
глюк состоит в том , что через определенный интервал времени дважды срабатывает ПОДРЯД обработчик преывания по переполнению
когда же я задаю другой диапазон для OCR2 от 10 до 250 то все идет как по маслу
в чем природа оного глюка ?
Tell Me The Truth
Опытный кот
Аватара пользователя
Сообщения: 721
Зарегистрирован: Ср июн 11, 2014 09:43:13
Откуда: США

Сообщение Pink-Pank »

В том, что на время обработки прерывания таймер у Вас не останавливается, а продолжает считать. код инициализации таймера и обработчиков прерываний выложите.
Fucking static initialization order fiasco
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Сообщение FreshMan »

Tell Me The Truth
Опытный кот
Аватара пользователя
Сообщения: 721
Зарегистрирован: Ср июн 11, 2014 09:43:13
Откуда: США

Сообщение Pink-Pank »

Фигасе, Вы код засунули в прерывание! Столько условий + вызов функции + вход/выход из обработчика прерывания. Не исключаю возможности, что за время выполнения данного кода Таймер успевает прогнать по кругу и установить флаг на выполнение прерывания повторно. Оставьте в прерывании только самое важное, а код выносите в основную функцию. Ну, и попробуйте как-то его оптимизировать.
Fucking static initialization order fiasco
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Сообщение FreshMan »

Pink-Pank писал(а):! Столько условий + вызов функции

Код: Выделить всё

 TurnOff_Nixie();
это не ф-ция а макрос
Pink-Pank писал(а):Не исключаю возможности, что за время выполнения данного кода Таймер успевает прогнать по кругу и установить флаг на выполнение прерывания
это исключено
Tell Me The Truth
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Сообщение ibiza11 »

FreshMan, приведите объявление ваших переменных.
Ставим плюсы: )
Друг Кота
Аватара пользователя
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Сообщение FreshMan »

Tell Me The Truth
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Сообщение ibiza11 »

функции TurnOff_Nixie(); нехватает дайте. без нее время выполнения обработчика переполнения таймера:
Изображение

ОЙ ОЙ - это при условии работы на частоте 16МГц. у вас там какая частота?
Вложения
test.JPG
(67.8 КБ) 497 скачиваний
Ставим плюсы: )
Друг Кота
Аватара пользователя
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Сообщение FreshMan »

Код: Выделить всё

#define TurnOff_Nixie() {PORTB=0x0A, PORTD&= ~(1<<4 | 1<<3);}
8МГц
Tell Me The Truth
Ответить

Вернуться в «Разные вопросы по МК»