Jump to content

Recommended Posts

Значит, это я ошибся. Веток "для начинающих" - несколько, в разных разделах. Приношу свои извинения.

Share this post


Link to post
Share on other sites

Начал изучать микроконтроллеры с AT90s2313! но не могу найти его модель в мультисиме! Как это можно сделать? ну или посоветуйте другие симуляторы!

Share this post


Link to post
Share on other sites

Особенности схемотехники и трассировки печатных плат для STM32WB55

Разработка новых устройств на базе беспроводного микроконтроллера STM32WB от STMicroelectronics может быть сделана в короткий срок, если выполнять некоторые важные правила и воспользоваться готовыми конструктивными решениями и рекомендациями инженеров ST.

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

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

А еще, с некоторыми оговорками вместо его можно использовать современный контроллер - ATTINY13.

Share this post


Link to post
Share on other sites
                     

Видеокурс Работаем с микроконтроллерами STM32G0. Впервые на русском языке.

В цикле видеокурсов по работе с STM32G0 от компании STMicroelectronics показаны архитектура, периферия (особенности процессорного ядра, режимов пониженного питания, векторов прерываний, DMA и мультиплексора DMA, схемы тактирования и сброса, и.т.д.) и даны практические примеры. Материал дает наглядное понимание того, как начать работу на новых микроконтроллерах STM32G0

Подробнее

Что такое Протеус? В нем можно хакнуть МК?

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

К хакнуть МК это не имеет никакого отношения.

Share this post


Link to post
Share on other sites

Классная программа! Наверно похожа на Workbench?

Получается, в Протеусе можно вести разработку и эксперименты по части цифровой схемотехники. А вот насколько результаты Протеуса будут отличаться от реальных на "железе"?

Ну и конечно будет недурно скачать этот софт :)

Share this post


Link to post
Share on other sites

На Казусе есть целая ветка форума по Протеусу.

Здесь тоже тема имеется.

Насчет скачать.

Софт этот сильно платный, поэтому только кряк.

Share this post


Link to post
Share on other sites

Помогите пожалуйста. Написал инициализацию для кнопок и светодиодов,ее уж сюда не выкладываю, далее само тело програмы :

Start:

sbi PortB , 0 - выключает светод

sbis PinD , 0 - проверяет кнопку, если нажатапереходит на метку LEDon , в противном на LEDoff

rjmp LEDon

rjmp LEDoff

LEDoff:

sbi PortB , 0 - выключает СИД

sbis PinD , 0 - при нажатии на кнопку переходит в LEDon,иначе остается в этом цикле.

rjmp LEDon

rjmp LEDoff

LEDon:

cbi PortB , 0 - включает СИД

sbis PinD , 0 - при нажатии перехоит на LEDoff , иначе остается включеным

rjmp LEDoff

rjmp LEDon

задача состоит в том что при нажатии на кнопку - СИД вкл\выкл в зависимости в каком состоянии он был.

Данная программа почемуто не от одного нажатия вкл\выкл, не пойму в чем ошибка...?

Share this post


Link to post
Share on other sites

Нет защиты от дребезга.

При нажатии на кнопку на самом деле происходит многократное включение-выключение в течении порядка 5...50 мс, в зависимости от качества кнопки.

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

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

Share this post


Link to post
Share on other sites

я попробую ваше предложение:получать подтверждение о нажатой кнопки.

а вот с помощью "задержки" можно решить этот вопрос? (такой способ мне преподователь подсказал, только как его осуществить не объяснил) как я понимаю : при нажатии кнопки ,СИД включается, а дальше у нас должна быть задержка времени на то чтобы кнопку поднять, и программа продолжает работать... Как это осуществить?

Share this post


Link to post
Share on other sites

Опрос кнопки должен происходить с временным интервалом в несколько миллисекунд (чуть больше времени дребезга).

Опрос должен быть постоянным, циклическим. Как только два последних состояния кнопки ОДИНАКОВЫ, так это состояние нужно принять к исполнению. Для этого нужно завести отдельную ячейку - статус кнопки и в нее вдвигать (левым сдвигом) каждое опрошенное состояние кнопки. Анализируя маской два последних разряда этой ячейки и можно обнаружить одинаковые последние состояния кнопки. Это надежно защитит от дребезга.

Share this post


Link to post
Share on other sites

В твоем случае, можно осуществить проще - если кнопка нажата, сделать задержку в 10мс и проверить снова - если она все еще нажата, значит выполнять переключение. Затем, выполнять этот алгоритм надо в рамках "состояний". Что будет, когда ты нажмешь кнопку и держишь её? твой алгоритм допустим включит светодиод, потом снова проверяет - ага кнопка нажата, светоиод включен - выыыключит светодиод, затем снова проверяет ... и так по кругу - получается какой-то генератор случайных чисел. Не надо привязываться к состоянию кнопки - надо ловить переход из отпущенного состояния в нажатое, и именно в момент перехода - переключать светодиод.

Впрочем, дребезг вполне можно и не проверять - если будешь к примеру считывать состояние кнопки каждые 50мс(можно даже и меньше) и запоминать предыдущее состояние кнопки - то можно с легкостью различать моменты нажатия/отпускания.

Сразу наперед скажу, что для алгоритма необходимо ОДИН РАЗ считать состояние кнопки и в дальнейшем его использовать - иначе состояние кнопки может сменится посреди выполнения алгоритма и это повлияет на результат.

Share this post


Link to post
Share on other sites

После нажатия кнопки сделал опрос об отжатии кнопки, все работает! Спасибо Всем большое!!!

Share this post


Link to post
Share on other sites

Обьясните в чем проблема?

Пишу секцию Init, в ней задаю конфигуррацию таймера

ldi temp,0b00000101

out TCCR0,temp

после этих сторк частота таёмера должна быть СК/1024 но вместо это в режиме эмуляции в Timer COUNTER 0 пишется Running, No Prescaling ,тоесть частоты таёмера равна тактовой чатоте.в чем причина.МК at90S8535

Edited by legalnovichok

Share this post


Link to post
Share on other sites

Бросите файл с проектом, могу посмотреть у себя, но только сегодня. Днем на работе нет софта под AVR

Share this post


Link to post
Share on other sites

Слышал я про МК серии Pic16, будто они оснащенены встроенной поддержкой LCD дисплея. Нельзя ли воспользоваться этой поддержкой для перехода с семисегментных индикаторов на ЖКИ? Если это не потребует написания дополнительной программы, а лишь пользуясь аппаратной поддержкой, скажите, какой именно ЖКИ они поддерживают?

Share this post


Link to post
Share on other sites

Бросите файл с проектом, могу посмотреть у себя, но только сегодня. Днем на работе нет софта под AVR

Вот файл с проектом

taimer.rar

Share this post


Link to post
Share on other sites

Слышал я про МК серии Pic16, будто они оснащенены встроенной поддержкой LCD дисплея. Нельзя ли воспользоваться этой поддержкой для перехода с семисегментных индикаторов на ЖКИ? Если это не потребует написания дополнительной программы, а лишь пользуясь аппаратной поддержкой, скажите, какой именно ЖКИ они поддерживают?

Такие ПИКи есть. Это все 16-ые, у которых третья цифра справа в названии 9.

Например PIC16F9xx или PIC16F19xx.

Однако это не лучшее решение в любительских условиях. Встроенный контроллер ЖКИ предназначен для поддержки работы голого стекла, т.е. ЖК-дисплея без контроллера с выводами от сегментов и общих электродов. Разводить такие схемы на печатной плате не удобно, индикаторы нужны специфические, мультиплекс сегментов, который и является основным достоинством встроенного контроллера практически не распространен в готовых покупных ЖКИ. Этот встроенный драйвер предназначен для ЗАКАЗНЫХ ЖК-индикаторов. В МПЛАБе даже есть специальный инструмент для разработки кода дешифратора МК под топологию дисплея.

Гораздо проще и практически идентично по цене применение индикаторов TIC (и сегментных и графических). Для них нужно всего три интерфейсных провода к МК.

Средняя цена сегментных TIC - около 50...70 рублей (обычно это от 3 до 9 разрядов семисегментных символов с точками разных габаритных размеров), а графических от 130 до 250 рублей.

Share this post


Link to post
Share on other sites

Помогите. Впервые взялся за мК, собрал это http://www.qrz.ru/schemes/redirect.phtml?id=11114. При включении у меня горят оба диода, это нормально? Как можно проверить правильно ли собрано устройство? и как проверить правильно ли я подключил разъем ком порта.

Share this post


Link to post
Share on other sites

Они оба и должны гореть. Это означает что есть внешнее питание и стабилизатор VPP работает.

Если ты подключал провода по номерам на разъеме - значит правильно. Если взять любой терминал и послать в порт некие данные(например наборы FFFFFFFFFFF0000000000 на низкой скорости) то можно заметить моргание второго светодиода.

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...