Jump to content

    

dexter_khm

Участник
  • Content Count

    31
  • Joined

  • Last visited

Community Reputation

0 Обычный

About dexter_khm

  • Rank
    Участник

Recent Profile Visitors

1213 profile views
  1. Добрый день разработал тут светодиодный светильник по схеме Бестрансформаторного блок питания. Типа этого. Акцент стоял на максимально дешевом исполнении. Все вроде ок но на финальных тестах оказалось что не проходим по Коэффициенту мощности он у нас 0,2 а должен быть ≥0,8. Помогите советом как в этой ситуации привести его в норму.
  2. Простите я не понял. Поподробнее пожалуйста.
  3. Если вы про ncp1450 так он же повышающий только, как быть с понижением от 4,2В
  4. Добрый день. Нужен стабилизатор который из диапазона 3В-4,2В делало 3,3В. Желательно из доступных деталей. Я вот тут набросал схему в протеусе MC34063 Sepic li-ion to 3,3V хотел узнать будет ли она работать и выдавать 3,3В 350мА. Протеус однозначно не дает понять сильно тупит вылетает. Проект mc34063.zip
  5. Всем спасибо проблему решил ответ на этом форуме http://forum.easyelectronics.ru/viewtopic....=33&t=18186
  6. Здравствуйте в своем проекте часов на STM8S пользуюсь "STM8S Touch-Sensing" библиотекой модифицировал проект STSW-STM8023 http://www.st.com/web/en/catalog/tools/PF259386# . Работают 4 кнопки все ок. Но для входа в меню настройку времени нужно одновременно нажать две кнопки, а вот тут засада так как библиотека возвращает значение DETECTED=1 только для одной кнопки в единицу времени, а если держишь палец на одной кнопке то нажатие второй библиотека уже не идентифицирует. Привожу куски кода: stm8_tsl_conf.h #define LOADREF_PORT_ADDR (GPIOC_BaseAddress) /**< LOADREF pin GPIO base address */ #define LOADREF_BIT (0x04) /**< LOADREF pin mask */ //============================================================================== // // 5) SINGLE CHANNEL KEYS DEFINITION - PORT 1 // // Set the number of keys // Set the port // Set the pins mask // // Warning: This port is mandatory and one key at least must be defined. // //============================================================================== #define SCKEY_P1_KEY_COUNT (4) /**< Single channel key Port 1: Number of keys used (value from 1 to 8) */ #define SCKEY_P1_PORT_ADDR (GPIOC_BaseAddress) /**< Single channel key Port 1: GPIO base address */ #define SCKEY_P1_A (0x02) /**< Single channel key Port 1: 1st key mask */ #define SCKEY_P1_B (0x40) /**< Single channel key Port 1: 2nd key mask */ #define SCKEY_P1_C (0x20) /**< Single channel key Port 1: 3rd key mask */ #define SCKEY_P1_D (0x10) /**< Single channel key Port 1: 4th key mask */ #define SCKEY_P1_E (0) /**< Single channel key Port 1: 5th key mask */ #define SCKEY_P1_F (0) /**< Single channel key Port 1: 6th key mask */ #define SCKEY_P1_G (0) /**< Single channel key Port 1: 7th key mask */ #define SCKEY_P1_H (0) /**< Single channel key Port 1: 8th key mask */ #define SCKEY_P1_DRIVEN_SHIELD_MASK (0)//(0x08) Настройки библиотеки main.h if ((TSL_GlobalSetting.b.CHANGED) && (TSLState == TSL_IDLE_STATE)) { TSL_GlobalSetting.b.CHANGED = 0; if (sSCKeyInfo[3].Setting.b.DETECTED) /* KEY 1 touched */ { Keys|=Key1; return; } if (sSCKeyInfo[2].Setting.b.DETECTED) /* KEY 2 touched */ { Keys|=Key2; return; } } Опрос кнопок. Сделал такой финт ушами if (sSCKeyInfo[1].Setting.b.DETECTED) /* KEY 3 touched */ { if ((sSCKeyInfo[0].Setting.b.DETECTED)||(sSCKeyInfo[0].State.b.DETECTED)) { Keys|=KeyD; //Нажаты две кнопки return; } else { Keys|=Key3; return; } } if (sSCKeyInfo[0].Setting.b.DETECTED) /* KEY 4 touched */ { if ((sSCKeyInfo[1].Setting.b.DETECTED)||(sSCKeyInfo[1].State.b.DETECTED)) { Keys|=KeyD;//Нажаты две кнопки return; } else { Keys|=Key4; return; } } Нашел методом тыка - иногда в переменной второй из пары нажатых кнопок sSCKeyInfo[х].State.b.DETECTED появляется 1 но срабатывает 2 двух случаях из 3 то есть нестабильно. Помогите советом как мне отработать двойное нажатие?
  7. Сделал часы на базе контроллера stm8s. Светодиодный семимегментник на 4 разряда, четыре сенсорных кнопки STM8 Touch-Sensing. Все работает вроде но вот часы за день отстают на минуту. Кварц на 16мГц надпись на нем 16,0RG9-3H. инициализация таймера: void Timer_Init(void) { // Reset ("de-initialise") TIM1. TIM1_DeInit(); // Set TIM1 to: // - use an exact prescaler of 1000, // - to count up, // - to have a period of 1, and // - to have a repetition counter of 0. TIM1_TimeBaseInit(16000, TIM1_COUNTERMODE_DOWN, 1000, 0);// // Set TIM1 to generate interrupts every time the counter overflows (every ms). TIM1_ITConfig(TIM1_IT_UPDATE, ENABLE); // Enable TIM1. TIM1_Cmd(ENABLE); // Enable interrupts (no, really). enableInterrupts(); } Таблица векторов прерываный: struct interrupt_vector const _vectab[] = { { 0x82, (interrupt_handler_t)_stext } , /* reset */ //{0x82, (interrupt_handler_t)main}, /* reset */ {0x82, NonHandledInterrupt}, /* trap */ {0x82, NonHandledInterrupt}, /* irq0 - tli */ {0x82, NonHandledInterrupt}, /* irq1 - awu */ {0x82, NonHandledInterrupt}, /* irq2 - clk */ {0x82, NonHandledInterrupt}, /* irq3 - exti0 */ {0x82, NonHandledInterrupt}, /* irq4 - exti1 */ {0x82, (interrupt_handler_t)EXTI_PORTC_IRQHandler}, /* irq5 - exti2 */ {0x82, NonHandledInterrupt}, /* irq6 - exti3 */ {0x82, NonHandledInterrupt}, /* irq7 - exti4 */ {0x82, NonHandledInterrupt}, /* irq8 - can rx */ {0x82, NonHandledInterrupt}, /* irq9 - can tx */ {0x82, NonHandledInterrupt}, /* irq10 - spi*/ {0x82, (interrupt_handler_t)TIM1_UPD_OVF_TRG_BRK_IRQHandler}, /* irq11 - tim1 */ {0x82, NonHandledInterrupt}, /* irq12 - tim1 */ {0x82, NonHandledInterrupt}, /* irq13 - tim2 */ {0x82, NonHandledInterrupt}, /* irq14 - tim2 */ {0x82, NonHandledInterrupt}, /* irq15 - tim3 */ {0x82, NonHandledInterrupt}, /* irq16 - tim3 */ {0x82, NonHandledInterrupt}, /* irq17 - uart1 */ {0x82, NonHandledInterrupt}, /* irq18 - uart1 */ {0x82, NonHandledInterrupt}, /* irq19 - i2c */ {0x82, NonHandledInterrupt}, /* irq20 - uart2/3 */ {0x82, NonHandledInterrupt}, /* irq21 - uart2/3 */ {0x82, NonHandledInterrupt}, /* irq22 - adc */ {0x82, (interrupt_handler_t)TSL_Timer_ISR}, /* irq23 - tim4 */ {0x82, NonHandledInterrupt}, /* irq24 - flash */ {0x82, NonHandledInterrupt}, /* irq25 - reserved */ {0x82, NonHandledInterrupt}, /* irq26 - reserved */ {0x82, NonHandledInterrupt}, /* irq27 - reserved */ {0x82, NonHandledInterrupt}, /* irq28 - reserved */ {0x82, NonHandledInterrupt} /* irq29 - reserved */ }; Прерывание таймера: INTERRUPT_HANDLER(TIM1_UPD_OVF_TRG_BRK_IRQHandler, 11) { TIM1_ClearITPendingBit(TIM1_IT_UPDATE); rtc_service(); rtc_get_time(&Time); } Функции RTC переделал из библиотеки для AVR: /******************************************************************************** *********** * Программная реализация часов * * Версия 0.1 * * Начато 27 августа 2005 года * * Окончено 28 октября 2005 года * * Автор Якимов Юрий Анатольевич * ******************************************************************************** ***********/ #include "main.h" #include "stm8s_it.h" #include <string.h> #include "Rtc.h" //#include "service.h" void cli(void) { disableInterrupts(); } void sei(void) { enableInterrupts(); } unsigned char month_day_table[]={31,28,31,30,31,30,31,31,30,31,30,31}; unsigned char CorectionFlag=0; rtc_type rtc_time; //системное время //Инициализация часов void rtc_init(void) { rtc_set_time(0,0,0); //Время считаем с 00:00:00 rtc_set_date(1,1,2012); //Дату считаем с 1 января 2000 года } //Наращивание часов void rtc_service(void) { unsigned char day_tmp; rtc_time.seconds++; if(rtc_time.seconds>59) { rtc_time.seconds=0; rtc_time.minutes++; if(rtc_time.minutes>59) { rtc_time.minutes=0; rtc_time.hours++; if(rtc_time.hours>23) { rtc_time.hours=0; rtc_time.day++; //если год - високосный и сейчас февраль if(leap_year(rtc_time.year) && (rtc_time.month==2)) day_tmp=29; //то количество дней - 29 else day_tmp=month_day_table[rtc_time.month-1]; //иначе - как обычно if(rtc_time.day > day_tmp) { rtc_time.day=1; rtc_time.month++; if(rtc_time.month>12) { rtc_time.month=1; rtc_time.year++; } } } } } } //Устанавливает системное время void rtc_set_time(unsigned char hours, unsigned char minutes, unsigned char seconds) { cli(); rtc_time.hours=hours; rtc_time.minutes=minutes; rtc_time.seconds=seconds; sei(); } //Устанавливает системную дату void rtc_set_date(unsigned char day, unsigned char month, unsigned int year) { cli(); rtc_time.day=day; rtc_time.month=month; rtc_time.year=year; sei(); } //Получает текущее время и размещает в rtc_var void rtc_get_time(rtc_type *rtc_var) { cli(); memcpy(rtc_var,&rtc_time,sizeof(rtc_time)); sei(); } //Возвращает 1, если год test_year - високосный unsigned char leap_year(unsigned int test_year) { if(((test_year%4==0) && (test_year%100)) || (test_year%400==0)) return 1; else return 0; } Два таймера заняты сенсорными кнопками #define TIMACQ (TIM3) #define TIMTICK (TIM4) Незнаю где набегает отставание в одну минуту. сначала грешил на некачественный кварцы, сегодня вернулся к плате дискавери на stm8s но и на ней отставание присутствует. Помогите советом что делаю не так?
  8. Все проблему решил сам нога VBUS не была подключена +5в. Прошивка та что скинула Xenia рабочая
  9. Зашитый в камень заводской бутлоадер молчал. Попробовал размещенную выше прошивку - молчит. Потом скачал бутлоадер от LUFA настроил маке файл, зашил, опять проверил фьюзы BOOTRST, HWBE, 4k boot flash size - Молчит. Истерика непреодалимое желание расхреначить плату об стол :maniac: Загуглил название контроллера. http://electronix.ru/forum/lofiversion/index.php/t93849.html http://www.avrfreaks.net/index.php?name=PN...ic&t=106332 оказывается я не один такой. И не кто не может решить проблему. Вопрос at90usb647 вообще у когото через USB прошивался??? P.S. Соединения проверял, контроллер зашитый через ISP мигает светодиодом, кварц 16мгц, при этом флип на этойже машине с USB162 работает аж бегом.
  10. Здравствуйте стер стандартный бутлоадер на at90usb647. Подскажите где можно взять прошивку DFU bootloader at90usb647. Заранее спасибо.
  11. Да конечно примеры я смотрел. Там из примеров i2c и TWI только работа с внешней памятью 24хх . Именно этот пример я сегодня целый пробовал переделать. Проблема в том что примеров работы именно LCD а темболее TIC107 нету. Получается негде посмотреть правильным путем я иду или нет. Помогите примером наверняка ктото чтото такое до ума доводил. :crying:
  12. Ну фактически "против" ибо этот екран не хочет работать нифига
  13. Здравствуйте снова я со своим AT91sam7s256 и вопросами. Итак есть AT91sam7s256 и экран TIC107 на чипе PCF2119 и я пытаюсь это все подключить. Возможно у когото есть примеры работы sam7 по шине i2c с какимнибудь экраном???? инициализацию на свой TIC107 я вроде нашел. http://www.avrfreaks.net/index.php?name=PN...768&start=0 http://kvorb.ru/2010/02/13/primer-raboty-s-tic107/
  14. Вот на этой строчке всегда застряет. Блин не знаю даже что не так? П.С. Заливаю из IAR через JTAG J-Link.
  15. Mempfis еще раз прошу у вас помощи. Совместил вашу инициализацию и свое мигание светодиодом. Запустил в дебаггере застряет на первых адресах и не идет дальше. Подозреваю что чтото не выставил правильно в настройках проэкта. Посмотрите пожалуйста проект прикрепляю ADC_buttons.rar