реклама на сайте
подробности

 
 
> Счетчик на 2313, счетчик импульсов
Aleksandr_des
сообщение Nov 24 2008, 14:53
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 16-06-08
Из: Челны
Пользователь №: 38 318



Прошу не закидывать камнями, это мой первый проект.
Взялся за задачу.
Счетчик на авр. В качестве камня решил взять 2313. дисплей взял тот что был в протеусе.
Импульсы приходят с частотой 1 мегагерц. Отрабатывают на прерывания. Так же будет кнопка на обнуление. Данный прибор хочу поставить на линию, счетчик готовой продукции.
Программную среду решил использовать CAVR ,брался за ИАР но не осилил жки модуль(в программировании я тоже не силен).
В общем накидал такую схемку.
Код получился такой.
Код
#include <90s2313.h>
#asm
   .equ __lcd_port=0x18;PORTB
#endasm
#include <lcd.h>
#include <delay.h>
#include <stdio.h>
char i;
interrupt [EXT_INT0] void ext_int0_isr(void)
{
}

interrupt [EXT_INT1] void ext_int1_isr(void)
{

i++;
lcd_putchar(i);
delay_ms(20);
lcd_clear();

}

void main(void)
{

PORTD=0xff;
DDRD=0x00;
// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Rising Edge
// INT1: On
// INT1 Mode: Rising Edge
GIMSK=0xC0;
MCUCR=0x0F;
GIFR=0xC0;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;


// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;

// LCD module initialization
lcd_init(16);

// Global enable interrupts
#asm("sei")

while (1)
      {
    
      };
}


В общем он на жки выводит символы, 123..abc.. и т.д
А надо счет, максимальная цифра 1000 000.
Подскажите что не так?
Эскизы прикрепленных изображений
Прикрепленное изображение
 


--------------------
www.ea16.ru
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Nemo2000
сообщение Nov 26 2008, 13:41
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 79
Регистрация: 8-04-05
Из: Санк-Петербург
Пользователь №: 3 972



Да не long в char вам переводить надо, а понять, что же вы хотите увидеть. Счет с частотой в 1 МГц? Даже если бы ЖКИ и позволил с такой частотой обновлять инфу, вы уверены, что что-нить на нем разобрали бы? smile.gif
Go to the top of the page
 
+Quote Post
Aleksandr_des
сообщение Nov 26 2008, 13:53
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 16-06-08
Из: Челны
Пользователь №: 38 318



Цитата(Nemo2000 @ Nov 26 2008, 16:41) *
Да не long в char вам переводить надо, а понять, что же вы хотите увидеть. Счет с частотой в 1 МГц? Даже если бы ЖКИ и позволил с такой частотой обновлять инфу, вы уверены, что что-нить на нем разобрали бы? smile.gif

Задержка разве не позволит увидеть?, не надо же фиксировать значение в онлайне, но зато можно посмотреть какая сотня или тысяча идет. Или например в момент остановки счета.


--------------------
www.ea16.ru
Go to the top of the page
 
+Quote Post
vik0
сообщение Nov 26 2008, 14:03
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 381
Регистрация: 27-07-08
Из: теплые края
Пользователь №: 39 233



Значительно лучше.

Цитата(Aleksandr_des @ Nov 26 2008, 15:53) *
Подскажите пожалуйста как перевести значение переменной long в char?

sprintf(lcd_buffer, "%ld", i);

И еще. Не
long i;
а
volatile long i;
Go to the top of the page
 
+Quote Post
mempfis_
сообщение Nov 26 2008, 15:35
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Цитата
И еще. Не
long i;
а
volatile long i;


Попутно спрошу а почему именно volatile?
И обязательно-ли для всех переменных что используються в прерываниях использовать этот квалификатор?
Go to the top of the page
 
+Quote Post
vik0
сообщение Nov 26 2008, 18:09
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 381
Регистрация: 27-07-08
Из: теплые края
Пользователь №: 39 233



Цитата(mempfis_ @ Nov 26 2008, 17:35) *
Попутно спрошу а почему именно volatile?

Если по-простому, то это - информация для компилятора, указывающая на то, что значение переменной может быть изменено в любой момент.
Цитата
И обязательно-ли для всех переменных что используються в прерываниях использовать этот квалификатор?

Да, если переменная используется где-либо еще.
Go to the top of the page
 
+Quote Post
mempfis_
сообщение Nov 27 2008, 08:50
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Спасибо за ответ . Суть понял - volatile указывает компилятору что значения переменной нужно постоянно брать из оперативной памяти и сохранять туда-же при изменениях (т.е. постоянно обновлять их при использовании).
Объявил в своей программе часть глобальных переменных, которые исп. в разных подпрограммах, как volatile. В одних случаях код вообще не меняется, а в других появляются сообщения типа:
Warning[Pa082]: undefined behavior: the order of volatile accesses is undefined in this statement
когда пытаюсь передать volatile глобальную переменную как параметр функции.
Почему компилятор считает что эта глобальная переменная "в соответствии с volatile-доступом неопределена в этом выражении"?
Пользуюсь IAR5.10A.
Go to the top of the page
 
+Quote Post
vik0
сообщение Nov 27 2008, 08:57
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 381
Регистрация: 27-07-08
Из: теплые края
Пользователь №: 39 233



