помогоите отладить таймер

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
vovik15
Опытный кот
Сообщения: 768
Зарегистрирован: Сб ноя 08, 2008 18:32:36
Контактная информация:

помогоите отладить таймер

Сообщение vovik15 »

здравствуйте! есть контроллер ATTINY861V
ну так вот, написал к нему программу,которая считает от 99 до 0,когда 0,снова 99 и так по кругу.
отлаживаю в протеусе,но что то сильно глючит индикация .
выкладываю код и во вложении полный проект протеуса, и CVAVR
спасибо за помощ!

Код: Выделить всё

#include <tiny861.h>
#include <delay.h>

// массив констант под индикаторы с общим анодом
const char arr_seg[]= {3,159,37,13,153,73,65,31,1,9};
char k1,k2; //под разряды
char count;

void rasclad (unsigned char tmp)
{
k1 = k2 =0;
while (tmp>=10) { k1++; tmp = tmp-10; }
k2 = tmp;
}

void main(void)
{
PORTA =0;  //чистим порт  а
DDRA  =255;//все линии на выход
PORTB =0;  //чистим порт  в
DDRB  =255;//все линии на выход
count = 99;//устан. начальное значение

while (1)
{
if(0 == count) count = 99; else count--;
rasclad (count); //разложить по сегментам
PORTB.2= 0; PORTA = arr_seg [k1];delay_ms(20); PORTB.2= 1;
PORTB.3= 0; PORTA = arr_seg [k2];delay_ms(20); PORTB.3= 1;
};
}
Вложения
project.rar
(22.51 КБ) 145 скачиваний
Реклама
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: помогоите отладить таймер

Сообщение pyzhman »

Смотрите, что у вас происходит в основном цикле: 20 мсек отображаем один индикатор, следующие 20 мсек другой. После этого берем следующее значение по rasclad (count) и опять выводим. Т.е. каждые 40 мсек значение меняется. Увидеть что либо ну просто невозможно, т.к. каждые 40 мсек значение count уменьшается на 1. Программа-то, конечно, считает и показывает, но нормальному человеку эта индикация ничего не дает.
Docendo discimus
Реклама
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

Re: помогоите отладить таймер

Сообщение ChipKiller »

тема помогоите отладить таймер - а где же здесь таймер ??? может

Код: Выделить всё

delay_ms(20)
???
PS. вставьте индикацию в прерывание таймера, иначе вся программа будет сплошной delay_ms
vovik15
Опытный кот
Сообщения: 768
Зарегистрирован: Сб ноя 08, 2008 18:32:36
Контактная информация:

Re: помогоите отладить таймер

Сообщение vovik15 »

дело в том ,что я скачал датащит на этот самый tiny861 но там кроме распиновки вообще ничего нет.
вы не подскажете где можно прочитать ? или как правильно индикацию с помощью таймера организовать?
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: помогоите отладить таймер

Сообщение pyzhman »

http://alldatasheet.com в строке поиска наберите ATtiny861.
Последний раз редактировалось pyzhman Ср май 04, 2011 17:56:53, всего редактировалось 1 раз.
Docendo discimus
Реклама
clawham
Поставщик валерьянки для Кота
Сообщения: 1957
Зарегистрирован: Пт окт 31, 2008 09:38:55
Откуда: Одесса
Контактная информация:

Re: помогоите отладить таймер

Сообщение clawham »

представляю какими были бы даташиты если б в них хранились все вещи которые можно на этом МК сделать :)))

http://tinyurl.com/6flh82l

помоему там более чем достаточно даже в первой же ссылке
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Реклама
vovik15
Опытный кот
Сообщения: 768
Зарегистрирован: Сб ноя 08, 2008 18:32:36
Контактная информация:

Re: помогоите отладить таймер

Сообщение vovik15 »

я знаю как работает динамическая индикация!!!
я немогу найти описание регистров и всего остального. датащит я качал на alldatashet в нем ничего непонятно
сами посмотрите
Вложения
ATTINY861V.rar
(242.12 КБ) 124 скачивания
DARKMAVR
Встал на лапы
Сообщения: 81
Зарегистрирован: Пт июл 09, 2010 17:44:34
Откуда: Татарстан, г. Казань

Re: помогоите отладить таймер

Сообщение DARKMAVR »

на седьмой странице описание регистров, на девятой и десятой их использование
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

Re: помогоите отладить таймер

Сообщение ChipKiller »

vovik15 писал(а):датащит я качал на alldatashet в нем ничего непонятно сами посмотрите
... а что Atmel "загнулся" ? http://www.atmel.com/dyn/resources/prod ... oc2588.pdf
murzila
Мучитель микросхем
Сообщения: 436
Зарегистрирован: Сб апр 10, 2010 16:46:26

