Цифровой одометр на Atmega8
- Antifritz
- Прорезались зубы
- Сообщения: 222
- Зарегистрирован: Чт июл 08, 2010 01:03:40
- Откуда: Украина, Киев
Re: Цифровой одометр на Atmega8
А вот в спидометре лучше замерять интервалы между импульсами (используем внешн. прерывания). Если мерять к-во импульсов за период будет большая погрешность.
- Реклама
- yur4ik
- Вымогатель припоя
- Сообщения: 613
- Зарегистрирован: Сб окт 17, 2009 18:56:05
- Откуда: РФ, Башкортостан г.Сибай
- Контактная информация:
Re: Цифровой одометр на Atmega8
Timer/Counter1 это TIMER1? блин я в этих названия уже запутался полностьюAntifritz писал(а):Итак:
Timer/Counter0 может тактироваться только от ножки T0(от Т1 уже не может) и от тактовой МК+ предделитель
Timer/Counter1 может тактироваться только от ножки T1(от Т0 уже не может) и тактовой МК+ предделитель?
Timer/Counter1 может тактироваться только от тактовой МК либо от внешнего кварца на ногах TOSC, при условии что сам МК тактируется внутренним RC генератором.
Можно узнать для чего какой таймер планируется использовать?
Кварц типа сам появляется если выбрано тактирование от внешнего кварца, никаких генераторов и кварцов в протеусе цеплять не нужно все частоты указываются в свойствах МК(тактовая и TOSC)
Нельзя всё знать, достаточно понимать.
- yur4ik
- Вымогатель припоя
- Сообщения: 613
- Зарегистрирован: Сб окт 17, 2009 18:56:05
- Откуда: РФ, Башкортостан г.Сибай
- Контактная информация:
Re: Цифровой одометр на Atmega8
то есть использовать захват?Antifritz писал(а):А вот в спидометре лучше замерять интервалы между импульсами (используем внешн. прерывания). Если мерять к-во импульсов за период будет большая погрешность.
Нельзя всё знать, достаточно понимать.
- yur4ik
- Вымогатель припоя
- Сообщения: 613
- Зарегистрирован: Сб окт 17, 2009 18:56:05
- Откуда: РФ, Башкортостан г.Сибай
- Контактная информация:
Re: Цифровой одометр на Atmega8
Antifritz, вы уж не обижайтесь на меня пожалуйста, прост и так новичек с мк, а еще уже не работал с мк уже с год наверно. че знал забыл уже 
Нельзя всё знать, достаточно понимать.
- Antifritz
- Прорезались зубы
- Сообщения: 222
- Зарегистрирован: Чт июл 08, 2010 01:03:40
- Откуда: Украина, Киев
Re: Цифровой одометр на Atmega8
Названия из даташита. Если будет часовой кварц на TOSCах, то думаю можно запустить МК от внутр. RC генератора на 8МГц и использовать таймер2 для отсчета всяких там интервалов или он для SPI нужен? Ну а таймером1 или 0 считать импульсы для тахометра. Для спидометра таймер выделять не нужно: получили прерывание(ноги INT0/INT1)-посмотрели "время" получили еще одно- опять посмотрели и высчитали разницу.
- Реклама
- yur4ik
- Вымогатель припоя
- Сообщения: 613
- Зарегистрирован: Сб окт 17, 2009 18:56:05
- Откуда: РФ, Башкортостан г.Сибай
- Контактная информация:
Re: Цифровой одометр на Atmega8
я поначалу как раз и хотел использовать таймер 2 как таймер на 1 секунду а вот таймер0 как обычный счетчик, а таймер1 режим захвата.Antifritz писал(а):Названия из даташита. Если будет часовой кварц на TOSCах, то думаю можно запустить МК от внутр. RC генератора на 8МГц и использовать таймер2 для отсчета всяких там интервалов или он для SPI нужен? Ну а таймером1 или 0 считать импульсы для тахометра. Для спидометра таймер выделять не нужно: получили прерывание(ноги INT0/INT1)-посмотрели "время" получили еще одно- опять посмотрели и высчитали разницу.
а вот смотри основной цикл и таймеры они отдельно друг от друга работают или совместно?
похожу когда я инцилизирую таймер2 то он работает как от часового кварца потому что когда отрубаю его спи то работает
Нельзя всё знать, достаточно понимать.
- Antifritz
- Прорезались зубы
- Сообщения: 222
- Зарегистрирован: Чт июл 08, 2010 01:03:40
- Откуда: Украина, Киев
Re: Цифровой одометр на Atmega8
Таймеры-это типа вообще отдельные устройства, работают сами по себе, единственное что они не могут работать с частотой, которая выше тактовой(например если такую подать на Т0/Т1/ТОSC), но я думаю - это пока не актуально. Насчет СПИ - без понятия, а может выкинуть его вообще? Перечитал еще раз- не понял, а что со СПИ не так?
- yur4ik
- Вымогатель припоя
- Сообщения: 613
- Зарегистрирован: Сб окт 17, 2009 18:56:05
- Откуда: РФ, Башкортостан г.Сибай
- Контактная информация:
Re: Цифровой одометр на Atmega8
нее без спи не удобно будет считай на скоко быстрее можно работать с дисплеямиAntifritz писал(а):Таймеры-это типа вообще отдельные устройства, работают сами по себе, единственное что они не могут работать с частотой, которая выше тактовой(например если такую подать на Т0/Т1/ТОSC), но я думаю - это пока не актуально. Насчет СПИ - без понятия, а может выкинуть его вообще? Перечитал еще раз- не понял, а что со СПИ не так?
все вроде добил частота не скачет бывает на -1Гц а потом норм и то редкий раз
хотя не норм погрешность в 30 об/мин над как то убавить
Код: Выделить всё
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
TCNT0=0xFE;
rp++;
}
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
TCNT1 = 0;
speed=0;
}
interrupt [TIM1_CAPT] void timer1_capt_isr(void)
{
//2 000 000 Гц / 8 (TCCR1B=0x02;//clk/8) = 250 000 - чтобы досчитать до 1 сек
TCNT1 = 0;
brp=ICR1; //считываем значение регистра
if(brp!=0){
speed=250000/brp; //подготавливаем среднее значение
}
}
interrupt [TIM2_OVF] void timer2_ovf_isr(void)
{
rpw++;
if(rpw==61){
TCCR2=0x00;
rpw=0;
rps=rp*30;
rp=0;
TCCR2=0x06;
}
}
void main(void)
{
PORTB=0;
DDRB=0x2C; //Настраиваем порт для SPI
PORTC=0x01;
DDRC=0x00;
PORTC=0x00;
DDRC=0x00;
TCCR0=0x06;
TCNT0=0xFE;
TCCR1A=0x00;
TCCR1B=0x02;
GICR|=0x80;
MCUCR=0x08;
GIFR=0x80;
ASSR=0x00;
TCCR2=0x06;
TCNT2=0x00;
OCR2=0x00;
TIMSK=0x65;
ACSR=0x80; //Отключаем компаратор
//Включаем SPI
//Биты будем отправлять LSB-MSB, т.е. от младших к старшим
SPCR=0x7C;
SPSR=0x00;
Нельзя всё знать, достаточно понимать.
- yur4ik
- Вымогатель припоя
- Сообщения: 613
- Зарегистрирован: Сб окт 17, 2009 18:56:05
- Откуда: РФ, Башкортостан г.Сибай
- Контактная информация:
Re: Цифровой одометр на Atmega8
как можно улучшить алгоритм чтобы не не было +-1Гц=(целых аж 30об/мин) режим захвата же норм работает(спидометр) может ну этот алгоритм временных ворот? может лучше запустить таймер и пришел сигнал взял значение таймера следующий импульс опять значение таймера отнял и вот он период. или тоже самое будет?
Нельзя всё знать, достаточно понимать.
- Antifritz
- Прорезались зубы
- Сообщения: 222
- Зарегистрирован: Чт июл 08, 2010 01:03:40
- Откуда: Украина, Киев
Re: Цифровой одометр на Atmega8
ДВС не такой уже и супер-пупер прибор, там и так частота гуляет тем более в большинстве случаев будет не целое число, а например 70,3Гц. Погрешность 1Гц появляется из-за того, что имульсы приходят не синхронно с работой таймера. А там именно и+1Гц и -1Гц (относительно правильной частоты) или только в одну сторону плывет? Когда-то делал частотомер, так там погрешность возникала еще и из-за того, что электронике нужно некоторое время чтобы включить таймер и считать/сбросить значение, решилось путем деления полученного значения на некоторую константу. Но одно дело измерять частоту кварца на 16Мгц, а другое дело ДВС, у которого частота на оооочень много меньшая. На стрелочных тахометрах цена деления 100об/мин, и то стрелка дергается, а вам +/-30 много. Вы же множите частоту на 60, так что цена деления не может быть меньше 60, так что скрывайте две последних цифры, пишите х100 и не парьтесь.
- yur4ik
- Вымогатель припоя
- Сообщения: 613
- Зарегистрирован: Сб окт 17, 2009 18:56:05
- Откуда: РФ, Башкортостан г.Сибай
- Контактная информация:
Re: Цифровой одометр на Atmega8
-1Гц допустим 1500 1500 1500 ... 1470 1500 1500 1470Antifritz писал(а):ДВС не такой уже и супер-пупер прибор, там и так частота гуляет тем более в большинстве случаев будет не целое число, а например 70,3Гц. Погрешность 1Гц появляется из-за того, что имульсы приходят не синхронно с работой таймера. А там именно и+1Гц и -1Гц (относительно правильной частоты) или только в одну сторону плывет? Когда-то делал частотомер, так там погрешность возникала еще и из-за того, что электронике нужно некоторое время чтобы включить таймер и считать/сбросить значение, решилось путем деления полученного значения на некоторую константу. Но одно дело измерять частоту кварца на 16Мгц, а другое дело ДВС, у которого частота на оооочень много меньшая. На стрелочных тахометрах цена деления 100об/мин, и то стрелка дергается, а вам +/-30 много. Вы же множите частоту на 60, так что цена деления не может быть меньше 60, так что скрывайте две последних цифры, пишите х100 и не парьтесь.
скрывать 2 последние цифры не очень хочется. собираюсь скрыть 1 младший разряд чтобы ночью не мешал. но вот в спидометре использую режим захвата но там все четко работает а тут не очень. щас вот есть свободное время буду пробовать сделать так сигнал поступил считал значение таймера, пришел второй сигнал считал значение таймера и потом уже частоту находить. также работает режим захвата?
Нельзя всё знать, достаточно понимать.
- yur4ik
- Вымогатель припоя
- Сообщения: 613
- Зарегистрирован: Сб окт 17, 2009 18:56:05
- Откуда: РФ, Башкортостан г.Сибай
- Контактная информация:
Re: Цифровой одометр на Atmega8
а как получить значение таймера? использовать доп переменную?Antifritz писал(а): Для спидометра таймер выделять не нужно: получили прерывание(ноги INT0/INT1)-посмотрели "время" получили еще одно- опять посмотрели и высчитали разницу.
Нельзя всё знать, достаточно понимать.
- Antifritz
- Прорезались зубы
- Сообщения: 222
- Зарегистрирован: Чт июл 08, 2010 01:03:40
- Откуда: Украина, Киев
Re: Цифровой одометр на Atmega8
Типа того, сохранять значение таймера во время первого прерывания и сравнивать с тем, что во время следующего. Не забываем учитывать переполнения таймера.yur4ik писал(а):а как получить значение таймера? использовать доп переменную?Antifritz писал(а): Для спидометра таймер выделять не нужно: получили прерывание(ноги INT0/INT1)-посмотрели "время" получили еще одно- опять посмотрели и высчитали разницу.
- yur4ik
- Вымогатель припоя
- Сообщения: 613
- Зарегистрирован: Сб окт 17, 2009 18:56:05
- Откуда: РФ, Башкортостан г.Сибай
- Контактная информация:
Re: Цифровой одометр на Atmega8
не не не... я похоже не совсем точно поставил вопросAntifritz писал(а):Типа того, сохранять значение таймера во время первого прерывания и сравнивать с тем, что во время следующего. Не забываем учитывать переполнения таймера.yur4ik писал(а): а как получить значение таймера? использовать доп переменную?
Нельзя всё знать, достаточно понимать.
- yur4ik
- Вымогатель припоя
- Сообщения: 613
- Зарегистрирован: Сб окт 17, 2009 18:56:05
- Откуда: РФ, Башкортостан г.Сибай
- Контактная информация:
Re: Цифровой одометр на Atmega8
аааа я ща повешусь
, сделал так:
работает, но если подать частоту свыше 200Гц то врет на 25-40Гц но это скорее всего из-за того что не учитываю переполнение, но в таком виде начинает шалить режим захвата timer1, например подавая сигнал частотою 269 Гц он показывает 279 или 289 Гц
если все это выкинуть из EXT_INT0 и засунуть в основной бесконечный цикл
тогда вот захват timer1 работает нормально, а мой так скажем режим захвата показывает какую то белеберду что то типа 5499, 8888,20,1020 и т.п. подавая разную частоту на вход числа уже другие . ЧТО ЭТО МОЖЕТ БЫТЬ И КАК ЭТО РЕШИТЬ?
Код: Выделить всё
interrupt [EXT_INT0] void ext_int0_isr(void)
{
rp++;
if (rp==1){rp1=TCNT0;TCNT0=0;}
if (rp==2){rp2=TCNT0;TCNT0=0;}
if (rp==3){
rp3=rp1-rp2;
rps=1953/rp3;
rp=0;
}
}
если все это выкинуть из EXT_INT0 и засунуть в основной бесконечный цикл
Код: Выделить всё
interrupt [EXT_INT0] void ext_int0_isr(void)
{
rp++;
}
.........
#asm("sei")
while(1){
if (rp==1){rp1=TCNT0;TCNT0=0;}
if (rp==2){rp2=TCNT0;TCNT0=0;}
if (rp==3){
rp3=rp1-rp2;
rps=1953/rp3;
rp=0;
}
show_dig();
}
Код: Выделить всё
PORTB=0;
DDRB=0x2C; //Настраиваем порт для SPI
PORTC=0x01;
DDRC=0x00;
PORTC=0x00;
DDRC=0x00;
TCCR0=0x05;
TCNT0=0x00;
TCCR1A=0x00;
TCCR1B=0x02;
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
GICR|=0x40;
MCUCR=0x02;
GIFR=0x40;
TIMSK=0x25;
ACSR=0x80; //Отключаем компаратор
//Включаем SPI
//Биты будем отправлять LSB-MSB, т.е. от младших к старшим
SPCR=0x7C;
SPSR=0x00; Нельзя всё знать, достаточно понимать.
- yur4ik
- Вымогатель припоя
- Сообщения: 613
- Зарегистрирован: Сб окт 17, 2009 18:56:05
- Откуда: РФ, Башкортостан г.Сибай
- Контактная информация:
Re: Цифровой одометр на Atmega8
ааа вроде понял свой касяк зав попробую исправить 
Нельзя всё знать, достаточно понимать.
-
Le_Fleurs
- Встал на лапы
- Сообщения: 101
- Зарегистрирован: Ср май 09, 2012 23:32:22
- Откуда: Культурная столица
Re: Цифровой одометр на Atmega8
Ребята ну что как успехи запустить смогли? А схемку в lay не подкинете? И фото готового устройства?
Re: Цифровой одометр на Atmega8
А вот зацените-ка моё творение, делал сыну на велек: http://vk.com/album19027586_159160096Le_Fleurs писал(а):Ребята ну что как успехи запустить смогли? А схемку в lay не подкинете? И фото готового устройства?
Вышел из себя.
Пришел в себя.
Ушел в себя.
И решил больше сегодня никуда не ходить
Пришел в себя.
Ушел в себя.
И решил больше сегодня никуда не ходить
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: Цифровой одометр на Atmega8
Нифига себе бортовой компьютер, я вот тоже думал с дисплеем 16х2 сделать только сомневался, что большеват будет.
Тема так то вообще супер.Ухохотался над кодом.Как чувак код в протеусе гоняет, когда у него прерывание в майне оформлено.Как только вообще компиляция прошла?
Ржал над тем, что 1000 импульсов в секунду *60 это 1000оборотов в минуту для одноцилиндрового двигателя. Похоже еще и двухтактного
Тема так то вообще супер.Ухохотался над кодом.Как чувак код в протеусе гоняет, когда у него прерывание в майне оформлено.Как только вообще компиляция прошла?
Ржал над тем, что 1000 импульсов в секунду *60 это 1000оборотов в минуту для одноцилиндрового двигателя. Похоже еще и двухтактного
В поисках истины человек развивается.
- yur4ik
- Вымогатель припоя
- Сообщения: 613
- Зарегистрирован: Сб окт 17, 2009 18:56:05
- Откуда: РФ, Башкортостан г.Сибай
- Контактная информация:
Re: Цифровой одометр на Atmega8
ну посоветуй тогда как надоvitalik_1984 писал(а):Нифига себе бортовой компьютер, я вот тоже думал с дисплеем 16х2 сделать только сомневался, что большеват будет.
Тема так то вообще супер.Ухохотался над кодом.Как чувак код в протеусе гоняет, когда у него прерывание в майне оформлено.Как только вообще компиляция прошла?
Ржал над тем, что 1000 импульсов в секунду *60 это 1000оборотов в минуту для одноцилиндрового двигателя. Похоже еще и двухтактного
Нельзя всё знать, достаточно понимать.


