Страница 1 из 2

Есть идея проекта

Добавлено: Пт окт 24, 2008 14:16:17
sachok
Хочу сделать маленький модинг ПК. Что-то очень похожее на этот прибор http://radiokot.ru/circuit/digital/pcmod/08/ но на ATmega8. Идея такая:
1.Сделать термометр для 3 точек на DS18b20.
2.Сделать регулятор оборотов для кулеров которые будут стоять в тех местах где есть термо датчики. Что бы при 20 градусах вентиляторы стояли, а при 70 градусах били включены на полную мощность. Как я понимаю это нужно сделать с помощью ШИМ. В ATmega8 как раз есть 3 программных ШИМ.
Как мерять температуру я знаю, а вот как настроить ШИМ нет :cry:
Помогите мне в настройке ШИМа относительно температуры.
Для каждого канала также планируется сделать установку максимальной температуры и выводить это все на ЖКИ 16х2.

Добавлено: Пт окт 24, 2008 14:19:22
tych
Пускай они стоят градусов до 45.
при 45 ШИМ сделать30% и при 70 град 100%.

За основу можно взять проект из примеров PROTEUS в папке
SAMPLES\VSM for AVR\One-Wire\DS18X20

Добавлено: Пт окт 24, 2008 14:31:29
sachok
Ещо интересует как происходит регуляция ШИМом.? Там изменяется скважность импульсов или амплитуда?

Добавлено: Пт окт 24, 2008 14:33:54
tych
sachok писал(а):Ещо интересует как происходит регуляция ШИМом.? Там изменяется скважность импульсов или амплитуда?
Скважность. ШИМ в картинках в задаче 8 в моей домашней страничке, там же как его программировать.

Вот вам тот проект-пример из PROTEUS - несколько датчиков DS18b20 - остается добавить ШИМ-у.

Добавлено: Пт окт 24, 2008 14:44:41
sachok
Тоесть для изменения ШИМа нужно менять даные в етих регистрах?

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

OCR1BH = 0x00; 
OCR1BL = 0xFF;
Или можно какимто другим образом например

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

if (temp=20)
{ 
pwr=30%;
}
Это моя фантазия :))

Добавлено: Пт окт 24, 2008 14:47:49
tych
sachok писал(а):Это моя фантазия :))
чтоб писать: Нужно СИЛЬНО поколдовать с хитрейшим #define - это исскустов ИМХО.

А вот сделать функцию и вызвать ее так

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

  pwr(30);
это просто.

Добавлено: Пт окт 24, 2008 14:56:43
sachok
А если я установлю максимельное значение ШИМа при 70 градусах,а минимальное при 20 градусах то в промежутке от 20 до 70 будет плавно меняться ШИМ или нужно самому для каждой температури присваивать? Можно ли так сделать:

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

if (temp++)
{
pwr++;
}

Добавлено: Пт окт 24, 2008 15:26:29
tych
sachok писал(а):А если я установлю максимельное значение ШИМа при 70 градусах,а минимальное при 20 градусах то в промежутке от 20 до 70 будет плавно меняться ШИМ или нужно самому для каждой температури присваивать?
Если запрограмишь - то будет. Все надо программировать ЯВНО. МК "тупой" от рождения как и ПК.
sachok писал(а): Можно ли так сделать:

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

if (temp++)
{
pwr++;
}
Так написать можно, но что это будет означать ????

Пожалуйста почитай "Си для МК" (стр. 5 в моей домашней) чтоб понимать что пишешь.

Добавлено: Пт окт 24, 2008 18:52:01
sachok
Трьохточечный термометр у меня получился, а от с ШИМ к сожалению проблемы. Есть у меня 3 значения температуры temp1,temp2,temp3 как относительно их настроить ШИМ на PB1,PB2,PB3 МК ATmega8?

Добавлено: Пт окт 24, 2008 19:23:37
tych
так как вам скорость не нужна то просто напишите три выражения типа

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

if (тепература_1 > порог_1) {
( регистр pwm1 ) = (тепература_1) * (ВАША формула перевода тепературы в ШИМ) ;
                                           }
и разместите их в бесконечном цикле програмы

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

while(1){

всяки разный код другой

тут
тут
тут

еще какой то код возможно

}
Если индикацию делать не собираетесь то температуру не надо преобразовывать в градусы а ШИМ в % - это только человеку удобно для восприятия, а МК наплевать в каких единицах данные выражены.

