Перейти к содержанию

Помогите Найти Ошибку В Прошивке


svip

Рекомендуемые сообщения

контроллер atmega8 кварц - 4 Мгц на PORTB.3 подключен светодиод

нужно чтобы он горел 5 секунд (и не горел 5 секунд)

у меня получается горит и не горит 30 секунд.

нужно чтобы

interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{ 
TCNT1H = 0xF3; 
TCNT1L = 0xCA; 

.....................

if (k==(101))  
{   
PORTB.3=~PORTB.3;  
......................................
k=0;
}else k++;   

}

...........
TCCR1A=0x00;
TCCR1B=0b00000011; /делим на 64

TCNT1H = 0xF3; 
TCNT1L = 0xCA; 

......................
TIMSK=0b00000100;

.....................
#asm("sei")

Помогите найти ошибку, я думаю что проблема в расчете сравнения таймера. Если да то подскажите как правильно расчитать.

нужно получить свечение светодиода 5 секунд, 8 секунд, 12 секунд и 20 секунд.

Очень надеюсь на Вашу помощь. Уде третий день ничего не могу сделать.

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

щас некогда вникать .. но видимо либо в настройке таймера ошибка в 6 раз либо делитель тактовой во фьюзах стоит

«Как сердцу выразить себя? … Мысль изреченная есть ложь!»

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

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

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

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

двотчный код записывается 0b101.

Это я примерно поделил, получилось 17

только зачем для записи используете скобки, по моему правильно так if (k == 17) {}

для 8: if (k == 25) {}

для 12: if (k == 40) {}

для 20: if (k == 65) {}

Если нужна точно, то надо знать частоту таймера

Изменено пользователем DJ Димон

Удовольствие критиковать мешает наслаждаться прекрасным. (це) Ж. Ла6рюйер

Ссылка на комментарий
Поделиться на другие сайты

Как я понял DJ Димон просто разделил авторские 101 на 6.

А хотелось бы увидеть всю цепочку вычислений. Например у меня тоже получается как и у автора около 100. Косяк где-то имеется однако..

Считаю так:

Период основной тактовой (4МГц)=0.25мкс

Умножаем на делитель таймера 64*0.25мкс=16мкс

Умножаем на число тактов таймера до переполнения 16мкс*(65536-62410(0xF3CA))=16*3126=50016мкс

Это получился период прерывания таймера.

Делим нужные 5000000мкс на 50016, получаем 100

Ссылка на комментарий
Поделиться на другие сайты

незнаю как для atmega8, но например для МК PIC один машинный такт = 4 тактам кварца. Тогда, если у нас стоит кварц на 4 МГц, длительность одного машинного такта вычисляется: 1/(4МГц/4такт ) = 1 * 10-6 сек = 1 мкс.

посмотрите в даташите чему равен один такт мк.

Удовольствие критиковать мешает наслаждаться прекрасным. (це) Ж. Ла6рюйер

Ссылка на комментарий
Поделиться на другие сайты

Речь идёт вроде об АВР-ках, а не о ПИКах. Естественно, даташит я смотрел ^_^

Это во-первых. И что-то мне подсказывает, что даже на ПИКах тактовая для периферии берется от основного генератора и машинный такт тут не причём (возможно, ошибаюсь - в ПИКах не силён)

Изменено пользователем YurkaM
Ссылка на комментарий
Поделиться на другие сайты

я пик для примера привёл, потому как не знаю чему равен машинный такт для авр, т.к. в своих расчётах вы это не посчитали. Получается если у вас получилось 100 разделите на 4(в моём случае для пик) и итог 25. Возможно я неправ т.к. с авр'ками неработал.

И что-то мне подсказывает, что даже на ПИКах тактовая для периферии берется от основного генератора

нифига не так. я и говорю что в авр возможно также вычисляется.

Изменено пользователем DJ Димон

Удовольствие критиковать мешает наслаждаться прекрасным. (це) Ж. Ла6рюйер

Ссылка на комментарий
Поделиться на другие сайты

Да вообще if (k==(101)) - это так и должно быть. просто у меня 101 элемент массива синусоиды и таким образом при совпадении таймера выдается одно значение. Получается что при if (k==(101)) прошли все значения. то есть получили период синуса. так вот он и должен быть равен 5 секундам.

YurkaM - считал точно также как и вы, но почему то не получилось

вот мои расчеты

Тактовая частота нашего контроллера (частота кварца): 4 МГц. Его период: 1/4000000 = 250 нс.

Максимальное значение таймера: 2^16 = 65535

250 нС * 65536 = 16,38 мс (маловато будет)

А если делить частоту кварца на 64 то получим 16,38мс*64=1,048с - то что надо. -> TCCR1B = 0b00000011 (TCCR1B=0x03)

период 250 нс * 64 = 16 мкс.

0,2 герца /16=12500имп 65535имп-12500имп=53035имп=CF2B TCNT1H = 0xCF TCNT1L = 0x2B

0,125 герца /16=7812имп 65535имп-7812имп=57723имп=E17B TCNT1H = 0xE1 TCNT1L = 0x7B

0,083 герца /16=5187имп 65535имп-5187имп=60348имп=EBBC TCNT1H = 0xEB TCNT1L = 0xBC

0,05 герца /16=3125имп 65535имп-3125имп=62410имп=F3CA TCNT1H = 0xF3 TCNT1L = 0xCA

Изменено пользователем svip
Ссылка на комментарий
Поделиться на другие сайты

нифига не так. я и говорю что в авр возможно также вычисляется.

Щас глянул в даташит на ПИК - действительно, там приращение на каждом МАШИННОМ такте...

НО в АВР-ках тактовая для таймера равна такту кварца, это точно.

svip, с теорией, похоже всё правильно. Косяк наверное или в конкретном тексте (в Си я не силен, поэтому проверить не могу), или ещё где-то...

Кстати, у тебя случаем не от внутреннего RC генератора оно работает? А то там походу 1МГц всего....

Ссылка на комментарий
Поделиться на другие сайты

да нет, кварц стоит.

дело в том что сначало делел на нулевом таймере 8-битном путем просто деления типа if (i==61) и тд, -было нормально для всех четырех частот, вот правда точность страдала. Поэтому решил перейти на первый таймер он то вндь 16 битный. и вот ничего понять не могу. по расчетам все правильно, а в реале - ерунда

Изменено пользователем svip
Ссылка на комментарий
Поделиться на другие сайты

да нет, кварц стоит.

То, что он стоит ещё не значит, что от него генератор работает.

С 16-разрядными таймерами есть тонкость, во все их 2-х байтные регистры надо писать сначала старший байт, а потом младший. Может где-то не учел?...

Ссылка на комментарий
Поделиться на другие сайты

Ага проблема то была именно в кварце. он хоть и стоял. но но фьюзах был прописан внутренний RC генератор на 1 MHz я переставил птичку на "внешний кварцевы"

Ага проблема то была именно в кварце. он хоть и стоял. но но фьюзах был прописан внутренний RC генератор на 1 MHz я переставил птичку на "внешний кварцевый резонатом + 64ms" там много внешних кварцевых резонаторов. Вот не знал какой выбрать и выбрал +64. После прошивки все стало работать правильно, хато теперь контроллер отказывается прошиваться и читаться программатором. пишет что частота SPI должна быть 1/4 от частоты кварца ну или что-то похожее. перепробовал все варианты - ничего не помогло. Другие фьюзы не трогал. В чем проблема??? как теперь перешить контроллер????

Ссылка на комментарий
Поделиться на другие сайты

В данном случае, наверное проще подать внешний клок с любого генератора (с уровнем TTL на выходе) на вход XTAL1. У меня Пони работал при частоте генератора около 1МГц. (Болше просто генератор не выдавал)

Ссылка на комментарий
Поделиться на другие сайты

...После прошивки все стало работать правильно, хато теперь контроллер отказывается прошиваться и читаться программатором...

Программатор какой? У меня Uniprog шьет Мегу16 с кварцем 16 МГц...

Любой, заслуживающий внимания, опыт приобретается себе в убыток...

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...