Jump to content

Видеокурс по AVR-микроконтроллерам для начинающих


 Share

Recommended Posts

4 часа назад, LiVit сказал:

Нанять хотите? 

Нет конечно. 

4 часа назад, LiVit сказал:

Не хватит денег.

Судя по этому ответу, Вы считаете себя нормальным специалистом.

4 часа назад, LiVit сказал:

А вам зачем?

Просто интересно, почему по сути не хотите ответить?
Насколько я понимаю, если Вы нормальный специалист, тогда ответ на вопрос Вы знаете?
Или я ошибаюсь?

Link to comment
Share on other sites

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

Просто интересно, почему по сути не хотите ответить?

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

Link to comment
Share on other sites

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

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

Подробнее

07.10.2021 в 01:30, Alex сказал:

там написан бред.

Ну что ж, попробую  озвучить свое непонимание ещё раз.
В Вашем примере из шестого урока:
Program:    1900 bytes (23% Full)
Data:        511 bytes (49.5% Full)

Мне же удалось выйти,  только на такие показатели:
Program:    3864 bytes (47.2% Full)
Data:        527 bytes (51.5% Full)

Вопрос:
Почему? 

*  картинку из урока №6 повторять здесь не буду, она находится на предыдущей странице, сообщение от 06.10.2021 г.

23 часа назад, gogaze сказал:

С++ ? Уроки то по Си.

Замечание очень правильное, большое спасибо Вам за это.
Однако Ваше замечание запоздало где-то примерно на час - два, потому что над этой проблемой я самостоятельно "бился" почти неделю. И окончательно решил эту проблему 10.10.2021 г.,  примерно в 23:00. 
 Сейчас есть другая проблема, если возможно, помогите пожалуйста, текст проблемы озвучил чуть выше. 

Les-Std-03-02.rar

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

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

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

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

Подробнее

Способы повышения КПД и удельной мощности инверторов для солнечных электростанций

Какую элементную базу выбрать для проектирования инверторов для солнечных батарей – новую карбид-кремниевую или традиционную кремниевую? Специалисты Infineon приходят к неожиданному выводу: традиционная кремниевая может помочь достичь КПД 99%. Но для этого следует применить сравнительно новую схему многоуровневого преобразования, которая может оказаться непростой для начинающего разработчика.

Подробнее

@Юрий_Нд

Скрытый текст

Только что скомпилировал на своей Atmel Studio 7

На скрине - параметры компиляции

В архивах Ваш проект и то, что я сделал

dd9377d2c565t.jpg

 

 

Les-Std-03-02.rar Urok6_new.rar

 

 

Edited by gogaze
Картинка под спойлер

Мир не без добрых людей!

Link to comment
Share on other sites

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

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

Подробнее

3 часа назад, Alex сказал:

поколдовать с уровнями оптимизации

Я пробовал, все равно такого разброса нет. У меня получилось от 1832 до 1924. 

Мир не без добрых людей!

Link to comment
Share on other sites

$ make
avr-gcc  -mmcu=atmega8 -Wall -gdwarf-2 -std=gnu99    -DF_CPU=12000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT main.o -MF dep/main.o.d  -c  ../main.c
../main.c:3:0: warning: "F_CPU" redefined
 #define F_CPU 8000000
 ^
<command-line>:0:0: note: this is the location of the previous definition
avr-gcc  -mmcu=atmega8 -Wall -gdwarf-2 -std=gnu99    -DF_CPU=12000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT n5110.o -MF dep/n5110.o.d  -c  ../n5110.c
avr-gcc -mmcu=atmega8 main.o n5110.o    -o firmware.elf
avr-objcopy -O ihex -R .eeprom -R .fuse -R .lock -R .signature  firmware.elf firmware.hex
avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 --no-change-warnings -O ihex firmware.elf firmware.eep || exit 0
avr-objdump -h -S firmware.elf > firmware.lss

AVR Memory Usage
----------------
Device: atmega8

Program:    3620 bytes (44.2% Full)
(.text + .data + .bootloader)

