Часы на STM32

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
goldhands
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Сб мар 12, 2011 22:28:40

Часы на STM32

Сообщение goldhands »

Доброго времени суток уважаемые коты! Совсем недавно познакомился с контроллерами STM32. В частности взял для себя отладочную плату stm32vldiscovery... Все супер! Уже успел поморгать светодиодами, подключил дисплей от Nokia 1100 и решил сделать часы.. Вот на этом все встало.Чувствую себя котенком. Часы запустились внутри самого контроллера и даже отображаются на дисплее, но не обновляются..Запустил в отладчике секунды идут, а на дисплее нет. Уже пару дней бьюсь над этим забросив все.. Друзья, кто нибудь может подсказать начинающему котенку в чем ошибка? И еще пытался организовать меню..Та же проблема. В отладчике работает, а на экране ничего не меняется. Прилагаю архив с проектом. Работаю в среде IAR..Вот ссылка на скачивание проекта(увы во вложение нельзя прикрепить файлы больше 1МБайт) https://yadi.sk/d/qEwF6FB7bqV7p

Заранее спасибо!
Реклама
Аватара пользователя
slavokhire5
Прорезались зубы
Сообщения: 202
Зарегистрирован: Пн сен 26, 2011 13:48:25
Откуда: Харьков

Re: Часы на STM32

Сообщение slavokhire5 »

В отладчике работает - это при пошаговой отладке? Если да, тогда вероятно дело в необходимости задержек между командами на дисплей. Простые дисплеи довольно неторопливые, и за мощными контроллерами они не успевают часто)
Осилит дорогу идущий
--------------------------
Пишу на Си за еду
Реклама
goldhands
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Сб мар 12, 2011 22:28:40

Re: Часы на STM32

Сообщение goldhands »

задержка была организованна.. толку ноль.. отладка была в STMStudio..
Galizin
Мучитель микросхем
Сообщения: 478
Зарегистрирован: Ср окт 15, 2008 09:33:03
Откуда: Воронеж

Re: Часы на STM32

Сообщение Galizin »

А что обозначает фраза - часы идут в отладчике?
Я посмотрел проект. Что то не нашел там исходников работы с дисплеем. Только моргание светодиодами.
Реклама
Эиком - электронные компоненты и радиодетали
goldhands
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Сб мар 12, 2011 22:28:40

Re: Часы на STM32

Сообщение goldhands »

Galizin писал(а):А что обозначает фраза - часы идут в отладчике?
Я посмотрел проект. Что то не нашел там исходников работы с дисплеем. Только моргание светодиодами.

lcd-nokia1100.h файл в папке с библиотеками. это библиотека работы с дисплеем. И нет там моргания светодиодом.
Реклама
Galizin
Мучитель микросхем
Сообщения: 478
Зарегистрирован: Ср окт 15, 2008 09:33:03
Откуда: Воронеж

Re: Часы на STM32

Сообщение Galizin »

Извините. У Вас в архиве около 450 файлов. Я не смог найти нужный исходник. Нашел только тот где написано
STM32vldiscovery_LEDOn(LED3);
А это и есть моргание светодиодом.

Ах да. Вот оно. Помещено в
Project/Examples/SysTick
Ну кто бы мог подумать! Ох тяжело читать - форматирование от случая к случаю.
Все правильно - он делает то что Вы описали - один раз выводит показания часов а потом зависает в бесконечном пустом цикле. Ну по моему так.
Нужно бесконечный цикл сделать не пустым. Ну или использовать прерывания.
Реклама
goldhands
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Сб мар 12, 2011 22:28:40

Re: Часы на STM32

Сообщение goldhands »

Спасибо за ответ! не подскажите пожалуйста как это сделать? уже перепробовал разные варианты.не получается. туплю..
Galizin
Мучитель микросхем
Сообщения: 478
Зарегистрирован: Ср окт 15, 2008 09:33:03
Откуда: Воронеж

Re: Часы на STM32

Сообщение Galizin »

У вас сейчас вот так

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

main()
{
  init();
  display();
  while(1){};
}
А нужно

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

main()
{
  init()
  while(1)
  {
    display();
  }
}
init - последовательность действий по инициализайии
display - последовательность действий по отображению.
Естественно это может быть не одна функция а именно последовательность действий.
goldhands
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Сб мар 12, 2011 22:28:40

Re: Часы на STM32

