Например TDA7294

Форум РадиоКот • Просмотр темы - Led-глобус, проблема
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Ср апр 24, 2024 11:00:12

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


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



Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Led-глобус, проблема
СообщениеДобавлено: Чт ноя 30, 2017 09:19:26 
Первый раз сказал Мяу!

Зарегистрирован: Чт ноя 30, 2017 08:47:45
Сообщений: 23
Откуда: Новосибирск
Рейтинг сообщения: 0
Здравствуйте, уважаемые.
Давно хотел сделать для себя устройство с механической разверткой. Собрал статор, ротор. Светодиодов не очень много, всего 24, но мне достаточно. Используемый МК - Atmega328p на 16МГц, регистры 74HC595. Программирую на CodeVision 3.12. С железом проблем нет. Есть трудности с программной частью. И именно по ней требуется помощь. Для начала сделал вывод по столбцам и тупой задержкой с помощью delay_us. Конкретно в моем случае задержка после выводка каждого столбца была 850мкс. Все работало. Потом решил сделать расчет времени задержки на таймерах и без delay_us. Задумка была такая - по INT0 начинается отсчет 16-битного таймера Т1 до следующего срабатывания INT0. На ноге с INT0 сидит ИК-диод и дает "ноль" в определенной точке вращение ротора, как в большинстве подобных схем. При каждом срабатывании INT0 делается расчет времени необходимого для вывода ОДНОГО столбца изображения. Всего 48 столбцов. Результат расчета помещается в 8-битный таймер Т2 и при его переполнении выводится очередной столбец изображения. Для Т1 выбран предделитель 64 (250кГц), для Т2 - 256 (62,5кГц). И вот где-то на этапе вычислений я либо не замечаю ошибки, либо не учитываю какую-то тонкость программирования МК. Ротор делает 10-12 оборотов в секунду, поэтому переполнения Т1 быть не должно. В результате получаю следующее - вывод всего изображения происходит где-то за 2-3 "предполагаемых" переполнения таймера2, т.е. примерно за 20 градусов от полного круга. Привожу полный код программы с подробными комментариями. Надеюсь на вашу помощь.
Спойлер
Код:
unsigned char nachalo, n3, n4, b_tmp, num_ris, stolbec;
unsigned char image_end;                                    // дорисовали картинку до конца (1) или нет (0)
unsigned char kw_t2;                                        // вычисляемый интервал для вывода одного столбца рисунка

