Поиск сообщества
Показаны результаты для тегов 'Proteus'.
Найдено: 46 результатов
-
Мигание светодиодов с разной скоростью и направлением
slava_q9 опубликовал тема в Школьникам и студентам
Возникли проблемы с реализацией цикличного мигания светодиодов с переключением скорости и направления по кнопке. Схема не реагирует на нажатие кнопки на PD7 (изменение скорости), изменение направления (на PD6) происходит только тогда, когда не горит ни один диод. Обязательно нужно применить прерывания по таймеру-счетчику, Преподаватель рекомендовал библиотеку axlib/timers.h. Задание: 8 светодиодов сделать сквозное переключение (циклично). Введем несколько режимов скорости (3 режима). Взять в 2 раза увеличивающий период (использовать библиотеку по таймерам) При работе с таймер счетчиком использовать прерывание Подключить семисегментый индикатор (будут отображаться только режимы скорости). 2 кнопки (одна меняет скорость, другая направление). Схема: Код программы: #define DEBOUNCE_DELAY_MS 100 #define F_CPU 1000000UL // Определение частоты процессора для функций задержки #include <avr/io.h> // AVR стандартные функции ввода-вывода #include <util/delay.h> // Функции задержки #include <main_init.h> #include <axlib/timers.h> #include <axlib/ports.h> // Глобальные переменные volatile uint8_t speedMode = 50; // Текущий режим скорости volatile uint8_t ledState = 0; // Состояние светодиодов volatile uint8_t direction = 1; // Направление сдвига светодиодов volatile uint32_t lastDebounceTime = 0; // Функция для изменения режима скорости void changeSpeedMode() { speedMode=speedMode * 10; if (speedMode > 2000) { speedMode = 50; } } // Глобальные переменные volatile uint8_t lastButtonState = 0; // Последнее состояние кнопки volatile uint8_t debounceDelay = 50; // Задержка для отсеивания дребезга (в миллисекундах) // Функция для изменения направления сдвига светодиодов с защитой от дребезга void changeDirection() { uint8_t currentButtonState = ~PIND & (1<<6); // Текущее состояние кнопки if (currentButtonState != lastButtonState && currentButtonState == 0) { // Если состояние кнопки изменилось и она нажата _delay_ms(250); // Задержка для фильтрации дребезга // Проверка, что кнопка все еще нажата после задержки direction = !direction; // Изменение направления, если состояние кнопки стабильно } lastButtonState = currentButtonState; // Обновление последнего состояния кнопки } int main(void) { DDRA = 0b11111111; MCUCR = 0b00000010; // Конфигурация управления сенсором прерывания для INT0 //sei (); DDRD &= ~((1<<2)) | ((1<<6)) | ((1<<7)); // Настройка PD2, PD6, PD7 как входы PORTD |= ((1<<2)) | ((1<<6)) | ((1<<7)); // Установка 2, 6 и 7 пинов в состояние логическая единица DDRC = 0b11111111; // Настройка порта C на выходы PORTC = 0b00000000; // Инициализация PORTC для отображения всех светодиодов выключенными timers_init(); // Проинициализировали таймер Т2 timer(TIMER_7, speedMode, ON); //PORTC_OUT(0,1,2,3,4,5,6,7); while(1) { changeDirection(); PORTA = 0b00000000; // Сдвиг светодиодов if (direction) { PORTA |= (1 << 7); // Установка бита PA7 PORTC = 0b10000000; // Установка PORTC для отображения двоичного счетчика 10000000 _delay_ms(250); // Задержка 250 миллисекунд PORTC = 0b01000000; _delay_ms(250); PORTC = 0b00100000; _delay_ms(250); PORTC = 0b00010000; _delay_ms(250); PORTC = 0b00001000; _delay_ms(250); PORTC = 0b00000100; _delay_ms(250); PORTC = 0b00000010; _delay_ms(250); PORTC = 0b00000001; _delay_ms(250); PORTC = 0b00000000; } else { PORTA &= ~(1 << 7); // Последовательность мигания в произвольном порядке PORTC = 0b00000000; _delay_ms(250); PORTC = 0b00000001; _delay_ms(250); PORTC = 0b00000100; _delay_ms(250); PORTC = 0b00010000; _delay_ms(250); PORTC = 0b01000000; _delay_ms(250); PORTC = 0b10000000; _delay_ms(250); PORTC = 0b00100000; _delay_ms(250); PORTC = 0b00001000; _delay_ms(250); PORTC = 0b00000010; _delay_ms(250); PORTC = 0b00000000; } if (!(PIND & (1<<7))) { _delay_ms(200); PORTA |= (1 << 2); changeSpeedMode(); } } } Сам проект прикреплен. project_Code_sxema.zip -
Здравствуйте! Делаю диплом на тему "Анализ профиля энергопотребления в архитектуре современных микроконтроллеров". В Proteus 8 собрал схему с микроконтроллером ATMega2560 с использованием двух светодиодов и написал код работы схемы (см. прикрепленный файл). Суть следующая: при запуске симуляции светодиоды поочерёдно загораются с интервалом в 1 секунду. А теперь вопрос: как мне измерить энергопотребление микроконтроллера при выполнении данной несложной задачки? Как корректно это сделать? Куда необходимо подключить амперметр и вольтметр? Буду также рад, если дадите какие-либо советы касательно самой схемы — вдруг, что-то можно сделать лучше. Просто сомневаюсь в том, правильно ли я вообще подключил порты к питанию и т.п. Заранее прошу прощения, если вопрос выглядит глуповатым. Я не толковый во всем этом Proteus 8 project ATMega2560.pdf
- 12 ответов
-
- помощь нужна
- Proteus
-
(и ещё 1 )
C тегом:
-
Здравствуйте, подскажите пожалуйста, можно ли сделать подобную схему в Proteus с микроконтроллером семейства STM32F вместо Arduino UNO? Если можно, то подскажите каким образом
-
Проверьте правильность составления схемы в Proteus
Super Akk опубликовал тема в Школьникам и студентам
Здравствуйте, проверьте пожалуйста правильность составления схемы в Proteus, так как я новичёк в этом деле. Микроконтроллер: LPC1343FHN33 Дисплей: ILI9341 Необходимо чтобы на дисплей выводился текст, изображение и аудио -
Здравствуйте, подскажите пожалуйста, как соединить микроконтроллер LPC1343FHN33 с SD Card?
-
Здравствуйте, подскажите пожалуйста, как подключить дисплей к микроконтроллеру посредством каскада сдвиговых регистров?
- 13 ответов
-
Необходимо найти три элемента для библиотеки Proteus
Super Akk опубликовал тема в Программное обеспечение
Здравствуйте, помогите пожалуйста найти три элемента для библиотеки Proteus, весь интернет обшарил, ничего не нашёл: 1) ESP32-WROOM-32 2) SN74LVC2G241 3) PLS06 -
Здравствуйте, извините за беспокойство, я новичок в этой теме. Подскажите пожалуйста, какую комбинацию «LOGICSTATE» необходимо прожать чтобы выводить слова на экран LCD. Смотрел это видео, но не получилось:
- 12 ответов
-
Здравствуйте, я работаю в Proteus и у меня возникла ошибка Simulation is not running in real time due to excessive CPU load Подскажите пожалуйста как её исправить Код прошивки: #include <lm3s300.h> // Graphic Display functions #include <glcd.h> // Font used for displaying text // on the graphic display #include <font5x7.h> // Declare your global variables here void main(void) { unsigned char odin[] = { 0x08, 0x00, 0x08, 0x00, #ifndef _GLCD_DATA_BYTEY_ 0x00, 0x10, 0x18, 0x14, 0x10, 0x10, 0x7C, 0x00, #else 0x00, 0x00, 0x48, 0x44, 0x7E, 0x40, 0x40, 0x00, #endif }; // Declare your local variables here // Variable used to store graphic display // controller initialization data GLCDINIT_t glcd_init_data; // Crystal Oscillator division factor: 1 #pragma optsize- CLKPR=(1<<CLKPCE); CLKPR=(0<<CLKPCE) | (0<<CLKPS3) | (0<<CLKPS2) | (0<<CLKPS1) | (0<<CLKPS0); #ifdef _OPTIMIZE_SIZE_ #pragma optsize+ #endif // Input/Output Ports initialization // Port B initialization // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0); // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0); // Port C initialization // Function: Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In DDRC=(0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0); // State: Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T PORTC=(0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0); // Port D initialization // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0); // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0); // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: Timer 0 Stopped // Mode: Normal top=0xFF // OC0A output: Disconnected // OC0B output: Disconnected TCCR0A=(0<<COM0A1) | (0<<COM0A0) | (0<<COM0B1) | (0<<COM0B0) | (0<<WGM01) | (0<<WGM00); TCCR0B=(0<<WGM02) | (0<<CS02) | (0<<CS01) | (0<<CS00); TCNT0=0x00; OCR0A=0x00; OCR0B=0x00; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: Timer1 Stopped // Mode: Normal top=0xFFFF // OC1A output: Disconnected // OC1B output: Disconnected // Noise Canceler: Off // Input Capture on Falling Edge // Timer1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10); TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (0<<CS11) | (0<<CS10); TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; // Timer/Counter 2 initialization // Clock source: System Clock // Clock value: Timer2 Stopped // Mode: Normal top=0xFF // OC2A output: Disconnected // OC2B output: Disconnected ASSR=(0<<EXCLK) | (0<<AS2); TCCR2A=(0<<COM2A1) | (0<<COM2A0) | (0<<COM2B1) | (0<<COM2B0) | (0<<WGM21) | (0<<WGM20); TCCR2B=(0<<WGM22) | (0<<CS22) | (0<<CS21) | (0<<CS20); TCNT2=0x00; OCR2A=0x00; OCR2B=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); // Timer/Counter 2 Interrupt(s) initialization TIMSK2=(0<<OCIE2B) | (0<<OCIE2A) | (0<<TOIE2); // External Interrupt(s) initialization // INT0: Off // INT1: Off // Interrupt on any change on pins PCINT0-7: Off // Interrupt on any change on pins PCINT8-14: Off // Interrupt on any change on pins PCINT16-23: Off EICRA=(0<<ISC11) | (0<<ISC10) | (0<<ISC01) | (0<<ISC00); EIMSK=(0<<INT1) | (0<<INT0); PCICR=(0<<PCIE2) | (0<<PCIE1) | (0<<PCIE0); // USART initialization // USART disabled UCSR0B=(0<<RXCIE0) | (0<<TXCIE0) | (0<<UDRIE0) | (0<<RXEN0) | (0<<TXEN0) | (0<<UCSZ02) | (0<<RXB80) | (0<<TXB80); // 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 DIDR1=(0<<AIN0D) | (0<<AIN1D); // ADC initialization // ADC disabled ADCSRA=(0<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (0<<ADPS1) | (0<<ADPS0); // SPI initialization // SPI disabled SPCR=(0<<SPIE) | (0<<SPE) | (0<<DORD) | (0<<MSTR) | (0<<CPOL) | (0<<CPHA) | (0<<SPR1) | (0<<SPR0); // TWI initialization // TWI disabled TWCR=(0<<TWEA) | (0<<TWSTA) | (0<<TWSTO) | (0<<TWEN) | (0<<TWIE); // Graphic Display Controller initialization // The KS0108 connections are specified in the // Project|Configure|C Compiler|Libraries|Graphic Display menu: // DB0 - PORTB Bit 0 // DB1 - PORTB Bit 1 // DB2 - PORTB Bit 2 // DB3 - PORTB Bit 3 // DB4 - PORTB Bit 4 // DB5 - PORTB Bit 5 // DB6 - PORTB Bit 6 // DB7 - PORTB Bit 7 // E - PORTC Bit 0 // RD /WR - PORTC Bit 1 // RS - PORTC Bit 2 // /RST - PORTC Bit 3 // /CS1 - PORTC Bit 4 // /CS2 - PORTC Bit 5 // Specify the current font for displaying text glcd_init_data.font=font5x7; // No function is used for reading // image data from external memory glcd_init_data.readxmem=NULL; // No function is used for writing // image data to external memory glcd_init_data.writexmem=NULL; glcd_init(&glcd_init_data); glcd_putimage(0,0, odin, GLCD_PUTCOPY); while (1) { // Place your code here } } Схема прикреплена ниже в архиве Схема.rar
- 6 ответов
-
- Proteus
- микроконтроллер
- (и ещё 8 )
-
Здравствуйте помогите пожалуйста разобраться. Скачал готовый проект в интернете для приёма и отображения данных на дисплее через ком-порт по протоколу NMEA. И вот пытаюсь просимулировать его в протеусе, но увы не получается, а точнее не принимает ком-порт скорее всего. Прилагаю проект и то что я набросал для протеуса. Спасибо! GPS.rar
-
Здравствуйте, товарищи форумчане! У меня вот такая проблемка: есть такая схема: По сути тут stm32 на который подаётся некоторое постоянное напряжение, а именно на вход PA1. МК получает его, приводит в цифровую форму (разрядность АЦП равна восьми) и выводит их при помощи восьми GPIO выводов, а именно PB0-PB7. Эти выводы соединены со схемой ЦАП, которая преобразует значение, полученное от stm32 обратно в аналоговую форму и выводит в пробнике R2(1). Проблема в том результат выводится не верный. Точнее говоря не всегда верный. Когда я подаю 1В, то на выходе получаю 0,99В, что верно. Но когда, например, подаю 300мВ, то получаю 1.8В, что совсем не верно. Код прошивки предельно прост: while (1) { HAL_ADC_Start_IT(&hadc1); HAL_Delay(10); } Код колбека прерывания: void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) { if(hadc->Instance == ADC1) //check if the interrupt comes from ACD1 { int adc = HAL_ADC_GetValue(&hadc1); HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,(adc>>0)&1); HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,(adc>>1)&1); HAL_GPIO_WritePin(GPIOB,GPIO_PIN_2,(adc>>2)&1); HAL_GPIO_WritePin(GPIOB,GPIO_PIN_3,(adc>>3)&1); HAL_GPIO_WritePin(GPIOB,GPIO_PIN_4,(adc>>4)&1); HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,(adc>>5)&1); HAL_GPIO_WritePin(GPIOB,GPIO_PIN_6,(adc>>6)&1); HAL_GPIO_WritePin(GPIOB,GPIO_PIN_7,(adc>>7)&1); } } На всякий случай вот настройка АЦП в stm32: Вот пример неправильного вычисления:
- 2 ответа
-
- Proteus ADC
- STM32
-
(и ещё 1 )
C тегом:
-
Здравствуйте, набросал вот такую схемку при помощи программы Filter Designer, но вышло что то совсем не то чего ожидал хотел сделать срез на саб от 25 до 80 +- Судя по графику в Proteus творится что то непонятное, помогите пожалуйста разобраться в чем проблема. 25hp.htm 80lp.htm
- 3 ответа
-
- Butterworth
- фильтр
-
(и ещё 1 )
C тегом:
-
Кто нибудь может подсказать , данная схема похожа на бортовой навигатор?
-
Друзья ! Нужна помощь,есть схема бортового устройства в протеусе,так же и программа на С.Не получается программу связать со схемой.Помогите пожалуйста! Протеус принимается только асемблер,а мне нужен С.
-
Доброго времени суток, нужна помощь в создании или вытаскивании исходного кода из уже существующего проекта, с возможностью дальнейшего редактирования под меня и. Полная информация про программу и то как она работает прикрепляю ниже, очень буду рад если кто-то откликнется в долгу не останусь) https://www.sxem.org/2-vse-stati/17-avtomatika-v-bytu/108-mikroprotsessornyj-regulyator-raboty-kotla-tsentralnogo-otopleniya?showall=1 https://www.sxem.org/forum/termometry-termostaty/131-mikroprotsessornyj-regulyator-raboty-kotla-tsentralnogo-otopleniya?start=25#5219
-
Здравствуйте, если кто-то знает, подскажите, пожалуйста, какой мосфет(Q3) можно использовать. Еще интересует по каким критериям они подбираються и где это можно сделать(тобишь сайт на котором можно указать нужные параметры/или это как-то по другому подбирается?). На счет импульсов генерируемых Arduino Uno на микропроцесоре ATmega328P. Частота в даном примере(вообще она будет перед стартом задаваться в пределах 1-50Гц) 50Гц, период 0,02с, duty cycle 50%. Еще такой вопрос, подскажите, пожалуйста, нормальный ли характер графика D на осцилографе? Почему он именно такой, если не нормальный, то что исправить? Если нужна дополнительная информацыя, без проблем, в мерах своих возможностей, добавлю. За любую помощь зарание спасибо.
-
Где можно симулировать сеть Modbus? Предполагаю использовать Proteus. Все это необходимо чтобы научится в симуляции работать с Modbus
-
Всем добрый день, кто может подсказать, пытаюсь моделировать схему, выдает ошибку Sumulation Failed due to fatal simulator error. Совсем уже не знаю что делать.
-
Всем привет. Хочу сделать светодиодную матрица с драйвером max7219 на Atmega324P. При попытке смоделировать в Proteus вылазят ошибки: Собирал вроде всё правильно, текст в EEPROM загружен, но на матрицах выводится непонятно что и на всех одно и тоже. Может я что-то напутал, когда собирал(( Подскажите пожалуйста кто знает)) Проект со схемой Proteus и прошивку прикрепляю. И просто схема: Строка c MAX7219.rar
-
добрый день, уважаемые форумчане. Есть два проекта в AVRStudio 4.19, один компилируется для ATtiny2313, второй - для ATtiny48. Далее в протеус сделанымодели, для проверки работоспособности кода. Код одинаковый для обоих микроконтроллеров, только сделана условная компиляция, так как отличаются регистры таймера 0. При проверке в Протеус код для ATtiny2313 работает, а для ATtiny48 ни в какую не идет. ЧЯДНТ??? Проекты AVRStudio и Proteus во вложении. PS: Proteus 8.6 SP2 PS2: Нет индикации в Протеус, хотя при паузе переменные все правильные. Также подключил виртуальный осциллограф, и заметил, что в ATtiny48 на выходе PB6 нет импульсов. Хотя в функции индикации все прописано. 4x_18b20.zip ATtiny48.zip
- 3 ответа
-
- ATtiny2313
- ATtiny48
-
(и ещё 1 )
C тегом:
-
Доброго времени суток!! Я в замешательстве! Atmega8, AtmelStudio, отладка в Proteus. int main(void) { setup();//Там устанавливаются конфигурации входов и регистров таймера1 while(1) { if(!(PINB&(1<<1)))// pb1 через кнопку на землю. pb1 притянут к питанию внутренним резистором. { TCCR1B |= (1<<0);//Устанавливаем нулевой бит регистра, что бы запустить таймер без делителя частоты, //остальные биты этого регистра в сетапе обнулялись } PORTD = TCCR1B;// в Порт Д засылаем значения регистра и смотрим шо происходит. } } А происходит следующее. При нажатии кнопки загорается PD0, вроде бы норм. Но при отпускании кнопки тухнет. Почему? Стоит вынести TCCR1B |= (1<<0); из тела условия в любое другое место все работает как надо. Но вот еще прикол. int main(void) { setup(); int tmp = 1;// Добавляем переменную while(1) { if((!(PINB&(1<<1))) && tmp)// Тело условия должно выполниться только 1 раз после нажатия { TCCR1B |= (1<<0);//start timer1 tmp = 0; } PORTD = TCCR1B; } } Казалось бы, теперь момент отпускания кнопки никак не должен влиять на результат. Но поведение PD0 то же самое. Горит только во время удержания кнопки. МК для меня новая область изучения, по этому прошу помочь разобраться и установить этот чёртов бит))
-
Господа, здравствуйте. Не ругайтесь, пожалуйста, я студент и я учусь. Возможно, вопрос будет глуповат. Подскажите, пожалуйста, чем можно заменить PIC32MX775F256H для САПР Proteus. Или намеки как подобрать анлог. Имеется код и принципиальная схема некого проекта на данном микроконтроллере(в Proteus нету 32х битных PIC). Я хочу создать его в Proteus,разобрать его и с ним поработать, но необходим другой микроконтроллер(скорее всего 16битный PIC) т.к. данного в протеусе нету. Повторюсь, что я учусь,а учиться лучше на примерах, а не изобретать колесо. Спасибо.
-
Доброго всем времени суток, прошу помощи. Накидал схему преобразования +12в в +5, -5. Но при симуляции на протеусе происходит что то не понятное для меня (и не только для меня) - при подаче питания 6.5в все идеально, если подать выше то выход 7660 начинает сходить с ума. Что я не так сделал? Возможно подскажете другой вариант решения вопроса. Мне необходимо сделать устройство в идеале способное питаться от аккумулятора(в плане батарейки АА или ААА) и от внешнего источника (3 - 12в), схему устройства прикладываю. Туда ещё прикручу ардуину нано для обработки данных, и дисплей. По хорошему надо не ардуину а что то вроде атмеги, но это уже следующий шаг разработки.