Форум РадиоКот • Просмотр темы - Использование данных из массива.
Сообщения без ответов | Активные темы
Страница 1 из 1
[ Сообщений: 11 ]
Автор
Сообщение
7seg
Заголовок сообщения: Использование данных из массива.
Добавлено: Пн май 15, 2017 06:23:53
Потрогал лапой паяльник
Карма: 3
Рейтинг сообщений: 3
Зарегистрирован: Ср май 03, 2017 03:22:26Сообщений: 303
Рейтинг сообщения: 0
почему таймер ( OCR1A = TRIAK[value]; ) не понимает данные из массива TRIAK[] ? при прошивке в камень димер такое ощущение что зависает.
Код:
Спойлер Код:
#define F_CPU 8000000 //Hz #include <util/delay.h> #include <avr/interrupt.h> #include <avr/io.h> #define DEBOUNCE_TIME 10 #define BUTTON_PIN PINB #define POWER_BIT PB3 #define UP_BIT PB4 #define DOWN_BIT PB5 #define KEY_POWER 0b00001000 #define KEY_DOWN 0b00100000 #define KEY_UP 0b00010000 #define En_INT0 GIMSK|=(1<<6); #define Dis_INT0 GIMSK&=~(1<<6); // выключаем прерывание INT0 volatile unsigned char data1=0; volatile unsigned char data2=0; volatile unsigned char value; volatile int _buzzer = 0; volatile int _pressed = 0; volatile unsigned char sw=0; void init_io(); void segchar(unsigned char seg); void handle_button(int key); void handle_buttons(); void process_power(); void process_up(); void process_down(); unsigned char TRIAK[] = { 160,150,145,140,135,130,127,124,122,120, 119,118,117,116,115,114,113,112,111,110, 109,108,107,106,105,104,103,102,101,100, 99,98,97,96,95,94,93,92,91,90, 89,88,87,86,85,84,83,82,81,80, 79,78,77,76,75,74,73,72,71,70, 69,68,67,66,65,64,63,62,61,60, 59,58,57,56,55,54,53,52,51,50, 49,48,47,46,45,44,43,42,41,40, 39,38,37,36,35,34,33,32,31,30}; //настройка внешнего прерывния INT0 void int0_init( void ) { //настраиваем на срабатывание INT0 по переднему фронту MCUCR |= (1<<ISC01)|(0<<ISC00); //разрешаем внешнее прерывание INT0 En_INT0 } ISR(TIMER1_CMPA_vect) { if (sw==1) { PORTB |= (1<<1); _delay_us(9); PORTB &= ~(1<<1); _delay_us(1); PORTB |= (1<<1); _delay_us(9); PORTB &= ~(1<<1); _delay_us(1); } sw=0; } //Прерывания по инт0 от синхра импулса ISR(INT0_vect) { //OCR1A =(158-value); OCR1A = TRIAK[value]; TCNT1 = 0; sw=1; static unsigned char count = 0; //гасим оба разр§да PORTB |=(1<<PB0); PORTB |=(1<<PB2); PORTA = 0b11111110; //зажигаем следующий разр§д if (count == 0) { segchar(data2); PORTB &= ~(1<<2); } if (count == 1) { segchar(data1); PORTB &= ~(1<<0); } count++; if (count == 2) count = 0; } int main(void) { value=0; init_io(); sei(); int0_init(); while(1) { handle_buttons(); } return 0; } //Коды сегментов void segchar (unsigned char seg) { switch (seg) { case 1: PORTA = 0b01111100; break; case 2: PORTA = 0b10000100; break; case 3: PORTA = 0b01000100; break; case 4: PORTA = 0b01101000; break; case 5: PORTA = 0b01000010; break; case 6: PORTA = 0b00000010; break; case 7: PORTA = 0b01110100; break; case 8: PORTA = 0b00000000; break; case 9: PORTA = 0b01000000; break; case 0: PORTA = 0b00010000; break; } } void init_io() { //порт, к которому подкл. сегменты PORTA = 0xff; DDRA = 0xff; //порт, к которому подкл. катод DDRB |=(1<<0)|(1<<1)|(1<<2); PORTB =0x00; //Иницилизация прерываний по совпадению Т1. TIMSK |=(1<<OCIE1A); TCCR1B |=/*(1<<CTC1)*/(0<<CS10)|(1<<CS11)|(0<<CS12)|(1<<CS13); OCR1A=0xFF; } //Обраюотчик кнопок void handle_button(int key) { int bit; switch (key) { case KEY_POWER: bit = POWER_BIT; break; case KEY_UP: bit = UP_BIT; break; case KEY_DOWN: bit = DOWN_BIT; break; default: return; } if (bit_is_clear(BUTTON_PIN, bit)) { if (_pressed == 0) { _delay_us(DEBOUNCE_TIME); if (bit_is_clear(BUTTON_PIN, bit)) { _pressed |= key; // key action switch (key) { case KEY_POWER: process_power(); break; case KEY_UP: process_up(); break; case KEY_DOWN: process_down(); break; } } } } else { _pressed &= ~key; } } void handle_buttons() { handle_button(KEY_POWER); handle_button(KEY_DOWN); handle_button(KEY_UP); } void process_power() { value=90; } void process_up() { if (value < 99) { value++; unsigned char tmp; tmp = value % 10; data1 = tmp; tmp = value/10; data2= tmp; } } void process_down() { if (value > 0) { value--; unsigned char tmp; tmp = value % 10; data1 = tmp; tmp = value/10; data2= tmp; } }
Добавлено after 1 hour 23 minutes 13 seconds: проблему решил сам ) так все работает.
const unsigned char TRIAK[]PROGMEM
unsigned char tmp = pgm_read_byte(&(TRIAK[value]));
OCR1A = tmp;
_________________andrei23061996@gmail.com . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Вернуться наверх
Реклама
ARV
Заголовок сообщения: Re: Использование данных из массива.
Добавлено: Пн май 15, 2017 06:42:02
Ум, честь и совесть. И скромность.
Карма: 98
Рейтинг сообщений: 2116
Зарегистрирован: Чт дек 28, 2006 08:19:56Сообщений: 18403Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
7seg писал(а):
проблему решил сам
а если перейти на свежую версию AVR-GCC, то можно и без pgm_read_byte обойтись
_________________если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...Мой уютный бложик ... заходите!
Вернуться наверх
Реклама
7seg
Заголовок сообщения: Re: Использование данных из массива.
Добавлено: Пн май 15, 2017 06:47:17
Потрогал лапой паяльник
Карма: 3
Рейтинг сообщений: 3
Зарегистрирован: Ср май 03, 2017 03:22:26Сообщений: 303
Рейтинг сообщения: 0
Пользуюсь AtmelStudio6, перейти на 7 ?Добавлено after 2 minutes 4 seconds: AVR, не подскажешь случаем по какому графику лучше повышать напругу для лампы. линейный точно не подходит. ))
_________________andrei23061996@gmail.com . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Вернуться наверх
ARV
Заголовок сообщения: Re: Использование данных из массива.
Добавлено: Пн май 15, 2017 07:18:01
Ум, честь и совесть. И скромность.
Карма: 98
Рейтинг сообщений: 2116
Зарегистрирован: Чт дек 28, 2006 08:19:56Сообщений: 18403Откуда: Новочеркасск
Рейтинг сообщения: 1
Медали: 2
по горизонтали условный угол проводимости симистора (угол проводимости = 180 минус угол отпирания) в процентах (т.е. 100% - весь полупериод открыт), по вертикали условная яркость лампы.
подробности здесь:
http://radioded.ru/skhema-na-mikrokontr ... nyy-dimmer что касается студии, то вроде как она уже поддерживает пространство
__flash для "переменных" в области программной памяти.
_________________если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...Мой уютный бложик ... заходите!
Вернуться наверх
7seg
Заголовок сообщения: Re: Использование данных из массива.
Добавлено: Пн май 15, 2017 07:40:19
Потрогал лапой паяльник
Карма: 3
Рейтинг сообщений: 3
Зарегистрирован: Ср май 03, 2017 03:22:26Сообщений: 303
Рейтинг сообщения: 0
Спасибо за график.Добавлено after 2 minutes 42 seconds: А по сути же __flash и PROGMEM одно и тоже ?)
_________________andrei23061996@gmail.com . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Вернуться наверх
Реклама
ARV
Заголовок сообщения: Re: Использование данных из массива.
Добавлено: Пн май 15, 2017 08:46:23
Ум, честь и совесть. И скромность.
Карма: 98
Рейтинг сообщений: 2116
Зарегистрирован: Чт дек 28, 2006 08:19:56Сообщений: 18403Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
по сути одно и то же, а по результату использования - нет.
сравните сами:
Код:
#include <avr/pgmspace.h> PROGMEM int data_array[] = {1,2,3,4,5}; int data = pgm_read_word(&data_array[2]);
Код:
const __flash int data_array[] = {1,2,3,4,5}; int data = data_array[2];
чувствуете разницу в удобстве применения?
_________________если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...Мой уютный бложик ... заходите!
Вернуться наверх
Реклама
7seg
Заголовок сообщения: Re: Использование данных из массива.
Добавлено: Пн май 15, 2017 09:11:09
Потрогал лапой паяльник
Карма: 3
Рейтинг сообщений: 3
Зарегистрирован: Ср май 03, 2017 03:22:26Сообщений: 303
Рейтинг сообщения: 0
Полностью согласен. Блин какой то косяк в динамической индикации. когда значение = 99. она работает, но один разряд ярче другого на вид.(
_________________andrei23061996@gmail.com . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Вернуться наверх
ARV
Заголовок сообщения: Re: Использование данных из массива.
Добавлено: Пн май 15, 2017 09:22:45
Ум, честь и совесть. И скромность.
Карма: 98
Рейтинг сообщений: 2116
Зарегистрирован: Чт дек 28, 2006 08:19:56Сообщений: 18403Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
косяков у вас там много... но все советы уже были дадены, повторять не буду.
_________________если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...Мой уютный бложик ... заходите!
Вернуться наверх
7seg
Заголовок сообщения: Re: Использование данных из массива.
Добавлено: Пн май 15, 2017 09:30:33
Потрогал лапой паяльник
Карма: 3
Рейтинг сообщений: 3
Зарегистрирован: Ср май 03, 2017 03:22:26Сообщений: 303
Рейтинг сообщения: 0
Да я походу понял почему, т.к динамическая индикация привязана к прерываниям по инт0 походу по переднему фронту идут помехи, все таки лампочка то серьезная 2 киловатта ). чуть уменьшил крайнее время открывания симистора и все норм стало.
_________________andrei23061996@gmail.com . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Вернуться наверх
Реклама
7seg
Заголовок сообщения: Re: Использование данных из массива.
Добавлено: Вт май 16, 2017 07:07:54
Потрогал лапой паяльник
Карма: 3
Рейтинг сообщений: 3
Зарегистрирован: Ср май 03, 2017 03:22:26Сообщений: 303
Рейтинг сообщения: 0
Z_h_e, спасибо за график.
_________________andrei23061996@gmail.com . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Вернуться наверх
Страница 1 из 1
[ Сообщений: 11 ]
Кто сейчас на форуме
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения