Например TDA7294

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

Текущее время: Пт авг 22, 2025 03:05:44

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


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



Начать новую тему Ответить на тему  [ Сообщений: 253 ]    , , 3, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: ну когда же из этого будет секундомер.
СообщениеДобавлено: Вт июл 27, 2010 23:20:56 
Потрогал лапой паяльник

Зарегистрирован: Сб дек 12, 2009 02:15:45
Сообщений: 392
Рейтинг сообщения: 0
удачи :beer:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ну когда же из этого будет секундомер.
СообщениеДобавлено: Чт июл 29, 2010 11:21:32 
Первый раз сказал Мяу!

Зарегистрирован: Чт июл 17, 2008 20:53:28
Сообщений: 33
Откуда: Коломыя UA
Рейтинг сообщения: 0
Спасибо!
Дошло дело до железа.
Нашол я у себя индикаторы HDSP-5621 и, естественно, они не с общим катодом, а с общим анодом.
Для инвертирования сигналов надо в программе инвертировать эти биты:
unsigned char znak [20] = {0b00111111, 0b00000110, 0b01011011, 0b01001111, 0b01100110, 0b01101101, 0b01111101, 0b00000111, 0b01111111, 0b01101111}; и вместо PORTD = razrad^0xFF ; прописать PORTD = razrad; , ибо сделал ТАК и, типа, работает.

И ещё, в оригинале программы написано unsigned char znak [20], адолжно быть [10] ?


Последний раз редактировалось AVL Чт июл 29, 2010 12:17:04, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ну когда же из этого будет секундомер.
СообщениеДобавлено: Чт июл 29, 2010 12:15:40 
Потрогал лапой паяльник

Зарегистрирован: Сб дек 12, 2009 02:15:45
Сообщений: 392
Рейтинг сообщения: 0
да, нужно инвертнуть знакогенератор.
еще нужно инвертировать сигнал на разрядах.
вместо PORTD = razrad^0xFF ; прописать PORTD = razrad;
20 элементов знакогенератора было в другом проекте, я просто скопировал и вставил не глядя кусок когда в секундомер. нужно изменить на 10. хотя это не повлияет на работу.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ну когда же из этого будет секундомер.
СообщениеДобавлено: Чт июл 29, 2010 12:35:45 
Первый раз сказал Мяу!

Зарегистрирован: Чт июл 17, 2008 20:53:28
Сообщений: 33
Откуда: Коломыя UA
Рейтинг сообщения: 0
Ясно. Спасибо, в Протеусе ЗАРАБОТАЛО.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ну когда же из этого будет секундомер.
СообщениеДобавлено: Чт июл 29, 2010 18:40:38 
Первый раз сказал Мяу!

Зарегистрирован: Чт июл 17, 2008 20:53:28
Сообщений: 33
Откуда: Коломыя UA
Рейтинг сообщения: 0
В железе, на макетке, на одном разряде - работает.
Но есть нюанс, пока-что не влияющий на работу, но всё-равно интересно.
У нас есть три входных линии на порту Д. К двум я подцепил кнопки. Кнопки в жизни работают.
Но в Протеусе и в жизни на этих входах вместо подтяжки к плюсу есть чёткие импульсы.
Не помогли даже такие мои строки кода:

if (razrad == 0b00011111) razrad = 0b11100000;
и
if (x==4) {x=0; razrad=0b11101000;}

Откуда лезут эти имульсы и как их убрать?
Спасибо.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ну когда же из этого будет секундомер.
СообщениеДобавлено: Чт июл 29, 2010 19:15:28 
Потрогал лапой паяльник

Зарегистрирован: Сб дек 12, 2009 02:15:45
Сообщений: 392
Рейтинг сообщения: 0
покажи весь код как он у тебя сейчас выглядит.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ну когда же из этого будет секундомер.
СообщениеДобавлено: Пт июл 30, 2010 10:08:43 
Первый раз сказал Мяу!

Зарегистрирован: Чт июл 17, 2008 20:53:28
Сообщений: 33
Откуда: Коломыя UA
Рейтинг сообщения: 0
/*****************************************************
This program was produced by the
CodeWizardAVR V2.04.4a Advanced
Automatic Program Generator
© Copyright 1998-2009 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project :
Version :
Date : 31.05.2010
Author : NeVaDa
Company : Microsoft
Comments:


Chip type : ATtiny2313
AVR Core Clock frequency: 8,000000 MHz
Memory model : Tiny
External RAM size : 0
Data Stack size : 32
*****************************************************/

#include <tiny2313.h>
#include <delay.h>

unsigned char razrad=0b11101000;
bit start=0;
bit stop=0;
unsigned char cloc[4]={0,0,0,0};
//unsigned char cloc[6]={0,0,0,0,0,0};

unsigned char tik=0;
unsigned char des_tik=0;
unsigned char sec=0;
unsigned char des_sec=0;
unsigned char min=0;
//unsigned char des_min=0;

unsigned char x=0;

//unsigned char znak [20] = {0b00111111, 0b00000110, 0b01011011, 0b01001111, 0b01100110, 0b01101101, 0b01111101, 0b00000111, 0b01111111, 0b01101111};//знакогенератор.
unsigned char znak [20] = {0b11000000, 0b11111001, 0b10100100, 0b10110000, 0b10011001, 0b10010010, 0b10000010, 0b11111000, 0b10000000, 0b10010000};//знакогенератор.






//******************************** отсчет времени ************************************
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{

if (start==0) goto m1;

tik++;
if (tik==10) {tik=0; des_tik++;}
if (des_tik==10) {des_tik=0; sec++;}
if (sec==10) {sec=0; des_sec++;}
if (des_sec==6) {des_sec=0; des_sec++; min=1; }
//if (des_sec==6) {PORTB.7 =1;}

//if (des_min==6) {des_min=0;}

cloc[0] = tik;
cloc[1] = des_tik;
cloc[2] = sec;
cloc[3] = des_sec;
//cloc[4] = min;
//cloc[5] = des_min;

m1:
}


//****************************** динамическая индикация **********************************
interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{
// PORTD = razrad^0xFF ;
PORTD = razrad;
PORTB = znak [cloc[x]];

// if ((x==2) || (x==4)) {PORTB.7 =1;} else PORTB.7 =0;

razrad>>= 1;
if (razrad == 0b00011111) razrad = 0b11100000;
x++;
//if (x==6) {x=0; razrad=0b00100000;}
if (x==4) {x=0; razrad=0b11101000;}
if (min==1) {PORTB.7 =0;}


}



void main(void)
{
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

PORTA=0x00;DDRA=0x00;
PORTB=0x00;DDRB=0xFF;
//PORTD=0x40;DDRD=0x3F;
PORTD=0x7F;DDRD=0x0F;


// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 125,000 kHz
// Mode: Normal top=FFh
// OC0A output: Disconnected
// OC0B output: Disconnected
TCCR0A=0x00;
TCCR0B=0x03;
TCNT0=0x00;
OCR0A=0x00;
OCR0B=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 125,000 kHz
// Mode: CTC top=OCR1A
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: On
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x0B;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x04;
OCR1AL=0xE2;
OCR1BH=0x00;
OCR1BL=0x00;


TIMSK=0x42;
ACSR=0x80;
#asm("sei")

while (1)
{
if ((PIND.6==0)&(stop==1))
{ start=1;
stop=0;
tik= des_tik = sec = des_sec = min=0;
}

if ((PIND.6==0)&(stop==0))
{ start=1;
stop=0;

}

if (PIND.5==0) {start=0; stop=1;}

};
}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ну когда же из этого будет секундомер.
СообщениеДобавлено: Пт июл 30, 2010 21:18:40 
Первый раз сказал Мяу!

Зарегистрирован: Чт июл 17, 2008 20:53:28
Сообщений: 33
Откуда: Коломыя UA
Рейтинг сообщения: 0
Кажись, разобрался почему импульсы появляются на входах PORTD.6-PORTD.4.
Из-за команды razrad>>=1; Ода сдвигает 1 по всему порту и соответственно с выходов на входа тоже перескакивает.
Переписал я обратно пару строк и входа в третьем состоянии сидят, а я их резисторами с улицы подтягиваю. Пока-что это устраивает, а потом дорозберусь.
Запустил всё в железе. Работает, но с частотой в раза 4-6 больше, чем реальный секундомер и мерцания индикаторов ОЧЕНЬ видны.
Запустил с внутреннего генератора (8мГц). Если я поставлю внешний кварц, то ситуация врят-ли изменится.... я так думаю.
Что делать с мерцанием и неадекватностью отсчёта? Ибо, на сколько я понимаю, увеличив частоту обновления экрана, что б уменьшить мерцание, мы ещё больше увеличим итак в разы больше, чем нужную, частоту отсчёта времени :(


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ну когда же из этого будет секундомер.
СообщениеДобавлено: Сб июл 31, 2010 02:10:22 
Потрогал лапой паяльник

Зарегистрирован: Сб дек 12, 2009 02:15:45
Сообщений: 392
Рейтинг сообщения: 0
здесь твоя ошибка.
Код:
razrad>>= 1;
if (razrad == 0b00011111) razrad = 0b11100000;
x++;
if (x==4) {x=0; razrad=0b11101000;}

нафига ты решил три старших бита единицами забить? нафига эта строчка if (razrad == 0b00011111) razrad = 0b11100000; ???
и еще, когда произходит сдвиг числа, то те битики которые приходят вместо вытесненых - всегда нули.
вот так вроде должно работать, и импульсы которые ты сам посылал на выводы кнопок - пропадут.
Код:
razrad>>= 1;  x++;
if (x==4) {x=0; razrad=0b00001000;}


по поводу мерцания. динамическая индикация и отсчет времени производится с помощью разных таймеров, поэтому они совершенно не зависят друг от друга. смотри настройки этих таймеров. вполне возможно я туда всякую фигню написал, т.к. написал код минут за 30, и писал больше для примера как это можно сделать. в железе делать не собирался. Тебе нужно чтоб таймер 0 (тот что считает время) срабатывал с частотой ровно 100гц, а таймер 1(тот что осуществляет динамическую индикацию) с частотой 200-400гц. тогда и считать будет точно, и мерцания не будет.
Еще посмотри на фьюзы, может там чего уже ты напутал.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ну когда же из этого будет секундомер.
СообщениеДобавлено: Сб июл 31, 2010 16:03:26 
Первый раз сказал Мяу!

Зарегистрирован: Чт июл 17, 2008 20:53:28
Сообщений: 33
Откуда: Коломыя UA
Рейтинг сообщения: 0
Спасибо. Понял. Вникаю.
И даже есть результаты.
Изменил // Clock value: 125,000 kHz
на // Clock value: 1000,000 kHz
и с индикацией нет проблем, светит чётко, ровно.
Осалось с отсчётом времени разобраться. С ним будет сложнеее, ибо индикацию я на шару откоректировал, а тут боле-мение реально счить должно.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ну когда же из этого будет секундомер.
СообщениеДобавлено: Сб июл 31, 2010 19:16:32 
Потрогал лапой паяльник

Зарегистрирован: Сб дек 12, 2009 02:15:45
Сообщений: 392
Рейтинг сообщения: 0
ты увеличил частоту сигнала подаваемого на таймер-счетчик в 8 раз, и у тебя стало все отлично. это наталкивает на мысль что контроллер у тебя работает не на 8 мгц, а в 8 раз меньше, т.е. 1мгц. проверяй фьюзы, там наверное ошибка.
Кстати, это в железе работает? какой кварц стоит? может ты кварц подцепил, а фьюзы установлены на работу от внутреннего генератора, и на 1 мгц. тогда похоже на те симптомы которые ты описал. а кварц просто болтается на пинах :dont_know: короче здесь смотри.
по поводу таймера на отсчет времени. он работает в режиме СТС, т.е. считает до определенного значения, генерирует прерывание, сам сбрасывается в ноль, и начинает новый цикл отсчета. на Т/С1 подается 125.000гц делитель выставлен на 1250 (OCR1AH=0x04; OCR1AL=0xE2;) . значит таймер генерирует прерывания с частотой 125000/1250=100гц. то что нужно! так что проверяй от чего и на какой частоте тактируется микроконтроллер.

зы. я уже жду ну когда же из этого будет секундомер. :)))


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ну когда же из этого будет секундомер.
СообщениеДобавлено: Сб июл 31, 2010 19:31:17 
Первый раз сказал Мяу!