Data:        526 bytes (51.4% Full)
(.data + .bss + .noinit)

Проблема все-таки есть. Причем не только в объеме, но и в том, что кто-то пихает F_CPU прямо в код, где ему не место.

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

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

Link to comment
Share on other sites

У вас включена опция линковщика подключения библиотек для работы с числами с плавающей точкой. В файле *.lss можно увидеть кучу лишних функций.

В AS 7 отключается в таком месте. Снимите галочку и пересоберите проект.

123.jpg.592c53b02bd56f95745599d7439d4bae.jpg

Link to comment
Share on other sites

15 часов назад, gogaze сказал:

В архивах Ваш проект и то, что я сделал

Спасибо Вам за подсказку.
Однако, Вашей подсказкой я, простите, не воспользовался.
Я в ново-установленной Microchip Studio создал проект с нуля, с текстом, тождественным с текстом в примере.
Сразу же без проблем получил результат:
Program Memory Usage     :    1910 bytes   23.3 % Full
Data Memory Usage            :    510 bytes   49.8 % Full
Думаю, что этот результат вполне адекватный. Поэтому не стоит, ради каких-то там пол процента памяти ещё возиться с чем-то.
А Вы как думаете?
---
п.с. У меня сейчас стоит версия Microchip Studio (Version 7.0.2542), а у Вас?

Les-Std-03-03-mprj.rar

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

@Юрий_Нд

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

У меня сейчас стоит версия Microchip Studio (Version 7.0.2542), а у Вас?

Такая же.

Я так понимаю, что в Proteus Вы не пробовали воспроизвести то, что у Вас получилось?

Lcd_print(0,3, FONT_1X,(unsigned char *)PSTR("Hellow"));
Lcd_print(0,4, FONT_1X,(unsigned char *)PSTR("Привет"));

В этих строках ошибка - вместо слов на дисплее будет мусор.

2021-10-13_034847.jpg

Edited by gogaze

Мир не без добрых людей!

Link to comment
Share on other sites

48 минут назад, gogaze сказал:

в Proteus Вы не пробовали воспроизвести то, что у Вас получилось?

Да вот только что получил результат.
Я так понимаю, до ошибок в уроке мне ещё далеко.
Сейчас для меня актуальна такая вот "бяда".

 

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

Les-Prs-03.rar

 

 

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

14 минут назад, Юрий_Нд сказал:

А вот я попробую попросить

 серьезно? протез красным по белому грит что ДеэЛЛки  у него нет.
решение вопроса первая ссылка в гугле на котов или вторая на казус

Link to comment
Share on other sites

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

Сейчас для меня актуальна такая вот "бяда".

Ну я же скидывал проект в протеусе. Я пользуюсь версией 8.6 SP2. По-моему самый стабильный.

А в своем протеусе сделайте так: запустите  Les-Prs-03.DSN: в библиотеке найдите свой дисплей, вставьте рядом со старым, соедините соответственно выводы дисплея и контроллера, удалите старый

Edited by gogaze

Мир не без добрых людей!

Link to comment
Share on other sites

@Юрий_Нд

Да файл проекта протеуса можно скопировать куда угодно. Можете из моего проекта скопировать в папку своего проекта, запустить и показать контроллеру  hex файл (свой)

Скрытый текст

24aa267c2cc0t.jpg

 

@Alex

5 минут назад, Alex сказал:

в топку Протез

Не согласен. Он прекрасно справляется с такими задачами. А вот когда в протеусе заработает - тогда и железо можно собирать.

Edited by gogaze

Мир не без добрых людей!

Link to comment
Share on other sites

3 часа назад, gogaze сказал:

когда в протеусе заработает - тогда и железо можно собирать.

Золотые слова.
От тебя только могу добавить:"... А кто плату разводить будет? Пушкин? Или простой карандашик, "напару" с резиночкой, на листочке в клеточку?"

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

... не, ну я уже не знаю, что с этим делать.
Наверное, надо спать.

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

Les-Unt-03-01.rar

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

 

