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

Обсуждаем контроллеры компании Atmel.
Ответить
Открыл глаза
Аватара пользователя
Сообщения: 41
Зарегистрирован: Чт окт 23, 2014 04:12:56

Сообщение Wolf_X »

Запустил так:
// Clock value: 4000,000 kHz
// Mode: Fast PWM top=0x00FF
// OC1A output: Non-Inverted PWM
TCCR1A=(1<<COM1A1) | (0<<COM1A0) | (1<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (1<<WGM10);
TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (1<<WGM12) | (0<<CS12) | (0<<CS11) | (1<<CS10);

В протеусе заработало, скважность импульсов меняется.
Немного непонятны регистры
OCR1AH=0x00;
OCR1AL=0x00;- Это начальная скважность? И если у меня начинает загораться с 0, мне настраивать их не нужно?

Да счетчик вставлю в таймер индикации, спасибо за совет
Реклама
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

"H" и "L" - это старший и младший байт регистра.
Контактная информация:
Реклама
Открыл глаза
Аватара пользователя
Сообщения: 41
Зарегистрирован: Чт окт 23, 2014 04:12:56

Сообщение Wolf_X »

Спасибо за помощь!!! Сам бы долго мучался с реализацией ШИМ
Открыл глаза
Аватара пользователя
Сообщения: 41
Зарегистрирован: Чт окт 23, 2014 04:12:56

Сообщение Wolf_X »

Появилась еще одна проблема, скорее всего в железе, так что извините за оффтоп. При программной яркости 0, не гаснет полностью светодиод. После выхода с мк стоит ключ на кт815, (резистор смещения 300 Ом) со светодиодами включенными в коллектор и отдельным питанием 12 вольт(земля общая с питанием мк). На выходе 1 вольт, светят слабо но все равно напрягает. Частота ШИМ 2 кГц. Программная максимальная яркость соответствует 100%. Подскажите пожалуйста в чем проблема?
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 3059
Зарегистрирован: Пн май 11, 2009 14:15:00
Откуда: СПб

Сообщение *Trigger* »

Проблемы нет. Про это сказано в даташите. При коде 0 в OCR на выходе будут иголки.
If the OCR1x is set equal to BOTTOM (0x0000) the output will be a narrow spike for each TOP+1 timer clock cycle.
Поэтому вместо записи 0 в OCR нужно выключать ШИМ и устанавливать соответствующий вывод в 0 вручную.
То же самое и при 255 в OCR.
Другое решение - режим Phase Correct PWM.
Этот пост оказался полезен? Не поленись, нажми Изображение слева!
:) :)) :)))
Куплю индикаторы ИТС-1А, ИТС-1Б, ИГВ1-8х5Л, ИГПС1-222/7, ИГПС1-111/7 и подобные.
Реклама
Открыл глаза
Аватара пользователя
Сообщения: 41
Зарегистрирован: Чт окт 23, 2014 04:12:56

Сообщение Wolf_X »

Спасибо попробую Phase Correct PWM.
Реклама
Открыл глаза
Аватара пользователя
Сообщения: 41
Зарегистрирован: Чт окт 23, 2014 04:12:56

Сообщение Wolf_X »

Если не сложно ответить появилось еще несколько вопросов:
Учусь на готовых программах, и непонятно вот что:
1. До скольких считать OCR1 на 8 битном ШИМ. В других программах максимум равен 254, но по идее должно же быть 255

2. Как правильно опрашивать DS1307 и DS18b20. Нужен цикл или нет
for (i=0; i<255; i++) { temperature=ds18b20_temperature(&rom_code[0][0]); }
for (i=0; i<255; i++) { rtc_get_time(&hour,&min,&sec); }

3. В какой системе действовать с данными из DS1307.
У меня в программе так вывод на семисегментник
digit_out[0] = hour / 10;
digit_out[1] = hour % 10;
digit_out[2] = min / 10;
digit_out[3] = min % 10;

А это из другой программы тут двоично десятичные числа
digit_out[0] = myhour >> 4;
digit_out[1] = myhour & 0x0F;
digit_out[2] = mymin >> 4;
digit_out[3] = mymin & 0x0F;

Все операции установки времени провожу как с десятичными числами. Но ведь из DS1307 передаются двоично-десятичные числа?
Иногда глючат часы показывая невесть что и сбрасываясь в 0, но это наверное помехи так как провод от блока питания сильно длинный или нет?

Заранее спасибо!
Открыл глаза
Аватара пользователя
Сообщения: 41
Зарегистрирован: Чт окт 23, 2014 04:12:56

Сообщение Wolf_X »

Более менее разобрался.
1.Эквивалентное напряжение выше при 255. Проверял для Phase Correct PWM, не знаю имеетэто значение или нет. В примерах было 254 для Fast PWM.

2. Для DS18b20 нужен не цикл а запрет прерываний, она не терпит задержек, но у меня динамическая индикация запрещать прерывания не могу, но пока не было сбоев. DS1307 допускает паузы в опросе, значит не имеет разницы как ее опрашивать.

3. Предпочтительней работа с двоично десятичными числами, так как нет конвертации перед получением минут часов, только надо изменять и библиотеку для DS1307 и конвертировать установки времени.

