Перейти к содержанию

Душитель Гуся

Members
  • Постов

    17
  • Зарегистрирован

  • Посещение

Информация

  • Город
    Курск

Электроника

  • Стаж в электронике
    1-2 года
  • Сфера радиоэлектроники
    Никто
  • Оборудование
    Бич

Посетители профиля

Блок последних пользователей отключён и не показывается другим пользователям.

Достижения Душитель Гуся

Новичок

Новичок (1/14)

  • Преданный
  • 10 постов на форуме
  • Год на форуме
  • Неделя на форуме
  • Месяц на форуме

Последние значки

0

Репутация

  1. Ну незнаю, я вроде приручил мостовую схему. По крайней мере я не видел осцилограммы т.к. у меня нет осцилографа. Ну на невооружённый взгляд нареканий нет. Схемы драйверов не сложные.
  2. Спасиб за инфу! Ток у меня вопрос по поводу намотки вторичек. Ести тут 4 высоковольтные вторички, то я думаю намотать по одному слою каждой вторички(их 2), потом первичку, потом домотать вторички. Это хорошая идея? У меня есть подозрения, что разделение обмоток увеличит риск пробоя. Ну и второй вопрос как изолировать? По технологии Касьян(5 слоёв капт скотча на слой в 140В)?
  3. Как усложняется? Если регулировка будет по усилителю ошибки через 5-ю 5В обмотку. Шим по идее автоматически должен подстраиваться. Ну и впоследствии возник вопрос: адекватна ли идея с отдельной вторичной обмоткой, которая отвечает за стабилизацию напряжения, и не подключена к ВВ части? Будет ли пропорционально напряжение на вторичных обмотках?
  4. Ну я имею ввиду нужно ли разделять первичку подобным образом в тороидальном сердечнике или нужно разделять только ш-образный трансформатор? Мост. Потому, что назначение этого преобразователя-регулируемый источник высокого напряжения. Мало того, что там можно будет регулировать выходное напряжение переключением вторичных обмоток(4Х310В), так и будет добавлена регулировка выходного напряжения посредством шим в узком диапазоне. Мост больше всего для этого подходит. На пуш-пул будут значительные выбросы на полевиках из-за большей паузы между импульсами. Ток незнаю что надёжнее для этого: драйверы на ir2110(есть готовые платы этого модуля) или ТГР.
  5. Здравствуйте! Хочу сделать мостовой двухтактный повышаюший преобразователь 12-1200В. Вот на этом магнитопроводе. Вопрос: нужно ли разделять первичку этого преобразователя на 2 части и мотать между ними вторичку как во флайбэке?
  6. С обычными переменными таже беда Нет, пробовал. Не в этом дело. Да и эти функции исправно работали на 328р. Даже с массивами в глобалке. Дело в компиле или линке Инфы на предмет готовых и рабочих настроек на этот компиль и этот чип в инете практически нет На 328р всё работает.
  7. Тогда как его инициализировать так, чтобы он был глобальной переменной? Для дополнительной проверки возможности вызова массива из глобальных переменных я сделал светодиодный тест и пришёл к выводу, что массив не вызывается. Светодиодный тест это подтвердил. sendcharlcd() вроде работает исправно. Есть ли варик выбрать IDE, или настроить компиль и линкер так, чтобы не приходилось смотреть сгенерированный ассемблерный код и всё работало так, как задумано? да отображает это число только в нулевой ячейке. Но зачем это делать, если я подобные тесты проделывал? Если пишу массив перед int main() в whle(1) не могу его вызвать. Если в whle(1) и вызываю там же-всё ном .
  8. Понял суть описаной на этом форуме проблемы? Перемещаем массив в основной цикл. #include "main.h" char ggg []="5146845"; int main() { I2C_Init();//инициализируем TWI LCD_ini(); //инициализируем дисплей clearlcd();//очистим дисплей DDRB=0b11111111; while (1) { //----------------2* unsigned char str1[]={2,4,7,2}; //------------1* setpos(0,0); //extern unsigned char str1[]; sendcharlcd(str1[0]/100+0x30); sendcharlcd(str1[0]%100/10+0x30); sendcharlcd(str1[0]%10+0x30); setpos(4,0); sendcharlcd(str1[1]/100+0x30); sendcharlcd(str1[1]%100/10+0x30); sendcharlcd(str1[1]%10+0x30); setpos(8,0); sendcharlcd(str1[2]/100+0x30); sendcharlcd(str1[2]%100/10+0x30); sendcharlcd(str1[2]%10+0x30); setpos(12,0); sendcharlcd(str1[3]/100+0x30); sendcharlcd(str1[3]%100/10+0x30); sendcharlcd(str1[3]%10+0x30); for (unsigned int n=0;n<4;n++) { for (unsigned char a=0; a< str1[n]; a++) { PORTB |= (1<<7); _delay_ms(1000); PORTB &= ~(1<<7); _delay_ms(1000); //sendcharlcd(str1[n]); } _delay_ms(3000); } } //return 0; } Чудо-чудесное
  9. Тот же код. #include "main.h" unsigned char str1[]={2,4,7,2}; //------------1* char ggg []="5146845"; int main() { I2C_Init();//инициализируем TWI LCD_ini(); //инициализируем дисплей clearlcd();//очистим дисплей DDRB=0b11111111; while (1) { //----------------2* setpos(0,0); //extern unsigned char str1[]; sendcharlcd(str1[0]/100+0x30); sendcharlcd(str1[0]%100/10+0x30); sendcharlcd(str1[0]%10+0x30); setpos(4,0); sendcharlcd(str1[1]/100+0x30); sendcharlcd(str1[1]%100/10+0x30); sendcharlcd(str1[1]%10+0x30); setpos(8,0); sendcharlcd(str1[2]/100+0x30); sendcharlcd(str1[2]%100/10+0x30); sendcharlcd(str1[2]%10+0x30); setpos(12,0); sendcharlcd(str1[3]/100+0x30); sendcharlcd(str1[3]%100/10+0x30); sendcharlcd(str1[3]%10+0x30); for (unsigned int n=0;n<4;n++) { for (unsigned char a=0; a< str1[n]; a++) { PORTB |= (1<<7); _delay_ms(1000); PORTB &= ~(1<<7); _delay_ms(1000); //sendcharlcd(str1[n]); } _delay_ms(3000); } } //return 0; }
  10. Тот же код. Ни ошибок, ни предупреждений. 4 ячейке массива-это намеренно оставленная ошибка. Назначение этих строк: разбить 3-х разрядное число по разрядам и отправить каждое число разряда на lcdtwi диспей в виде символа Char.
  11. В этом форуме 2-ой раз. 1)Знаю, что эта запись-как попытка отобразить значение несуществующей ячейки массива. Ты просто представь. Компилятор это не выдал за ошибку. Без этих строчек результат тот же. 2) Вставка __attribute__((aligned(4))) и extern это попытка вручную прописать массив в глобальные переменные и обратиться к ним. Что с этими вставками, что без них-результат один. #include "main.h" //extern char str1[4]; //char* str1 = (char*) malloc(sizeof(char) * 4); unsigned char str1[]={2,4,7,2}; __attribute__((aligned(4))) //------------1* char ggg []="5146845"; int main() { I2C_Init();//инициализируем TWI LCD_ini(); //инициализируем дисплей clearlcd();//очистим дисплей DDRB=0b11111111; while (1) { //----------------2* setpos(0,0); //extern unsigned char str1[]; sendcharlcd(str1[0]/100+0x30); sendcharlcd(str1[0]%100/10+0x30); sendcharlcd(str1[0]%10+0x30); setpos(4,0); sendcharlcd(str1[1]/100+0x30); sendcharlcd(str1[1]%100/10+0x30); sendcharlcd(str1[1]%10+0x30); setpos(8,0); sendcharlcd(str1[2]/100+0x30); sendcharlcd(str1[2]%100/10+0x30); sendcharlcd(str1[2]%10+0x30); setpos(12,0); sendcharlcd(str1[3]/100+0x30); sendcharlcd(str1[3]%100/10+0x30); sendcharlcd(str1[3]%10+0x30); setpos(16,0); sendcharlcd(str1[4]/100+0x30); sendcharlcd(str1[4]%100/10+0x30); sendcharlcd(str1[4]%10+0x30); for (unsigned int n=0;n<4;n++) { extern unsigned char str1[]; for (unsigned char a=0; a< str1[n]; a++) { PORTB |= (1<<7); _delay_ms(1000); PORTB &= ~(1<<7); _delay_ms(1000); //sendcharlcd(str1[n]); } _delay_ms(3000); } } //return 0; } Это код не в виде картинки. Пардон Нет. Один и тот же исходник на 328 работает, а на 2560 нет. И тот и другой вариант собирается без ошибок
  12. Здравствуйте! Программировал в среде Microchip(Atmel) Stidio микроконтроллер Atmega328p. Мне понравилось программировать в этой IDE. Также изучение аппаратной части МК мне заходит больше, чем оперирование Ардуиновскими командами. Но вот незадача: прошивка на Atmega328p работала корректно с оптимизациями 1 и больше(0-не работал), а на Atmega2560 с разными настройками оптимизациями и линкера работает некорректно. Написал проверочный код на At2560. Ситуация не менялась. 1)Проблема в том, что по каким-то причинам из тела цикла while(1) невозможно получить доступ к глобальным переменным(в частности к массиву данных). Если массив размещался в теле цикла while(1), то к нему можно было получить доступ, но только из оператора if или очень простой функции. 2)Если попробовать получить массив данных из сложной функции с циклом то ячейки массива были равны 255(я записывал значения поменьше) и это при том, что я размещал массив в while(1). Долго извращался с настройками компилятора и линкера, так и ничего путного не получилось. Пробовал программировать в IAR AVR и CodeVision AVR МК At2560. У меня даже светодиод зажечь не получилось. Немного поковырялся в настройках-ничего. Слишком много времени нужно на изучение всех параметров Компиля и Линка. Забил. Пробовал Eclipse с плагином AVR и компилем AVR GCC 12.1. Вроде чутка заработало, но мне удавалось зайти в эту среду только 1 раз после установки. Второй раз я не смог зайти после закрытия проги. Работоспособность 12.1 компиля не удалось оценить. Да и собирался проект в Eclipse через раз. Товарищи, если у кого-нибудь есть пример рабочих настроек для данного девайса, не проходите мимо. Для любых вышеперечисленных IDE или IDE, которое у вас. Или укажите на работоспособный тулчейн(с параметрами). Желательно с подробным гайдом по настройке. Ассемблер впадлу учить. Ниже приведён проверочный код из Microchip Studio. Есть участки: //------1(глобальные переменные) и //------2(тело цикла while(1)). Участки размещения массива str1. И ниже два проверочных участка: 1) Отправка символов на символьный дисплей. Эта часть выводит значения ячеек массива посимвольно(функция для выведения числа целиком не работает). 2) Светодиодный тест. Значения ячейки массива выводится морганием светодиода с задержкой 1 сек. Пауза между переключением ячеек 3 сек. Массив в глобальных переменных: на дисплее 255 и светодиод неустанно моргает с паузой в 1 сек. Массив в теле цикла while(1): работает на обоих участках. Если вывод массива на дисплей занести в цикл, то реальные значения ячеек не отобразятся. Что можно с этим сделать: поменять настройки в этой среде(у меня не получилось), подключить другой компиль в эту среду(это сложно, желательно подробный гайд), выбрать другой IDE, программировать на Ардуино?
×
×
  • Создать...