Jump to content

codenamehawk

Members
  • Content Count

    183
  • Joined

  • Last visited

Community Reputation

8 Обычный

About codenamehawk

  • Rank
    Осваивающийся

Информация

  • Пол
    Мужчина

Электроника

  • Стаж в электронике
    Более 20 лет

Recent Profile Visitors

3809 profile views
  1. А если попробовать так if ((TCCR1B&(1<<6)==(1<<6)){ или так смотря что хотите получить if (!(TCCR1B&(1<<6)==(1<<6)){
  2. Ваш код не правильный. Если пытаетесь сбросить биты WGM00 и WGM01 в ноль, то попробуйте так TCCR0 &=~(1<<WGM00); TCCR0 &=~(1<<WGM01); /* * ProbaAt16.c * * Created: 16.05.2012 20:42:03 * Author: Marian */ #define F_CPU 12000000 #include <avr/io.h> #include <avr/interrupt.h> typedef unsigned char byte ; volatile byte a; volatile byte b; ISR(TIMER0_OVF_vect) { b++; } ISR(TIMER0_COMP_vect) { b++; } int main(void) { a=0; b=0; OCR0 = 0x0F; TIMSK =(1<<TOIE0)|(1<<OCIE0); asm("sei"); TCCR0 =(1<<CS00); while(1) { a++; } } Совет комментируйте свой строки, тогда другим будет понятно, что пытаетесь получить. И разрешите заход в прерывания, как подсказал MadLor
  3. Студио ругается, но не сильно (Warning), а в результате она просто игнорирует #define F_CPU 8000000UL берет значение заданное в свойствах проекта. Оптимизацию включили? Вам подсказывали, что висящая нога источник проблем. На PD0 как и на PD1 подключите по резистору 2 ком на минус питания. Вместо перемычки используйте резистор на 200 ом. (Спасает проц от выгорания, если по ошибке вход проца установите как выход, или попадете не на ту ногу.)
  4. codenamehawk

    Codevisionavr

    CV -> Settings -> Terminal CV -> Settings -> Programmer http://google.gik-team.com/?q=%D0%BA%D0%B0%D0%BA+%D0%BF%D0%B5%D1%80%D0%B5%D0%BD%D0%B0%D0%B7%D0%BD%D0%B0%D1%87%D0%B8%D1%82%D1%8C+%D1%81%D0%BE%D0%BC+%D0%BF%D0%BE%D1%80%D1%82+win+7
  5. Вы написали любой, человек приобретет и не работает. Правильнее "ищите кабель с микросхемой"
  6. Кабель от Сименс С65 не подходит, там нет микросхемы, стоит пара транзисторов, но с усб работает. Надежней всего заказать готовый с ебай на FT232... Самодельный на атмега8 работает не со всеми материнками и не поддерживает высокую скорость обмена.
  7. То, что я вам советовал про таймер, вы пропустили. CLKDIV8 ставите Unprogrammed Повесил на кнопку + пощелкайте #include <tiny13.h> #define podschitannoje_kol_perepolnenij 18 #define korekcija_taktov 79 volatile unsigned int vypvypolnit_perepolnenij = podschitannoje_kol_perepolnenij; volatile unsigned char vkluchenno=0; //dla proverki zapushchen li taimer // Timer 0 overflow interrupt service routine interrupt [TIM0_OVF] void timer0_ovf_isr(void) { // Place your code here if (--vypvypolnit_perepolnenij==0) { // Timer/Counter 0 Interrupt(s) initialization OCR0A = korekcija_taktov; TIFR0 |= (1<<OCF0A); //chistoj vody shamanstvo TIMSK0=0x04; //Разрешить Timer 0 output compare A } } // Timer 0 output compare A interrupt service routine interrupt [TIM0_COMPA] void timer0_compa_isr(void) { // Place your code here PORTB.4 = 0; // Timer/Counter 0 Interrupt(s) initialization TCCR0A=0x00; TCCR0B=0x00; //Ostanovit Timer 0 TIMSK0=0x02; //Разрешить Timer 0 overflow TCNT0=0x00; //sbrosit v nol vkluchenno = 0; //taimer ostanovlen } void main(void) { // Declare your local variables here // Crystal Oscillator division factor: 1 #pragma optsize- CLKPR=0x80; CLKPR=0x00; #ifdef _OPTIMIZE_SIZE_ #pragma optsize+ #endif // Input/Output Ports initialization // Port B initialization // Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State5=T State4=T State3=T State2=T State1=T State0=T PORTB=0x00; DDRB=0x00; DDRB.4=1; //port na vyhod PORTB.1=1; //vklucit podtagivajushij rezistor na knopke + // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: 4.688 kHz // Mode: Normal top=0xFF // OC0A output: Disconnected // OC0B output: Disconnected TCNT0=0x00; OCR0A=0x00; OCR0B=0x00; // External Interrupt(s) initialization // INT0: Off // Interrupt on any change on pins PCINT0-5: Off GIMSK=0x00; MCUCR=0x00; // Timer/Counter 0 Interrupt(s) initialization //TIMSK0=0x02; //Timer 0 overflow // Timer/Counter 0 Interrupt(s) initialization //TIMSK0=0x04; //Timer 0 output compare A // Analog Comparator initialization // Analog Comparator: Off ACSR=0x80; ADCSRB=0x00; DIDR0=0x00; // ADC initialization // ADC disabled ADCSRA=0x00; // Global enable interrupts #asm("sei") // Timer/Counter 0 Interrupt(s) initialization TIMSK0=0x02; //Разрешить Timer 0 overflow TIFR0 |= (1<<OCF0A) |(1<<TOV0); //chistoj vody shamanstvo while (1) { // Place your code here if ((PINB.1 == 0) && (vkluchenno ==0)) { vypvypolnit_perepolnenij = podschitannoje_kol_perepolnenij; PORTB.4 = 1; //vkl svetodiod TCCR0A=0x00; TCCR0B=0x05; //Запустить Timer 0 vkluchenno = 1; //taimer zapushchen } } } Поправленный проект.counter tn13.rar p.s.Первая задержка отличается от секунды, это скорее особенность протеуса. В даташите про все прерывания написано. Почитайте Interrupts , External interrupts, Register description, в регистре GIMSK BIT 5 разрешает, запрещает прерывания с любой ноги проца.
  8. Без таймера просто, CLKDIV8 ставите UNprogrammed и простой код #include <tiny13.h> #include <delay.h> void main(void) { DDRB=0xff; PORTB=0x00; while (1) { PORTB=0b010011; delay_ms(1000); PORTB=0b000011; delay_ms(1000); }; }
  9. Чтобы было точно секунда, то (читайте поправленное сообщение) при достижении переменной нуля, меняете работу таймера на работу по прерыванию по совпадению и досчитываете недостающие такты. Необходимо насчитать 4688 тактов таймера. 18 переполнений по 255 дает 4590 тактов. (Ваших файлов программы и протеуса не вижу, так что сами проверьте может необходимо заменить 255 на 256 и пересчитать значения) 4688 - 4590 = 98 вот это значение и присваиваете OCR0A=98; p.s. и нафига дворникам такая точность?
  10. У вас R3 2,2 ком а должен быть на 1.5 ком. Посмотрите проекты V-USB Но и то не факт , что будет на всех компах работать.
  11. Таймер у вас работает с частотой 4688 Hz Разрядность счетчика Timer/Counter один байт, значения он может принимать от 0 до 255. Получить задержку в секунду, так как вы хотите не получиться, так как CompareA и CompareB это не общий регистр, а два отдельные одно байтовые регистры. (когда счетчик досчитает до значения OCR0A произойдет прерывание interrupt [TIM0_COMPA] void timer0_compa_isr(void), "после" достижения счетчиком значения OCR0В произойдет прерывание interrupt [TIM0_COMPВ] void timer0_compв_isr(void)) Чтобы решить вашу задачу, вам необходимо создать глобальную переменную (не забудьте volatile) присваиваете ей значение 4688/255 = 18 и в прерывании при переполнении таймера уменьшаете ее на единицу, когда она достигнет ноль выполняете то, что вам нужно.
  12. codenamehawk

    Ds18B20 + Atmega8

    Проблема протеуса, явно проявляется при большой загрузке проца.
  13. Некоторые телефоны Siemens (С65 например) работают с 3.3 В, поставьте делители.
×
×
  • Create New...