@Юрий_Нд Я строчки в которых ошибка написал. 

8 часов назад, gogaze сказал:

Lcd_prints(0,3, FONT_1X,(unsigned char *)PSTR("Hellow")); Lcd_print(0,4, FONT_1X,(unsigned char *)PSTR("Привет"));

 

Edited by gogaze

Мир не без добрых людей!

Link to comment
Share on other sites

Хотя правильнее бы было пересмотреть часть урока, где Кобзарь говорит про библиотеку и памятку. А еще про разницу print   и prints

Edited by gogaze

Мир не без добрых людей!

Link to comment
Share on other sites

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

... не, ну я уже не знаю, что с этим делать.

У Вас Proteus 8.9 ??? Вот из-за таких косяков в этой версии многие (я в том числе) вернулись на Proteus 8.6 SP2. Попробуй запустить от имени админимтратора.

Edited by gogaze

Мир не без добрых людей!

Link to comment
Share on other sites

10 часов назад, gogaze сказал:

А вот когда в протеусе заработает - тогда и железо можно собирать.

Ну и зачем лишнее звено в этом процессе ? Времени вагон ?

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

А кто плату разводить будет? Пушкин?

А Вы всегда собрались в протезе схемы запускать ? Если да, то вопросов нет.

Link to comment
Share on other sites

14 часов назад, snn_krs сказал:

У вас включена опция линковщика подключения библиотек для работы с числами с плавающей точкой.

Так в коде дробные числа используются. Искать как это отключается в исходной версии лень, поэтому скажу про свою: с поддержкой дробных 3796. Без нее 2838.

UPD: отчасти это лечится флагами -fdata-sections -ffunction-sections -Wl,--gc-sections.

UPD2: Оказывается, в моем main.c просто использовалось большое количество функций, из-за чего ли6нкер не может их выкинуть. Если привести код к варианту gogaze, размер составляет 1608

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

От тебя только могу добавить:"... А кто плату разводить будет?

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

10 минут назад, Alex сказал:

Ну и зачем лишнее звено в этом процессе ?

В протезе некоторые вещи тестировать проще, чем на железе.

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

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

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.

  • Сообщения

  • 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 France de Vague
      Здравствуйте.
      Я собрал схему для генерации звуков на AVR по материалам вот этой статьи на Хабре.
      Использовал ATMega328P. В этом проекте частота ШИМ 31250 Гц, так что я собрал фильтр - RC-цепь, где R = 510 Ом, а С = 0.1 мкФ приложил схему к посту (эти значения я рассчитал на предложенном в статье калькуляторе ШИМ-фильтров (приложил скриншот); нагрузкой поставил динамик с сопротивлением 8 Ом, на схему подал 5В питания с лабораторного БП.
      Я загрузил в микроконтроллер демо-код, который должен проигрывать последовательность звуков. Фьюзы, вроде бы, стандартные, но я на всякий случай приложил скриншот и с ними.
       
      В общем, проблема в том, что звук, который он должен воспроизводить звучит приглушенно, зато блин стоит какой-то монотонный писк, иногда почти скрип и вот он очень громкий. 
      Я подумал, что проблема в неправильно рассчитанном фильтре или какой-нибудь наводке. Собрал их сто тысяч разных, но писк только приглушался вместе со всем остальным, когда я большие сопротивления ставил, а по частоте на слух не менялся(не уверен, должен ли был), хотя емкости я пробовал тоже очень разные.
      Я немного почитал код, попробовал отключить функцию подавления щелчка при сменах нот (это ничего не изменило). Код довольно сложный, чтобы пытаться всерьез искать там какие-нибудь ошибки, да и я подозреваю, что там их нет.
      Не могу понять в чем проблема уже пару дней. Возможно, кто-то уже собирал этот проект или что-нибудь подобное и сталкивался с таким? Подскажите, если так. 
      Так же, я не уверен, может быть, проблема физическая и она в микроконтроллере, думаю стоит попробовать попробовать другой камень.
      Заранее спасибо.



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


×
×
  • Create New...