Jump to content

Recommended Posts

@IMXO конечно представляю)) я так не делаю) просто такие подходы реально логику развивают. Когда на простом примере показывают и потом почему-то времени это занимает много, начинаешь искать другие варианты. А так как самый простой пример наглядно показывает свою работу( как говорится на пальцах) то потом легче найти решение. Керниган и Ритчи сделали своё дело))) не жалею 2к которые за книгу отдал))

@si4karuk Ну у имхо там тоже все просто. В темп кидаете маску порта, потом переменную свою которая киллчтототам с этой маской пропускаете через логическое «и» с записью в старшую тетраду байта и сдвигом на 2 бита влево и они у вас встают на ваши 2,3,4,5 биты порта

Edited by Viktor26

Share this post


Link to post
Share on other sites
19 минут назад, Viktor26 сказал:

которая киллчтототам 

Кількість - количество

 

TB2OuS1Xp55V1Bjy1XcXXXQjFXa_!!2849917893

Вот что мы делали. На МК.:blink:

Share this post


Link to post
Share on other sites

@si4karuk вот всегда интересовало куда их применять? На ум приходит только «энигма» в современной энтерпритации)))

Share this post


Link to post
Share on other sites

Высококачественные конденсаторы Panasonic для надежности вашей электроники!

Электролитические алюминиевые конденсаторы Panasonic отличаются повышенной надежностью, длительным сроком службы, низким импедансом и выдерживают большой ток пульсаций, в то время как семейства полимерных конденсаторов Panasonic SP-CAP, POSCAP, OS-CON и HYBRID характеризуют сверхнизкий ESR и увеличенная емкость, работа при высоких напряжениях и в расширенном температурном диапазоне. Приобретая продукцию Panasonic, вы гарантированно получаете самое передовое решение для ваших задач. Для облегчения вашего выбора, мы подготовили подборку полезных материалов.

Читать статьи

Так получилось, что в одном интересном устройстве, надо было часто крутить эту штуку (Rotary Encoding Switch 4-bit ). Во первых это было неудобно, во вторых хотелось дистанционно. А еще оно часто ломалось. 

Attiny2313, пара кнопок и четыре транзистора. Ну и лед индикатор. Да старые знакомые:D

Надо все спаять аккуратным проверенным навесным монтажем и в бой

Такую штуку можно ставить для конфигурирования устройств. Используя четыре входа - подать шестнадцать команд. Вещь имеющая право на жизнь.:)

Edited by si4karuk

Share this post


Link to post
Share on other sites

Ну только если для долговременных настроек. И то , целых 4 бита убить на это. Есть же энкодер с кнопкой. Те же 4 бита, только ты управляеш целым меню и используеш еепром для долговременных настроек. Это куда разумнее и ресурсоэкономнее.

Share this post


Link to post
Share on other sites
                     

Вебинар "Как создать BLE-устройство на базе новейшего беспроводного микроконтроллера STM32WB55"

27 ноября 2019 года компания КОМПЭЛ приглашает разработчиков, технических руководителей и энтузиастов беспроводной связи на вебинар, посвященный новинке 2019 года – мультипротокольному беспроводному микроконтроллеру STM32WB55, который позволяет создавать устройства на базе стандартов BLE 5.0; BLE Mesh; 802.15.4/ZigBee и Thread. На вебинаре мы покажем, как с помощью привычных инструментов STM32Cube и STM32CubeMX можно создать свое первое, надежно работающее BLE-приложение.

Зарегистрироваться на вебинар

Да, но не всегда нужен дисплей, и выход в интернет. Иногда самые крутые сименсы используют такие закавыки ))

Share this post


Link to post
Share on other sites
11 час назад, IMXO сказал:

Витя, ты представляешь в какую асмовскую портянку развернется твой код? :)

ldi	r17,[сдвинутое на 2 бита влево число]
in	r16,PIND
andi	r16,0b11000011
or	r16,r17
out	PORTD,r16

 

Share this post