Сообщение goldhands »

спасибо. сделал.не помогло. как сделать секундное прерывание?
и еще друзья могли бы пожалуйста поделится кодом для организации меню на STM32??? даны три кнопки меню, плюс и минус. Кнопка меню это вход и выход из меню а плюс и минус это перемещение по разделам меню. Не получается и все.
Galizin
Мучитель микросхем
Сообщения: 478
Зарегистрирован: Ср окт 15, 2008 09:33:03
Откуда: Воронеж

Re: Часы на STM32

Сообщение Galizin »

http://www.radiokot.ru/forum/viewtopic.php?t=51032 - там мои исходники и меню и часов. Правда в калибровке часов там где то баг.
Относительно прерывания - это Вам скорее всего поможет. Кнопки - http://radiokot.ru/circuit/digital/measure/113/
http://www.radiokot.ru/forum/viewtopic.php?f=25&t=95086 - вот еще проект с исходниками. Уже другого автора.
и еще http://radiokot.ru/circuit/digital/measure/119/ - исходники с кнопками тоже есть на git.
Ну и совсем свежее. Вроде там тоже кнопки и меню есть http://radiokot.ru/konkursCatDay2014/47/
goldhands
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Сб мар 12, 2011 22:28:40

Re: Часы на STM32

Сообщение goldhands »

Большое спасибо уважаемый Galizin!!! С часами разобрался.. нашел свой ошибки.. дописал код.. а теперь проблема с меню.. не хочет работать нормально.. Управление тремя кнопками (меню, плюс и минус). Кнопка меню позволяет входить в меню, в подпункты а также выходить назад выбрав пункт выход. А кнопками плюс минус можно перемещаться между подпунктами и изменять значение. Использовал в работе Switch Case... Подскажите пожалуйста как сделать меню с подпунктами под управлением трех кнопок?

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

 /*меню будет из 4 пунктов. от 0 до 3 */

while(1){

if (knopka_menu){menu_pointer++;  delay_ms(200);lcd1100_clear();} /* смещаем указатель, делаем против дребезга паузу и очищаем дисплей */
if (knopka_plus){str_menu++;  delay_ms(200);lcd1100_clear();}   
if (knopka_minus){str_menu--;  delay_ms(200);lcd1100_clear();}

if(str_menu==menu_pointer_max1){str_menu=0;} /* предел меню*/

if(menu_pointer==menu_pointer_max){menu_pointer=0;} /* предел меню*/

switch(menu_pointer){
  
case 0:


  lcd1100_gotoxy(5, 3);
  lcd1100_puts("Начальный экран");   
  

break;
case 1:
  
  if(menu=1)
{

  lcd1100_gotoxy(3, 1);
lcd1100_puts("УСТАНОВКА");   // вывели текст

}
if(menu=2)
  {

lcd1100_gotoxy(3, 3);
lcd1100_puts("СЕКУНДОМЕР");   // вывели текст

}

if(menu=3)
{

  lcd1100_gotoxy(3, 5);
lcd1100_puts("БУДИЛЬНИК");   // вывели текст

}
if(menu==4)
{

  lcd1100_gotoxy(3, 7);
lcd1100_puts("НАСТРОЙКИ");   // вывели текст

}
break;


case 2:
  /* Тут код который надо делать в 2 пункте меню */

lcd1100_gotoxy(4, 1);
lcd1100_puts("УСТАНОВКА");

 if(menu=1.1)
{

  lcd1100_gotoxy(3, 3);
lcd1100_puts("время ");   // вывели текст

}
if(menu=2.1)
  {

lcd1100_gotoxy(3, 5);
lcd1100_puts("дата");   // вывели текст

}



break;

case 3:
 
  /* Тут код который надо делать в 2 пункте меню */
lcd1100_gotoxy(3, 1);
lcd1100_puts("Секундомер");
lcd1100_gotoxy(1, 3);
lcd1100_puts_big(3,2,"00-00");

break;
case 4:
 
  /* Тут код который надо делать в 2 пункте меню */

lcd1100_gotoxy(4, 1);
lcd1100_puts("Будильник");
lcd1100_gotoxy(1, 3);
lcd1100_puts_big(3,2,"00-00");
lcd1100_gotoxy(1, 6);
lcd1100_puts("Пн,Вт,Ср,Чт,Пт,");
lcd1100_gotoxy(1, 7);
lcd1100_puts("Сб,Вс");


break;

case 5:
 
  /* Тут код который надо делать в 2 пункте меню */

lcd1100_gotoxy(3, 1);
lcd1100_puts("НАСТРОЙКА");
lcd1100_gotoxy(3, 3);
lcd1100_puts("ВРЕМЯ");
lcd1100_gotoxy(3, 5);
lcd1100_puts("ДАТА");
lcd1100_gotoxy(3, 7);
lcd1100_puts("КОНТРАСТ");


break;

case 6:
 
  {
			switch(str_menu)
			{
				case 0:
                                 

  lcd1100_gotoxy(5, 3);
lcd1100_puts("-ФОРМАТ");   // вывели текст



                               break;
		case 1: 
                                     lcd1100_gotoxy(5, 3);
                                  lcd1100_puts("-ВРЕМЯ");
                                   break;
				case 2:                             
                                  lcd1100_gotoxy(5, 3);
                                  lcd1100_puts("-ДАТА"); 
                                  break;
				case 3:      
                                 lcd1100_gotoxy(5, 3);
                                  lcd1100_puts("-КОНТРАСТ"); 
                                  break; 
                                                                                                   
                                                                                                                                                                                                                                                                                             
			}

			break;
  }
                        
 case 7:
 
  {
			switch(str_menu)
			{
				case 0:
                                 

  lcd1100_gotoxy(5, 3);
lcd1100_puts("-Настрйока0");   // вывели текст



                               break;
		case 1: 
                                     lcd1100_gotoxy(5, 3);
                                  lcd1100_puts("-Настройка1");
                                   break;
				case 2:                             
                                  lcd1100_gotoxy(5, 3);
                                  lcd1100_puts("-Настройка2"); 
                                  break;
				case 3:      
                                 lcd1100_gotoxy(5, 3);
                                  lcd1100_puts("-Настройка3"); 
                                 
                                                                                                   
                                                                                                                                                                                                                                                                                             
			}

			break;		
		}
                

                
                
                
                
                
                
                
                

break;
 }






 



 


}    }




