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

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

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

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

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

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

    • Автор: Сергей Ч.
      Здравствуйте уважаемые форумчане!!! собрал себе очередной зарядник для автомобильного аккумулятора  
       
      схема была взята вот отсюда : http://kravitnik.narod.ru/charge/charge_8.html
      запустился сразу,но выходной ток регулируется в самом крайнем положении движка потенциометра. подборка r19 не не помогла. может кто сталкивался с подобным схемным решением? где собака зарыта.........
    • Автор: 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);
    • Автор: 55nlo
      Нужно написать программу "календарь" на АСМ
      Примерное ТЗ 
       
       
      1    5     по значению R0 (ввода)  в R20 вводим табличные значения        табл.1        
      1    6     по значению R0 (ввода)  в R21 вводим табличные значения        табл.1        
      1    7    NOP     (возможно доп. Команда)                 
      1    8    NOP     (возможно доп. Команда)           
      1    9    значение ОЗУ (адрес Rz) копируем в регистр R18(остаток)                
      1    10    R18(остат) прибавляем R24(лист) результат в R18(остат)                 
      1    11    провер. R18(остат) < 8, то п.12, нет то  R18(остат) -7, результат в R18(остат) и к п.12.                
      1    12    R 18(остат)  копируем в ОЗУ адрес Rz                
      1    13    адрес Rz увеличиваем на 1                
      1                        
      1    14    R19(стр.) увелич. на 1, проверяем Rстр =13.если не равно, п. 15. если  равно, то                 
      1             R19 стр. обнуляем, Rлиста увеличиваем на 1,             
      1            Rлиста если не =13, то к п. 9, если равно 13,             
      1            то  R17(листа) обнуляем и перех к п. 2.5(2-й участок, следующий)            
      1                        
      1    15    R18(ост.)+ 1 = в R18(ост.)                
      1    16    проверяем R18(ост) больше 10, если больше то -10, результат в R18(ост) и в п. 17 нет, то п. 17                
      1    17    значение ОЗУ (адрес Rz  текущий) копируем в R25сравн.                
      1    18    R25(сравн.) увелич на 1                
      1    19    R1(книги) установить значение "2"                
      1    20    NOP           (возможно доп. Команда)     
      1    21    NOP          (возможно доп. Команда)            
      1    22   R18(ост) =R20? если не равно ,то к 23, равно, то R сравн. обнуляем заносим 0 в ОЗУ и к п.13            
      1    23    R18(ост)=R21,если не равно, то к 24,    равно    то R сравн. обнуляем, заносим 0 в ОЗУ и к п.13            
      1    24    R25(сравн.) в ОЗУ (текущий) адрес Rz                
      1    25    R25(сравн.) более 20, то к п. 26. менее.то перех к п. 13                
      1    26    R учета =Rсравн.? да к п. 27 нет к п. 13                
      1    27    R7 обнуляем                
      1    28    R18(остат) копируем в Rморзе                 
      1    29    R7+ Rлиста в R7                
      1    30    проверяем R7  больше 12, если больше то -12, результат в R7 и к п. 31, нет к п. 31                
      1    31    R7  значение конвертируем через таблицу  в R7          табл.1м        
      1    32    Выполняем  прогу "М".                
      1    33    переходим к п.13             
       + ДВЕ ТАБЛИЦЫ ПО 40 СТРОК.   
    • Автор: voltex
      Всем привет! Подскажите, пожалуйста, как правильно считать данные с внешней eeprom по шине spi, в данном случае 25LC256.
      Написал код ссылаясь на даташит. Собрал схему в протеусе, подключил spi отладчик и вот что получил в итоге. Так же не могу проверить получается записать данные в память или нет. Весь код прикрепил.
       

      main.c
    • Автор: Dominico
      Необходимо выполнить реверсивный счетчик в 10 разрядов для подключения его к ЦАП 572ПА1, чтобы в итоге получить треугольный ступенчатый сигнал. С программировнием на "ваше высочество", но хочу попробовать. Подскажите пожалуйста, на каком микроконтроллере это можно лучше сделать, и в каком направление "копать"
  • Сообщения

    • идеи-то есть, но пока не хочу выкладывать все карты. А вдруг не потяните или обленитесь? Фалконист правильно говорит, что штатное опорное напряжение - 2,5В, поэтому, регулируя сопротивление в цепи ООС, ниже 2,5В на выходе не получите. Использовать канал +3,3В неправильно (он всегда вотричный по отношению к +5В), надо брать канал +5В и его регулировать вниз. Есть и другие моменты, например, необходим переход в режим стабилизации тока или нет? Необходимо отключить Работу супервизора или сделать так, чтобы он не блокировал работу ШИМ-контроллера при выходе напряжения за пределы допуска. Целая схема вырисовывается. А её ни у кого нет. Если ИИП на TL494. Чтобы получать напряжение в более широком диапазоне, надо регулировать опорное, а не ООС, потенциометром к +5В ref. А вход ООС завести напрямую, без делителя. Для регулирования Iогр, надо второй переменник также включить потенциометром. Установить шунт, подключить его ко второму усилителю, демонтировать супервайзер, удалить лишние каналы. Собрав все, придется подбирать компенсацию ООС тока и напряжения. В общем, работенка ))    
    • Уберите детей от мониторов ваших компьютеров. Я порвался.
    • Ну так там где то и спрашивай.
    • Окститесь. Транзистор включен, как источник тока.
    • Транзистор включен как генератор тока, правильно. Это ЗУ  будет заряжать стабильным током. Вот диоды с базы на + выпрямителя включены наоборот.  Поспешил. Правильно диоды включены. Первый конденсатор очень малой емкости надо не меньше 500 мкФ.Транзистор надо подобрать с В не меньше 40, иначе ОУ может не дать достаточный ток в базу. Транзистор  установить на приличный радиатор, на нем может выделяться до 6 Вт тепла. Со схемой индикации не разбирался.
    • Резюмирую, как электрофизиолог (ЭМГ + мед. соисполнитель по разработке электростимуляторов): Длиннючая лапша на уши для лохов.
    • Мне одному, наверное не повезло с «алишными» винтами(((  Остался без увеселителя... дочка наказала шоб на Новый год была музыка))) придётся сваять. В итого, пофик кто что думает, и на передней, и на задней панели будут винты... усел будет оч бюджетная балалайка 7293 MF-1, не спрашивайте почему... так решил в запасе ещё 10 кг радиаторов)