|
Счетчик на 2313, счетчик импульсов |
|
|
|
Nov 24 2008, 14:53
|

Участник

Группа: Участник
Сообщений: 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
|
|
|
|
|
 |
Ответов
|
Nov 26 2008, 13:53
|

Участник

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

|
Цитата(Nemo2000 @ Nov 26 2008, 16:41)  Да не long в char вам переводить надо, а понять, что же вы хотите увидеть. Счет с частотой в 1 МГц? Даже если бы ЖКИ и позволил с такой частотой обновлять инфу, вы уверены, что что-нить на нем разобрали бы?  Задержка разве не позволит увидеть?, не надо же фиксировать значение в онлайне, но зато можно посмотреть какая сотня или тысяча идет. Или например в момент остановки счета.
--------------------
www.ea16.ru
|
|
|
|
|
Nov 26 2008, 14:03
|
Местный
  
Группа: Свой
Сообщений: 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;
|
|
|
|
|
Nov 26 2008, 15:35
|

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

|
Цитата И еще. Не long i; а volatile long i; Попутно спрошу а почему именно volatile? И обязательно-ли для всех переменных что используються в прерываниях использовать этот квалификатор?
|
|
|
|
|
Nov 26 2008, 18:09
|
Местный
  
Группа: Свой
Сообщений: 381
Регистрация: 27-07-08
Из: теплые края
Пользователь №: 39 233

|
Цитата(mempfis_ @ Nov 26 2008, 17:35)  Попутно спрошу а почему именно volatile? Если по-простому, то это - информация для компилятора, указывающая на то, что значение переменной может быть изменено в любой момент. Цитата И обязательно-ли для всех переменных что используються в прерываниях использовать этот квалификатор? Да, если переменная используется где-либо еще.
|
|
|
|
|
Nov 27 2008, 08:57
|
Местный
  
Группа: Свой
Сообщений: 381
Регистрация: 27-07-08
Из: теплые края
Пользователь №: 39 233

|
Цитата(mempfis_ @ Nov 27 2008, 10:50)  В одних случаях код вообще не меняется, А вы оптимизацию включите  Цитата а в других появляются сообщения типа: Warning[Pa082]: undefined behavior: the order of volatile accesses is undefined in this statement когда пытаюсь передать volatile глобальную переменную как параметр функции. Кусок кода привели бы... Цитата Почему компилятор считает что эта глобальная переменная "в соответствии с volatile-доступом неопределена в этом выражении"? Нет. "порядок доступа к volatile переменным не определен в данном выражении"
|
|
|
|
|
Nov 27 2008, 10:28
|

Профессионал
    
Группа: Свой
Сообщений: 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 переменным не определен в данном выражении" Сорри быстро и невнимательно прочитал
|
|
|
|
|
Nov 28 2008, 08:32
|

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

|
Цитата(Aesthete Animus @ Nov 27 2008, 21:35)  Извините, но из того куска кода, что Вы показали, я (видимо не я один) не понял, как он должен работать и уж тем более что в нем не работает. Тем более не ясно, как это вообще связано с volatile. Изначально я просто поинтересовался в чём суть volatile и вы и vik0 всё доступно разъяснили  Код у меня рабочий но привести его не могу из-за размеров (ну ещё из-за того что это коммерческий проект  ). В моём коде используется много глобальных переменных (без volatile). Некоторые из них спокойно переносят присваивание им квалификатора volatile, а для некоторых появляется ошибка приведённая выше (а именно у тех которые передаются как параметры в функции). Но в любом случае hex-файл прошивки получается один в один что с volatile что без Спасибо всем ответившим на мой вопрос. Думаю стоит помоч топикстартеру с реализацией его идеи.
|
|
|
|
Сообщений в этой теме
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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|