Jump to content

Recommended Posts

Здравствуйте, я работаю в 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
 
      }
}

Схема прикреплена ниже в архиве

Screenshot_8.png

Схема.rar

Edited by Super Akk
Link to comment
Share on other sites

Приглашаем на вебинар «Необычное в обычном. Сравнительный анализ современных решений Recom» (27.01.2022)

Приглашаем 27/01/2022 всех желающих посетить вебинар, посвященный двум наиболее растущим сегментам интегрированных источников питания – AC/DC малой мощности (1-20Вт) и сегменту решений PoL без изоляции. На вебинаре рассмотрим проблему выбора AC/DC в бюджетном сегменте и концепцию тестирования ускоренного старения, проведем сравнительный анализ подходов к интеграции AC/DC модулей. Сделаем обзор решений концепции POL с доисторических времен до современных технологий и средств для разработки и тестирования.

Подробнее

Перевод

Цитата

Моделирование не выполняется в реальном времени из-за чрезмерной загрузки процессора

Компьютер, наверное, слабенький.

Link to comment
Share on other sites

LI/PR2 – надежные и недорогие ИП от MORNSUN на DIN-рейку

Компания Mornsun выпустила три серии источников питания с креплением на DIN-рейку в форм-факторе Home Automation на популярные значения выходной мощности 30, 60 и 100 Вт (серии LI30-20/PR2, LI60-20/PR2, LI100-20/PR2). Эти источники питания относятся ко второму поколению продукции (R2) и характеризуются высокой надежностью и хорошей стоимостью.

Подробнее

1 час назад, Super Akk сказал:

Да, мне необходимо переделать код с AVR на ARM

Тут не переделывать, а заново писать нужно.  

Link to comment
Share on other sites

Стандарт LoRaWAN и его использование в России с контроллерами STM32WL

Стандарт сетевого уровня LoRaWAN технологии LoRa одобрен для применения в России и отвечает требованиям региональных сетевых операторов. Компания STMicroelectronics выпустила линейку беспроводных однокристальных контроллеров серии STM32WL c поддержкой модуляции LoRa. Серия STM32WL имеет цифровые и аналоговые периферийные устройства для приложений, требующих высокой энергоэффективности и возможностей связи на достаточно большие расстояния, подходя для широкого спектра промышленных и потребительских приложений.

Подробнее

2 минуты назад, Yuriy.pv сказал:

Тут не переделывать, а заново писать нужно.  

Можете мне пожалуйста помочь с этим?

Link to comment
Share on other sites

Разработка преобразователей на основе карбид-кремниевых приборов с помощью симулятора SpeedFit 2.0

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

Подробнее