unsigned char risunki[IMAGE_KW][IMAGE_COL][3]={{
// лучик
    {0b11111111, 0b11100000, 0b11111111},
    {0b11111111, 0b00011000, 0b11111111},
    {0b11111111, 0b00000110, 0b11111111},
    {0b11111111, 0b00000001, 0b11111111},
    {0b11111111, 0b00000110, 0b11111111},
    {0b11111111, 0b00011000, 0b11111111},
    {0b11111111, 0b11100000, 0b11111111},
    {0b11111111, 0b00000000, 0b11111111},
    {0b10000000, 0b00000000, 0b00000001},
    {0b10000000, 0b00011111, 0b00000001},
    {0b10000000, 0b10010000, 0b00000001},
    {0b10000000, 0b10010000, 0b00000001},
    {0b10000000, 0b10010000, 0b00000001},
    {0b10000000, 0b01111111, 0b00000001},
    {0b10000000, 0b00000000, 0b00000001},
    {0b10000000, 0b00000000, 0b00000001},
    {0b11111111, 0b00000000, 0b11111111},
    {0b11111111, 0b00001111, 0b11111111},
    {0b11111111, 0b00010000, 0b11111111},
    {0b11111111, 0b00010000, 0b11111111},
    {0b11111111, 0b00010000, 0b11111111},
    {0b11111111, 0b11111111, 0b11111111},
    {0b11111111, 0b00000000, 0b11111111},
    {0b11111111, 0b00000000, 0b11111111},
    {0b10000000, 0b00000000, 0b00000001},
    {0b10000000, 0b11111111, 0b00000001},
    {0b10000000, 0b01100000, 0b00000001},
    {0b10000000, 0b00010000, 0b00000001},
    {0b10000000, 0b00001100, 0b00000001},
    {0b10000000, 0b11111111, 0b00000001},
    {0b10000000, 0b00000000, 0b00000001},
    {0b10000000, 0b00000000, 0b00000001},
    {0b11111111, 0b00000000, 0b11111111},
    {0b11111111, 0b11111111, 0b11111111},
    {0b11111111, 0b00010000, 0b11111111},
    {0b11111111, 0b00101000, 0b11111111},
    {0b11111111, 0b11000110, 0b11111111},
    {0b11111111, 0b00000000, 0b11111111},
    {0b11111111, 0b00000000, 0b11111111},
    {0b11111111, 0b00000000, 0b11111111},
    {0b10000000, 0b00000100, 0b00000001},
    {0b10000000, 0b01001110, 0b00000001},
    {0b10000000, 0b10000100, 0b00000001},
    {0b10000000, 0b10110000, 0b00000001},
    {0b10000000, 0b10000100, 0b00000001},
    {0b10000000, 0b01001110, 0b00000001},
    {0b10000000, 0b00000100, 0b00000001},
    {0b10000000, 0b00000000, 0b00000001}},
//звезда смерти
{   {0b11111111, 0b11111111, 0b11111111},
    {0b10000010, 0b01000010, 0b00000001},
    {0b10000010, 0b01000010, 0b00000001},
    {0b10000011, 0b11000010, 0b00000001},
    {0b10000000, 0b01000010, 0b00000001},
    {0b10000000, 0b01000010, 0b00000001},
    {0b10000000, 0b01000010, 0b00000001},
    {0b10000000, 0b01000010, 0b00000001},
    {0b11111111, 0b11111111, 0b11111111},
    {0b10000000, 0b01000010, 0b01110001},
    {0b10000000, 0b01000010, 0b10001001},
    {0b10000000, 0b01000011, 0b00000101},
    {0b10000000, 0b01000010, 0b00000011},
    {0b10000000, 0b01000011, 0b00000101},
    {0b10000000, 0b01000010, 0b10001001},
    {0b10000000, 0b01000010, 0b01110001},
    {0b11111111, 0b11111111, 0b11111111},
    {0b10000000, 0b01000010, 0b00000001},
    {0b10000000, 0b01000010, 0b00000001},
    {0b10000000, 0b01000010, 0b00000001},
    {0b10011000, 0b01000010, 0b00100101},
    {0b10011000, 0b01000010, 0b00000001},
    {0b10000000, 0b01000010, 0b00100001},
    {0b10000000, 0b01000010, 0b00001111},
    {0b11111111, 0b11111111, 0b11111111},
    {0b10000000, 0b01000010, 0b00000001},
    {0b10000000, 0b01000010, 0b00100101},
    {0b10000000, 0b01000010, 0b00000001},
    {0b11100000, 0b01000010, 0b00100101},
    {0b11100000, 0b01000010, 0b00000001},
    {0b10000000, 0b01000010, 0b00100101},
    {0b10000000, 0b01000010, 0b00000001},
    {0b11111111, 0b11111111, 0b11111111},
    {0b10000000, 0b01000010, 0b00000001},
    {0b10000000, 0b01000010, 0b00000001},
    {0b10101000, 0b01000010, 0b00000001},
    {0b10101000, 0b01000010, 0b00000001},
    {0b10101000, 0b01000010, 0b00000001},
    {0b10000000, 0b01000010, 0b00000001},
    {0b10000000, 0b01000010, 0b01010101},
    {0b11111111, 0b11111111, 0b11111111},
    {0b10000000, 0b01000010, 0b01010101},
    {0b10000011, 0b01000010, 0b00000001},
    {0b10000011, 0b01000010, 0b01000001},
    {0b10000011, 0b01000010, 0b00010001},
    {0b10000000, 0b01000010, 0b00000001},
    {0b10000000, 0b01000010, 0b00010001},
    {0b10000000, 0b01000010, 0b00000001}}
};

interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{

}

// Timer2 overflow interrupt service routine
interrupt [TIM2_OVF] void timer2_ovf_isr(void)
{
        nachalo=1;                                          // можно выводить картинку
        TCNT2=255-kw_t2;                                    // инициализация Таймера2
}// interrupt [TIM2_OVF]

// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
    // между прерываниями INT0 засекается количество тиков Таймера1
    // затем это число делится на количество столбцов рисунка и пересчитывается на частоту Таймера2
    kw_t2=((TCNT1H<<8) + TCNT1L)/192;                       // расчет времени отводимого для вывода одного столбца
                                                            // ((TCNT1*(1/250000))/(1/62500))/IMAGE_COL =
                                                            // = (TCNT1 * 62500) / (250000 * IMAGE_COL) =
                                                            // = TCNT1 / (4 * IMAGE_COL) = TCNT1 / 192
   
    TCNT1H=0x0;                                             // сброс счетчика Таймера1
    TCNT1L=0x0;
    TCNT2=255-kw_t2;                                        // установка счетчика Таймера2
    image_end=0;                                            // сбросим флаг достижения конца рисунка
    stolbec=0;                                              // выводим с первого столбца
    nachalo=1;                                              // можно начинать вываодить картинку
}