Re: помогоите отладить таймер

Сообщение murzila »

vovik15 писал(а):датащит я качал на alldatashet в нем ничего непонятно сами посмотрите
Искать документацию, господин студент, нужно прежде всего у производителя чипа. Выбирайте: http://www.atmel.com/dyn/products/docum ... ily_id=791
vovik15
Опытный кот
Сообщения: 768
Зарегистрирован: Сб ноя 08, 2008 18:32:36
Контактная информация:

Re: помогоите отладить таймер

Сообщение vovik15 »

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

Код: Выделить всё

#include <tiny861.h>
#include <delay.h>

// массив констант под индикаторы с общим анодом
const char arr_seg[]= {3,159,37,13,153,73,65,31,1,9};
char k1,k2; //под разряды
char count;
void podgot (void);

// Прерывание переполнения таймера 0
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{ 
PORTB.0= 0;
PORTB.0= 1;
}

void rasclad (unsigned char tmp)
{
k1 = k2 =0;
while (tmp>=10) { k1++; tmp = tmp-10; }
k2 = tmp;
}

void main(void)
{
podgot();

while (1)
{
if(0 == count) count = 99; else count--;
rasclad (count); //разложить по сегментам
PORTB.2= 0; PORTA = arr_seg [k1];delay_ms(20); PORTB.2= 1;
PORTB.3= 0; PORTA = arr_seg [k2];delay_ms(20); PORTB.3= 1;
};
}

void podgot (void)
{
PORTA =0;  //чистим порт  а
DDRA  =255;//все линии на выход
PORTB =0;  //чистим порт  в
DDRB  =255;//все линии на выход
count = 99;//устан. начальное значение
//подготовка таймера 0
TIMSK=(1<<TIFR);//разрешение прерывания при переполнении Timer0
TCCR0A = 0x00; //тут WGM00 установит режим работы Normal а TCW0 восьмибитный режим
TCCR0B=0;
TCNT0H=0x00; //обнуление счетных регистров
TCNT0L=0x00;  //обнуление счетных регистров
OCR0A=0x00;  //регистр срвпадения (*по нему можно прервание)
OCR0B=0x00;  //регистр срвпадения
#asm("sei"); //разрешаем прерывания глобально
}

clawham
Поставщик валерьянки для Кота
Сообщения: 1957
Зарегистрирован: Пт окт 31, 2008 09:38:55
Откуда: Одесса
Контактная информация:

Re: помогоите отладить таймер

Сообщение clawham »

TCCR0A = 0x00 - означает нет тактированию таймеру
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
vovik15
Опытный кот
Сообщения: 768
Зарегистрирован: Сб ноя 08, 2008 18:32:36
Контактная информация:

Re: помогоите отладить таймер

Сообщение vovik15 »

а как сделать тактирование от внутреннего генератора?
clawham
Поставщик валерьянки для Кота
Сообщения: 1957
Зарегистрирован: Пт окт 31, 2008 09:38:55
Откуда: Одесса
Контактная информация:

Re: помогоите отладить таймер

Сообщение clawham »

TCCR0B=0x01; это прямое тактование частотой системы
TCCR0B=0x02; это делить на 8 системную частоту

...

в даташите http://www.atmel.com/dyn/resources/prod ... oc2588.pdf на странице 85 всё прекрасно расписано
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
vovik15
Опытный кот
Сообщения: 768
Зарегистрирован: Сб ноя 08, 2008 18:32:36
Контактная информация:

Re: помогоите отладить таймер

Сообщение vovik15 »

перешел на tiny2313 ,так как по нему информации больше
настроил таймер вот так
//настройка таймера 0
TCNT0=1; //счетный регистр
OCR0A=0x00; //регистры сравнения
OCR0B=0x00;//регистры сравнения
TCCR0A = 0x00;
TCCR0B=0x01;// это прямое тактование частотой системы
//TCCR0B=0x02; это делить на 8 системную частоту
#asm("sei"); //разрешаем прерывания глобально
нет прерываний от него
кстати почемуто codevisoon ругаеться на запись такого вида
TCCR0 = (1<<CS02)|(0<<CS01)|(1<<CS00);
clawham
Поставщик валерьянки для Кота
Сообщения: 1957
Зарегистрирован: Пт окт 31, 2008 09:38:55
Откуда: Одесса
Контактная информация:

Re: помогоите отладить таймер

Сообщение clawham »

помоему информации по данным МК просто завались и ровно столько сколько нужно а главное - ровно одинаково - ДАТАШИТ! там есть ВСЁ....а в КОдВижне ещё и Визард...там вообще всё проще некуда :)

но...дело за Вами...

