Jump to content

a_sergeevich

Members
  • Content Count

    328
  • Joined

  • Last visited

Everything posted by a_sergeevich

  1. Переделал, убрал один делитель, теперь всё работает.
  2. Померял напругу на входе ИУ она тоже -2в, как только выход делителя отсоединяешь, напруга с него снова становится -4.97в, как только присоединяю обратно на вход ИУ тут же проседает до -2 в, соответственно на выходе получаю +2в, что тут может подсаживать напругу ?
  3. Подскажите, пожалуйста, собрал двухполярный БП, теперь хочу сделать для него вольтметр на мк, с положительным каналом проблем нет, через делитель и на мк, а вот с отрицательным возникли проблемы, делаю инвертирующий усилитель на оу с ку = -1 и подаю ему на вход -5 вольт с делителя и по идее на выходе ИУ должен получить +5 вольт и в протеусе всё так и получается, но на практике на выходе получаю +2 вольта.
  4. Сергей Викторович, молодец и что самое главное наконец-то хоть кто-то нанёс надписи на русском языке, а не на английском.
  5. Не подходит в том виде, в котором ты его решил применить, но если по раскинуть мозгами то можно всё сделать и с этим режимом и даже используя прерывания по совпадению с OCR0A и с OCR0B, всё, что описано в даташите по отношению к регистрам TCCR0A и OCR0A применимо к TCCR0B и OCR0B, улавливаешь, направление ?
  6. На тиньку 2313 есть даташит на русском, Leo, потрудись скачать его и прочитать если действительно хочешь разобраться.
  7. Всем кто тут пишет, что в аттини 2313 у таймера Т0 нету регистров OCR0A и OCR0B, рекомендую к прочтению даташит на данный мк. ТС рекомендую почитать даташит на данный мк начиная со страницы 68, чтобы не пытаться впихнуть не впихуемое т.к для того, чтобы понять свою ошибку и то,что такая программа работать не будет там буквально нужно прочитать пару предложений. Ладно даже приведу тут кусочек "В СТС-режиме значение Регистра Счетчика TCNT0 сбрасывается в нули, если значение TCNT0 соответствует значению, записанному в Регистр Сравнения OCR0A." , надеюсь теперь ясно ? И впредь всегда читай документацию, а не смотри на визарды в CV и да, правильный совет дали, поставь студию, а то от этой кучи нужных и ненужных комментариев в глазах рябит.
  8. А Вы считаете, что железо в Вашем компе "поумнеет" за 5 лет ? Не пыталсь его апгрейдить ? Так и имелось в виду, что это с апгрейдом, что 5-ти летней давности железо ложилось, что современное, ложится также даже не пикнув. i-5 3570К 3.5 Ггц и 8 гиг оперативки.
  9. Тоже пытался такое проделать в протеусе, но также, загрузка процессора на 100%, причём так было 5 лет назад и так же сейчас.
  10. Хорошо. Не хотите, как хотите, я так понял рассуждение про высокие материи и кому, что надо интереснее. Короче может кому сгодится тут много всяких библиотек, в том числе и для 7-ми сегментного индикатора: http://chipenable.ru/index.php/programming-avr/item/206-biblioteka-dlya-semisegmentnogo-indikatora-s-proizvolnym-podklyucheniem-vyvodov.html там парняга не рассуждает, а просто делает, я хотел сделать, что-то подобное, но менее навороченное, может, короче, ладно.
  11. Код, представленный выше полностью рабочий. Я имел ввиду, что может стоило бы оформить код для семисегментника в подключаемую библиотеку ну и может то, что я привёл выше, можно написать как-то лучше. А библиотеку сделать стоит, ведь делают библиотеки для ЖК, ну и другим людям проще будет. Тема как я понимаю именно для этого создана. Ну и самое главное я не прошу кого-то всю работу сделать, давайте вместе отшлифуем код который выше и сделаем библиотеку. И хватит рассуждать о тонких материях, или делаем или нет. Сразу о затруднения своих, я не знаю как вообще делать библиотеки. Давайте, гуру, подключайтесь не гос.тайну раскрывает
  12. Зайди в тему примеры кода я там выложил код для 7-ми сегментного индикатора, правда на Си, но перевести его на бейсик я думаю можно, главное суть понять.
  13. Искал я искал в интернете готовую библиотеку динамической индикации для авр, чтобы можно было выводить дробные числа, отрицательные, но ничего не нашёл, только примеры, которых просто тьма, где просто показывается как выводить положительные, целые числа. Вернее найти нашёл, но там библиотека какая-то уж больно замудрёная навороченая и она у меня так и не заработала, нет, с помощью неё я вывел число на индикатор, но мерцание подавить мне не удалось, никак, хотя может я что-то не так делал. Короче вот хочу выложить свой код, всё его описание есть в комментариях, может кому-то поможет, кто также не смог найти готовое решение. Ладно, не судите строго я с авр вообще только начал знакомиться, приветствуются всяческие замечания, исправления, тыканье носом в косяки, короче надо создать всем народом, нормальную, понятную, библиотеку для управления 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.
  15. Да я сам с авр только разбираюсь, а пример привёл по образу как на пике делал.
  16. Да ладно, нельзя. Для начала сделай простой вариант. 8-ми битным таймером отмеряешь секунду с помощью предделителя и подсчёта кол-ва переполнений в прерывании , 16-ти битный таймер настраиваешь на счёт по внешнему входу и прерывание по переполнению, считаешь в обработчике прерываний их количество, предделитель у него ставишь 1. Как только у тебя наберётся количество прерываний 8-битного таймера равные 1 секунде, запрещаешь все прерывания и выключаешь 16 битный таймер, далее количество прерываний этого таймера будет старшим байтом, старший регистр таймера, средним, младший регистр таймера, младшим затем объединяешь эти байты так, чтобы они расположились в той последовательности как написал выше и получаешь число измеренной частоты в герцах, дальше для отображения можешь преобразовывать его в килогерцы, мегагерцы. Разрешающая способность такого частотомера будет 1 герц как минимум и частоту ты мерять сможешь как минимум до 16 мегагерц. Как реализуешь этот вариан, делай для низкой частоты блок где будешь мерять период тогда можно будет переключаться между ними.
  17. Ну вот я и вернулся сюда, за это время много через, что пришлось пройти, но главное интерес к электронике не пропал не смотря ни на что. Начал изучать плотно AVR :)

  18. Почему у тебя в программе нету так называемого антидребезга, в протеусе может и будет работать, а в реале нет, а учиться правильно делать надо сразу, чтобы потом не было вопросов типа, почему в протеусе пашет, а в железе нет. Реализуется с помощью цикла for if (var & ( 1<< n )) кнопка нажата { for ( i=0; i <= 10; i++ ); выдержка if (var & ( 1<< n )) снова проверяем нажата ли кнопка { выполняем все необходимые действия } } Короче как-то так.
  19. Всем привет. Давно я сюда не заходил, занят был очень сильно. Я тут прочитал пару страничек и увидел, что у некоторых возникают проблемы и вопросы по микроСи. Чтож, раз не хотят люди читать первые странички темы то продублирую. Информацию по работе в микроСи можно почерпнуть в журналах Радиоаматор 2006 год с 4 по 9 номер, скачать можно тут: http://www.ddrservic...ioamator/2006/. Так же отличная ветка на форуме в которой проводится обучение именно на примере микроСи, советую для изучения: http://bvf.ru/forum/...ad.php?t=384474 Ну и не поленитесь найти русский хелп к самому микроСи в интернете ссылок куча, поэтому приводить тут не буду. Всем удачи в освоении МК.
  20. В магазине где я покупал и сайт который привёл всё это можно заказать по почте, цена увеличится всего лишь на сумму доставки, примерно от 200 до 300 рублей. Много людей в инете заказывают у них паяльное оборудование. Чем самому лепить, возьми лучше паяльную станцию LUKEY 702 и чуток её дороботай, инфы по ней в нете полно. Стоит она в сириусе 3200.
  21. Я для травления плат использую аквариумную грелку и компрессор, травление происходит довольно быстро.
  22. Да, конечно, просто забыл. Итак стоимость: Паяльная станция 1850 руб. Термофен 2882 руб. Жала для паяльника 1068 руб. Итого 5800 руб. Всё покупал в Петербурге, магазин "Профи" . Их сайт: siriust.ru.
  23. Приобрёл себе недавно типа паяльного набора . А именно, паяльную станцию ATTEN AT938D и термофен AOYUE 8032A++ . Сначала хотел взять LUKEY 702 и в принципе пришёл я за ней, но не понравилась она мне в живую, поэтому прямо в магазине и изменил свой выбор. Приобретением очень доволен. Вот несколько фотографий данных девайсов. Фен и паяльная станция в коробках. Паяльная станция в сборе. Сразу были куплены запасные жала 936 и Hakko. Включил Термофен. В комплекте 4-ре насадки. Кстати девайсы по раздельности довольно удобно, особенно это касается фена. Короче вот такой я сделал выбор для себя, может быть это поможет кому-то с выбором.
  24. Ну конечно лень поднять зад со стула, знаете ли, как-то напрягает ехать за тремя кр544уд1а целых 2000 км, именно столько до ближайшего магазина где они продаются. И в инете заказывать не вариант, ждать месяц пока они дойдут, что-то тоже не охота, именно столько времени в среднем идут посылки до нас из Москвы. Ещё будут вопросы ? Короче, завтра поставлю ТЛ071 и проверю, хотел сегодня, но не получилось, других дел была куча.
×
×
  • Create New...