Показаны сообщения с ярлыком atmega. Показать все сообщения
Показаны сообщения с ярлыком atmega. Показать все сообщения

четверг, 19 октября 2017 г.

Снова про оверсемплинг

Снова мусолю тему оверсемплинга – надо бы уйти на 12-14 разрядов вместо штатных 10, чтобы менее дискретно «читать» аналоговый датчик. Читаю апнот AVR121. Там все подробнейше разжевано, но... Схема ввода псевдошумовой составляющей в опорное напряжение построена исходя из допущения, что AREF (UREF) = 2,5 В. А мне надо 5 В. Пребываю в размышлениях – как бы так сделать, чтобы «зашумить» опорное напряжение 5 В, не прибегая к напряжению питания выше 5,1 В, тем паче к двуполярному ±12 В. 


1) Можно сформировать по этой схеме 2,5, а потом умножать операционником на 2. Но такой вариант не нравится, т.к. понадобится делитель на прецизионных резисторах, не хотелось бы удорожать схему..

2) Можно поставить внешний 13- или 14-разрядный АЦП. Но так же не хотелось бы удорожать схему.

вторник, 26 июля 2016 г.

Про используемую платформу

После отпуска начну переезжать с mP на C (Atmel Studio AVR тулчейном – т.е. бывший WinAVR). Могу сказать mP заслуженнон спасибо, т.к. смог восстановить навыки и освоить тему в комфортном окружении, но... З@ебало!



Т.е. при прямом присвоении переменной компилятор показывает нам х@й, а при присвоении того же значения через промежуточную константу всё становится Ок. Ничего об этом в документации нет, поскольку это было бы странно.

Компилятор с нюансами ошибками такого рода – это пи@дец. И дело тут не в правильности стилей программирования, как мне кажется.


Так и получается, что для дальнейшего использования mP малопригоден, ибо: 1) слишком велика избыточность создаваемого кода, 2) слишком дорого порой обходятся встречающиеся в компиляторе странности и «ашипки», 3) слишком низкое качество сопровождения и поддержки со стороны mikroE (как говорится, «ниже мышиной жопы» ©). Практически ничего из найденного и отправленного в саппорт я в исправлениях так пока и не увидел – и, вероятно, не увижу, т.к. на сопровождение mP для AVR они, похоже, практически полностью «забили».

четверг, 12 ноября 2015 г.

Прерывания в AVR


Система прерываний в МК AVR векторная, а сами прерывания делятся на внутренние и внешние. К источникам внутренних прерываний относятся встроенные модули МК (таймеры, приёмопередатчик USART и т.д). Внешние прерывания возникают при поступлении внешних сигналов на выводы МК (например сигналы на выводы RESET и INT).

ATmega48PA/88PA/168PA/328P
Vect.  Addr.    Source         Interrupt Definition
1      0x0000   RESET          Reset Handler
2      0x0002   EXT_INT0       IRQ0 Handler
3      0x0004   EXT_INT1       IRQ1 Handler
4      0x0006   PCINT0         PCINT0 Handler
5      0x0008   PCINT1         PCINT1 Handler
6      0x000A   PCINT2         PCINT2 Handler
7      0x000C   WDT            Watchdog Timer Handler
8      0x000E   TIM2_COMPA     Timer2 Compare A Handler
9      0x0010   TIM2_COMPB     Timer2 Compare B Handler
10     0x0012   TIM2_OVF       Timer2 Overflow Handler
11     0x0014   TIM1_CAPT      Timer1 Capture Handler
12     0x0016   TIM1_COMPA     Timer1 Compare A Handler
13     0x0018   TIM1_COMPB     Timer1 Compare B Handler
14     0x001A   TIM1_OVF       Timer1 Overflow Handler
15     0x001C   TIM0_COMPA     Timer0 Compare A Handler
16     0x001E   TIM0_COMPB     Timer0 Compare B Handler
17     0x0020   TIM0_OVF       Timer0 Overflow Handler
18     0x0022   SPI_STC        SPI Transfer Complete Handler
19     0x0024   USART_RXC      USART, RX Complete Handler
20     0x0026   USART_UDRE     USART, UDR Empty Handler
21     0x0028   USART_TXC      USART, TX Complete Handler
22     0x002A   ADC            ADC Conversion Complete Handler
23     0x002C   EE_RDY         EEPROM Ready Handler
24     0x002E   ANA_COMP       Analog Comparator Handler
25     0x0030   TWI            2-wire Serial Interface Handler
26     0x0032   SPM_RDY        Store Program Memory Ready Handler


Все прерывания у МК AVR ATmega имеют одинаковый приоритет. Но в случае одновременного возникновения нескольких прерываний, первым будет обрабатываться прерывание с меньшим номером вектора. Это может определенным образом использоваться на этапе аппаратного проектирования и последующего программирования для создания эрзац-механизма приоритетов.

вторник, 8 сентября 2015 г.

Обработка кнопок через PCINT

Сделал обработку двух кнопок интерфейса через общее прерывание PCINT. В принципе, нет ничего архисложного (хотя в Интернете этим и пугают ­– вероятно, по причине отсутствия апнотов и примеров, из которых можно было бы скопипастить код в свой проект), а контроль отпускания кнопок так и вовсе удобно оказалось сделать.

Итого, программирование интерфейса паяльной станции почти¹ завершено.



¹) Обновлено

среда, 15 октября 2014 г.

Приехали ATmega1284P