Link to post
Share on other sites

Это просто решение (взгляд со стороны Ассма). С позиций Си, как ни крути, всегда портянка получается (даже если листинг лаконичный).:)

Share this post


Link to post
Share on other sites

  Здравствуйте. Столкнулся с такой проблемой. На МК создал генератор, потом во вне МК преобразую его в синусоиду, далее на индуктивном датчике фаза сдвигается, либо в плюс либо в минус.  Компаратор преобразует синусоиду снова в прямоугольник, сдвинутый по фазе.  

    Проблема в том, что возникают паразитные фазовые колебания на участке равном величине  сдвига фазы. Если фаза опорного генератора и сигнала на выходе компаратора  совпадают,  то колебаний нет.

 При симуляции в ПРОТЕУСЕ это наблюдалось, но решил, что компьютер не справляется, но и железе это повторилось, правда характер поведения сильно отличается.  ЧТО это паразитная связь в самом кристалле или что-то другое?

  P.S.  Устройство собрано на макетной плате.

Screenshot_7.png

Share this post


Link to post
Share on other sites

@RA3DTI , покажите схему и обозначьте точки, в которых смотрите. Пока мало что понятно.

Кроме схемы, желательно знать также уровень сигнала с датчика, а если возможно, то посмотреть осциллограммы всех сигналов.

Share this post


Link to post
Share on other sites
3 часа назад, Lexter сказал:

@RA3DTI , покажите схему и обозначьте точки, в которых смотрите. Пока мало что понятно.

 

Lexter. Вот схема в протеусе. В реальной схеме компонентов больше, но я их не стал размещать чтобы не перегружать симулятор.

Фотки с осциллографа не получаются.

В симуляторе графики тоже сильно дергаются, кроме синусоиды и опорного генератора, стоит как вкопанный!

Screenshot_17 PROT.png

Screenshot_17PR2.png

Screenshot_17PR3.png

Edited by RA3DTI

Share this post


Link to post
Share on other sites

У компаратора нет физического внешнего выхода. Как у вас осуществляется выход компаратора.

Попробуйте внешний компаратор.

Share this post


Link to post
Share on other sites
Только что, snn_krs сказал:

У компаратора нет физического внешнего выхода. Как у вас осуществляется выход компаратора.

Попробуйте внешний компаратор.

но можно организовать. 

while(1)
    {
        ACSR|=(1<<ACIE)|(1<<ACIS1)|(1<<ACIS0);  //Инициализация компаратора. ИОН=0.
       if(ACSR&(1<<ACO)){PORTC|=(1<<PC2);}
       else {PORTC &=~(1<<PC2);}           //Выход компаратора PC2

вообще стараюсь минимизировать число внешних компонентов.

Share this post


Link to post
Share on other sites
9 minutes ago, RA3DTI said:

вообще стараюсь минимизировать число внешних компонентов.

Это правильно, но нужно определить что не работает компаратор или таймер.

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

Share this post


Link to post
Share on other sites

Генератор собран на таймере 2 и работает вроде неплохо,

TCCR2 |=(1<<CS21); //CS21 =1(1 бит) делитель 8
        TCCR2 |= (1<<WGM21); //WGM21=1(6 бит), WGM20=0(3бит). Режим СТС. Сброс по совпадению.
        TCCR2 |=(1<<COM20); //COM20=1(4 бит)
        OCR2 =73;           // Регистр сравнения. 10кГц =49 ПРИ Ft=8MHz

но я его отключу и подключу внешний генератор, и если проблема исчезнет то это плохо значит это паразитная связь внутри кристалла, а если нет то это проблема монтажа, её можно решить.

Таймер 1 не задействован, но на всякий случай отключу.

Edited by RA3DTI

Share this post


Link to post
Share on other sites

По схеме выход ОС1 задействован, поэтому я думал что генератор на таймер 1

Share this post


Link to post
Share on other sites
5 часов назад, RA3DTI сказал:

Вот схема в протеусе.

 

Не понял, в каких "попугаях" на этом осциллоскопе смещение по вертикали, но очень вероятно, что синусоидальное напряжение, поступающее на вход компаратора, заходит в область отрицательных напряжений. Проверьте.  Компаратор не может нормально работать при отрицательных напряжениях на входах. Напряжение на любом из входов должно быть в пределах от GND до напряжения питания.

Share this post


Link to post
Share on other sites

Второй вход компаратора не может быть соединён с GND. Пороговое напряжение должно быть посередине размаха входного напряжения.

Share this post


Link to post
Share on other sites
Только что, Lexter сказал:

 

синусоидальное напряжение, поступающее на вход компаратора, заходит в область отрицательных напряжений.......     Напряжение на любом из входов должно быть в пределах от GND до напряжения питания.

Да. Симулятор позволяет некоторые вольности:rolleyes:. В реальной схеме отрицательная полуволна срезана. Да и в симуляторе она всего 0,4V       (Амплитуда 0,8V)

А вообще и в реальной схеме она уходит на -0,07V (ТЩАТЕЛЬНО РАССМОТРЕЛ ОСЦИЛЛОГРАММУ:huh:) При положительной 1,3V

Share this post


Link to post
Share on other sites
13 часа назад, RA3DTI сказал:

в реальной схеме она уходит на -0,07V ... При положительной 1,3V

Ну и как будет работать компаратор, даже если он идеальный, если вы опорное напряжение установили 0,00 V? Чуть "цеплять" по самым верхушкам синусоиды? :)

Надо читать даташиты, там написаны электрические характеристики, в том числе и встроенных компараторов. Посмотрите, какой там допустимый диапазон напряжений на входах, в котором гарантируется нормальная работа компаратора. Если у вас сложности с чтением даташитов, почитайте что-нибудь адаптированное.

Задайте опорное напряжение (-0,07+1,3)/2 = +0,615V, и будет вам чёткое срабатывание.

Edited by Lexter

Share this post


Link to post
Share on other sites
42 минуты назад, Lexter сказал:

Ну и как будет работать компаратор, даже если он идеальный, если вы опорное напряжение установили 0,00 V? Чуть "цеплять" по самым верхушкам синусоиды? :)

Он не будет цеплять по верхушкам синусоиды, а наоборот будет срабатывать чудь-чудь выше 0,00v. Но согласно датшиту (Так перевёл) этот режим неустойчивый, поэтому схему переделал, пока в симуляторе.

Screenshot_17 M3.png

Share this post


Link to post
Share on other sites
46 минут назад, RA3DTI сказал:

будет срабатывать чудь-чудь выше 0,00v.

Вот именно "ЧУДЬ". Знаете, как со стороны ЧУДНÓ смотреть, как вы упираетесь? :D

Вы бы всё-таки почитали, как работают компараторы и какие у них основные параметры. Тогда "чудь" превратится в "чуть". :)

Ну с какого бодуна опорное поставили +1,6V, если сами говорили, что пиковое напряжение +1,3V? Как он работать будет, если опорное напряжение никогда не пересекается? Оно должно быть МЕЖДУ максимумом и минимумом на входе. В вашем случае желательно ПОСЕРЕДИНЕ .

Share this post


Link to post
Share on other sites

Это новая схема. Размах синусоиды от +1,3v до +2,2v. (это пока симулятор). Без проблем перенесу на реальную схему. В предыдущем варианте синус был от -1.3 до +1.3в, отрицательная часть отсекалась. Компаратор срабатывал при отрыве синуса от 0,0v при нескольких мV в плюсе. Может быть не совсем четко. Опорное 1.6V выставил примерно, подкорректирую.(чудь-чуть:D). Берусь за паяльник.

 

Share this post


Link to post
Share on other sites

Привет.

На прошлой странице, задавался вопросом вывода четырех битного числа в порт.