Добавлено: Пт окт 24, 2008 19:29:23
tych
sachok писал(а):как настроить ШИМ на PB1,PB2,PB3 МК ATmega8?
Большая рубка-обсуждение ШИМ недавно состоялась на форуме. Среди щепок есть и полезная инфаа по настройке ШИМ - вот
http://www.radiokot.ru/forum/viewtopic. ... 8&start=40

Добавлено: Пт окт 24, 2008 20:21:56
sachok
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 4000,000 kHz
// Mode: Fast PWM top=03FFh
// OC1A output: Non-Inv.
// OC1B output: Non-Inv.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0xA3;
TCCR1B=0x09;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;


OCR1AH=0x00;
OCR1AL=0xff;


OCR1BH=0x00;
OCR1BL=0xff;
Вот настройка на 25% стабильного ШИМа. Ножки PB1,PB2 дергаются в протеусе. С PB3 проблеми не могу настроить. Пробовал делать так:

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

// pwm_val - это число от 0 до 1023
// PWM(PB1) = OCR1A / 10.23  (%)
OCR1AH = (char)(pwm_val>>8);
OCR1AL = (char)pwm_val;
while(1)
{
if (temp>=30)
{
pwm_val=temp;
};
};
Ничего не вишло :cry:

Добавлено: Пт окт 24, 2008 20:25:37
tych
sachok писал(а):С PB3 проблеми не могу настроить. Пробовал делать так:

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

// pwm_val - это число от 0 до 1023
// PWM(PB1) = OCR1A / 10.23  (%)
[/quote]
Ну там же  PWM(PB[color=red]1[/color])  написано, а вы 
про  PB[color=red]3[/color] спрашиваете.

Добавлено: Пт окт 24, 2008 20:30:28
sachok
Вы меня немного не так поняли. Для начала я хотел просто вывести стабильный ШИМ на РВ1,РВ2,РВ3 на первых двох портах все ОК, а не 3 не заработал.
Пробовал делать так:

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

// pwm_val - это число от 0 до 1023
// PWM(PB1) = OCR1A / 10.23 (%) [/quote]
Это я уже пробовал делать что бы ШИМ изменялся на РВ1 но тоже не заработало. К тому же ещо протеус ругается на то что загрузка процесора 100% бывает.

Добавлено: Пт окт 24, 2008 20:39:28
tych
РВ3 вы назначили выходом ?

Причин можкт быть куча - советую прочитать не спеша и понять задачу 8 в курсе.

Добавлено: Пт окт 24, 2008 20:41:49
sachok
Настроил весь порт В как выход. А РВ3 должен работать от таймера1 или от таймера2 или нет разници какой таймер включен? Задачку почитал несколько раз, имено та нашол метод с pwm_val. Я паредполагаю что не правильно сделал настройку РВ3.

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

OCR2H=0x00;
OCR2L=0xff;

Добавлено: Пт окт 24, 2008 20:56:10
tych
sachok писал(а): А РВ3 должен работать от таймера1 или от таймера2 или нет разници какой таймер включен?
Вы даташит то скачали ? ГЛЯНЬТЕ !

Добавлено: Пт окт 24, 2008 21:29:20
sachok
Вот скачал скачал нормальный даташит, а то у меня был на 10 страниц :)) Нашол, прочитал, настроил таймер 2, установил

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

OCR2=0x7f;
увидел что скаважность около 50% но точной схемы как изменять ее не понял.

Добавлено: Пт окт 24, 2008 21:41:56
tych
sachok писал(а):Вот скачал скачал нормальный даташит, прочитал.
Наконец то !!! с этого НАЧИНАТЬ НАДА !
sachok писал(а):установил

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

OCR2=0x7f;
увидел что скаважность около 50%
но точной схемы как изменять ее не понял.
Блинн !!! и идеи поменять это число НЕ ВОЗНИКЛО ? и посмотреть что будет...

0x7f это 127 - т.е. ПОЛОВИНА (50%) от байта.

Добавлено: Пт окт 24, 2008 21:44:51
sachok
В том и суть что менял я это число. Только не понял как там считается скважность. Предполагаю что 1 байт 255 это скважность 100%, отсюда 127 это 50%, 63 - 25%.