CodeVision AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
ValBag
Потрогал лапой паяльник
Сообщения: 326
Зарегистрирован: Сб сен 06, 2008 12:56:13

Re: CodeVision AVR в вопросах и ответах

Сообщение ValBag »

neon-f писал(а):Вот эти регистры (как я понял) отвечают за конфигурацию работы таймера-счетчика Т1
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
И
TIMSK=0x80;
CodeVision почему то оставил их равными нулю, кроме TIMSK.
кто может восполнить пробелы моих знаний, или указать где это подробно разжевано для новичков.
обязательное условие - на русском
В вышеприведенном посте, вектор и разрешение прерывания верны для выбранного режима таймера 1. Если используете компилятор CodeVision без инструмента CodeVizardAVR, то необходимо самому четко представлять структуру МК. Книга: "А. В. Евстифеев. Микроконтроллеры AVR семейтва Tiny. Руководство пользователя, 2007 г." Если не найдете по поиску, могу скинуть.
В вышеперечисленных регистрах, можно все оставить как есть, кроме TCCR1B. Там, в разрядах 0, 1, 2, выбирается коэффициент деления тактового сигнала. У вас, если нули, то таймер 1 остановлен. При
TCCR1B=0x01; // коэффициент 1
TCCR1B=0x02; // коэффициент 8
TCCR1B=0x03; // коэффициент 64
TCCR1B=0x04; // коэффициент 256
TCCR1B=0x05; // коэффициент 1024
Реклама
neon-f
Потрогал лапой паяльник
Сообщения: 392
Зарегистрирован: Сб дек 12, 2009 02:15:45

Re: CodeVision AVR в вопросах и ответах

Сообщение neon-f »

громадное всем спасибо. немного разобрался с таймерами, и даже поупражнялся на эту тему.
Вот посмотрите (и покритикуйте) как я получил секундные импульсы.
Системная частота 8мгц. подаю эту частоту на таймер счетчик Т0. таймер настроен на прерывание по переполнению. 8.000.000\256=31150 раз за секунду наступит прерывание. Дальше все элементарно, считаю эти прерывания, и как только их набегает 31150, к значению секунд добавляю единицу.
Вот как это выглядит у меня в коде
#include <tiny2313.h>
unsigned int tic=0;
unsigned char sec=0;

interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{tic++;}

void main(void)
{
PORTB=0x00; DDRB=0xff;
TCCR0A=0x00; TCCR0B=0x01;
TIMSK=0x02;
#asm("sei")

while (1)
{ if (tic==31150) {tic=0; sec++;} }

Ваши соображения друзья......
Реклама
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18561
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение ARV »

соображения очень просты: стоит ли делать 30 тысяч раз в секунду прерывания?! ведь для счета секунд наверняка можно настроить таймер так, чтобы он переполнялся (или иначе "срабатывал"), скажем, всего 100 раз в секунду... нерационально тратить столько ресурсов на столь мизерную задачу...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
neon-f
Потрогал лапой паяльник
Сообщения: 392
Зарегистрирован: Сб дек 12, 2009 02:15:45

Re: CodeVision AVR в вопросах и ответах

Сообщение neon-f »

Совершенно с вами согласен. Я и сам вижу такой недостаток - слишком частые прерывания, и следовательно большая трата мощности контроллера на подсчет времени. Напрашивается деление частоты перед подачей на таймер счетчик, но поделить без погрешности можно только на 2 (получиться 15575 тиков в секунду). На большее число не поделишь, потому что результат получается дробный и за секунду будет не целое число тиков, следовательно появиться погрешность.
Видел еще один интересный способ отсчета времени. там микроконтроллер тактировался от внутреннего RC генератора, а таймер\счетчик от своего генератора с часовым кварцем на 32768 (подключается на место штатного). Если использовать таймер Т1(считает до 65536), то получаем одно прерывание на 2 секунды. Красота, контроллер практически не тратит ресурсы на отсчет времени.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18561
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение ARV »

ну давайте считать вместе.
итак, рабочая частота Мк равна 8000000 гц. из числа вариантов предделителя для таймера она нацело делится на 256 - получается тактовая частота для таймера 31250 Гц. так как таймер вы выбрали 16-битный, то его максимальный коэффициент счета (читай - делитель) равен 65536 - таким образом элементарно получить 1 прерывание в секунду: надо лишь заставить таймер прерываться и обнуляться при достижении в счетчике значения 31250. прерывание с обнулением - это режим СТС.

так, пардон: прочел еще раз ваш пост и понял, что вы выбрали 8-битный таймер. но и в этомт случае вы можете поделить таймером на 250 - будет всего 125 прерываний в секунду. Согласитесь, это гораздо менее нагружает МК :)