Поправьте меня если что не так.
AVK
Потрогал лапой паяльник
Сообщения: 349
Зарегистрирован: Сб окт 20, 2007 14:12:03

Сообщение AVK »

есть 16ти разрядная переменная, ее надо сохранять в ds1307 и соответственно при включении контроллера читать из нее, чет не очень я представляю как это сделать. Ну всмысле как читать, писать в дску понятно, как склеивать два байта непонятно.
Друг Кота
Аватара пользователя
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск

Сообщение WiseLord »

Ну как-то так (храним по адресам 0x08 и 0x09):

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

void save_to_ds1307(uint8_t byte, uint8_t addr);
uint8_t get_from_ds1307(uint8_t addr);

uint16_t var;

/* Saving */
save_to_ds1307(var >> 8, 0x08);
save_to_ds1307(var & 0xFF, 0x09);

/* Restoring */
var = get_from_ds1307(0x08) << 8;
var |= get_from_ds1307(0x09);
Последний раз редактировалось WiseLord Вт мар 10, 2015 06:18:06, всего редактировалось 1 раз.
Контактная информация:
AVK
Потрогал лапой паяльник
Сообщения: 349
Зарегистрирован: Сб окт 20, 2007 14:12:03

Сообщение AVK »

Спасибо, отлично работает!
Грызет канифоль
Сообщения: 261
Зарегистрирован: Ср авг 01, 2012 10:45:42

Сообщение kk042fjv »

Добрый день!
Подскажите как правильно пользоваться операцией if else?
написал я код

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

V =data*0.0048828;
  
      if (V>2.5)
      {
       TCCR2=0x6D;
      }
      else
      {
       TCCR2=0x6E;
      }
На АЦП поступает напряжение, когда U до 2.5В ШИМ работает с частотой 0x6E, когда U становится больше 2.5В ШИМ=0x6D.
Все работает, теперь хочу добавить еще когда U>3.7В ШИМ=0x6D, когда U>4.2В ШИМ=0x6С.
Если описать короче:
U<2.5В ШИМ=0x6E
U>2.5В ШИМ=0x6D
U>3.7В ШИМ=0x6E
U>4.2В ШИМ=0x6C
Подскажите как правильно сделать?
Последний раз редактировалось kk042fjv Ср мар 11, 2015 09:45:55, всего редактировалось 1 раз.
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

Подскажите как правильно пользоваться операцией if else?
Какой кошмар. Не стыдно такие вопросы задавать, в то время, когда ответы на них ищутся за считанные секунды ? :facepalm:
http://yandex.ru/yandsearch?clid=9582&t ... 0%A1%D0%B8
Контактная информация:
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18682
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

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

if(условие_1){
   // обработка условия_1
} else if(условие_2){
   // обработка условия_2
} else if(условие_3){
   // обработка условия_3
} else if(условие_4){
   // обработка условия_4
} else if(условие_5){
   // обработка условия_5
}
так можно делать хоть 100500 раз

хотя, конечно, правильнее всего было бы определить зависимость ШИМ от АЦП соответствующей формулой, чтобы из значения АЦП сразу получать правильный ШИМ (если, конечно, дискретное изменение ШИМ не является важной целью).
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Первый раз сказал Мяу!
Аватара пользователя
Сообщения: 35
Зарегистрирован: Сб ноя 09, 2013 23:43:50
Откуда: Запорожье

Сообщение Alexen »

Всем привет. Подскажите мне такой вопрос. Возможно ли вывести Мк из глубокого сна при помощи прерывание компаратора? Я так подозреваю что нет, тогда как поступить? Вообщем при пропадании основного напряжения подключается батарейка и проц. уходит в сон "powersave" при восстановлении сети - не пробуждается. Юзать внешнее прерывание по нарастающему фронту?
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Сообщение uk8amk »

Например использовать часовой генератор(TIM2) или Watchdog для пробуждения проца. В прерывании анализировать состояние компаратора и принимать решение о включении девайса.
См. в datasheet табличку Active Clock Domains and Wake-up Sources in the Different Sleep Modes. чтобы понять какую периферию можно задействовать для этого.
Друг Кота
Аватара пользователя
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Сообщение Gudd-Head »

Да. Видимо, либо внешняя схема, либо просыпаться по таймеру и проверять.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Держит паяльник хвостом
Аватара пользователя
Сообщения: 962
Зарегистрирован: Вт янв 04, 2011 13:26:17
Откуда: Лен.Обл.

Сообщение java »

Подскажите плиз, где скачать CV AVR и протеус, и какой протеус лучше установить, раньше был 7, и винда ХР, теперь новый комп с виндой7?
И если возможно, чтобы были на русском, а то китайский и пиндосский в школе прогуливал.
Пишу с ошибками и опечатками.На это у меня есть разрешение и справка
Друг Кота
Аватара пользователя
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Сообщение FreshMan »

Tell Me The Truth
Держит паяльник хвостом
Аватара пользователя
Сообщения: 962
Зарегистрирован: Вт янв 04, 2011 13:26:17
Откуда: Лен.Обл.

Сообщение java »

Спасибо!!! скачал. Установил, не запускается :(
Изображение
А что скажете по протеусу? Вроде где-то здесь на сайте можно было скачать?
Пишу с ошибками и опечатками.На это у меня есть разрешение и справка
Ответить

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