Jump to content

Устройство импульсного заряда/разряда АКБ на МК PIC (Эх, заряжу - 01)


Recommended Posts

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

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

Подробнее

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

Современные строительные электроинструменты достигают высокой производительности и эргономичности благодаря использованию мощных бесщеточных электродвигателей и литий-ионных аккумуляторов. Для реализации сложных алгоритмов питания таких двигателей и управления ими компания Infineon предлагает решения, позволяющие создавать оборудование, отвечающее самым современным требованиям, предъявляемым к технике подобного класса.

Подробнее

Подобрал почти все комплектующие. Ищу шунты. Может кто-то поделится печатной платой по последнему проекту?

Где-то попадалась схема РАЗрядного устройства, где в качестве нагрузки использовался МОСФЕТ управляемый контроллером. Меняя напряжение на затворе можно менять сопротивление MOSFETA и соответственно разрядный ток. Потребуется соответствующий радиатор и вентилятор, но появятся возможность программно менять ток разряда. Свободные ноги на контроллере имеются, про память не знаю, её всегда не хватает...

Link to comment
Share on other sites

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

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

Подробнее

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

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

Подробнее

ну, вот к примеру моя тема по испытанию аккумуляторов на Радиокоте:

https://radiokot.ru/forum/viewtopic.php?f=11&t=138699

там у меня, как раз, стабилизатор тока на ОУ и мосфете.

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

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

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

Link to comment
Share on other sites

Спасибо за ссылки на очень интересные схемные решения. Оба устройства достойны внимания, особенно от Starichok, правда смущают реле в силовых цепях.

13.11.2020 в 23:59, sedojkot сказал:

Может кто-то поделится печатной платой по последнему проекту?

?

Link to comment
Share on other sites

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

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

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

Link to comment
Share on other sites

Я выкладывал печатку, но сделал другую для пробы, проверил работает если устраивает делайте я как умею так и сделал. Поменял LM 324  на  LM358  линейность  проверил  смотрите на видео.

 

 

9.8.rar

Link to comment
Share on other sites

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

если устраивает

Устраивает вполне. vladimir1962 большое спасибо за проделанную Вами и автором топика работу! PDF посмотрел. Осталось обновить Шпротеус. Линейность для таких токов вполне приличная.

Link to comment
Share on other sites

13.09.2020 в 12:23, postaloi сказал:

Склоняюсь к версии с двумя прошивками.

Сегодня покопался и выяснил, что PIC16F886 и PIC18F2520 полностью "совпадают по ногам", но программной и оперативной памяти в 18 -м пике в четыре раза больше. Думаю, что перекомпиллировать программу под 18-й пик не составит труда. Готов за это взяться. А какие просторы открываются...  И не надо выкаблучиваться с двумя прошивками и делать сокращения в надписях настроек на индикаторе. И частоту без кварца можно поднять до 32 Мгц. Из минусов - цена. Надо раскошелиться на +$4-6, но кажись оно того стОит.

Link to comment
Share on other sites

автор ты мега молодец. собираю зарядное второе на твоих схемах. в этот раз максимально компактно и меньшие токи будут!

поделитесь разводкой платы готовой, у автора МК мелкая, у меня на изготове  полноценная. может, vladimir1962?

Link to comment
Share on other sites

Рисую плату. Возник вопрос - где разместить LM3xx, на плате с микроконтроллером, или на плате силового блока рядом с шунтом. Хочется рядом с контроллером. Есть ли принципиальная разница? По идее наводки на кабель от шунта к компаратору не должны повлиять на работу, или я ошибаюсь? Может у кого-то был опыт по этому вопросу?

Link to comment
Share on other sites

17.11.2020 в 02:59, sedojkot сказал:

но программной и оперативной памяти в 18 -м пике в четыре раза больше

лучше сразу STM32

25.11.2020 в 22:13, sedojkot сказал:

где разместить LM3xx

 

25.11.2020 в 22:13, sedojkot сказал:

Есть ли принципиальная разница?

Делал и так и так разницы не заметил.

А вот делитель напряжения нужно двигать поближе к МК.  Очень хорошо ловит помехи.

Link to comment
Share on other sites

Спасибо за ответ. STM32 - моя многолетняя мечта, такая же как научиться говорить на английском ).  Извините, но я не понял, что Вы имели в виду под делителем напряжения. И подскажите пожалуйста, какое сопротивление переменного резистора между 62k и 20k. На схеме не указано.  Наверное это и есть делитель.

Link to comment
Share on other sites

  • 2 weeks later...
2 часа назад, vladimir1962 сказал:

отказались очень большие наводки