void main(void)
{
// Crystal Oscillator division factor: 1
CLKPR=(1<<CLKPCE);
CLKPR=(0<<CLKPCE) | (0<<CLKPS3) | (0<<CLKPS2) | (0<<CLKPS1) | (0<<CLKPS0);

// Input/Output Ports initialization
// Port B initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);

// Port C initialization
// Function: Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRC=(0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0);
// State: Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTC=(0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);

// Port D initialization
// Function: Bit7=In Bit6=In Bit5=Out Bit4=In Bit3=In Bit2=In Bit1=Out Bit0=Out
DDRD=(0<<DDD7) | (0<<DDD6) | (1<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (1<<DDD1) | (1<<DDD0);
// State: Bit7=T Bit6=T Bit5=0 Bit4=T Bit3=T Bit2=T Bit1=0 Bit0=0
PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);

// Timer/Counter 0 initialization
TCCR0A=(0<<COM0A1) | (0<<COM0A0) | (0<<COM0B1) | (0<<COM0B0) | (0<<WGM01) | (0<<WGM00);
TCCR0B=(0<<WGM02) | (0<<CS02) | (0<<CS01) | (0<<CS00);
OCR0A=0x00;
OCR0B=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 250,000 kHz
TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10);
TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (1<<CS11) | (1<<CS10);
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: 62,500 kHz
// Mode: Normal top=0xFF
ASSR=(0<<EXCLK) | (0<<AS2);
TCCR2A=(0<<COM2A1) | (0<<COM2A0) | (0<<COM2B1) | (0<<COM2B0) | (0<<WGM21) | (0<<WGM20);
TCCR2B=(0<<WGM22) | (1<<CS22) | (1<<CS21) | (0<<CS20);
TCNT2=0x00;
OCR2A=0x00;
OCR2B=0x00;

// Timer/Counter 0 Interrupt(s) initialization
TIMSK0=(0<<OCIE0B) | (0<<OCIE0A) | (0<<TOIE0);

// Timer/Counter 1 Interrupt(s) initialization
TIMSK1=(0<<ICIE1) | (0<<OCIE1B) | (0<<OCIE1A) | (1<<TOIE1);

// Timer/Counter 2 Interrupt(s) initialization
TIMSK2=(0<<OCIE2B) | (0<<OCIE2A) | (1<<TOIE2);

// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Falling Edge
// INT1: On
// INT1 Mode: Falling Edge
// Interrupt on any change on pins PCINT0-7: Off
// Interrupt on any change on pins PCINT8-14: Off
// Interrupt on any change on pins PCINT16-23: Off
EICRA=(0<<ISC11) | (0<<ISC10) | (1<<ISC01) | (0<<ISC00);
EIMSK=(0<<INT1) | (1<<INT0);
EIFR=(0<<INTF1) | (1<<INTF0);
PCICR=(0<<PCIE2) | (0<<PCIE1) | (0<<PCIE0);

// USART initialization
// USART disabled
UCSR0B=(0<<RXCIE0) | (0<<TXCIE0) | (0<<UDRIE0) | (0<<RXEN0) | (0<<TXEN0) | (0<<UCSZ02) | (0<<RXB80) | (0<<TXB80);

// Analog Comparator initialization
// Analog Comparator: Off
ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0);
ADCSRB=(0<<ACME);
// Digital input buffer on AIN0: On
// Digital input buffer on AIN1: On
DIDR1=(0<<AIN0D) | (0<<AIN1D);

