Мур-мяу товарищи! Увидел http://radiokot.ru/circuit/digital/home/93/, решил сделать:) сделал, почти работает) После калибровки стрелки как были в максимальном положении так и остаются. Позже оказалось что прибор имеет логарифмическую характеристику... вот тут я и задумался, а что же мне делать дальше? При настройке часов видно что стрелки дергаются, т.е. время выставляется. Собирать схемку для обратной логарифмической хар-ки, что бы они в месте прямую давали? Можно поменять на другие, условно нормальные, но эти тогда валяться будут:)
а мне нужно не пачки импульсов, а 2 секунды лог1, 2 секунды лог 0
Спойлер
Код:
/* * METER-CLOCK AND WATCH * Часы с будильником и индикацией при помощи стрелочных миллиамперметров * */ #include <avr/io.h> #include <avr/interrupt.h> #include <avr/eeprom.h> #include "avr_helper.h"
// число "тиков" 0-го таймера за 1 секунду #define TICKS_PER_SEC 125 // шкала времени - 12-часовая, т.к. 24 деления на индикаторе - слишком много #define HOURS_SCALE 12 // значение максимума для 10-битного ШИМА часов #define PWM_MAX_H 1023UL // значение максимума для 10-битного ШИМА минут #define PWM_MAX_M 1023UL
// шаг ШИМа в 1 часе #define PWM_HOUR_STEP (PWM_MAX_H / HOURS_SCALE) // шаг ШИМа в 1 минуте #define PWM_MIN_STEP (PWM_MAX_M / 60) // вывод, к которому подключени вспомогательный индикатор #define DIV_PIN _BV(PB2) // вывод, к которому подключен сигнал будильника #define ALARM_OUT _BV(PB7) // вывод, к которому подключен переключатель КОРРЕКЦИИ ЧАСОВ #define SET_HOUR _BV(PD6) // вывод, к которому подключен переключатель КОРРЕКЦИИ МИНУТ #define SET_MIN _BV(PD5) // вывод, к которому подключен переключатель режима индикации ЧАСЫ-БУДИЛЬНИК #define ALARM_MODE _BV(PD0) // коэффициент ШИМа вспомогательного индикатора ДО ПОЛУДНЯ #define DIVIDER_AM 20 // коэффициент ШИМа вспомогательного индикатора ПОСЛЕ ПОЛУДНЯ #define DIVIDER_PM 100 // коэффициент ШИМа вспомогательного индикатора ЦЕНТР #define DIVIDER_CENTER 62 // для "плавной" индикации надо задать следующий макрос равным НЕ НУЛЮ #define SOFT_TIME 0
// проверка правильности коэффициентов ШИМа вспомогательного индикатора #if (DIVIDER_AM > TICKS_PER_SEC) | (DIVIDER_PM > TICKS_PER_SEC) | (DIVIDER_CENTER > TICKS_PER_SEC) #error DIVIDER_xxx must equal or lower than TICKS_PER_SEC #endif
// вычисление значения коэффициента ШИМ для индикатора часов if(h > HOURS_SCALE) h -= HOURS_SCALE; ocr = PWM_HOUR_STEP * h; if(soft_time() && !(h == HOURS_SCALE)) ocr += PWM_HOUR_STEP * m / 60; OCR1A = ocr;
// вычисление значения коэффициента ШИМ для индикатора минут ocr = PWM_MIN_STEP * m; if(soft_time()) ocr += PWM_MIN_STEP * s / 60; OCR1B = ocr; }
// обработчик прерывания по совпадению канала B 0-го таймера ISR(TIMER0_COMPB_vect){ // выключение сигнала на вспомогательном индикаторе PORTB &= ~DIV_PIN; }
// Обработчик прерывания по совпадению 0-го таймера // Вызывается TICKS_PER_SEC раз в секунду ISR(TIMER0_COMPA_vect){ static uint8_t counter = TICKS_PER_SEC; // считаем время if(!--counter){ counter = TICKS_PER_SEC; if(++sec >= 60){ sec = 0; if(++min >= 60){ min = 0; sec = 28; // корректировка - каждый час +28.8 секунд if(++hour >= (HOURS_SCALE*2)){ hour = 0; } } } // устанавливаем флажок каждую секунду one_sec_flag = 1; } // включаем сигнал на вспомогательном индикаторе PORTB |= DIV_PIN; }
// таймер 0 - счет времени: делитель 256 и режим CTC с коэффициентом 125 - итого деление 32000 // а так же управление индикатором-разделителем в режиме программного ШИМ OCR0A = TICKS_PER_SEC; TCCR0A = _BV(WGM01); // CTC TCCR0B = TIMER_CLK_DIV_256;
// таймер 1 обеспечивает просто 10-битный FastPWM для управления стрелками часов и минут TCCR1A = _BV(WGM10) | _BV(WGM11) | TIMER_OC_CLEAR(1A) | TIMER_OC_CLEAR(1B); TCCR1B = TIMER_CLK_DIV_1; // прерывания разрешены от 0-го таймера по совпадению каналов А и B TIMSK = _BV(OCIE0A) | _BV(OCIE0B);
Использование модульных источников питания открытого типа широко распространено в современных устройствах. Присущие им компактность, гибкость в интеграции и высокая эффективность делают их отличным решением для систем промышленной автоматизации, телекоммуникационного оборудования, медицинской техники, устройств «умного дома» и прочих приложений. Рассмотрим подробнее характеристики и особенности трех самых популярных вариантов AC/DC-преобразователей MW открытого типа, подходящих для применения в промышленных устройствах - серий EPS, EPP и RPS представленных на Meanwell.market.
Собрал на весу схемку, вроде работает. Сейчас проверю точность хода. Будильник не проверял пока. Перерисовал схему в более удобоваримом виде. Печатку делать не буду, хватит и монтажки. Пойду завтра на рынок искать винтажные микроамперметры. Во вложении схема, фьюзы, прошивка, исходники. Потребляет 38-40 мА по 5В. Жаль автора на форуме не видно с 2012 года.
Собрал таки на печатке, но будильник не работает. Может кто посмотрит исходники что там не так. Часики прикольные получаются. Нужно есче подсветку зеленую сделать. Во вложении печатка.
Собрал часы. Будильник не работает. Пробовал подправить прошивку но при компилировании выдает ошибку. Тогда решил скомпилировать авторский исходник на си без моих исправлений все равно ошибка. Обращаюсь ко всем , кто силен в программировании, помогите советом как это исправить, а с будильником сам попробую разобраться.
Надо будет достать свои и потыкать осцилом, что там появляется на ножках МК при срабатывании будильника. Может там нужен бузер со встроенным генератором.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения