• ×   Вставлено в виде отформатированного текста.   Восстановить форматирование

      Разрешено не более 75 смайлов.

    ×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

    ×   Ваш предыдущий контент был восстановлен.   Очистить редактор

    ×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

  • Похожие публикации

    • Автор: forestdozor
      Здравствуйте!

      Мне нужно измерить длительность импульса. Для этого сначала применял внешнее прерывание, а теперь перешел на режим захвата таймера в Atmega 328.
      Однако сейчас происходит странное: Через определенное таймер просто останавливается. Гугл результатов не дает, ни у кого захват таймера 1 не останавливается.
      Подскажите пожалуйста, что делать?
      Среда разработки CodeVisionAVR v3.12. Сейчас попробовал версию 3.3, толку нет. Не работает. Код максимально упростил, но по прежнему толку ноль.
      Переполнение таймера 0 так же работает отлично, до тех пор, пока что-то не произойдет с прерыванием по захвату. Как только что-то произошло - мк останавливается...
      Может немножко подождать, и увеличить значение счетчика current_timp еще на пару значений... Совсем не знаю что делать.
       
       
      interrupt [TIM1_OVF] void timer1_ovf_isr(void)
      {
      TCNT1H = 0x00;
      TCNT1L = 0x00;
      }
      // Timer1 input capture interrupt service routine
      interrupt [TIM1_CAPT] void timer1_capt_isr(void)
      {
       
             TCNT1H = 0x00;
             TCNT1L = 0x00;           // Это уже уровень танцев с бубном "авось поможет" - не помогает.
         
              current_timp++;          // Все упрощено до максимума. Мне бы он хоть количество периодов для начала...
              
        //  }
      }
      // Прерывание по переполнению первого таймера
      interrupt [TIM0_OVF] void timer0_ovf_isr(void)
      {
      // Обнуление счетного регистра.
      TCNT0=0x00;

          
          counter ++;
          if (counter > 10)
          {
                  lcd_clear();
                  sprintf(buffer,"%d us", current_timp);
                  lcd_gotoxy(0,0);
                  lcd_puts(buffer);
                  counter = 0;
          }
          
          
      }

      // Главный цикл программы
      void main(void)
      {

      #pragma optsize-
      CLKPR=(1<<CLKPCE);
      CLKPR=(0<<CLKPCE) | (0<<CLKPS3) | (0<<CLKPS2) | (0<<CLKPS1) | (0<<CLKPS0);
      #ifdef _OPTIMIZE_SIZE_
      #pragma optsize+
      #endif

      // Port B initialization
      // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
      DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0);
      // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
      PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);
      // Port C initialization
      // Function: Bit6=In Bit5=Out Bit4=Out Bit3=Out Bit2=Out Bit1=Out Bit0=Out
      DDRC=(0<<DDC6) | (1<<DDC5) | (1<<DDC4) | (1<<DDC3) | (1<<DDC2) | (1<<DDC1) | (1<<DDC0);
      // State: Bit6=T Bit5=1 Bit4=1 Bit3=1 Bit2=1 Bit1=1 Bit0=1
      PORTC=(0<<PORTC6) | (1<<PORTC5) | (1<<PORTC4) | (1<<PORTC3) | (1<<PORTC2) | (1<<PORTC1) | (1<<PORTC0);
      // Port D initialization
      // Function: Bit7=Out Bit6=Out Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
      DDRD=(1<<DDD7) | (1<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0);
      // State: Bit7=1 Bit6=1 Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
      PORTD=(1<<PORTD7) | (1<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);
      // Делители таймера 0 рассчитаны таким образом , что его тактовая частота = 15,625 КГц. Расчет был на применение в схеме семисегментников, но с LCD индикатором будет информативнее.
      TCCR0A=(0<<COM0A1) | (0<<COM0A0) | (0<<COM0B1) | (0<<COM0B0) | (0<<WGM01) | (0<<WGM00);
      TCCR0B=(0<<WGM02) | (1<<CS02) | (0<<CS01) | (1<<CS00);
      TCNT0=0x00;
      OCR0A=0x00;
      OCR0B=0x00;
       
      // Настройка таймера 1
      TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10);
      TCCR1B=(1<<ICNC1) | (1<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (0<<CS11) | (1<<CS10);
      TCNT1H=0x00;
      TCNT1L=0x00;
      ICR1H=0x00;
      ICR1L=0x00;
      OCR1AH=0x00;
      OCR1AL=0x00;
      OCR1BH=0x00;
      OCR1BL=0x00;
      // Разрешение прерывания по переполнению таймера 0
      TIMSK0=(0<<OCIE0B) | (0<<OCIE0A) | (1<<TOIE0);
      // Timer/Counter 1 Interrupt(s) initialization
      TIMSK1=(1<<ICIE1) | (0<<OCIE1B) | (0<<OCIE1A) | (1<<TOIE1);
    • Автор: voltex
      Всем привет! Подскажите, пожалуйста, как правильно считать данные с внешней eeprom по шине spi, в данном случае 25LC256.
      Написал код ссылаясь на даташит. Собрал схему в протеусе, подключил spi отладчик и вот что получил в итоге. Так же не могу проверить получается записать данные в память или нет. Весь код прикрепил.
       

      main.c
    • Автор: CUBE
      Не могу запустить асинхронный режим. 
      Ниже будет представлен код которым пытаюсь отладить. Там в 1 коде идёт работа от внутреннего источника таков (стоит 1МГц).  После 5 миганий таймер должен перейти в асинхронный режим и мигать с частотой в 1 Гц. У меня происходит 5 миганий потом ничего. Фьюзы менять пробовал, ничего не дало, сейчас дефолт. Корпус кварца к земле тянуть пробовал - безрезультатно. 
      Возможно что-то в подключении накосячил, если не видно на фото ниже, спрашиваете, нужно будет - нарисую схему. 
      Компилятор Atmel Studio 7
      Шью через Sind Prog 2.1.1 + USBasp 2.0
      Вот код: 
      .macro outi 
       ldi r16, @1 
       out @0, r16 
      .endm 
      .org $000 
      rjmp reset 
      .org $001 
      reti 
      .org $002 
      reti 
      .org $003 
      reti 
      .org $004 
      rjmp timer2_ovf 
      .org $005 
      reti 
      .org $006 
      reti 
      .org $007 
      reti 
      .org $008 
      reti 
      .org $009 
      reti 
      .org $00A 
      reti 
      .org $00B 
      reti 
      .org $00C 
      reti 
      .org $00D 
      reti 
      .org $00E 
      reti 
      .org $00F 
      reti 
      .org $011 
      reti 
      .org $012 
      reti 
      .ORG INT_VECTORS_SIZE 
       
      reset: 
      .equ portout=portd 
      .equ ddrout=ddrd 
      .def led=r17 
      .def mask=r18 
      .def counter=r19 
       outi spl,low(ramend) 
       outi sph,high(ramend) 
       
       outi ddrout, 0xff 
       
       outi tccr2, 0b00000111 
       outi timsk, 1«toie2 
       
        
       
        
       ldi led,1«5 
       ldi mask,1«5 
       sei 
      cycle: 
      cpi counter, 10 
      breq offtim 
       rjmp cycle 
       
      timer2_ovf: 
      inc counter 
       out portout, led 
       eor led, mask 
      reti 
        
      offtim: 
      outi timsk, 0«toie2 
      rjmp asinxron 
       
      asinxron: 
       outi assr, 0b00001000 
      back: 
       in r16, assr 
       cpi r16, 0b00001000 
       brne back 
       
        outi tccr2, 0b00000101 
        outi tcnt2, 0 
        outi ocr2, 0 
        outi timsk, 1«toie2 
       
       
      m1: 
      rjmp m1


      Верх меги на фото слева. 
    • Автор: TheCoolKuid
      Здравствуйте.
      Часто прошивал МК, в один из моментов по программе должна была выставляться единица на 5Б пин. После этого убрал эту функцию, но теперь при включении к питанию МК на любой прошивки пин уходит в ноль и МК не отвечает ни на UART, ни на I2C. Пин не уходит в ноль только на чистом кристалле. Даже если в новой прошивке и слома нет про включение этого пина, он в единице. Может ли это означать, что программная память посыпалась?
      Спасибо.
  • Сообщения

    • Я имел ввиду самолечение. Тот, с гайморитом не захотел, чтобы ему делали очередной прокол с отсосом гноя, а другой от безысходности вытащил батарейки из фонаря. Но, нужно уметь найти точки, для этого нужен острый электрод или знать где они у тебя. Когда-то сделал пару приборов для знакомого врача, аналогов промышленных. Один для лечения по методу Фоля - скопировал сигналы у немецкого, фирменного ( открывать было нельзя, клиника покупала за валюту  ), а другой - копия болгарского " Стимул -1 " по его схеме, только на современной элементной базе. Поэтому в курсе дела.  
    • Да ну. А если будет квадрат или многоугольник? Какая, хрен, разница?!   Что б..?! Че там у тебя скрыто, болезный?! Блин, как ты только такую ересь сочиняешь? Хотя, у тебя ж опыта в страдании херней целых 15 лет... тебе бы к врачу сходить, может это лечится. Что ж ты так мучишься?   Вроде? Нет, ты серьезно, вроде? Ты ж заливал, что уже сделал эту неведомую хрень по особым правилам, а теперь не знаешь, что и где должно получиться! Выходит, пи...л? Особенно хотелось бы посмотреть, чем ты будешь десятые, сотые и тысячные миллиметра отмерять. Да еще и идеально в них попадать сверлом!   Все 19 игл надо вставить в ОДНО отверстие, в анальное. А следом за ними паяльник, дабы в другой раз не возникало желания вешать лапшу на уши окружающих!!!   Это где он такой получается? В воспаленном мозгу создателя?!   Один электрод требуется положить в рот, а другой вставить в ж.пу, иначе целебного эффекта НЕ БУДЕТ. Напряжение лучше повыше подать, дабы ускорить выздоровление! Маразматик, блин, убогий!
    • С управленцами я и так договорился. Это мне стоило гораздо меньше нервов. И причем бесплатно договорился. Но что делать, если эта труба не со стороны подъезда проходит (что очень жаль, я вообще думаю, что труба надо было даже не замуроввывать, ну отапливали бы подъезд, но зато доступ был бы, какой дибил придумал их в КВАРТИРАХ пропускать... учитывая что это как бы общественная собственность). Просто он - конкретный г****н. Честно говоря. Сначала он спорил полчаса и жаловался что якобы ему пыль мешает. Потом стал делать вид что не слышит что ему говорю я и контролер, который был на моей стороне. Честно говоря я думаю все сделать, кроме его соединения потом пойти к нему с слесарями и контролером - и пусть они там сами его уламывают. Может им он не помешает просто срезать трубу и присварить переходник или прикрутить муфту которую тут посоветовали. Но честно, после получаса разговора, причем ему никто не хамил, просто просили по человечески, пусти за свои же деньги просто соединить трубу стояка полотенцесушителя - капец он аргументов понаприводил. Полчаса нервотрепа. Я поэтому и стал сюда писать, так бы давно просто сварщику позвонил и все уже было бы решено. Но совет хороший, я сам об этом думаю. Надо туда ити со слесарем, сварщиком, контролером и вперед их пустить - может он их испугается и не будет мешать))) Что его так смущает - понятия не имею. Он не называет конкретно почему не хочет просто сваркой и болгаркой все сделать. Просто управленцы и так на моей стороне. У нас аварийная ситуация, ес-но бесплатно никто ниче не делает. Даже другие его же соседи на моей стороне. Кроме старого еврея, который именно подо мной живет... Хз, думаю все сделать в последнюю очередь пойти всем вместе к нему, и пусть инспектор сам с ним разговаривает. Он слов не понимает похоже что ему на голову тот кусок ржавой трубы из перекрытия и протечет...
    • Согласен, сбила похожесть на стаб. напряжения. А вот отключать аккум по напряжению - не правильно. Новый аккум одно напряжение по окончанию заряда, старый - другое. Контролировать нужно температуру батарейки.
    • Ну и чем же он принципиально отличается от схемы топикстартера?Та же схема "С ОЭ" - нагрузка в коллекторе, что по-Вашему, не допустимо в ИП. Просто у ТС ток задается резистором в эмиттере и падением напряжения  на 2 открытых диодах. А ОУ служит лишь для отключения тока при достижении заданного напряжения на аккумуляторе. 
      Анатолий, в принципе работать должна, но будет неустойчивая зона при подходе напряжения к порогу. Лучше бы, по=-моему, вместо ОУ компаратор и гистерезис ему организовать небольшой положительной ОС.  
    • Эту схему я нашёл в инете в рукописном виде с явными ошибками (даже мне они очевидны), схемку изучил, перерисовал, но 100% уверенности в её работоспособности нет. В качестве АКБ для фонарика я использую сборку из 4-х NiCd стареньких аккумуляторов типоразмера D, каждый элеменn имеет в номинале 1,2 В 4 Ач.  Это "чудо" в старорежимное время применялось в составе АКБ 12 В 4 Ач для питания военных радиостанций. Столько лет прошло, а NiCd  живёт.