Guest
This topic is now closed to further replies.
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Сообщения

    • @drubtsow за динамики ни слова... или мы должны сами догадаться? 
    • вот смотрите . там где сейчас 50 ком , с емкостью 0.1мкф образуется срез 32герц , там где 270ком , там срез 6герц , исходя из особенности схемы фазоинвертора, изменив сопротивление верхнего резистора ,  срез по частоте 32 герц Вы сделали для обоих выходных ламп , что собственно и подтверждается графиком АЧХ , а вы говорите что все хорошо и ровно ... далее , учитывая что резисторы 270к(50к неисправный канал) и 270к образуют делитель , со средней точки которого снимается на вторую сетку фазоинвертора , то вы сильно нарушили баланс сигналов на сетках выходных ламп , тем самым очень сильно увеличив уровень второй гармоники , что так же очень хорошо видно на графике ачх . вывод : каналы усилителя звучат совершенно по разному , в какой то степени это сгладит ооос , но звук все же будет ну не айс . вот настоятельно рекомендую сделать это : ну а там каждому свое , устраивает звучание усилителя , ну так и забейте тогда 
    • SENDUST или альсифер по-русски. Ферритовые кольца не годятся. Можно взять ферритовый Ш-образный сердечник с зазором. Какой модуль ? Который вы собрали, или купленный у китайцев ? Если купленный у китайцев, то он работает как SEPIC преобразователь и никакие снабберы и суппресоры ему не требуются, т.к. все выбросы, в т.ч. и отражённое напряжение уходят через конденсатор Cdc к потребителю. На вашем же модуле снаббер нужно ставить в обязательном порядке. Хотя, для такой мощности хватит суппресора.
    • Не обсуждали, но конструкция освещалась. Её можно рассматривать только в случае, если нет возможности купить патрон 0,3 - 4 мм.
    • https://market.yandex.ru/product--flius-gel-flux-plus-bezotmyvochnyi-10g/1412132848?nid=55166&show-uid=16427114372216197729416002&context=search&text=Флюсы NC-D500 6-412-A Flux-Plus&sku=101414308677&cpc=9PQ8wk_dwzUKFAp5kbB_BHqXk_83F3Be0XMA9VS5lg-wU0YWULfTlkSTPujYIfEamNz9C0ZigXM95q1_kN0s-K_jkDC4BfsuJFOiPypRW-cauET-6L161BcKnuxSfCp0z8GRHLLxmDjgLZXjGOd1WT-s8iDBWz4YPdf6S1dFFfvOIZLjhOgu2ornoVm0cLMV&do-waremd5=VgQrBT2FmYHgEj8qF4_A-A не поделитесь "примером для подражания"?  
    • На радиаторе (на фото) прикручены ТО-247. ТО-3 - это вот это 
    • У меня 1c15 только нового образца в белом корпусе и сеней резинке. Одна непонятная особенность , при отключенных щупах показывает бегающую частоту и напряжение, и при замере постоянного напряжения показывает частоту. 
  • Similar Content

    • By Super Akk
      Здравствуйте, помогите пожалуйста исправить ошибку в коде Eclipse
      Ошибка: makefile:32: *** missing separator.  Stop.
      Код Eclipse:
      # Target file name (without extension) TARGET=DSN # Define commands CC=C:\Program Files\GNU Tools ARM Embedded\4.6 2012q4\bin\arm-none-eabi-gcc.exe OBJCOPY=C:\Program Files\GNU Tools ARM Embedded\4.6 2012q4\bin\arm-none-eabi-objcopy.exe SIZE = C:\Program Files\GNU Tools ARM Embedded\4.6 2012q4\bin\arm-none-eabi-size.exe LDSCRIPT=lm3s308_flash.ld REMOVE= rm -f COPY= cp -f MOVE= mv -f REMOVEDIR = rmdir MAKEDIR= mkdir -v CMSIS_DIR=../Libraries/cmsis SPL_DIR=../Libraries/SPL LINKER_FLAGS=-nostartfiles -Xlinker -o$(TARGET).elf -Xlinker -M -Xlinker \ -Map=$(TARGET).map DEBUG=-g OPTIM=-O0 M_CPU=cortex-m3 CFLAGS=$(DEBUG) -I. \ -I $(CMSIS_DIR)/core/inc \ -I $(CMSIS_DIR)/device/inc \ -I $(SPL_DIR)/inc \ -D inline= -mthumb -mcpu=$(M_CPU) $(OPTIM) \ -T $(LDSCRIPT) -ggdb SOURCE= vtable.c \ crt.c \ main.c OBJS = $(SOURCE:.c=.o) all: begin Debug $(TARGET).bin size finished move end $(TARGET).bin : $(TARGET).elf $(OBJCOPY) $(TARGET).elf -O ihex $(TARGET).hex $(TARGET).elf : $(OBJS) $(CC) $(CFLAGS) $(OBJS) $(LINKER_FLAGS) $(OBJS) : %.o : %.c $(CC) -c $(CFLAGS) $< -o $@ size: $(SIZE) --format=berkeley $(TARGET).elf # Define Messages # English MSG_ERRORS_NONE = Errors: none MSG_MOVE = ------ Moving output files into Debug folder ------ MSG_BEGIN = -------- begin -------- MSG_END = -------- end -------- begin: @echo @echo $(MSG_BEGIN) finished: @echo $(MSG_ERRORS_NONE) move: Debug @echo @echo $(MSG_MOVE) @echo $(MOVE) $(OBJS) Debug $(MOVE) $(TARGET).elf Debug $(MOVE) $(TARGET).hex Debug $(MOVE) $(TARGET).map Debug end: @echo $(MSG_END) @echo Debug: $(MAKEDIR) Debug clean : begin clean_list end clean_list : touch Makefile @echo $(MSG_CLEANING) $(REMOVE) $(OBJS) $(REMOVE) $(TARGET).hex $(REMOVE) $(TARGET).bin $(REMOVE) $(TARGET).elf $(REMOVE) $(TARGET).map $(REMOVE) Debug/* $(REMOVEDIR) Debug  
    • By Н_Д_А
      Всем привет).
      Может, кому-то эта статья  сэкономит много времени и нервов. 
      Недавно  по работе встретился с интересной задачкой.
      Нужно было передать на железку по порту RS485 информацию для проверки работоспособности последней.
      Так как не всегда имеется в ремонте вся система, то для начала нужно было посмотреть, на заведомо исправной системе, что же там между ними (железками) передаётся.
      Логический анализатор показал что девайсы общаются по не совсем стандартному, а по  9ти битному протоколу (USART 9n1).
      А это усложняло задачу, так-так известные мне терминальные программы его не поддерживают.  И без бубна не обойтись))).
      Начались поиски решения.
      Через некоторое время стало понятно, что AVR позволяет это делать и даже в даташите подробно это описывает.
      Дело за малым. Реализация задуманного))). 
      Все регистры выставлены по документу………..Для Atmega8a.
      void USART_Init( unsigned int speed) //Инициализация модуля USART { UBRRH = (unsigned char)(speed>>8); UBRRL = (unsigned char)speed; UCSRB=(1<<RXEN)|( 1<<TXEN); //Включаем прием и передачу по USART UCSRB |= (1<<RXCIE); //Разрешаем прерывание при передаче UCSRA |= (1<<U2X); //удвоение скорости UCSRC = (1<<URSEL)|(1<<USBS)|(1<<UCSZ1)|(1<<UCSZ0); UCSRB |= (1<<UCSZ2); // Включаем 9bit режим // Обращаемся именно к регистру UCSRC (URSEL=1) // ассинхронный режим (UMSEL=0), без контроля четности (UPM1=0 и UPM0=0) // 1 стоп-бит (USBS=0), 8-бит посылка (UCSZ1=1 и UCSZ0=1) // если (UCSZ1=1 и UCSZ0=1 и UCSZ2=1) 9bit mode. // UCSRC |= (1<<UPM1);//четность } По даташиту передача 9го бита происходит установкой или сбросом TXB8. 
      То есть, установили бит, передаётся 1 в старшем 9ом разряде, сбросили – 0. 
      void USART_Transmit( unsigned int data ) // функция передачи 9ти бит из даташита. { /* Wait for empty transmit buffer */ while ( !( UCSRA & (1<<UDRE)) ) ; /* Copy ninth bit to TXB8 */ UCSRB &= ~(1<<TXB8); if ( data & 0x0100 ) //не понял, что они хотели этим сделать. UCSRB |= (1<<TXB8); /* Put data into buffer, sends the data */ UDR = data; } И вот незадача, числа размером до 1 байт передаются без проблем, а числа больше 0xFF (255) нет).
      А устройство передаёт числа до 510.
      Предлагаю решение.  Может и не самое лучшее, но вполне работоспособное.
      int main(void) { USART_Init (103);//9600 //------------------------------------------------------------------------------------ while(1) { for (i=0; i<22; i++) { code_simbol = simbol[i]; //символ из массива //-------------------------------------отправка в UART-------------------------------- if (code_simbol > 255) { pr=1; // флаг передачи символа больше 0xff (255 десятичное) } else { pr=0; // флаг передачи символа меньше 0xff } USART_Transmit(code_simbol,pr);//собственно сама функция отаравки } } } А теперь и сама функция передачи .
      void USART_Transmit( unsigned char data, uint8_t prisnak ) //Функция отправки по USART { while ( !(UCSRA & (1<<UDRE)) ); //Ожидание опустошения буфера приема if (prisnak==1) { UCSRB |= (1<<TXB8); //устанавливаем для передачи еденицы в старшем разряде } else { UCSRB &= ~(1<<TXB8); //сбрасываем старший разряд } /* Put data into buffer, sends the data */ UDR = data; //Начало передачи данных asm volatile ("nop"); Соответственно если число для предачи мньше 256 мы передаём его при нулевом 9ом бите.
      Ну а если больше то 9й бит выставляем в единицу.
      А вот и результат.

       
    • By eyuw
      Б/у контролеры холодильной установки: 1) Eliwell 974LX  на atmega16A-PU , 3 реле - характеристики на фото.Цена 15 бел.руб. 2) Eliwell IDPlus974  на atmega32A-PU, 3 реле - характеристики на фото.Цена 18 бел.руб. Корпуса без передней панели закрывающей цифровой индикатор, без датчиков температуры! г.Толочин, Витебская обл. Отправка по Беларуси наложенным платежом. Покупатель также оплачивает почтовые расходы. 


    • By Leonid Valetkin
      Пытаюсь подключить оборудование к сигналке, но нигде не могу найти такой коннектор...
      Тип коннектора: 3-х ветвистый головной коннектор. Производственный номер 1181451
      Уже закупился всяким добром чтоб подключиться колхозным методом, но остается надежда найти этот коннектор
      Заранее спасибо, буду благодарен либо названию или ссылке на данный коннектор


    • By АртемК
      Уже весь интернет прошерстить, помогите найти, или где он приставует, чтоб его достать нужен очень срочно, или может у кого то есть куплю!

×
×
  • Create New...