Цитата(mempfis_ @ Nov 27 2008, 10:50) *
В одних случаях код вообще не меняется,

А вы оптимизацию включите smile.gif
Цитата
а в других появляются сообщения типа:
Warning[Pa082]: undefined behavior: the order of volatile accesses is undefined in this statement
когда пытаюсь передать volatile глобальную переменную как параметр функции.

Кусок кода привели бы...
Цитата
Почему компилятор считает что эта глобальная переменная "в соответствии с volatile-доступом неопределена в этом выражении"?

Нет. "порядок доступа к volatile переменным не определен в данном выражении"
Go to the top of the page
 
+Quote Post
mempfis_
сообщение Nov 27 2008, 10:28
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Цитата
А вы оптимизацию включите

Подобное предупреждение выскакивает при любых уровнях оптимизации

Цитата
Кусок кода привели бы...


Полный код привести не могу (он очень большой)
Работает он приблизительно так как приведено ниже (только проверок внутри State1, State2 больше):

Код
#define time1 10
#define time2 20
unsigned int timer;

#define state1 0
#define state2 1

//прерывание от ТС1 по совпадению с автосбросом
#pragma vector=TIMER1_COMPA_vect
__interrupt void TIMER1_COMPA_IRQ(void)
{
  //сканирование кнопки
  Button_Scun();
}

void GoToState1(unsigned int t)
{
SaveLog(t);
timer = 0;
state = state1;
}

void GoToState2(unsigned int t)
{
SaveLog(t);
timer = 0;
state = state2;
}

void State1(void)
{
timer++;
if(timer > time1) GoToState2(timer);
}

void State2(void)
{
timer++;
if(timer > time2) GoToState1(timer);
}

void main(void)
{
state = state1;
timer=0;

for(;;)
{
__watchdog_reset();
__enable_interrupt();
__sleep();

switch(state)
{
case state_1: State1();
break;

case state_2: State2();
break;
}

}

}



Цитата
Нет. "порядок доступа к volatile переменным не определен в данном выражении"

Сорри быстро и невнимательно прочитал smile.gif
Go to the top of the page
 
+Quote Post
Aesthete Animus
сообщение Nov 27 2008, 17:35
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 222
Регистрация: 9-06-07
Пользователь №: 28 317



Цитата(mempfis_ @ Nov 27 2008, 13:28) *
Подобное предупреждение выскакивает при любых уровнях оптимизации
Полный код привести не могу (он очень большой)
Работает он приблизительно так как приведено ниже (только проверок внутри State1, State2 больше)

Извините, но из того куска кода, что Вы показали, я (видимо не я один) не понял, как он должен работать и уж тем более что в нем не работает. Тем более не ясно, как это вообще связано с volatile.
Go to the top of the page
 
+Quote Post
mempfis_
сообщение Nov 28 2008, 08:32
Сообщение #11


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Цитата(Aesthete Animus @ Nov 27 2008, 21:35) *
Извините, но из того куска кода, что Вы показали, я (видимо не я один) не понял, как он должен работать и уж тем более что в нем не работает. Тем более не ясно, как это вообще связано с volatile.

Изначально я просто поинтересовался в чём суть volatile и вы и vik0 всё доступно разъяснилиsmile.gif Код у меня рабочий но привести его не могу из-за размеров (ну ещё из-за того что это коммерческий проект smile.gif). В моём коде используется много глобальных переменных (без volatile). Некоторые из них спокойно переносят присваивание им квалификатора volatile, а для некоторых появляется ошибка приведённая выше (а именно у тех которые передаются как параметры в функции). Но в любом случае hex-файл прошивки получается один в один что с volatile что без smile.gif
Спасибо всем ответившим на мой вопрос.
Думаю стоит помоч топикстартеру с реализацией его идеи.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Aleksandr_des   Счетчик на 2313   Nov 24 2008, 14:53
- - _Pasha   Цитата(Aleksandr_des @ Nov 24 2008, 18:53...   Nov 24 2008, 15:51
|- - zltigo   Цитата(_Pasha @ Nov 24 2008, 18:51) Дык, ...   Nov 24 2008, 16:32
- - Aleksandr_des   Переписал все. Код#include <90s8535.h> #...   Nov 26 2008, 13:24
||- - Aesthete Animus   Цитата(mempfis_ @ Nov 26 2008, 18:35) Поп...   Nov 26 2008, 17:59
||- - mempfis_   ""   Nov 28 2008, 08:32
|- - Nemo2000   Цитата(Aleksandr_des @ Nov 26 2008, 17:53...   Nov 26 2008, 14:30
|- - vik0   Цитата(Nemo2000 @ Nov 26 2008, 16:30) доб...   Nov 26 2008, 14:46
|- - Nemo2000   Цитата(vik0 @ Nov 26 2008, 18:46) Эээ.. А...   Nov 26 2008, 15:12
- - vvs157   Цитата(Aleksandr_des @ Nov 24 2008, 17:53...   Nov 26 2008, 14:58


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 11:35
Рейтинг@Mail.ru


Страница сгенерированна за 0.01515 секунд с 7
ELECTRONIX ©2004-2016