to post messages and comments.

Жуйк, чего-то я не понимаю в этой жизни. В кои то веки не кодил на асме, а поставил на атмегу готовую оболочку, с интерфейсом в уарт. И чего-то на комп всё передаётся, а с компа не принимается. А я чего-то даже и не припомню, что там может быть не так. Тактуемся внутренне, но даже если из-за этого сбоит, на 9600 хоть что-то ведь должно приходить. Что можешь подсказать без погружения в проблему, куда хоть смотреть? Код этой системы конечно есть, но не хочу глубоко лезть, вот что настраивается:
.set BAUD=9600
;.set BAUD_MAXERROR=10
;.set WANT_ISR_RX = 1 ; interrupt driven receive
;.set WANT_ISR_TX = 0 ; send slowly but with less code space

Вот снова взялся за пайку. С непривычки сжег первый кристал, купил следующий. Этот все еще не сжег, и он уже неплохо работает. Мозгов и решительности (ну, в плане технических решений) теперь у меня куда больше, как оказалось, чем в прошлый подход — даташит читаю лучше, во всяком случае. А теперь вот еще на работе, оказывается, надо будет делать херню на FPGA.

//Установки Таймер2: Делитель частоты /8, режим 0
//Частота = 16MHz/8 = 2Mhz или 0.5 мкс
//Делитель /8 дает нам хороший рабочий диапазон
//так что сейчас мы просто жестко запрограммируем это.
TCCR2A = 0;
TCCR2B = 0<<CS22 | 1<<CS21 | 0<<CS20;
Что за гребанный пиздец? Где блять нормальное описание типа "Сделайте TCCR2A=555 и получите то что надо".
....

Т.к. я являюсь религиозным ненавистником мерцающей динамической индикации, то частоту обновления восьмиразрядного дисплея поднял примерно до одного килогерца. При этом чтение данных из DS18B20 занимает больше времени, чем промежуток между переключениями разрядов дисплея. Пришлось делать костыль — внедрять код переключения разрядов в функции обмена данными с DS18B20 вместо задержек.

Заменил 10ватный диод на 3 ватный. Только теперь в количетстве 6 штук, запаял остальные каналы. Пока отлаживал все шесть каналов и свой адовый uRPC-API все проклял. Из глаз течет, кода уже не вижу, но зато эта хрень таки работает. Все, на следующей неделе поправляю мелкие косяки и заказываю на заводе штук эдак тридцать плат.

Сижу значит глубоко ночью, доделываю прошивку своего адового драйвера светодиодов. Это на дачу будет освещение. Диоды мощные, 10W 1000люмен каждый, светят будь здоров. на драйвере их болтается 6 штук. Заимплементил плавное включение, прошиваю тестить. И тут плеер решил сыграть тему из Morrowind, под которую плавно и меедленно загораются эти самые 6 10-ваттников. Я от эпичности аж прослезился.

Микроконтроллер стоит рублей 80-100, а вместо дорогой и гламурной USB-микросхемы FT232RL можно смело воткнуть наш брутальный MAX232 за двенадцать рублей и повесить все на COM-порт. Добавить туда же импульсный стабилизатор за 5 рублей, а то и вовсе без него, запитав все от компового блока питания. Сварганить этот коктейль хоть на макетке, хоть на печатной плате по лазерно-утюжному методу. Получим тот же самый Arduino, но уже суровой самопальной выделки. Всего за 150 рублей.

Схема подключения регистра с защёлкой к одному выводу. Быть или не быть токоограничивающему резистору последовательно с D1? D1 нужен, чтобы защёлка не срабатывала во время передачи данных. Без резистора всё работает нормально, но не станет ли со временем плохо выводу МК?

вот все было хорошо-дисплей 16х2 все показывал, с уарта принимал и сдвигал буковки... Но! Решил я сделать красивую платку. Протравил, пропаял, перепроверил, нашел баг и исправил программно. Все должно было быть, но нет. Сдох и не кажет. Завтра буду тратить время на дебаг и тестинг. Из чего мораль: работает, не чини!

Тут #2335321 у меня было 2 варианта решения проблемы нехватки выводов под кнопки в стабилизаторе температуры для аквариума. Но воспользовался я совсем другим вариантом — управлять обогревателем с одного из выходов сдвигового регистра, который подключен к семисегментному индикатору :)
В итоге к Attiny13 подключены 2 кнопки, симисторный выключатель для обогревателя, датчик температуры, семисегментный индикатор через сдвиговые регистры с защёлкой.

AVR

Ааа, таймер зохавал мою ногу и в результате я не мог выводить через неё тактовый сигнал на сдвиговый регистр. Внимательнее надо быть!

Ура, сдвиговый регистр почти побежден.

Буду делать стабилизатор температуры для аквариума на Attiny13. Управление дисплеем — 3 вывода, кнопки для установки температуры — 2 вывода, управление нагревателем — 1 вывод. Свободно 5 выводов. Теперь думаю: либо 2 кнопки повесить на один вывод и использовать резистивные делители с АЦП, либо сделать управление дисплеем на одном проводе.

TWI и ADC разделяют один порт. После использования надо отключать.

АЦП, после чтения, отключался:
ADMUX = ADMUX | 0xFF;
ADCSRA &= ~(_BV(ADEN));

После подачи стоп-бита, нужно тоже отключать TWI:
TWCR = (1<<TWINT) | (1<<TWSTO) | (1<<TWEN);
while ( TWCR & (1<<TWSTO) );
TWCR = 0;  // изначально не было

Ура! Мой ассемблер становится красивее и понятнее. Уже начал ПОНИМАТЬ i/o, а это важно. Так, глядишь, и до памяти доберусь, и до АЦП. Пока в списке понятого усарт и руление портами на вход и выход. Минусы — забываю родной язык и про время. Точнее, испытываю его нехватку...

теперь, когда аппаратный усарт — плевое дело на асме, хочется не только видеть байтики и гонять их туда-сюда по терминалам и атмегам, но и рулить портами в зависимости от принятых байтов. Типа 0x80 0x14 0xA0 0x0D: адрес,идентификатор порта,байт в него и конец посылки... Но загвоздка в том, что пока я не умею на асме их парсить. Ну вот нет здесь моих любимых if...else и case...esac.. тыкаю мануалы, переворачиваю мозг