• Объявления

    • admin

      Просьба всем принять участие!   24.11.2017

      На форуме разыгрывается спектроанализатор Arinst SSA-TG LC (цена 18500 руб). Просьба всем перейти по ссылке ниже и принять участие!

a_sergeevich

Members
  • Публикации

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

  • Посещение

Репутация

3 Обычный

О a_sergeevich

  • Звание
    Постоялец
  • День рождения 04.05.1979

Контакты

  • ICQ
    361374626

Информация

  • Пол
    Мужчина
  • Интересы
    Электроника,компьютеры
  • Город
    Ямало-Ненецкий АО
  1. Вопросы От Начинающих - 4

    Переделал, убрал один делитель, теперь всё работает.
  2. Вопросы От Начинающих - 4

    Померял напругу на входе ИУ она тоже -2в, как только выход делителя отсоединяешь, напруга с него снова становится -4.97в, как только присоединяю обратно на вход ИУ тут же проседает до -2 в, соответственно на выходе получаю +2в, что тут может подсаживать напругу ?
  3. Вопросы От Начинающих - 4

    Подскажите, пожалуйста, собрал двухполярный БП, теперь хочу сделать для него вольтметр на мк, с положительным каналом проблем нет, через делитель и на мк, а вот с отрицательным возникли проблемы, делаю инвертирующий усилитель на оу с ку = -1 и подаю ему на вход -5 вольт с делителя и по идее на выходе ИУ должен получить +5 вольт и в протеусе всё так и получается, но на практике на выходе получаю +2 вольта.
  4. Сергей Викторович, молодец и что самое главное наконец-то хоть кто-то нанёс надписи на русском языке, а не на английском.
  5. Таймер Т0 Прерывание По Совпадению

    Не подходит в том виде, в котором ты его решил применить, но если по раскинуть мозгами то можно всё сделать и с этим режимом и даже используя прерывания по совпадению с OCR0A и с OCR0B, всё, что описано в даташите по отношению к регистрам TCCR0A и OCR0A применимо к TCCR0B и OCR0B, улавливаешь, направление ?
  6. Таймер Т0 Прерывание По Совпадению

    На тиньку 2313 есть даташит на русском, Leo, потрудись скачать его и прочитать если действительно хочешь разобраться.
  7. Таймер Т0 Прерывание По Совпадению

    Всем кто тут пишет, что в аттини 2313 у таймера Т0 нету регистров OCR0A и OCR0B, рекомендую к прочтению даташит на данный мк. ТС рекомендую почитать даташит на данный мк начиная со страницы 68, чтобы не пытаться впихнуть не впихуемое т.к для того, чтобы понять свою ошибку и то,что такая программа работать не будет там буквально нужно прочитать пару предложений. Ладно даже приведу тут кусочек "В СТС-режиме значение Регистра Счетчика TCNT0 сбрасывается в нули, если значение TCNT0 соответствует значению, записанному в Регистр Сравнения OCR0A." , надеюсь теперь ясно ? И впредь всегда читай документацию, а не смотри на визарды в CV и да, правильный совет дали, поставь студию, а то от этой кучи нужных и ненужных комментариев в глазах рябит.
  8. Частотомер На Atmega16

    А Вы считаете, что железо в Вашем компе "поумнеет" за 5 лет ? Не пыталсь его апгрейдить ? Так и имелось в виду, что это с апгрейдом, что 5-ти летней давности железо ложилось, что современное, ложится также даже не пикнув. i-5 3570К 3.5 Ггц и 8 гиг оперативки.
  9. Частотомер На Atmega16

    Тоже пытался такое проделать в протеусе, но также, загрузка процессора на 100%, причём так было 5 лет назад и так же сейчас.
  10. Примеры Кода Для Avr

    Хорошо. Не хотите, как хотите, я так понял рассуждение про высокие материи и кому, что надо интереснее. Короче может кому сгодится тут много всяких библиотек, в том числе и для 7-ми сегментного индикатора: http://chipenable.ru/index.php/programming-avr/item/206-biblioteka-dlya-semisegmentnogo-indikatora-s-proizvolnym-podklyucheniem-vyvodov.html там парняга не рассуждает, а просто делает, я хотел сделать, что-то подобное, но менее навороченное, может, короче, ладно.
  11. Примеры Кода Для Avr

    Код, представленный выше полностью рабочий. Я имел ввиду, что может стоило бы оформить код для семисегментника в подключаемую библиотеку ну и может то, что я привёл выше, можно написать как-то лучше. А библиотеку сделать стоит, ведь делают библиотеки для ЖК, ну и другим людям проще будет. Тема как я понимаю именно для этого создана. Ну и самое главное я не прошу кого-то всю работу сделать, давайте вместе отшлифуем код который выше и сделаем библиотеку. И хватит рассуждать о тонких материях, или делаем или нет. Сразу о затруднения своих, я не знаю как вообще делать библиотеки. Давайте, гуру, подключайтесь не гос.тайну раскрывает
  12. Работа С Семисигментным Индикатором В Bascom Avr

    Зайди в тему примеры кода я там выложил код для 7-ми сегментного индикатора, правда на Си, но перевести его на бейсик я думаю можно, главное суть понять.
  13. Примеры Кода Для Avr

    Искал я искал в интернете готовую библиотеку динамической индикации для авр, чтобы можно было выводить дробные числа, отрицательные, но ничего не нашёл, только примеры, которых просто тьма, где просто показывается как выводить положительные, целые числа. Вернее найти нашёл, но там библиотека какая-то уж больно замудрёная навороченая и она у меня так и не заработала, нет, с помощью неё я вывел число на индикатор, но мерцание подавить мне не удалось, никак, хотя может я что-то не так делал. Короче вот хочу выложить свой код, всё его описание есть в комментариях, может кому-то поможет, кто также не смог найти готовое решение. Ладно, не судите строго я с авр вообще только начал знакомиться, приветствуются всяческие замечания, исправления, тыканье носом в косяки, короче надо создать всем народом, нормальную, понятную, библиотеку для управления 7-ми сегментными индикаторами. Только не надо мне предлагать перейти на ЖК индикатор, конечно у него много плюсов и для него проще писать программу, но на улице в мороз лучше 7-ми сегментного индикатора никто ничего ещё не придумал, но речь не об этом. Код: /* * _1111.c * * Created: 06.12.2014 22:32:48 * Author: a_sergeevich * МК: Atmega8A * Код для вывода на светодиодные 7-ми сегментные индикаторы чисел, положительных, отрицательных, целых, дробных. * Т.к код писался под 4-х разрядный индикатор то диапазон выводимых чисел ограничен для целых -999...999 * для дробных -99.9..99.9, ограничение связано с тем, что первый разряд используется для знака. * Данный код подходит для создания вольт -амперметров, термометров и др устройств где * выводимые диапазоны чисел не превышают указанные выше диапазоны. Если в вашем устройстве нету * дробных и отрицательных чисел, код легко переделывается для вывода чисел в диапазоне от 0...9999. * Так же можно доделать код для вывода чисел в диапазоне от -999..9999 и -99.9..999.9, но мне не охота */ //текст программы написан для индикатора с ОА для переделки под индикатор с ОК смотри комментарии ниже #define F_CPU 4000000UL //задаём частоту работы МК 4 МГц #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> //объявляем массив цифр для вывода на индикатор, значения приведены для индикатора с ОК unsigned char segment [] = {0x3f, 0x6, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x7, 0x7f, 0x6f, 0x40, 0x00}; //объявляем глобальные переменные для хранения разложенного числа по разрядам unsigned char raz1, raz2, raz3,raz4; //флаг отрицательного числа unsigned char minus; //переключатель разрядов, флаг точки unsigned char count, column; //объявляем вектор прерывания таймера Т0 по переполнению ISR (TIMER0_OVF_vect) { //тут мы очищаем PORTB,включаем разряд PORTD и записываем в PORTB значение. Для индикатора с ОК убрать //инвертирование в строке ~segment[razХ], а строку PORTD=Х наоборот проинвертировать, например, PORTD=~8 //также изменить строку PORTB|=127 на PORTB &=~(127) if(count==0) { PORTD=8; PORTB = ~segment[raz1]; } if((count==1)&&(column==1)) { PORTD=4; PORTB = ~segment[raz2]; PORTB &=~(1<<PB7);} if((count==1)&&(column==0)) { PORTD=4; PORTB = ~segment[raz2];} if(count==2) { PORTD=2; PORTB = ~segment[raz3]; } if(count==3) { PORTD=1; PORTB = ~segment[raz4]; } //это строка отвечает за минус count+=1; //счетчик разрядов if(count==4) count = 0; } //функция инициализации портов void Init_port ( void ) { //PORTB на выход DDRB = 0xFF; //Записываем в PORTB нули PORTB = 0x00; // PD0,PD1,PD2,PD3 на выход при необходимости использовать остальные пины, сконфигурируйте их как вам надо DDRD = 0xF; //Записываем в PORTD нули PORTD = 0x00; } //инициализация таймера Т0 void Init_timer ( void ) { //устанавливаем предделитель в 8 TCCR0 = 0x2; //разрешаем прерывание по переполнению TIMSK = 0x1; } //функция разложения числа на единицы, десятки, сотни void Pereschet ( int tmp ) { //раскладываем число на отдельные разряды raz1 = tmp % 10; raz2 = ( tmp % 100 ) / 10; raz3 = ( tmp % 1000 ) / 100; //гасим не используемые разряды для целых положительных чисел if ((raz2==0)&&(raz3==0)&&(minus==0)&&(column==0)) {raz2=11;raz3=11;raz4=11;} if ((raz3==0)&&(minus==0)&&(column==0)) {raz3=11; raz4=11;} if ((tmp >= 100)&&(minus==0)&&(column==0)) raz4 = 11; //гасим не используемые разряды и двигаем знак минуса для целых отрицательных чисел if ((raz2==0)&&(raz3==0)&&(minus==1)&&(column==0)) {raz2=10;raz3=11;raz4=11;} if ((raz3==0)&&(minus==1)&&(column==0)) {raz3=10; raz4=11;} if ((tmp >= 100)&&(minus==1)&&(column==0)) raz4 = 10; //гасим не используемые разряды для дробных положительных чисел if ((raz3==0)&&(raz2==0)&&(column==1)&&(minus==0)) {raz4=11;raz3=11;raz2=0;} if ((raz3==0)&&(minus==0)&&(column==1)) {raz3=11; raz4=11;} if ((tmp >= 99.9)&&(minus==0)&&(column==1)) raz4 = 11; //гасим не используемые разряды и двигаем минус для дробных отрицательных чисел if ((raz3==0)&&(raz2==0)&&(column==1)&&(minus==1)) {raz4=11;raz3=10;raz2=0;} if ((raz3==0)&&(minus==1)&&(column==1)) {raz3=10; raz4=11;} if ((tmp >= 99.9)&&(minus==1)&&(column==1)) raz4 = 10; } //в этой функции проверяется дробное число или целое, если дробное то число умножается на 10 и выставляется флаг //для зажигания точки. Точность будет до 1 знака после запятой.Также проверяем отрицательное число или положительное. int proverka ( float chislo ) { if (((int)(chislo))== chislo) column = 0; else { column = 1; chislo = chislo * 10; } unsigned char flag = 0; //проверяем отрицательное число или положительное if ( chislo < 0 ) {chislo = chislo * -1; minus = 1; flag = 1;} if (( chislo >= 0)&&(flag==0)) minus = 0; return (int)(chislo); } int main(void) { Init_port(); Init_timer(); //разрешаем глобальные прерывания sei(); float a = 994; //код для проверки int b; //код для проверки while(1) { b = proverka(a); //код для проверки if (b > 999 ) {a =0; b=0;} //код для проверки Pereschet(; a = a + 1; //код для проверки //_delay_ms(500); //код для проверки } }
  14. Попробовал, мнение такое, разработка, конечно заслуживает большого уважения, но хотелось бы обратить внимание разработчика на то, что в проекте нет наглядности при составлении программы, т.е нельзя сесть и за минут десять сделать, например термометр. Т.е надо или примеры работы с каждым блоком добавить или нормальное описание каждого блока, за пример для подражания, в хорошем смысле, посоветую взять Codesys с ее языками FBD и CFC.