Jump to content

a_sergeevich

Members
  • Posts

    328
  • Joined

  • Last visited

Posts posted by a_sergeevich

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

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

    as.png

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

  4. Всем кто тут пишет, что в аттини 2313 у таймера Т0 нету регистров OCR0A и OCR0B, рекомендую к прочтению даташит на данный мк. ТС рекомендую почитать даташит на данный мк начиная со страницы 68, чтобы не пытаться впихнуть не впихуемое т.к для того, чтобы понять свою ошибку и то,что такая программа работать не будет там буквально нужно прочитать пару предложений.

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

  5. причём так было 5 лет назад и так же сейчас.
    А Вы считаете, что железо в Вашем компе "поумнеет" за 5 лет ? :) Не пыталсь его апгрейдить ? :)

    Так и имелось в виду, что это с апгрейдом, что 5-ти летней давности железо ложилось, что современное, ложится также даже не пикнув. i-5 3570К 3.5 Ггц и 8 гиг оперативки.

  6. Вопрос конечно не по теме. Но все таки. А Proteus может работать в многопоточном режиме? А то я пытаюсь в signal generator выставить частоту в 8MHz и программа ложится. Потому что ядро процессора загружается на 100%.

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

  7. Хорошо. Не хотите, как хотите, я так понял рассуждение про высокие материи и кому, что надо интереснее.

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

  8. Надо правильно произвести декомпозицию задачи. У вас оно как-то сумбурно, может поэтому и не работает - фиг отследишь.

    В первую очередь надо сделать всего одну вещь - код который умеет выводить содержимое ячеек памяти на индикатор - т.е. он будет просто перебирать знакоместа по очереди и загружать туда напрямую из соответствующих ячеек памяти состояние зажженных сегментов. Этот код достаточно прост чтобы там сильно накосячить - если он заработает то будет работать стабильно.

    Вторая часть задачи - это сделать код который будет разбирать число на цифры и ставить в нужном месте точку... и кажется, его изобрели 20 лет назад и он называется... функция printf... один недостаток - много места занимает.

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

  9. Хочу узнать как управлять семисигментником безо всяких сдвиговых регистров.

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

  10. Искал я искал в интернете готовую библиотеку динамической индикации для авр, чтобы можно было выводить дробные числа, отрицательные, но ничего не нашёл, только примеры, которых просто тьма, где просто показывается как выводить положительные, целые числа. Вернее найти нашёл, но там библиотека какая-то уж больно замудрёная навороченая и она у меня так и не заработала, нет, с помощью неё я вывел число на индикатор, но мерцание подавить мне не удалось, никак, хотя может я что-то не так делал. Короче вот хочу выложить свой код, всё его описание есть в комментариях, может кому-то поможет, кто также не смог найти готовое решение.

    Ладно, не судите строго я с авр вообще только начал знакомиться, приветствуются всяческие замечания, исправления, тыканье носом в косяки, короче надо создать всем народом, нормальную, понятную, библиотеку для управления 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);    //код для проверки
    
       }
    }
    

  11. Попробовал, мнение такое, разработка, конечно заслуживает большого уважения, но хотелось бы обратить внимание разработчика на то, что в проекте нет наглядности при составлении программы, т.е нельзя сесть и за минут десять сделать, например термометр. Т.е надо или примеры работы с каждым блоком добавить или нормальное описание каждого блока, за пример для подражания, в хорошем смысле, посоветую взять Codesys с ее языками FBD и CFC.

  12. Мысль была подсчитывать не количество пришедших тактов, а подсчитывание количество тактов микроконтроллера в промежутке старта прерывания и до появления входного сигнала. Паузу (1с) делал что бы не нагружать микроконтроллер, иначе ничего показывать не будет. В прервывании T2 я было добавил сброс t2 на 0. Самое удивительное потом после первого подсчета и сброса t2 почуму-то t2 не инкрементировался хотя пауза делалась. Очень странно.

    Но да ладно. Я в очередной раз переделал проект, теперь он работает до 12кГц, с погрешностью 10Гц. А если дальше гнать то погрешнать будет больше. Жалко что нельзя измерять до пару МГц. Ну да ладно.

    Да ладно, нельзя. Для начала сделай простой вариант. 8-ми битным таймером отмеряешь секунду с помощью предделителя и подсчёта кол-ва переполнений в прерывании , 16-ти битный таймер настраиваешь на счёт по внешнему входу и прерывание по переполнению, считаешь в обработчике прерываний их количество, предделитель у него ставишь 1. Как только у тебя наберётся количество прерываний 8-битного таймера равные 1 секунде, запрещаешь все прерывания и выключаешь 16 битный таймер, далее количество прерываний этого таймера будет старшим байтом, старший регистр таймера, средним, младший регистр таймера, младшим затем объединяешь эти байты так, чтобы они расположились в той последовательности как написал выше и получаешь число измеренной частоты в герцах, дальше для отображения можешь преобразовывать его в килогерцы, мегагерцы. Разрешающая способность такого частотомера будет 1 герц как минимум и частоту ты мерять сможешь как минимум до 16 мегагерц. Как реализуешь этот вариан, делай для низкой частоты блок где будешь мерять период тогда можно будет переключаться между ними.

  13. Почему у тебя в программе нету так называемого антидребезга, в протеусе может и будет работать, а в реале нет, а учиться правильно делать надо сразу, чтобы потом не было вопросов типа, почему в протеусе пашет, а в железе нет.

    Реализуется с помощью цикла for

    if (var & ( 1<< n )) кнопка нажата

    {

    for ( i=0; i <= 10; i++ ); выдержка

    if (var & ( 1<< n )) снова проверяем нажата ли кнопка

    { выполняем все необходимые действия }

    }

    Короче как-то так.

  14. Всем привет. Давно я сюда не заходил, занят был очень сильно. Я тут прочитал пару страничек и увидел, что у некоторых возникают проблемы и вопросы по микроСи.

    Чтож, раз не хотят люди читать первые странички темы то продублирую. Информацию по работе в микроСи можно почерпнуть в журналах Радиоаматор 2006 год с 4 по 9 номер, скачать можно тут: http://www.ddrservic...ioamator/2006/.

    Так же отличная ветка на форуме в которой проводится обучение именно на примере микроСи, советую для изучения: http://bvf.ru/forum/...ad.php?t=384474

    Ну и не поленитесь найти русский хелп к самому микроСи в интернете ссылок куча, поэтому приводить тут не буду.

    Всем удачи в освоении МК.

  15. В магазине где я покупал и сайт который привёл всё это можно заказать по почте, цена увеличится всего лишь на сумму доставки, примерно от 200 до 300 рублей. Много людей в инете заказывают у них паяльное оборудование. Чем самому лепить, возьми лучше паяльную станцию LUKEY 702 и чуток её дороботай, инфы по ней в нете полно. Стоит она в сириусе 3200.

  16. Приобрёл себе недавно типа паяльного набора :) .

    А именно, паяльную станцию ATTEN AT938D и термофен AOYUE 8032A++ . Сначала хотел взять LUKEY 702 и в принципе пришёл я за ней, но не понравилась она мне в живую, поэтому прямо в магазине и изменил свой выбор. Приобретением очень доволен.

    Вот несколько фотографий данных девайсов.

    4a619229bea8.jpg

    Фен и паяльная станция в коробках.

    2fc9800735aa.jpg

    Паяльная станция в сборе. Сразу были куплены запасные жала 936 и Hakko.

    5d69b99b0293.jpg

    Включил :)

    79b1af8fb273.jpg

    Термофен. В комплекте 4-ре насадки.

    Кстати девайсы по раздельности довольно удобно, особенно это касается фена.

    Короче вот такой я сделал выбор для себя, может быть это поможет кому-то с выбором.

  17. Антиресно,с каких пор 544 серия стала дефицитом?Лень зад поднять со стула?Прислать?

    Ну конечно лень поднять зад со стула, знаете ли, как-то напрягает ехать за тремя кр544уд1а целых 2000 км, именно столько до ближайшего магазина где они продаются. И в инете заказывать не вариант, ждать месяц пока они дойдут, что-то тоже не охота, именно столько времени в среднем идут посылки до нас из Москвы. Ещё будут вопросы ?

    Короче, завтра поставлю ТЛ071 и проверю, хотел сегодня, но не получилось, других дел была куча.

  18. Да именно такое +16 -5 вольт, оно и по схеме такое. Правда у остальных оперов питание +12 -5. Там на плате, да и по схеме, для этого стоят два интегральных стаба один на +12 вольт, второй на -5 вольт. +16 вольт обеспечивает стабилизатор на транзисторе.

    Вот и думаю пойдут ли вместо кр544уд1а, ТЛ071 как они проглотят такое кривое питание ?

×
×
  • Create New...