Например TDA7294

Форум РадиоКот • Просмотр темы - Использование данных из массива.
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Чт апр 18, 2024 07:37:04

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 11 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Использование данных из массива.
СообщениеДобавлено: Пн май 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
.................................................................................................................


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Использование данных из массива.
СообщениеДобавлено: Пн май 15, 2017 06:42:02 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
7seg писал(а):
проблему решил сам
а если перейти на свежую версию AVR-GCC, то можно и без pgm_read_byte обойтись :)

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: 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
.................................................................................................................


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Использование данных из массива.
СообщениеДобавлено: Пн май 15, 2017 07:18:01 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 1
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
Изображение
по горизонтали условный угол проводимости симистора (угол проводимости = 180 минус угол отпирания) в процентах (т.е. 100% - весь полупериод открыт), по вертикали условная яркость лампы.
подробности здесь: http://radioded.ru/skhema-na-mikrokontr ... nyy-dimmer

что касается студии, то вроде как она уже поддерживает пространство __flash для "переменных" в области программной памяти.

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.

Подробнее>>
Не в сети
 Заголовок сообщения: 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
.................................................................................................................


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Использование данных из массива.
СообщениеДобавлено: Пн май 15, 2017 08:46:23 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
по сути одно и то же, а по результату использования - нет.
сравните сами:
Код:
#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];

чувствуете разницу в удобстве применения?

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Использование данных из массива.
СообщениеДобавлено: Пн май 15, 2017 09:11:09 
Потрогал лапой паяльник
Аватар пользователя

Карма: 3
Рейтинг сообщений: 3
Зарегистрирован: Ср май 03, 2017 03:22:26
Сообщений: 303
Рейтинг сообщения: 0
Полностью согласен.

Блин какой то косяк в динамической индикации. когда значение = 99. она работает, но один разряд ярче другого на вид.(

_________________
andrei23061996@gmail.com
.................................................................................................................


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Использование данных из массива.
СообщениеДобавлено: Пн май 15, 2017 09:22:45 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
косяков у вас там много... но все советы уже были дадены, повторять не буду.

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Использование данных из массива.
СообщениеДобавлено: Пн май 15, 2017 09:30:33 
Потрогал лапой паяльник
Аватар пользователя

Карма: 3
Рейтинг сообщений: 3
Зарегистрирован: Ср май 03, 2017 03:22:26
Сообщений: 303
Рейтинг сообщения: 0
Да я походу понял почему, т.к динамическая индикация привязана к прерываниям по инт0 походу по переднему фронту идут помехи, все таки лампочка то серьезная 2 киловатта ). чуть уменьшил крайнее время открывания симистора и все норм стало.

_________________
andrei23061996@gmail.com
.................................................................................................................


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Использование данных из массива.
СообщениеДобавлено: Пн май 15, 2017 13:45:59 
Собутыльник Кота
Аватар пользователя

Карма: 29
Рейтинг сообщений: 645
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2694
Откуда: г. Чайковский
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Я тут как раз недавно делал кой-какие расчеты. Получил вот такой график. Абсцисса - это угол открытия симистора. Правда к светимости лампы отношения не имеет.
Изображение

_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Использование данных из массива.
СообщениеДобавлено: Вт май 16, 2017 07:07:54 
Потрогал лапой паяльник
Аватар пользователя

Карма: 3
Рейтинг сообщений: 3
Зарегистрирован: Ср май 03, 2017 03:22:26
Сообщений: 303
Рейтинг сообщения: 0
Z_h_e, спасибо за график.

_________________
andrei23061996@gmail.com
.................................................................................................................


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 11 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: Varlakotam и гости: 18


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y