// ADC initialization
// ADC disabled
ADCSRA=(0<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (0<<ADPS1) | (0<<ADPS0);

// SPI initialization
// SPI disabled
SPCR=(0<<SPIE) | (0<<SPE) | (0<<DORD) | (0<<MSTR) | (0<<CPOL) | (0<<CPHA) | (0<<SPR1) | (0<<SPR0);

// TWI initialization
// TWI disabled
TWCR=(0<<TWEA) | (0<<TWSTA) | (0<<TWSTO) | (0<<TWEN) | (0<<TWIE);

#asm("sei")

Sync=0;
Latch=0;
nachalo=0;
num_ris=0;
image_end=0;
kw_t2=130;          // начальное значение для времени 10 оборотов в секунду
while (1)
{
    // еще что-то

    if ((nachalo==1)&&(image_end==0))
    {   
        // Если разрешен вывод очередного столбца и не достигли конца рисунка, то
        // заполняю регистры для одного столбца
        for (n3=0; n3<3; n3++)                  // у меня 3 регистра
        {
            b_tmp=risunki[num_ris][stolbec][n3];
            for (n4=0; n4<8; n4++)
            {
                // побитовый вывод начиная со старшего разряда
                if ((b_tmp & 0b10000000) != 0) Data=1;
                else Data=0;
                Sync=1;                         // Тактовый импульс для регистров
                Sync=0;
                b_tmp=b_tmp<<1;
            }
        }
        Latch=1;                                // защелкнем ригистры
        Latch=0;
        nachalo=0;                              // Столбец отрисовали
        if (stolbec<(IMAGE_COL-1)) stolbec++;   // Если вывели последний столбец, то больше выводить не надо до прерывания INT0
        else image_end=1;
    }// if nachalo
}// while
}// main


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Led-глобус, проблема
СообщениеДобавлено: Чт ноя 30, 2017 23:52:33 
Потрогал лапой паяльник

Карма: 5
Рейтинг сообщений: 81
Зарегистрирован: Вс июл 29, 2012 16:25:39
Сообщений: 312
Рейтинг сообщения: 0
И вот где-то на этапе вычислений я либо не замечаю ошибки, либо не учитываю какую-то тонкость программирования МК.
А как ты можешь заметить ошибку, если не видишь значений?
Что конкретно у тебя насчитывает таймер-1, что он вычисляет как значение для таймера-2?
Заведи массив на все 48 строк, чтобы за время "рисования" запомнить все значения TCNT1 в момент INT0 и вычисленного kw_t2 для каждой строки.
И выведи эти значения по окончанию всего цикла рисования, хотя бы через UART на консоль.
Потребуется 48 * (2 + 1 ) = 144 байта памяти для массива.
поэтому переполнения Т1 быть не должно.
Не должно или их точно нет?
Прерывание по переполнению вижу - добавь туда какое-нить диагностическое мигание.

Переменные, которые используются/изменяются как в основном цикле, так и в прерывании объяви volatible.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Led-глобус, проблема
СообщениеДобавлено: Пт дек 01, 2017 06:03:52 
Первый раз сказал Мяу!

Зарегистрирован: Чт ноя 30, 2017 08:47:45
Сообщений: 23
Откуда: Новосибирск
Рейтинг сообщения: 0
mas123, спасибо что откликнулся на зов помощи.
Проблематично вывести на консоль что-то с вращающейся штуковины, а если остановить, то и расчетов никаких не будет. Можно разве что в EEPROM записать и потом глянуть.
"отсутствие" переполнения Т1 я предполагал потому что частота вращения не менее 10 оборотов в секунду, а максимальное значение Т1 достигнет только при оборотах меньше 4 в секунду.
Проведу рекомендованные мероприятия и отпишусь по результатам.

P.S. Расчет kw_t2 делается один раз за оборот и используется для вывода каждого столбца изображения.


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

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

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Led-глобус, проблема
СообщениеДобавлено: Пт дек 01, 2017 13:45:58 
Потрогал лапой паяльник

Карма: 5
Рейтинг сообщений: 81
Зарегистрирован: Вс июл 29, 2012 16:25:39
Сообщений: 312
Рейтинг сообщения: 0
Проблематично вывести на консоль что-то с вращающейся штуковины, а если остановить, то и расчетов никаких не будет.
Эммммм, не вижу НИКАКОЙ проблемы даже по двум причинам:
- вывод стоит делать после прохождения одного круга.
Выполнен один проход, буфер заполнен - всё, можно выводить цифры и пофигу уже на дальнейшее кручение.

- вывод в UART на прерываниях.
Тут-то что мешать будет "кручению"? Если только не намудрить в функции обработки прерывания передатчика UART...


Вернуться наверх
 
Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Led-глобус, проблема
СообщениеДобавлено: Пт дек 01, 2017 16:49:21 
Друг Кота
Аватар пользователя

Карма: 46
Рейтинг сообщений: 2030
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Сообщений: 6620
Откуда: Сердце Пармы
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
а если сделать проще - по переполнению (или по любому другому событию) зажигать определённый светодиод в глобусе, тогда будет виден не только факт, но и момент события.

_________________
Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...


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

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

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Led-глобус, проблема
СообщениеДобавлено: Пт дек 01, 2017 20:10:14 
Первый раз сказал Мяу!