Galizin
Мучитель микросхем
Сообщения: 478
Зарегистрирован: Ср окт 15, 2008 09:33:03
Откуда: Воронеж

Re: Часы на STM32

Сообщение Galizin »

К стм это имеет мало отношения
Примерно так:
Отрисовывается на экране меню - набор строк. Каждой строке соответствует свой номер. Номер текущей строки где то хранится. При отрисовке инверсно отображается соотв номеру строка. Это функция отображения.
Теперь функция реагирования.
Должна определять что нажата та или иная клавиша. Если нажата клавиша вверх, то индекс сдвигается вверх и вызывается функция перерисовки. Если вниз - то то же самое. Если же нажата клавиша ввод, то анализируете текущий номер стоки. В зависимости от его значения делаете нужные действия. В частности нужным действием может быть вызов другой функции, которая будет отрисовывать следующее меню.
Для опроса кнопок можно сделать отдельную функцию, которая возвращала бы код клавиши, если она нажата.
Может быть есть и другие алгоритмы.
goldhands
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Сб мар 12, 2011 22:28:40

Re: Часы на STM32

Сообщение goldhands »

В теории я все это понимаю..Скажите пожалуйста как это реализовать в программе? Скачал готовые проекты с исходниками. Если честно то запутался в них..
Galizin
Мучитель микросхем
Сообщения: 478
Зарегистрирован: Ср окт 15, 2008 09:33:03
Откуда: Воронеж

Re: Часы на STM32

Сообщение Galizin »

Что это конкретно? Какое из описанных действий представляет трудность?
Если все вместе, то разделите задачи и сделайте что то одно, потом другое, потом объедините ну и так далее
goldhands
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Сб мар 12, 2011 22:28:40

Re: Часы на STM32

Сообщение goldhands »

Для меня трудность представляют подменю и функция опроса клавиш.. Точнее я сделал функцию опроса клавиш, но у меня не корректно реагируют на нажатие.. Не могу заставить кнопку переходить в подменю.
Galizin
Мучитель микросхем
Сообщения: 478
Зарегистрирован: Ср окт 15, 2008 09:33:03
Откуда: Воронеж

Re: Часы на STM32

Сообщение Galizin »

Я тоже еще ни разу не заставлял кнопку переходить в подменю.
Ответить

Вернуться в «ARM»