Jump to content

Вопросы от начинающих по МК


Recommended Posts

13 hours ago, Юрий_Нд said:

не нужно никаких выкладок из книжек.

27 minutes ago, Юрий_Нд said:

Можете подсказать, почему chas должен быть целым?

Это действительно троллинг. Или все настолько безнадежно.

Link to comment
Share on other sites

Решения Infineon для беспроводного электроинструмента с бесщеточными электродвигателями

Современные строительные электроинструменты достигают высокой производительности и эргономичности благодаря использованию мощных бесщеточных электродвигателей и литий-ионных аккумуляторов. Для реализации сложных алгоритмов питания таких двигателей и управления ими компания Infineon предлагает микросхему интеллектуального драйвера управления трехфазным бесщеточным двигателем 6EDL7141, MOSFET BSC007N04LS6 из семейства OptiMOS 6, а также отладочную плату EVAL6EDL7141TRAP1SH.

Подробнее

всё идет так, как я предсказал - конца вопросам не будет.

Мудрость приходит вместе с импотенцией...

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

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

Как улучшить параметры преобразователей с помощью карбид-кремниевых модулей WolfPACK

Необходим быстродействующий преобразователь питания средней мощности с высоким КПД? Он должен быть компактным и недорогим? Решение – карбид-кремниевые модули средней мощности WolfPACK производства Wolfspeed. В статье рассмотрены основные особенности модулей WolfPACK и показано, что переход на эту универсальную и масштабируемую платформу позволяет не только быстро разработать новые устройства, но и без значительных затрат времени и средств модернизировать уже существующие схемы на традиционной элементной базе.

Подробнее

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

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) и характеризуются высокой надежностью и хорошей стоимостью.

Подробнее

23 часа назад, Юрий_Нд сказал:

Насколько неточный?

Простой пример:

    float a = 1.1;
    float b = 2.2;
    float c = a+b;

Человеки ожидают, что в c будет число 3,3. А там  3,30000019

Если взвешивать колбасу, то точность норм.

Если что - KEIL, компилятор V5.06 update1 (build 61) - но не думаю, что зависит от компилятора. Подозреваю, что они все работают по стандарту IEEE 754

Link to comment
Share on other sites

проверять очевидное - пустая трата времени.

Мудрость приходит вместе с импотенцией...

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

Link to comment
Share on other sites

9 hours ago, Юрий_Нд said:

спасибо за замечание, согласен.

Вот и молодец, что согласен.

Задавать элементарные вопросы и тратить чужое время из-за нежелания читать книги - это неуважение к участникам форума. 

Link to comment
Share on other sites

7 часов назад, Огонёк сказал:

GCC из Code:Blocks выдаёт такую же фигню.  Забавно.

Потому что это особенность хранения чисел в формате ieee 754, а не каких-то конкретных компиляторов

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Link to comment
Share on other sites

Доброго дня Уважаемые.
Прошу прощения за долгое отсутствие.
Хочу поблагодарить всех, кто предоставил информацию для анализа, а именно Starichok, LiVit и Огонёк.
Для меня очень странно что все говорят о погрешности, причём не конкретизируя какая погрешность я имеется в виду. 
Извините, но для меня, как для инженера это разговор ни о чём. Потому что есть абсолютная и относительная погрешность
Надеюсь все понимают, что всегда интересует относительная погрешность а не абсолютная... Но почему-то здесь никто не сказал ни слова об этом. Продолжать не буду, надеюсь всем понятно, о чём я.
Далее по делу:

06.11.2021 в 18:19, Starichok сказал:

... числа от 2^24 и выше сохраняются с погрешностью.

т.е.  2^24 = 16 777 216.
Делаем самую большую абсолютную погрешность и получаем число 16 777 217.
Вычисляем относительную погрешность: (16 777 217 - 16 777 216) / 16 777 216 * 100% = 
Извиняюсь, дальше бросил, по-быстрому сделал в Экселе:

Вывод:
Меня учили, что нормальная относительная погрешность инженерных расчётов 3-5 %.
Как мы видим, относительная погрешность, связанная с переводом чисел в тип float это 5-6 миллионных процента.
То есть в инженерных расчётах, это разговор вообще ни о чём. 
Обратите внимание, ниже таблицы я привёл строчку напряжений, с которыми я собираюсь работать. Напряжение 3,20 вольта.
Вполне приемлемая для моих расчётов ошибка в одну сотую даёт погрешность 0.3 процента. 
Тогда какое мне дело, что ошибка, связанная с типом переменных даёт относительную погрешность 5-6 миллионых процента.
Наверное это может интересовать только тех, кто собирается решать систему уравнений из 50 неизвестных.
Хотя не уверен, насколько это важно для них. Ответ на это вопрос нужно спрашивать у "чистых математиков".
 

1 - Обменник - 51.png

Edited by Юрий_Нд
Link to comment
Share on other sites

1 час назад, Юрий_Нд сказал:

какое мне дело, что ошибка, связанная с типом переменных даёт относительную погрешность 5-6 миллионых процента

Ошибки имеют свойство накапливаться. Если просуммировать миллионную долю процента миллион раз, то получится процент. Это тоже надо учитывать: где-нибудь это роли не сыграет, а где-нибудь может и повлиять на что-нибудь.

Edited by Огонёк
Link to comment
Share on other sites

2 часа назад, Юрий_Нд сказал:

Меня учили, что нормальная относительная погрешность инженерных расчётов 3-5 %.

либо ты плохо учился, либо тебя не правильно учили...

ты мостостроителям такое расскажи, что пролет моста можно сделать на 5% короче номинала, а бык поставить на 5% дальше номинала. и что они за это потом с тобой сделают ...

Мудрость приходит вместе с импотенцией...

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

Link to comment
Share on other sites

@Юрий_Нд зачем все же делать тип float? уменьшаете быстродействие системы, увеличиваете уровень погрешности, не добавляя никаких преимуществ. 

делать то можно все что угодно, только желательно все же понимать "чтобы что?"

Текущий сетап: BBB-AD-H6.1-Nataly2014-AudioPro

Link to comment
Share on other sites

59 минут назад, yaroslav.s сказал:

зачем все же делать тип float?

ну, как же! флот - он же плавает, а это солидно ...

Мудрость приходит вместе с импотенцией...

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

Link to comment
Share on other sites

3 часа назад, Огонёк сказал:

Ошибки имеют свойство накапливаться.

Всё верно, именно поэтому я и говорил:

5 часов назад, Юрий_Нд сказал:

... это может интересовать только тех, кто собирается решать систему уравнений из 50 неизвестных.

 

1 час назад, yaroslav.s сказал:

... уменьшаете быстродействие системы,

Если допустим операция вычисления происходит за сотую долю секунды, с типом флоат будет происходить в 5 раз дольше. Вы это почувствуете?
В моей программе вычисления будут происходить каждые 5 минут. Какая мне разница сколько они будут происходить?
Да хоть 2 минуты. 

1 час назад, yaroslav.s сказал:

не добавляя никаких преимуществ

... а простота/понятность кода?

-----------------------------------

Про погрешность целый пост написал. Читайте.

Edited by Юрий_Нд
Link to comment
Share on other sites

38 minutes ago, Юрий_Нд said:

Какая мне разница сколько они будут происходить?
Да хоть 2 минуты. 

Даешь double на восьмибитной STM'ке!!! ☺

Все-таки, типы данных надо с умом использовать. Я как вижу у абдуринщиков флоаты во все поля, так просто хочется тому [censored], что это написал, чем-нибудь тяжелым по черепу стукнуть и посмотреть, как лопается пустая черепушка…

Link to comment
Share on other sites

24 минуты назад, Eddy_Em сказал:

Даешь double на восьмибитной STM'ке!!! ☺

Ну уж нет! Извращаться, так от души! На i4004!!

Даже интересно стало. Кто-нибудь из тех, кто профессионально пишет для микроконтроллеров, использует float?
И если да, то для чего это могло понадобиться?

Link to comment
Share on other sites

Допустим число нужно умножить на 0.384.
Вы предлагаете умножить на 384, а потом разделить на 1000?

... а если нужно два знака после запятой, тогда / 10?

Edited by Юрий_Нд
Link to comment
Share on other sites

27 minutes ago, Юрий_Нд said:

а если нужно два знака после запятой, тогда / 10?

Неправильно! Подсказываю: цепные дроби. Я в настройках преобразования ADU в Вольты каждого канала АЦП так и делал: множитель разбивал на наиболее близкую с заданной точностью натуральную дробь, и уже ее числитель/знаменатель записывал в настройках. И в кусочно-линейной интерполяции терморезисторов в Кельвины хранил две таблицы: числители и знаменатели для каждого узла. Но вот в очень медленной читалке данных с термодатчиков TSYS01 я повел себя как последний мудак: на STM32F072 использовал флоаты!!! За такое ни один приличный человек со мной на одном гектаре срать бы не сел! Вот такая я сволочь.

P.S. Насчет умножения на 0.384 с точностью до двух знаков после запятой октава подсказала:

[N,D]=rat(0.384, 0.001)
N =  5
D =  13

что нужно умножить на пять и разделить на 13. И будет вам щассье.

Edited by Eddy_Em
Link to comment
Share on other sites

1 minute ago, _abk_ said:

сдвинуть

Для F0 так деление на константу реализуют: gcc почему-то иногда садится в лужу, и вместо логичного для такого случая умножения и сдвига вызывает медленный div…

Link to comment
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...
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.

  • Сообщения

    • Ребята, а какая линия в БП считается основной, т. е. которая постоянно в нагрузке больше других?  
    • Круто когда устройство проработано как единое целое, а не ящик с напедюренными модулями. Какие габариты получились?
    • Что наложил здесь не интересно, вх. в КЗ, нагрузку (8Ом, это жесть, 6гд-2 не ниже) откинуть, пробник на исток (А), на затворы (х. с ними сам пересчитаю), 150 Ом и 4в в х.х. )) Все побежали по твоему литералы подключать, Семигор с К. Мусатовым повыбрасывали свои проекты, Ингвин с Никитиным быстро пп перезаказали,.. зачем "печь топить" 1.5А, "гений инженерной мысли" появился.
    • Элекроника ...есть контакт где его не должно быть И его нет где должен присутствовать Все просто
    • На финише)))? Мне кажется это только начало)))))! Сейчас на ХХ 12в линия 10,2в вчера с вечера была, а при R79 в 5,1 кОм что с ней будет!
    • Во внутренней конструкции. В оригиналах спаренные резистивные площадки с напыленным графитом или что там такое, по которым трёт ползунок, вплоть до сжирания резистивного слоя. В новоделах (тех которые не по 10с за ведро) вместо резистивного слоя уже платка с smd 0805 резисторами и контактными площадками, по смазанным пятачка которых, ездит ползунок. Дискрет. Как в Бригах, только миниатюрнее. Вот там ремонтопригодность очень высокая.
    • Напруга PG почти всегда равна 5й линии!  - ну в спецификации указан уровень 3,6 В и выше тогда попробовать R79 5,1 кОм ну мы почти на финише  
  • Similar Content

    • By Super Akk
      Здравствуйте, я работаю в 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
    • 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 АртемК
      Уже весь интернет прошерстить, помогите найти, или где он приставует, чтоб его достать нужен очень срочно, или может у кого то есть куплю!

    • By Эдик Ибрагимов
      Использовать микроконтроллер семейства 8951
       
×
×
  • Create New...