Зарегистрирован: Чт ноя 30, 2017 08:47:45
Сообщений: 23
Откуда: Новосибирск
Рейтинг сообщения: 0
В общем я сделал так. В своей "тупой" (которая использует delay) выводилке изображения подобрал задержку и по ней выставил скорость двигателя 15 оборотов в секунду. Было 27. Затем в программе, листинг которой я опубликовал тут, добавил запись в EEPROM МК 20 значений подряд TCNT1 и kw_t2, но сначала выжидал 4 секунды для стабилизации скорости вращения. И был удивлен тем, что всегда старший байт счетчика в EEPROM был нулевым, а kw_t2 всегда был больше 2. Косяк мой был в том, что я читал сначала старший байт счетчика, а потом младший. А надо строго наоборот. После этого цифирки стали соответствовать друг другу. И тут я предположил, что компилятор не учитывает правила работы при чтении регистров счетчика. И заменил строку:
kw_t2=((TCNT1H<<8) + TCNT1L)/192;

на вот такую комбинацию:
kw_t2=TCNT1L;
kw_t2=((TCNT1H<<8) + kw_t2)/192;

и заработало, блин. Я неделю бился с этой проблемой. Это уже второй косяк на который я напоролся понадеевшись на корректность CVAVR. Первый был связан с кривым генератором начального кода для инициализации ватчдога на atmege328.
Только изредка почему-то пропускает INT0. Не могу пока понять почему.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Led-глобус, проблема
СообщениеДобавлено: Пт дек 01, 2017 20:46:28 
Потрогал лапой паяльник

Карма: 5
Рейтинг сообщений: 81
Зарегистрирован: Вс июл 29, 2012 16:25:39
Сообщений: 312
Рейтинг сообщения: 0
добавил запись в EEPROM МК 20 значений подряд TCNT1 и kw_t2,
Хм, а время записи данных в EEPROM не мешало и не сбивало показания?
я читал сначала старший байт счетчика, а потом младший. А надо...
kw_t2=((TCNT1H<<8) + kw_t2)/192;
А почему было не написать в стиле вот так:
Код:
unsigned int nValue = TCNT1;
nValue /= 192;
kw_t2 = nValue;
Специально пишу через отдельную переменную для наглядности. Можно и kw_t2 = TCNT1 / 192;
Компиляторы умеют правильно вычитывать двухбайтные значения из TCNTх, ADC,...
Только изредка почему-то пропускает INT0. Не могу пока понять почему.
В смысле "пропускает"? Либо на входе сигнал "плохой", либо в этот момент прерывания запрещены. Повесь отдалочный светодиод и мигай им при входе в обработчик INT0.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Led-глобус, проблема
СообщениеДобавлено: Вс дек 03, 2017 08:45:10 
Первый раз сказал Мяу!

Зарегистрирован: Чт ноя 30, 2017 08:47:45
Сообщений: 23
Откуда: Новосибирск
Рейтинг сообщения: 0
Хм, а время записи данных в EEPROM не мешало и не сбивало показания?

Я сначала заполнял массив, а после этого уже писал его EEPROM.
А почему было не написать в стиле вот так:
Код:
unsigned int nValue = TCNT1;
nValue /= 192;
kw_t2 = nValue;
Специально пишу через отдельную переменную для наглядности. Можно и kw_t2 = TCNT1 / 192;

Я пробовал. Выяснилось, что cvavr не знает такого регистра :)
В смысле "пропускает"? Либо на входе сигнал "плохой", либо в этот момент прерывания запрещены. Повесь отдалочный светодиод и мигай им при входе в обработчик INT0.

Прерывания у меня вообще не запрещаются в этом коде, ну разве что аппаратно в переполнении счетчика Т2. Происходит следующее, если нет сработки INT0, то все светодиоды гаснут и я фиксирую "моргание". Буду с этим разбираться.
Спасибо за участие в топике :beer:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Led-глобус, проблема
СообщениеДобавлено: Вс дек 03, 2017 09:55:59 
Друг Кота
Аватар пользователя

Карма: 46
Рейтинг сообщений: 2030
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Сообщений: 6620
Откуда: Сердце Пармы
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Я пробовал. Выяснилось, что cvavr не знает такого регистра :)
их можно и познакомить :) : в папке inc найди файл от своего МК и допиши про TCNT1W (по аналогии с ADCW) должно прокатить я к меге 8 так дописывал, правда там он описан был в верхней части (не через дефайны)

_________________
Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...


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

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


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 48


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

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


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