Зарегистрирован: Чт июл 17, 2008 20:53:28
Сообщений: 33
Откуда: Коломыя UA
Рейтинг сообщения: 0
Подцепил я кварц на 8мГц, и соответственно, перешил фузы и, соответственно, "немнго" с фузами ошибся. Именно с фузами тактирования. Теперь тинька проггером не видиться, хотя девайс работает, но ОЧЧЧЧЧЕНЬ медленно, разряды переключаются за четверть секунды. Прицепил кварц и в проггер, надеясь, что тинка увидится - не увидилась. Вот сижу, чешу репу.
Проггер: AVR910. И есть у него режим программирования на пониженной частоте, но чёт вот не программируется обратно. Тинька - не видится. Так-что. видимо, сегодня секундомера не будет :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ну когда же из этого будет секундомер.
СообщениеДобавлено: Сб июл 31, 2010 20:41:54 
Первый раз сказал Мяу!

Зарегистрирован: Чт июл 17, 2008 20:53:28
Сообщений: 33
Откуда: Коломыя UA
Рейтинг сообщения: 0
Взял ПОСЛЕДНЮЮ Тиньку.
Кварц на 8.
Что-бы убедиться, что тактируется от кварца, я отпаивал ногу кварца. Работа девайса останавливается и горит тока один разряд. Значит, тактируется таки от кварца.
Скорость индикации и скорость счёта осталась ПРЕЖНЕЙ.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ну когда же из этого будет секундомер.
СообщениеДобавлено: Сб июл 31, 2010 21:24:23 
Первый раз сказал Мяу!

Зарегистрирован: Чт июл 17, 2008 20:53:28
Сообщений: 33
Откуда: Коломыя UA
Рейтинг сообщения: 0
Непонятно мне по таймерам.
Ты говорил, что тамер0 - отсчёт времени.
Таймер1 - индикация.
(OCR1AH=0x04; OCR1AL=0xE2;) - это установки таймера1 или таймера0?
Вроде, таймера1, значит на скорость счёта он не влияет.
Да?
Более того, если я изменяю эти параметры: (OCR1AH=0x04; OCR1AL=0xE2;),
то изменяется корость индикации, а не пересчёта.
Что делать?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ну когда же из этого будет секундомер.
СообщениеДобавлено: Сб июл 31, 2010 23:24:52 
Потрогал лапой паяльник

Зарегистрирован: Сб дек 12, 2009 02:15:45
Сообщений: 392
Рейтинг сообщения: 0
Ёшкин кот...., яж говорил что писал без особого внимания. перепутал таймеры :oops:
значит так. таймер0 - это динамическая индикация. Таймер настроен на прерывания по переполнению. внутри его обработчика должно быть то что сейчас в обработчике таймера Т1.
Таймер1, соответственно отсчитывает время. он работает в режиме СТС. и внутри нужно поместить то что внутри Т0.

Вот заново сгенерировал настройки таймеров в кодевижн. получилось так -

Код:
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 125,000 kHz
// Mode: Normal top=FFh
// OC0A output: Disconnected
// OC0B output: Disconnected
TCCR0A=0x00;
TCCR0B=0x03;
TCNT0=0x00;
OCR0A=0x04;
OCR0B=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 125,000 kHz
// Mode: CTC top=OCR1A
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: On
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x0B;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x04;
OCR1AL=0xE2;
OCR1BH=0x00;
OCR1BL=0x00;


// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x42;
ACSR=0x80;


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ну когда же из этого будет секундомер.
СообщениеДобавлено: Вс авг 01, 2010 12:19:46 
Первый раз сказал Мяу!

Зарегистрирован: Чт июл 17, 2008 20:53:28
Сообщений: 33
Откуда: Коломыя UA
Рейтинг сообщения: 0
Понятно.
Прибил на фузах вторую и последнюю тиньку. Так-что спортсмены пока курят.

STK500 (аналог), может, кто на Украине продаёт?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ну когда же из этого будет секундомер.
СообщениеДобавлено: Вс авг 01, 2010 20:13:24 
Первый раз сказал Мяу!

Зарегистрирован: Чт июл 17, 2008 20:53:28
Сообщений: 33
Откуда: Коломыя UA
Рейтинг сообщения: 0
neon-f, ты на "моря" не собираешся, мы до осени запустим секундомер ? :)
Значит так, собрался я с силами и восстановил свои Аттиньки с помощю этого девайса. Паял пол воскресенья.
http://diy.elektroda.eu/atmega-fusebit-doctor-hvpp/
Восстановил, слава Богу с пол тыка :) Рекомендую, ВОССТАНОВИТЕЛЬ реально рулит.
Идём дальше.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ну когда же из этого будет секундомер.
СообщениеДобавлено: Вс авг 01, 2010 20:30:28 
Первый раз сказал Мяу!

Зарегистрирован: Чт июл 17, 2008 20:53:28
Сообщений: 33
Откуда: Коломыя UA
Рейтинг сообщения: 0
Прописал настройки таймеров, как было указано выше:
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 125,000 kHz
// Mode: Normal top=FFh
// OC0A output: Disconnected
// OC0B output: Disconnected
TCCR0A=0x00;
TCCR0B=0x03;
TCNT0=0x00;
OCR0A=0x04;
OCR0B=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 125,000 kHz
// Mode: CTC top=OCR1A
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: On
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x0B;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x04;
OCR1AL=0xE2;
OCR1BH=0x00;
OCR1BL=0x00;


// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x42;
ACSR=0x80;

Ничего не поменялось. Мерцает индикаця и отсчёт времени в раз шесть больше.
Тактируется 100% от кварца, ибо если ногу отпаиваю, то всё останавливается.
Что делать?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ну когда же из этого будет секундомер.
СообщениеДобавлено: Вс авг 01, 2010 20:34:58 
Первый раз сказал Мяу!

Зарегистрирован: Чт июл 17, 2008 20:53:28
Сообщений: 33
Откуда: Коломыя UA
Рейтинг сообщения: 0
Поменял TCCR1B=0x0В; на TCCR1B=0x0A;.
Индикация стала нормальной, но время считает дико быстро.
Вышел на то, с чего с утра начинал, правда, став богаче на "реаниматор фузов".
Что делать?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ну когда же из этого будет секундомер.
СообщениеДобавлено: Вс авг 01, 2010 21:07:28 
Потрогал лапой паяльник

Зарегистрирован: Сб дек 12, 2009 02:15:45
Сообщений: 392
Рейтинг сообщения: 0
Цитата:
neon-f, ты на "моря" не собираешся,
собираюсь, но у нас еще дней десять в запасе
Цитата:
мы до осени запустим секундомер ?
а разве процес не главнее? :))
Цитата:
Ничего не поменялось. Мерцает индикаця и отсчёт времени в раз шесть больше. Тактируется 100% от кварца, ибо если ногу отпаиваю, то всё останавливается.
Что делать?
Замечательно!!! ты просто не поменял как я говорил содержимое обработчиков прерываний. меняй и будет все работать.
Цитата:
Поменял TCCR1B=0x0В; на TCCR1B=0x0A;.
незабудь вернуть обратно.


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

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


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

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


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

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


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