вопросы есть?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Реклама
neon-f
Потрогал лапой паяльник
Сообщения: 392
Зарегистрирован: Сб дек 12, 2009 02:15:45

Re: CodeVision AVR в вопросах и ответах

Сообщение neon-f »

Это понятно, но я хочу использовать только прерывание по переполнению. Ведь если использовать прерывание по совпадению, то после каждого прерывания нам нужно обнулять счетчик таймера, и вот пока мы его обнуляем- время идет а мы его не считаем. Отсюда погрешность.
Или я не прав и таймер можно как то обнулять в реальном времени :dont_know: ??? пойду почитаю про режим СТС.
Реклама
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18561
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение ARV »

neon-f писал(а):пойду почитаю про режим СТС.
и это правильный ответ! призх в студию! :beer:
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Alexeus
Вымогатель припоя
Сообщения: 690
Зарегистрирован: Вс мар 04, 2007 01:17:12

Re: CodeVision AVR в вопросах и ответах

Сообщение Alexeus »

neon-f писал(а):Это понятно, но я хочу использовать только прерывание по переполнению. Ведь если использовать прерывание по совпадению, то после каждого прерывания нам нужно обнулять счетчик таймера,
в режиме СТС таймер сам обнуляется по достижению совпадения со значением в регистре сравнения, и снова сразу начинает счет до значения регистра сравнения.
neon-f
Потрогал лапой паяльник
Сообщения: 392
Зарегистрирован: Сб дек 12, 2009 02:15:45

Re: CodeVision AVR в вопросах и ответах

Сообщение neon-f »

Какие же молодцы Боген и Воллен! 15 лет назад они уже знали что мне понадобится сегодня :)) это я про режим СТС.
посмотрите пожалуйста, правильно ли настроен таймер Т1 на прерывание по совпадению с А=31250, с обнулением таймера(СТС).
вроде все правильно, но прерывания наступают примерно раз в 2,5 секунды, а нужно раз в секунду. частота генератора 8 Мгц. Тестировал в протеусе, так что может и он виноват, а может и код.

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 31,250 kHz
// Mode: CTC top=OCR1A
// OC1A output: Clear
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: On
// Compare B Match Interrupt: Off
TCCR1A=0x80;
TCCR1B=0x04;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x7A;
OCR1AL=0x12;
OCR1BH=0x00;
OCR1BL=0x00;
TIMSK=0x40;

Прикрепляю весь проект. (для наглядности одна минута=одной секунде.)
Вложения
Static_cloc.rar
(65.41 КБ) 372 скачивания
Mr.Denis
Прорезались зубы
Сообщения: 220
Зарегистрирован: Пт авг 07, 2009 22:06:49
Откуда: Россия, Москва

Re: CodeVision AVR в вопросах и ответах

Сообщение Mr.Denis »

Всем привет! Народ помогите пожалуйста, не как не могу отправить одну команду в ком порт. Посмотрите пожалуйста и по возможности посоветуйте.
Изображение