void out_bit_port(unsigned char chislo)
{
	unsigned char tempPORT;  
    chislo &=0x0F;
    chislo <<=2;
	asm volatile ("cli");
	tempPORT=PORTD&0b11000011;
    tempPORT|=chislo;
	PORTD = tempPORT;
	asm volatile ("sei");
}

А как прокрутить эту функцию в обратном направлении? 

Share this post


Link to post
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Similar Content

    • By Максим123456789
      делаю диплом, в схеме у меня микроконтроллер PIC16F688 и мне нужно его заменить на ATmega. Не могу найти похожий
    • By Anton Bondarenko
      Всем привет
      Прошу не ругать, впервые подобный вопрос задаю.
      Хочу сделать прибор, который будет посылать сигнал, когда возле прибора будет проходить металлический предмет. 
      — угол отслеживания до 30° а лучше прямая линия, траектория
      — время реакции очень высокое до 100 мс
      — ширина проема в котором нужно сканировать от 10 до 20метров,
      — передача сигнала через вифи
      Может есть готовые решения, или отдельные компоненты.
      Подскажите пжл в каком направлении искать.
      Смотрел датчики движения, но главная проблема — время реакции.
      Спасибо
       
    • By Sofia Vin
      Предлагаем проектную работу в Москве:
      Микроконтроллер STM32F103.
        
      Есть встроенный код с использованием функций библиотеки FreeRTOS, код имеет описанный протокол для связи с внешним миром.
        
      Необходимо проводить доработку кода под задачи программиста верхнего уровня и его тестирование в составе оборудования. 
      Работа в лаборатории (м.Университет) и удаленно. 
      Оплата по договоренности.
      Если Вы обладаете опытом схемотехнического проектирования и программирования микроконтроллеров, и Вас заинтересовала данная возможность, ждем Ваши отклики по контактным данным:
      8 (925) 023-60-02   Алексей
      E-mail: nassa@marathon.ru
       
    • By Антон Плюшкин
      В общем есть небольшая тривиальная задача - сделать свитюльку. Контроллер управляет светодиодиками, цвета меняются, людишки довольны.
      Схема проста: Attiny44a -> 2n3904 x3 -> RGB-светодиод.
      Собрал, протестил, всё норм, но!
      Как только в коде я использую функцию задержки - _delay_ms (util/delay.h) - контроллер повисает!
      #define F_CPU 16000000UL #include <avr/io.h> #include <util/delay.h> int main(void) { // Input/Output Ports initialization // Port A initialization // Function: Bit7=Out Bit6=Out Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In DDRA=(1<<DDA7) | (1<<DDA6) | (0<<DDA5) | (0<<DDA4) | (0<<DDA3) | (0<<DDA2) | (0<<DDA1) | (0<<DDA0); // State: Bit7=0 Bit6=0 Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) | (0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0); // Port B initialization // Function: Bit3=In Bit2=Out Bit1=In Bit0=In DDRB=(0<<DDB3) | (1<<DDB2) | (0<<DDB1) | (0<<DDB0); // State: Bit3=T Bit2=0 Bit1=T Bit0=T PORTB=(0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0); // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: 16000,000 kHz // Mode: Phase correct PWM top=0xFF // OC0A output: Non-Inverted PWM // OC0B output: Non-Inverted PWM // Timer Period: 0,031875 ms // Output Pulse(s): // OC0A Period: 0,031875 ms Width: 0 us // OC0B Period: 0,031875 ms Width: 0 us TCCR0A=(1<<COM0A1) | (0<<COM0A0) | (1<<COM0B1) | (0<<COM0B0) | (0<<WGM01) | (1<<WGM00); TCCR0B=(0<<WGM02) | (0<<CS02) | (0<<CS01) | (1<<CS00); TCNT0=0x00; OCR0A=0x00; OCR0B=0x00; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: 16000,000 kHz // Mode: Ph. correct PWM top=0x00FF // OC1A output: Non-Inverted PWM // OC1B output: Disconnected // Noise Canceler: Off // Input Capture on Falling Edge // Timer Period: 0,031875 ms // Output Pulse(s): // OC1A Period: 0,031875 ms Width: 0 us // Timer1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=(1<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (1<<WGM10); TCCR1B=(0<<ICNC1) | (0<<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; // Timer/Counter 0 Interrupt(s) initialization TIMSK0=(0<<OCIE0B) | (0<<OCIE0A) | (0<<TOIE0); // Timer/Counter 1 Interrupt(s) initialization TIMSK1=(0<<ICIE1) | (0<<OCIE1B) | (0<<OCIE1A) | (0<<TOIE1); // External Interrupt(s) initialization // INT0: Off // Interrupt on any change on pins PCINT0-7: Off // Interrupt on any change on pins PCINT8-11: Off MCUCR=(0<<ISC01) | (0<<ISC00); GIMSK=(0<<INT0) | (0<<PCIE1) | (0<<PCIE0); // USI initialization // Mode: Disabled // Clock source: Register & Counter=no clk. // USI Counter Overflow Interrupt: Off USICR=(0<<USISIE) | (0<<USIOIE) | (0<<USIWM1) | (0<<USIWM0) | (0<<USICS1) | (0<<USICS0) | (0<<USICLK) | (0<<USITC); // Analog Comparator initialization // Analog Comparator: Off // The Analog Comparator's positive input is // connected to the AIN0 pin // The Analog Comparator's negative input is // connected to the AIN1 pin ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0); ADCSRB=(0<<ACME); // Digital input buffer on AIN0: On // Digital input buffer on AIN1: On DIDR0=(0<<ADC1D) | (0<<ADC2D); // ADC initialization // ADC disabled ADCSRA=(0<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (0<<ADPS1) | (0<<ADPS0); unsigned char VL_OCR0A = 0, VL_OCR0B = 0, VL_OCR1A = 0; OCR0A = 0; OCR0B = 0; OCR1A = 0; while(1) { _delay_ms( 100 ); VL_OCR0A = VL_OCR0A + 1; VL_OCR0B = VL_OCR0B + 1; VL_OCR1A = VL_OCR1A + 1; if( VL_OCR0A >= 250 ){ VL_OCR0A = 0; } if( VL_OCR0B >= 250 ){ VL_OCR0B = 0; } if( VL_OCR1A >= 250 ){ VL_OCR1A = 0; } OCR0A = VL_OCR0A; OCR0B = VL_OCR0B; OCR1A = VL_OCR1A; } } Т.е. если указать задержку в начале цикла, то светодиод не светится вообще.
      Если задержку убрать - светодиод немного подсвечивает всеми цветами.
      while(1) { _delay_ms( 100 ); // <--- ЗАДЕРЖКА --- VL_OCR0A = VL_OCR0A + 1; VL_OCR0B = VL_OCR0B + 1; VL_OCR1A = VL_OCR1A + 1; if( VL_OCR0A >= 250 ){ VL_OCR0A = 0; } if( VL_OCR0B >= 250 ){ VL_OCR0B = 0; } if( VL_OCR1A >= 250 ){ VL_OCR1A = 0; } OCR0A = VL_OCR0A; OCR0B = VL_OCR0B; OCR1A = VL_OCR1A; } Где я накосячил?
      З.Ы.: Замечаний по поводу оптимизации кода, излишних переменных и п.р. прошу не писать - изощряюсь как могу ибо не пойму почему не работает
    • Guest Денис
      By Guest Денис
      В общем, есть такое чудо китайской техники (фото)
      Что оно может:
      1. Заряжаться через microUSB порт
      2. Кнопка вкл/выкл, она же переключает режимы
      3. 3 режима свечения светодиода (он светит разными цветами)
      Что я хочу сделать:
      1. Пункты 1 и 2 выше
      2. Разнообразить количество режимов, переливание статичный цвет и тд...
      Вопрос: как это сделать? что купить?

      P.S. К сожалению, в гугле не нашел подробной инструкции, а я в электронике я дуб дубом


×
×
  • Create New...