CodeVision AVR в вопросах и ответах
Re: CodeVision AVR в вопросах и ответах
Запустил так:
// 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, мне настраивать их не нужно?
Да счетчик вставлю в таймер индикации, спасибо за совет
// 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, мне настраивать их не нужно?
Да счетчик вставлю в таймер индикации, спасибо за совет
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
"H" и "L" - это старший и младший байт регистра.
Re: CodeVision AVR в вопросах и ответах
Спасибо за помощь!!! Сам бы долго мучался с реализацией ШИМ
Re: CodeVision AVR в вопросах и ответах
Появилась еще одна проблема, скорее всего в железе, так что извините за оффтоп. При программной яркости 0, не гаснет полностью светодиод. После выхода с мк стоит ключ на кт815, (резистор смещения 300 Ом) со светодиодами включенными в коллектор и отдельным питанием 12 вольт(земля общая с питанием мк). На выходе 1 вольт, светят слабо но все равно напрягает. Частота ШИМ 2 кГц. Программная максимальная яркость соответствует 100%. Подскажите пожалуйста в чем проблема?
Re: CodeVision AVR в вопросах и ответах
Проблемы нет. Про это сказано в даташите. При коде 0 в OCR на выходе будут иголки.
Поэтому вместо записи 0 в OCR нужно выключать ШИМ и устанавливать соответствующий вывод в 0 вручную.
То же самое и при 255 в OCR.
Другое решение - режим Phase Correct PWM.
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 и подобные.
слева!Куплю индикаторы ИТС-1А, ИТС-1Б, ИГВ1-8х5Л, ИГПС1-222/7, ИГПС1-111/7 и подобные.
Re: CodeVision AVR в вопросах и ответах
Спасибо попробую Phase Correct PWM.
Re: CodeVision AVR в вопросах и ответах
Если не сложно ответить появилось еще несколько вопросов:
Учусь на готовых программах, и непонятно вот что:
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, но это наверное помехи так как провод от блока питания сильно длинный или нет?
Заранее спасибо!
Учусь на готовых программах, и непонятно вот что:
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, но это наверное помехи так как провод от блока питания сильно длинный или нет?
Заранее спасибо!
Re: CodeVision AVR в вопросах и ответах
Более менее разобрался.
1.Эквивалентное напряжение выше при 255. Проверял для Phase Correct PWM, не знаю имеетэто значение или нет. В примерах было 254 для Fast PWM.
2. Для DS18b20 нужен не цикл а запрет прерываний, она не терпит задержек, но у меня динамическая индикация запрещать прерывания не могу, но пока не было сбоев. DS1307 допускает паузы в опросе, значит не имеет разницы как ее опрашивать.
3. Предпочтительней работа с двоично десятичными числами, так как нет конвертации перед получением минут часов, только надо изменять и библиотеку для DS1307 и конвертировать установки времени.
Поправьте меня если что не так.
1.Эквивалентное напряжение выше при 255. Проверял для Phase Correct PWM, не знаю имеетэто значение или нет. В примерах было 254 для Fast PWM.
2. Для DS18b20 нужен не цикл а запрет прерываний, она не терпит задержек, но у меня динамическая индикация запрещать прерывания не могу, но пока не было сбоев. DS1307 допускает паузы в опросе, значит не имеет разницы как ее опрашивать.
3. Предпочтительней работа с двоично десятичными числами, так как нет конвертации перед получением минут часов, только надо изменять и библиотеку для DS1307 и конвертировать установки времени.
Поправьте меня если что не так.
Re: CodeVision AVR в вопросах и ответах
есть 16ти разрядная переменная, ее надо сохранять в ds1307 и соответственно при включении контроллера читать из нее, чет не очень я представляю как это сделать. Ну всмысле как читать, писать в дску понятно, как склеивать два байта непонятно.
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Ну как-то так (храним по адресам 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 раз.
Re: CodeVision AVR в вопросах и ответах
Спасибо, отлично работает!
Re: CodeVision AVR в вопросах и ответах
Добрый день!
Подскажите как правильно пользоваться операцией if else?
написал я код
На АЦП поступает напряжение, когда 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
Подскажите как правильно сделать?
Подскажите как правильно пользоваться операцией 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 раз.
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Какой кошмар. Не стыдно такие вопросы задавать, в то время, когда ответы на них ищутся за считанные секунды ?Подскажите как правильно пользоваться операцией if else?
http://yandex.ru/yandsearch?clid=9582&t ... 0%A1%D0%B8
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Код: Выделить всё
if(условие_1){
// обработка условия_1
} else if(условие_2){
// обработка условия_2
} else if(условие_3){
// обработка условия_3
} else if(условие_4){
// обработка условия_4
} else if(условие_5){
// обработка условия_5
}хотя, конечно, правильнее всего было бы определить зависимость ШИМ от АЦП соответствующей формулой, чтобы из значения АЦП сразу получать правильный ШИМ (если, конечно, дискретное изменение ШИМ не является важной целью).
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Alexen
- Первый раз сказал Мяу!
- Сообщения: 35
- Зарегистрирован: Сб ноя 09, 2013 23:43:50
- Откуда: Запорожье
Re: CodeVision AVR в вопросах и ответах
Всем привет. Подскажите мне такой вопрос. Возможно ли вывести Мк из глубокого сна при помощи прерывание компаратора? Я так подозреваю что нет, тогда как поступить? Вообщем при пропадании основного напряжения подключается батарейка и проц. уходит в сон "powersave" при восстановлении сети - не пробуждается. Юзать внешнее прерывание по нарастающему фронту?
-
uk8amk
- Поставщик валерьянки для Кота
- Сообщения: 2222
- Зарегистрирован: Вт ноя 27, 2007 11:32:06
- Откуда: Tashkent
Re: CodeVision AVR в вопросах и ответах
Например использовать часовой генератор(TIM2) или Watchdog для пробуждения проца. В прерывании анализировать состояние компаратора и принимать решение о включении девайса.
См. в datasheet табличку Active Clock Domains and Wake-up Sources in the Different Sleep Modes. чтобы понять какую периферию можно задействовать для этого.
См. в datasheet табличку Active Clock Domains and Wake-up Sources in the Different Sleep Modes. чтобы понять какую периферию можно задействовать для этого.
- Gudd-Head
- Друг Кота
- Сообщения: 20091
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: CodeVision AVR в вопросах и ответах
Да. Видимо, либо внешняя схема, либо просыпаться по таймеру и проверять.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- java
- Держит паяльник хвостом
- Сообщения: 962
- Зарегистрирован: Вт янв 04, 2011 13:26:17
- Откуда: Лен.Обл.
Re: CodeVision AVR в вопросах и ответах
Подскажите плиз, где скачать CV AVR и протеус, и какой протеус лучше установить, раньше был 7, и винда ХР, теперь новый комп с виндой7?
И если возможно, чтобы были на русском, а то китайский и пиндосский в школе прогуливал.
И если возможно, чтобы были на русском, а то китайский и пиндосский в школе прогуливал.
Пишу с ошибками и опечатками.На это у меня есть разрешение и справка
Re: CodeVision AVR в вопросах и ответах
Tell Me The Truth
- java
- Держит паяльник хвостом
- Сообщения: 962
- Зарегистрирован: Вт янв 04, 2011 13:26:17
- Откуда: Лен.Обл.
Re: CodeVision AVR в вопросах и ответах
Спасибо!!! скачал. Установил, не запускается

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