умные наводки, однако - отказались от него ...

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

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

Link to comment
Share on other sites

27.11.2020 в 17:04, postaloi сказал:

Очень хорошо ловит помехи.

Может потому, что проволочный? И номинал этого переменного резистора подскажите пожалуйста. 

Link to comment
Share on other sites

  • 2 weeks later...

Здравствуйте postaloi. Есть одна проблема на зарядном, не могу настроить ток заряда очень занижает. На транзисторе не получилось очень большой импульсный ток, сделал на тиристоре  и мост регулируемый,   по этому при заряде импульс не один а пачка, а при разряде все нормально работает и ток настраивается. Посмотрите или реально что-то сделать,  на видео импульс  заряда видно.СПАСИБО.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. 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.

  • Сообщения

    • https://radiokot.ru/forum/viewtopic.php?f=11&t=148958&p=3315465&hilit=мощный+высоковольтный+регулируемый+источник#p3315465 тирзай на здоровья, дэт... схемка тяжёлая как хивимиталл ... собрана исключительно из импорта, правда... совковых аналогов многих рэа просто нетути в природе... работает от от 24...40в переменки в гараже... 
    • Что за бред вы пишите? Какой еще 1В? Если вы не в курсе, то конденсатор ставится с запасом по напряжению, а это значит, что при кондере 35В безопасно на него можно подать лишь 25-30В, не более. У вас же откуда-то 36В взялись. Вы это пишите просто лишь бы писать?   Все понятно. Сначала ляпнули бред, теперь в кусты.   Держите свой опыт при себе. Не надо неопытным новичкам свои бредовые идеи рассказывать. Особенно, когда они не соотносятся с реальностью.   Шта?! Какой ШИМ? При чем тут регуляторы? Вы вообще пост автора читали?
    • нет, не понятно. Т.З. нет для "начинающегося проекта", готовое решении не показали "что сделано", "как дошли до этого?"
    • Я на  светодиодной индикации делал , только чуток не так  ...   
    • На фирменных банках обычно указывают емкость АКБ и емкость с учетом КПД dc-dc преобразователя. У меня на сяомишной банке 16000 мАч указана емкость 16000 мАч и отдаваемая емкость что-то около 13000 мАч. В телефоне у тебя тоже указана емкость АКБ. Дальше простая математика.
    • О ... задел и именно в тему. Да, по параметрам мало двух было и перечень был хороший, главное что только внимательно прочитав этот перечень станет понятно - вина тому именно питание. А тема какая? О "правильном" питании для аудио. Написано много и всё вокруг до около, один список тому доказательство. То что этот вопрос будоражил людей с момента применения переменного тока я могу вам доказать тут же вытащив русский патент с начала 20го века, засорять ветку нет желания. Желание есть заострить ваше внимание на цели этой проблемы, где нужно пожалуй переломать своё ранее полученное понятие. Это и есть причина того что я призывал к спокойствию и терпению. Будет не легко, это мне знакомо, кое кто уже пытался применить неудержимое желание притопить. Ну будьте мужиками и давайте вместе поработаем, не над попыткой как это в ссылке, а над результатом. Существует ли таковой результат - да, с 2015 года. Я тут не для тупой борьбы по "ломанию копий", я пришёл поделиться что мне показали, а для этого надо поработать. Надеюсь я понятно высказался. Согласны?
    • Обычно мизерный. В платах с трансформатором именно так и сделано. трансформатор выдает 24В на питание реле и т.п., а дальше уже стоят стабилизаторы на 12В и 5В.
  • Similar Content

    • By Falconist
      Уважаемые коллеги,
      немного "злоупотребил властью" и открыл отдельную тему, поскольку аналогичная тема на "Казусе" неожиданно получила достаточно большой резонанс (только "спасиб" - 148). Неоднократно отсылал туда, чтобы не дублировать одинаковые темы на разных форумах, но в связи с недавним усложнением регистрации на Казусе такая отсылка становится напряжной. Да и расползлась "та" тема до почти 800 постов, т.е. приблизилась к пределу "читабельности", при том что ещё почти столько же было выделено в 2 дочерние подтемы.
      Итак, "ближе к телу" (как говорил Ги де Мопассан).
      Схема зарядки (сразу предупреждаю!) не является абсолютно оригинальной, является гибридом статей М.Шумилова в "Радио".- 2009, № 1.- С.38-39; "Зарядное устройство из блока питания АТ-АТХ" и нескольких схем компьютерных БП АТ (варианты "А" и "В"), с датчиком тока на транзисторе.

      В третьем варианте ("С") использован принцип измерения тока заряда вторым компаратором самой TL494 ( http://kravitnik.nar...e/charge_4.html ).

      По принципу действия все они являются стабилизаторами тока с ограничением максимального напряжения на уровне 14,4 В. Выходной ток заряда может достигать 10...12 А с соответствующим трансформатором (ну уж не совсем "малюпусеньким"!). Эта зарядка НЕ ПРЕДНАЗНАЧЕНА для десульфатации, "тренировки" и прочих извращений, являющихся "тяжким наследием совейской действительности", когда стоимость нового аккумулятора была сопоставима с месячной зарплатой. Только чтобы подзарядить севший аккумулятор перед выездом после долгого стояния в гараже. А дальше - пусть справляется генератор самой машины. По этой же причине в ней нет и индикации тока заряда и напряжения - ток заряда в начале стабилен, задается для имеющегося аккумулятора, а перед концом начинает снижаться. Напряжение больше выставленных 14,4 В не вырастет. Ввести такие измерители не представляет никакого труда, но это уже вопрос моддинга.
      Все схемы построены по топологии АТ. Считаю с полным основанием, что дежурное питание для подобного сабжа, являющегося "вещью в себе", совершенно не нужно! Это ведь не компьютер, который должен находиться в дежурном режиме, чтобы иметь возможность включения по сети или звонку модема! БП АТ десятилетиями работали без нареканий.
      Оригинальной является только печатная плата.

      Она избыточна - для всех трех вариантов (некоторые детали просто не запаиваются, + устанавливаются перемычки.
      Распайка и сборка сабжа на новой плате может вызвать возражения, мол "проще выпаять ненужные детали на готовой плате, зачем городить огород?" Хорошо знакомо. Дело в том, что такой подход хорош для опытных любителей/профессионалов, хорошо знакомых с топологией печатных плат компьютерных ИИП. В этой связи для опытных могу порекомендовать отличнейшую статью на "Радиокоте по переделке ИИП. Малоопытные же встречают на этом пути серьезные трудности, времени иногда занимает намного больше с непредсказуемым результатом, вплоть до неработоспособности. Тоже хорошо знакомо. И чем меньше опыта, тем больше трудностей. Давайте не поднимать по этому поводу холивар. "Кому нравится поп, а кому - попадья"...
      Вторая причина: могут иметься в наличии несколько неработающих ИИП, каждый по себе не запускаемый, а вот детали от них "из общей кучи" могут быть целыми.
      Поскольку цоколевка управляющего трансформатора по "низковольной" стороне бывает самой разной ( http://forum.cxem.ne...showtopic=65531 ) - нужно внимательно рассмотреть топологию печатки-"донора" и скорректировать печатку в этой её части. Реле - на 30А (автомобильное), служит защитой от переполюсовки. Выходной дроссель перемотан проводом диаметром 1 мм - 30 витков (индуктивность около 56...62 мкГ).
      Единственными деталями, которые придется докупить, является выпрямительный полумост, который должен быть не менее, чем на 80...100 В обратного напряжения и на планируемый ток (те, которые стоят в канале +5 В - имеют слишком малое обратное напряжение, а в канале +12 В - слишком малый прямой ток), реле (в автомагазинах) и токоизмерительные резисторы по 0,1 Ом (вместо них можно поставить шунты от тестера или просто куска высооомного провода, хоть от электроплитки).
      Фото готового сабжа.

      В архиве - то же самое, в формате sPlan и SprintLayout.
      P.S. Планировалось по результатам обсуждения разработать гамма-версию, с опциональным режимом десульфатации, но из-за недостатка времени эта работа до конца не сделана. Разработана схема (вариант "D") с "жесткой" стабилизацией выходного напряжения (токоизмерительный резистор исключен из цепи стабилизации напряжения):

      По этой схеме изготовлены 2 ИИП на +12 и +5 В, суммарной мощностью до 60 Вт, с общим ограничением выходного тока на уровне 5 А, на плате размерами 70 х 100 мм.

      Эксперимент по заряду аккумулятора емкостью 45 А*ч с их помощью увенчался полным успехом. Однако, отсутствуют цепи питания кулера, защита от переполюсовки, плата нестандартная для корпуса компьютерного БП и т.п. Печатка на этот вариант и еще один (4 закладки, как в Экселе)
      На все вопросы отвечу, замечания и уточнения "по делу" приму с благодарностью.
      добавление от Starichok51:
      вот здесь я дал схему на свой Вариант Е:
      Charger_Acid_Auto.rar
    • 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 АртемК
      Уже весь интернет прошерстить, помогите найти, или где он приставует, чтоб его достать нужен очень срочно, или может у кого то есть куплю!

×
×
  • Create New...