Готов оказать не большую финансовую помощь за разъяснения!!!
STM32F4 Discovery + KEIL + Windows 7
Mr.Denis
Прорезались зубы
Сообщения: 220
Зарегистрирован: Пт авг 07, 2009 22:06:49
Откуда: Россия, Москва

Re: CodeVision AVR в вопросах и ответах

Сообщение Mr.Denis »

Неужели не кто не знает?! Помогите пожалуйста очень надо!
STM32F4 Discovery + KEIL + Windows 7
Аватара пользователя
nsl2004
Мучитель микросхем
Сообщения: 402
Зарегистрирован: Пт май 29, 2009 10:14:29

Re: CodeVision AVR в вопросах и ответах

Сообщение nsl2004 »

Подскажите пожалуйста. Есть такая проблема.
Считываю состояние PIO датчика DS2413(это ключ 1-wire). Моделирую в Протеусе. Получаю значения состояний ключа. Обновление идет каждые 2000 mc в бесконечном цикле. Так вот, когда Протеус запускаешь (т.е начальный запуск), то состояние считывается правильно, но если начинаешь менять состояние контактов в процессе работы , то ничего не меняется. Значение остается таким как при первом считвании. Я подумал, что не сбрасывается DS2413 - командой reset. Все сделал, проверил работоспособность, но ничего не получилось. Устройство на ресет отвечает , но значение в терминале Протеусе не меняется. Т.е я не могу обнулить переменную куда считывается значение ключа.
На мой взгляд причины три. 1.Косяк в моем коде.
2.Глючит Протеус ( хотя с DS2405 работает и все в порядке) да и если устройство отключить то Протеус реагирует, после восстановления связи выдает старое значение ключа. Т.е изменений нет только именно в состоянии PIO
3.Глючит CVAVR 2.04.4a ( тоже врядли но всеже)
Прикладываю кусок кода. Прошу помощи в плане нахождения ошибок в коде. Да ow_reset это функция сброса. Проверенная . Работает корректно. Так же как и записи чтени. Проверены и работают.

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

while (1)
    { 
        {
            //-------- Проверка наличия устройств на линии -----/
            printf("\n\r");
            printf("Proverka komandi ow_reset() \n\r"); 
            delay_ms(500);
            ow_reset();
            if (ow_reset()==0)
            printf("Device YES"); else printf("NONE Device");
            printf("\n\r"); 
            delay_ms(2000); 

        };
        {
            //-------- Считывание состояния PIO 
            unsigned char a1,a2,a3;
            a1=0;
            a2=0;
            a3=0;
            printf("\n\r");
            ow_reset();
            delay_ms(50);
            write_byte(0xCC);
            write_byte(0xF5);
            delay_ms(50);
            a1=read_byte();
            a2=read_byte();
            a3=read_byte();
            printf("\nReading STATUS 0xF5\n = %X%X%X\n",a1,a2,a3); 
            printf("\n\r");
            delay_ms(500);
            //ow_reset();
        }
    }
demiurg301
Опытный кот
Сообщения: 812
Зарегистрирован: Ср мар 18, 2009 21:14:33

Re: CodeVision AVR в вопросах и ответах

Сообщение demiurg301 »

подскажите пжлст можно ли написать для At89s52 и прошить в CVAVR ? у меня 1.25.5 в нём нет этого МК(всё же 51 семейство)
Аватара пользователя
sema
Мудрый кот
Сообщения: 1708
Зарегистрирован: Ср апр 23, 2008 17:44:56
Откуда: Россия, г. Нижний Новгород
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение sema »

возможно Вы будете удивлены но - в хелпе есть исчерпывающая информация по поддерживаемым контроллерам
абажаю мой KIA CEED [img]http://www.kolobok.us/smiles/madhouse/to_become_senile.gif[/img]
Пресекать нарушения закона мой долг и обязанность как гражданина моей страны
Аватара пользователя
boobonick
Встал на лапы
Сообщения: 123
Зарегистрирован: Сб ноя 18, 2006 17:14:15