Приехали ATmega1284P в корпусе DIP-40: 128K Flash, 4K EEPROM, 16K SRAM. Это самый мощный (по ресурсам) МП из числа имеющихся у Atmel МП в DIP-упаковке.




Совсем другое дело, я бы сказал.

воскресенье, 25 мая 2014 г.

Термоконтроллер для сервера – 2


Не спеша разрабатываю «агрегат» в свободное время. Уже практически определился с его схемной реализацией. Как только закончу разработку «железа» – соберу его макет для отладки и займусь написанием управляющей (mikroPascal) и консольной (freePascal/Lazarus) программ. Связь через RS-232, разумеется.

среда, 7 мая 2014 г.

Термоконтроллер для сервера

Когда-то давно пытался эту тему решить поиском готового решения о 3-4 каналах. Нашел у белорусов, но не стал заморачиваться: там распиновку для USB-порта сделали зеркально-симметричную, что могло аукнуться при неосторожном обращении с USB-кабелем. И, как выясняется, правильно сделал, поскольку стал сам разбираться с мелким эмбеддингом. А такой девайс станет еще одним полезным «учебным проектом». Собственно, по опыту эксплуатации контролировать температуру там надо в 3 точках для 3 PWM-каналов: 
  1. Температура в объеме корпуса над матплатой или температура самого горячего моста (вентилятор вытяжки из корпуса);
  2. Радиатор на контроллере SATA (вентилятор, установленный под контроллером; сейчас там стоит «плацебо» из вентилятора с выносным термодатчиком);
  3. В дисковом пакете, возможно, что в паре точек (фронтальный вентилятор).
Еще желательна сигнализация о превышении пороговых температур. Для контроллера SATA это даже обязательно, т.к. он расположен в имеющемся корпусе очень неудобно и факты перегрева имели место.

В общем, аккурат для Atmega8 задачка. Ну и понадобится написание простейшей программы-консоли для настройки регулировочных кривых и порогов сигнализации. Либо через USB, либо через RS-232 (внутренний COM-порт на плате имеется и все равно ни для чего не используется).

четверг, 1 мая 2014 г.

MikroPascal для AVR

Добавил тег «mikropascal». Поскольку приходилось много программировать на Pascal и Assembler, и никогда на C, не считаю необходимым что-либо менять и здесь.

суббота, 26 апреля 2014 г.

AVR ISP PINOUTS

Разбираюсь со стандартными цоколевками разъемов внутрисхемного программирования (ISP) для AVR Atmel. Интересует вариант с однорядным расположением контактов (на Veroboard stripboard двухрядный так просто не поставить). Пока нашел вот такие варианты:

Соответственно, переходник с 10-контактного:


Но неизвестен первоисточник (ну да, инженерное занудство: вынь да положь стандартный вариант, поскольку программатор должен распознавать «перевернутое» подключение  разъема ISP).

воскресенье, 20 апреля 2014 г.

Самодельная паяльная станция для Weller WSP80

На просторах интернета встретился занятный проект самодельной паяльной станции. Судя по всему, единственный в своем роде из присутствующих в Интернете. Сделан он не под самые дешевые китайские клоны паяльников HAKKO и прочий сюр с термопарами (что обычно делает и повторяет народ), а под оригинальный паяльник Weller WSP80 (80 Вт, точное термосопротивление с практически линейной температурно-омической характеристикой).

Автор у себя на форуме, кстати, весьма недвусмысленно удивляется полученному вопросу о том, как к его разработке прикрутить китайский паяльник. Дескать, а зачем городить недешевый, в общем-то, контроллер для паяльника всего за $10? Не дешевле ли просто купить  целиком китайский клон паяльной станции HAKKO 936/937?



Надо отдать должное: у него получился весьма интересный, на первый взгляд, DIY-проект, к тому же на достаточно мощном контроллере при достаточно сбалансированной по сложности схемотехнике (хотя примитивным его не назовешь, но в нем нет ненужных «косметических» усложнений). И если нет возможности недорого купить с рук паяльную станцию Weller – то это вполне подходящий вариант

А еще это проект с открытым кодом (вот здесь я за OpenSource обеими руками), т.е. при желании можно будет попробовать «усугубить» и функциональность, и управление, и индикацию. Было бы только желание, как говорится.

UPD from 23.06.2015. Итак, благодаря всё той же открытости исходного кода, теперь, спустя примерно год, я могу сказать про эту станцию следующее: «Осторожно, говно!» Автор (судя по всему, он изначально всё-таки программист, а не электронщик) слишком сильно упростил и удешевил схемотехнику, пожертвовав даже рекомендациями даташитов. Как результат – очень нестабильные показания дифференциального АЦП (и ошибочность использования подобного варианта замера) и зависимость работы устройства от топологии его сборки. Далее, для обхода этих проблем автор применил оверсемплинг и децимацию (на фильтре скользящего среднего), а также «разгон» АЦП свыше 200 кГц (видимо, таким образом он решил дополнительно эмулировать зашумление сигнала, необходимое для измерений с оверсемплингом). Оверсемплинг при частоте замера 50 Гц привел к тому, что у станции появился сильный лаг регулирования. А кроме того, мощность паяльника программно ограничена 50 Ваттами (при мощности паяльника 80 Вт), чтобы обеспечить приемлемые характеристики регулирования (так как на мощности 80 Вт PID-регулятор не в состоянии поддерживать должную стабильность температуры).