Страница 334 из 421
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт фев 13, 2015 13:31:38
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, мне настраивать их не нужно?
Да счетчик вставлю в таймер индикации, спасибо за совет
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт фев 13, 2015 13:36:55
Аlex
"H" и "L" - это старший и младший байт регистра.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт фев 13, 2015 13:44:04
Wolf_X
Спасибо за помощь!!! Сам бы долго мучался с реализацией ШИМ
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт фев 20, 2015 00:09:30
Wolf_X
Появилась еще одна проблема, скорее всего в железе, так что извините за оффтоп. При программной яркости 0, не гаснет полностью светодиод. После выхода с мк стоит ключ на кт815, (резистор смещения 300 Ом) со светодиодами включенными в коллектор и отдельным питанием 12 вольт(земля общая с питанием мк). На выходе 1 вольт, светят слабо но все равно напрягает. Частота ШИМ 2 кГц. Программная максимальная яркость соответствует 100%. Подскажите пожалуйста в чем проблема?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт фев 20, 2015 09:25:35
*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.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт фев 20, 2015 10:07:49
Wolf_X
Спасибо попробую Phase Correct PWM.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Сб фев 21, 2015 18:49:19
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, но это наверное помехи так как провод от блока питания сильно длинный или нет?
Заранее спасибо!
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт фев 24, 2015 21:39:43
Wolf_X
Более менее разобрался.
1.Эквивалентное напряжение выше при 255. Проверял для Phase Correct PWM, не знаю имеетэто значение или нет. В примерах было 254 для Fast PWM.
2. Для DS18b20 нужен не цикл а запрет прерываний, она не терпит задержек, но у меня динамическая индикация запрещать прерывания не могу, но пока не было сбоев. DS1307 допускает паузы в опросе, значит не имеет разницы как ее опрашивать.
3. Предпочтительней работа с двоично десятичными числами, так как нет конвертации перед получением минут часов, только надо изменять и библиотеку для DS1307 и конвертировать установки времени.
Поправьте меня если что не так.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн мар 09, 2015 06:29:43
AVK
есть 16ти разрядная переменная, ее надо сохранять в ds1307 и соответственно при включении контроллера читать из нее, чет не очень я представляю как это сделать. Ну всмысле как читать, писать в дску понятно, как склеивать два байта непонятно.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн мар 09, 2015 08:51:32
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);
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт мар 10, 2015 06:14:49
AVK
Спасибо, отлично работает!
Re: CodeVision AVR в вопросах и ответах
Добавлено: Ср мар 11, 2015 09:42:47
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
Подскажите как правильно сделать?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Ср мар 11, 2015 09:45:07
Аlex
Подскажите как правильно пользоваться операцией if else?
Какой кошмар. Не стыдно такие вопросы задавать, в то время, когда ответы на них ищутся за считанные секунды ?
http://yandex.ru/yandsearch?clid=9582&t ... 0%A1%D0%B8
Re: CodeVision AVR в вопросах и ответах
Добавлено: Ср мар 11, 2015 09:45:55
ARV
Код: Выделить всё
if(условие_1){
// обработка условия_1
} else if(условие_2){
// обработка условия_2
} else if(условие_3){
// обработка условия_3
} else if(условие_4){
// обработка условия_4
} else if(условие_5){
// обработка условия_5
}
так можно делать хоть 100500 раз
хотя, конечно, правильнее всего было бы определить зависимость ШИМ от АЦП соответствующей формулой, чтобы из значения АЦП сразу получать правильный ШИМ (если, конечно, дискретное изменение ШИМ не является важной целью).
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс мар 22, 2015 15:55:54
Alexen
Всем привет. Подскажите мне такой вопрос. Возможно ли вывести Мк из глубокого сна при помощи прерывание компаратора? Я так подозреваю что нет, тогда как поступить? Вообщем при пропадании основного напряжения подключается батарейка и проц. уходит в сон "powersave" при восстановлении сети - не пробуждается. Юзать внешнее прерывание по нарастающему фронту?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс мар 22, 2015 18:28:05
uk8amk
Например использовать часовой генератор(TIM2) или Watchdog для пробуждения проца. В прерывании анализировать состояние компаратора и принимать решение о включении девайса.
См. в datasheet табличку Active Clock Domains and Wake-up Sources in the Different Sleep Modes. чтобы понять какую периферию можно задействовать для этого.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн мар 23, 2015 11:05:54
Gudd-Head
Да. Видимо, либо внешняя схема, либо просыпаться по таймеру и проверять.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн мар 23, 2015 16:14:02
java
Подскажите плиз, где скачать CV AVR и протеус, и какой протеус лучше установить, раньше был 7, и винда ХР, теперь новый комп с виндой7?
И если возможно, чтобы были на русском, а то китайский и пиндосский в школе прогуливал.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн мар 23, 2015 16:51:25
FreshMan
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн мар 23, 2015 17:13:39
java
Спасибо!!! скачал. Установил, не запускается

А что скажете по протеусу? Вроде где-то здесь на сайте можно было скачать?