Re: CodeVision AVR в вопросах и ответах

Сообщение boobonick »

Подскажите, пожалуйста, что я не так делаю, не получается включить диод:

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

void main(void) { 

char cmd_buff[20];

..

putsf("AT+CMEC=2,0,0\r\n");   //Переход в режим AT команд    

memset(cmd_buff,0,20); //Очистили буфер

putsf("ATE0\r\n");    //выключение эхо

gets(cmd_buff,20); //Здесь cmd_buff хранит ответ от ATE0 ?

if (!strcmpf(cmd_buff,"OK")||!strcmpf(cmd_buff,"OK\r\n")){ 
PORTC.5=1;

}

}
Ildus
Открыл глаза
Сообщения: 46
Зарегистрирован: Вт дек 02, 2008 22:04:27
Откуда: Нижний Новгород

Re: CodeVision AVR в вопросах и ответах

Сообщение Ildus »

Попробовал перекомпилить в CVAVR 1.25.9 код, работающий без проблем в бесплатной CVAVR 2.4.6.0.
Получил ошибку в stdio.lib на sprinf:

Error in library: d:\avr\lib\stdio.lib
Line: 1304, function doesn't match previous declaration.

В stdio.h функция описана. В чем может быть проблема?
beloff
Грызет канифоль
Сообщения: 278
Зарегистрирован: Чт мар 13, 2008 08:18:00
Откуда: Новосибирск, Шлюзы
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение beloff »

Codevision AVR v2.03.4
имеется программатор Громова, с помощью которого надо Мегу8 прошить
в настройках программатора какой тип выбрать?
Если выбираю STK500 - ругается, что не находит
Если AVR910 - Error ... ID
???
Я теперь [b][url=http://radiokot.ru/forum/memberlist.php?mode=viewprofile&u=23627]Rinon Ninqueon[/url][/b]
Аватара пользователя
Alexeus
Вымогатель припоя
Сообщения: 690
Зарегистрирован: Вс мар 04, 2007 01:17:12

Re: CodeVision AVR в вопросах и ответах

Сообщение Alexeus »

смотри личку
(не знаю можно ли сюда кидать ссылки на другие сайты...)
Аватара пользователя
>TEHb<
Друг Кота
Сообщения: 5742
Зарегистрирован: Ср ноя 11, 2009 17:19:30
Откуда: Воронеж
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение >TEHb< »

Поставил новый CVAVR 2.04.4a, отказывается признавать тини25. Мега16 видит нормально, а у той сигнатуру читает как 00 00 01. На другом компе 5-ю проводками отлично читается. Сначала стоял внутренний генератор, потом кварц на 16. Так вот, 2.04.4а нормально работает с 910-совместимыми программаторами (схема с сайта на FT232+tiny2313), с прошлой версией всё было нормально. Программатор и МК питается напрямую от USB, конденсаторы везде есть.

Извиняюсь, дело в программаторе. Просто раньше не приходилось иметь дело с тини25/45/85.
"Привет!" - соврал он.
clawham
Поставщик валерьянки для Кота
Сообщения: 1957
Зарегистрирован: Пт окт 31, 2008 09:38:55
Откуда: Одесса
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение clawham »

Здравствуйте уважаемые товарищи/знатоки кодвижна :)
Ктонить пользовался новой библиотечкой sd/fat ?
сколько она кушает ресурсов? сикока нада оперативы для буфферов? какую скорость выдаёть на 16 мегагерцах?
зачем нужно дергать 100 раз в секунду диск? где вообще кроме примеров на меге 128 можно это применять? в мегу 8 я так подозреваю все эти структуры и указатели в стеке не влезут? хочу заделать логгер температуры по датам/даччикам в файлы и папки :) эт реально для 8-й меги?
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Ответить

Вернуться в «AVR»