Перейти к содержанию
    

San_75

Участник
  • Постов

    17
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о San_75

  • Звание
    Участник
    Участник
  1. Черт , так опростоволоситься - не напечатать одну < и не заметить глядя в упор. Всем спасибо.
  2. Хмм, почему тогда volatile uint8_t c = TCCR0B; вставленная перед началом цикла в отладке с == 4 ? И вообще у меня что-то шаблон порвался, как же мне добраться до содержимого TCCR0B ?
  3. привет All. Подскажите в чем проблема. Контроллер Attiny 2313 используется для генерации сигнала на ножке PD6 ~ несколько сотен Гц. Таймер 0 используется в режиме сброса при совпадении и генерирует нужный сигнал , таймер 1 в нормальном режиме и используется для опроса кнопок. По нажатию на кнопку на пине PD3 происходит смена предделителя таймера 0. Однако, при выполнении программы , делитель меняется только один раз с 256 до 1024 , больше смена почему то не происходит. проверял в протеусе и на контролере, все абсолютно одинаково - "по нажатию" на PD3 один раз устанавливается больший предделитель и больше чип на кнопку не реагирует, частота сигнала понижается. Контроллер работает от внешнего кварца на 16 МГц. #include <avr/io.h> #include <avr/interrupt.h> #include <avr/sleep.h> volatile uint8_t flags; #define KeysF 2 #define StopS 3 void init_timers(void){ cli(); // TCCR0A : com0A1 com0A0 com0B1 com0B0 - - WGM01 WGM00 // TCCR0B : FOC0A FOC0B - - WGM02 CS02 CS01 CS00 // TCCR1A : COM1A1 COM1A0 COM1B1 COM1B0 – – WGM11 WGM10 // TCCR1B : ICNC1 ICES1 – WGM13 WGM12 CS12 CS11 CS10 // TCCR1C : FOC1A FOC1B – – – – – – // TIMSK : TOIE1 OCIE1A OCIE1B - ICIE1 OCIE0B TOIE0 OCIE0A // TIFR : TOV1 OCF1A OCF1B – ICF1 OCF0B TOV0 OCF0A TCCR0A = (1<<WGM01); TCCR0B = (1<<CS02); OCR0A = 254; TCCR1A = 0; TCCR1B = (1<<CS12); TIMSK = (1<<OCIE0A) | (1<<TOIE1) ; sei(); } /* Table 41. Clock Select Bit Description CS02 CS01 CS00 Description 0 0 0 No clock source (Timer/Counter stopped) 0 0 1 clkI/O/(No prescaling) 0 1 0 clkI/O/8 (From prescaler) 0 1 1 clkI/O/64 (From prescaler) 1 0 0 clkI/O/256 (From prescaler) 1 0 1 clkI/O/1024 (From prescaler) 1 1 0 External clock source on T0 pin. Clock on falling edge. 1 1 1 External clock source on T0 pin. Clock on rising edge. */ ISR(TIMER0_COMPA_vect){ flags |= 1; } ISR(TIMER1_OVF_vect){ flags |= (1<<KeysF); TCNT1 = 65536 - 31250; } int main(void){ DDRB = 0; PORTB = 0; DDRD = 1<<PD6; PORTD = (1<<PD0) | (1<<PD1) | (1<<PD2) | (1<<PD3) ; init_timers(); sleep_enable(); while(1){ sleep_cpu(); if ((flags & 1) && !(flags & (1<<StopS))) { PORTD |= 1<<PD6 ; asm("nop"); asm("nop"); PORTD &= ~(1<<PD6) ; flags &= ~1 ; } if (flags & (1<<KeysF)) { // 2 раза в секунду опрашиваем кнопки flags &= ~(1<<KeysF) ; // увеличиваем частоту таймер 0 if (bit_is_clear(PIND,PD0) && OCR0A > 2) OCR0A --; // уменьшаем частоту таймер 0 if (bit_is_clear(PIND,PD1) && OCR0A < 255) OCR0A ++; if (bit_is_clear(PIND,PD2)){ if ( flags & (1<<StopS) ) flags &= ~(1<<StopS) ; else flags |= (1<<StopS) ; } if (bit_is_clear(PIND,PD3)){ cli(); if (TCCR0B & (1<CS00)) TCCR0B = (1<<CS02); else TCCR0B = (1<<CS02) | (1<<CS00); sei(); } } } }
  4. Александр1 , Так ? 2 Herz . ток и напряжение должна регулировать uc3843 , а контроллер должен задавать желаемое выходное напряжение и ток , и плюс измерять и показывать действительные значения.
  5. Всем привет. имеется такой atx комповый блок питания powerman ip-p350aj2 Сделан на м.с uc3843 - однотактный прямоход , если я правильно разобрался. Нашел схему как переделать в регулируемый http://imglink.ru/show-image.php?id=578c37...3e80f54198e74fa , проблема только в том что напряжение , ток регулируется переменными резистором , а хотелось бы микроконтроллером , например atmega 8 , 68 или 329 , с индикацией выходных параметров. Тыкните в схему, пожалуйста, может быть кто-нибудь уже делал.
  6. Подскажите пожалуйста - схема рабочая , хочу переделать ATX блок питания в регулируемый ? упс , не знаю почему так загрузилось , при просмотре в отдельном окне все нормально
  7. volatile unsigned char ucCurChanel; volatile unsigned char btPIN; volatile unsigned char ucCurChanel_lpctr; так попробуйте ucCurChanel_lpctr нигде не инициализируется
  8. у генератора с двигателем связь не "жесткая" недотянут как следует ремень или включена большая нагрузка и генератор вообще может остановиться
  9. А так слабо ? вы кристалл в сон не отправляете , вы всего лишь разрешаете спящий режим и устанвливаете вид спящего режима на асме команда отправки в спящий режим выглядит так - sleep а на с++ иищете сами , я еще не дочитал книжку по С++ ;)
  10. посадите модуль на питание камеры. Далее модуль раз в N минут ,часов посылает сигнал на почту или куда там - все ок. пропало питание камеры- сигналов нет, пропал инет - сигнал есть , а картинки нет.
  11. вы наверно имели ввиду 12В переменного напржения и 16,7 ампера тока ? вот такое подойдет ? http://shemotehnik.ru/avtolubitel/84-zarya...omobilnogo.html
  12. Так вы осциллограф к нагрузке подключите , а не к диоду
  13. http://habrastorage.org/storage2/322/9da/c...895818bd80c.png я вот такой штукой контроллеры шью, на старом компе с лпт портом и 128 мб оперативки. Шить можно программой Uniprof
  14. калькулятор бит http://www.google.ru/search?client=opera&a...channel=suggest не работал с коде вижион , с битами в АВР есть такая заморочка - бит установлен , т.е. имеет действие если в бите прописан 0 , а вот во всяких AVR программаторах установленному биту может соответсвовать установленная, а не наоборот, сброшенная галочка.
  15. глупые вопросы здесь мржно задавать ? поделитесь , пожалуйста алгоритмом , с помощью которого можно реализовать двойное нажатие на кнопку ? как двойной щелчок мышью в винде ?
×
×
  • Создать...