ругаться может по двум причинам - 1) работа с 16 битными переменными принуждает использовать ИНТЫ (явно обозначенные) для задачи 1 со сдвигом ...по умолчанию работает оно с половинками этого регистра А и Б...

второе...он может просто не знать этих макросов...чтоб из даташита макросы работали гдето на авр123 был хидер и там было расписано всё по даташитным макросам...я ими никогда не пользовался..всегда юзаю или визард или сразу битмаску в виде 0b11011011 пишу... мне так проще понятней и наглядней...
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
vovik15
Опытный кот
Сообщения: 768
Зарегистрирован: Сб ноя 08, 2008 18:32:36
Контактная информация:

Re: помогоите отладить таймер

Сообщение vovik15 »

любите вы начинающих пинать :cry:
ну покажите мне где написано как можно использовать прерывание от tmr0 ? где описание его регистров на русском языке? я весь нет перевернул. есть примеры исмпользования ,но они не компилируються.
а мне всего лиш нада настроить прервание по переполнению таймера с внутренним тактированием без предделителя.
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: помогоите отладить таймер

Сообщение pyzhman »

Ручками, батенька, ручками и головой! Терпение и труд все перетрут. Никто не пинает, легкие шлепки в нужном направлении - это да.
Остается поражаться нервной системе clawham'а. Без криков, мата... :beer:
Docendo discimus
vovik15
Опытный кот
Сообщения: 768
Зарегистрирован: Сб ноя 08, 2008 18:32:36
Контактная информация:

Re: помогоите отладить таймер

Сообщение vovik15 »

вот когда я выросту,стану большим и сильным я тоже всех посытать буду... в нужном направлении :)))
clawham
Поставщик валерьянки для Кота
Сообщения: 1957
Зарегистрирован: Пт окт 31, 2008 09:38:55
Откуда: Одесса
Контактная информация:

Re: помогоите отладить таймер

Сообщение clawham »

блин ну ЧТО НЕ ПОНЯТНОГО?????

я когда первый раз взял мегу 8 чтоб выдавить из неё ШИМ 4 канала и 6 программных каналов я вообще ничего не знал в МК и не держал их раньше в руках и разобрался в течение 5 минут...при этом английский знаю только на уровне читать даташыты :) не говорю и не слушаю фильмы без перевода....

Вот к примеру Ваша задача!
Надо такт на внутреннюю частоту проца и прерывание по переполнению(оно будет вызываться каждые 256 тактов процессора!!!! тоесть там обработчик должен быть вообще мизерным!!!!

смотрим в даташыте
страница 73
TCCR0A - он нам весь не нужен там задаются режимы PWM и режимы выходных ножек..нам это всё не надо....
второй регистр
TCCR0B страница 76...
что мы там видим в расписании битов?
Bit 7 – FOC0A: Force Output Compare A нам не надо....мы не юзаем выхода
Bit 6 – FOC0B: Force Output Compare B аналогично
Bits 5:4 – Res: Reserved Bits - зарезервированны тоесть тоже нули
Bit 3 – WGM02: Waveform Generation Mode - аналогично нули ибо не делаем мы никаких вейвформ
Bits 2:0 – CS02:0: Clock Select - О!....выбор клока..тоесть частоты...то шо нада .... далее идёт ТАБЛИЧКО....страница 77 Table 41. Clock Select Bit Description
и О ЧУДО...мы видим там какие биты записать и что получим в тактовании
нам надо прямой клок системы - No prescaling - Оппа...а там уже ЕСТЬ это - 0 0 1 clkI/O/(No prescaling)
итого подитожив что получаем?
TCCR0A = 0x00
TCCR0B = 0x01

ВСЁ....таймер ПОШЕЛ на макс частоте(хотя это уже ошибка но ладно...)
теперь прерывания...
ищем регистр настройки прерываний(timer interrupt)
ОПпа...страница 78
Timer/Counter
Interrupt Mask
Register – TIMSK
и расписание БИТОВ!
сереньким закрашены биты не относящиеся к таймеру ноль
Bit 2 – OCIE0B: Timer/Counter0 Output Compare Match B Interrupt Enable - ноль ибо не сравниваем мы ничего
Bit 0 – OCIE0A: Timer/Counter0 Output Compare Match A Interrupt Enable аналогично ноль
Bit 1 – TOIE0: Timer/Counter0 Overflow Interrupt Enable - !!!! О!!! переполнение тимера 0...разве не то чо надо?
записываем битмаску для нашего таймера
0b00000010 ///
если у нас больше нет таймеров и их прерываний то просто эту маску запихиваем в TIMSK....
если есть...то нужно делать ИЛИ чтоб установить новые флажки разрешенных прерываний и не похерить старые...
TIMSK=TIMSK|0b00000010;
ВСЁ!
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»