dlinyj: (Default)
Как известно, в последнее время достаточно большое количество микросхем - поддельные. И когда попадается оригинальная микросхема, получаются приятные неожиданности.
В общем, имеется следующий стенд проверки работоспособности блоков питания.


Можно сколько влезет критиковать применённые решения, изделие одноразовое, под одну задачу, просто установить: блок питания работает или нет. Поэтому смиритесь с тем что тут ардуино. Считайте лампочка. И там была применена плата Arduino Uno как блок контроллера, код конечно же писался на нормальном си. Хотя, даже на си я хапнул проблемы компилятора лопатой.
Как вы понимаете, это обычные китайские платы, с китайскими дешманскими процессорами, но всё работает.

Хоть это и "лампочка", всё равно делал калибровку АЦП, чтобы минимизировать погрешности измерений. И так карта на стол легла, что заказали оригинальных прцоессоров ATmega329p, и не нашли ничего лучше как напаять на эту плату для испытаний. И внезапно оказалось, что китайский процессор отличается от оригинала. И оригинал приятно удивляет.
Так в чём же отличия?Под катом фотографии под микроскопом и разбор полётов. )
dlinyj: (Default)
В общем, да... [livejournal.com profile] serg2x2 был прав. У меня там был недочёт. Но так просто сложение с переносом делать нельзя, т.к. мы бит переноса портим в вычитании. Пришлось ставить оператор, обнуляющий этот флаг. В результате код, в котором был баг, будет таким:
	clc	;Очищаем флаг переноса! Очень важный момент
	push	r18
	ADD	ZL,R16
	ADC	ZH,R17;Складываем старший байт учитывая перенос.

Как оказалось флаг переноса мы подсираем в вычитании. Приходится его обнулять принудительно. Когда написал онным образом в дебагере код был прогнан с разными цифирями и всё работало на ура!
З.Ы. Просто асм на ночь - это жопа!
dlinyj: (Default)
Понадобилась мне задачка, на AVR, перевести 10 битное число, снимаемое с АЦП в десятичный формат, чтобы можно было его удобно вывести на дисплей или передать в компутер. Задача оказалось интересной и сложной. Оказалось, что у AVR напрочь отстутствуют команды деления. Не можем делить, но можем вычитать! Отлично. Но и это оказалось не камень преткновения, с 16 разрядным регистром всего несколько команд работает. Это сложение и вычитание с константой. Но и это не всё, сложение/вычитание производится с числом меньше либо равным 63! Мда, задачка достойная настоящего гуру. И я её победил, теребил кучу народу по асе, присылали коды, но не один меня не спас. Низкий поклон в ножки за оказаннаю помощь [livejournal.com profile] gxost в проверке и подсказке алгоритмов. А также проверке моего убогого, но в конце концов рабочего, кода. Для особо любопытных код можно глянуть под катом. //примечание для [livejournal.com profile] gxost - ошибка была в одном операторе, выделен жирным с каментом. Read more... )
Любопытно, что тот же код, без лишнего гемора на С будет несколько строк. Но мы не ищем лёгких путей. Надо мыслить, как мыслит машина!
dlinyj: (Default)
Я таки перенёс код с одного камня на другой. Вышла очень даже ничего. Правда пришлось RFM по обоим кристаллам. Так вот что вышло:
Код АТ89С51: 
DOW_CRC:	PUSH ACC         	;Save the Accumulator.
        PUSH B                  ;Save the B register.
        PUSH ACC                ;Save bits to be shifted.
        MOV  B,#8               ;Set to shift eight bits.
CRC_LOOP:       XRL  A,TEMP     ;Calculate DQIN xor CRCT0.
        RRC  A           	;Move it to the carry.
	MOV  A,TEMP             ;Get the last CRC value.
	JNC  ZERO        	;Skip if DQIN xor CRCT0 = 0.
	XRL  A,#18H      	;Update the CRC value.
ZERO:	RRC  A           	;Position the new CRC.
	MOV  TEMP,A      	;Store the new CRC.
	POP  ACC         	;Get the remaining bits.
	RR   A           	;Position next bit in LSB.
	PUSH ACC         	;Save the remaining bits.
	DJNZ B,CRC_LOOP  	;Repeat for eight bits.
	POP  ACC         	;Clean up the stack.
	POP  B           	;Restore the B register.
	POP  ACC         	;Restore the Accumulator.
	RET              	;Return.

Тот же код на AVR (пока на Tiny2313, хотя пишется под Tiny15):
DOW_CRC:	push	reg_TMP
		ldi		reg_count,8
CRC_LOOP:	eor		reg_TMP,reg_data
		ror		reg_TMP
		mov		reg_TMP,reg_data
		brcc	zero
		ldi		reg_TMP2,0x18
		eor		reg_TMP,reg_TMP2
ZERO:		ror		reg_TMP
		pop		reg_TMP
		mov		reg_TMP,r23
		lsr		reg_TMP
		push	reg_TMP
		DEC		reg_count
		BRNE	CRC_LOOP
		pop		reg_TMP
		pop		reg_count
		reti
dlinyj: (Default)
Прошедшие сутки запомнились мне адским сексом, с жуткими извращениями, элементами некрофилии, зоофилии, садомазохизма и маньячиских замахов. Приезжал [livejournal.com profile] di_halt и мы с ним начали делать девайсину на МК. Произошла дефлорация Мега8535, и дальше дикая ебля с ассемблером и схемотехникой с вылавливанием косяков! Короче ЖЖОМ! Кончили мы с этим делом в 7 утра. Далее в 12 дня подъём и продолжения адских извращений. К слову сказать, что я ещё долго не мог уснуть и продолжать решать в уме как же лучше реализовать тот или иной ассемблеровский код и как лучше сделать схемотехнику.

З.Ы. Главное мы вкурили как работать с епром, ОЗУ, и памятью программ в контролере. Как адресовать. В инете и просто в примерах взятых с работы нашёл для себя огромное количество нетрадиционных и грамотных решений, которые я делал подругому.
dlinyj: (Default)
Пишу прогу на бейсике, с асмовскими вставками. Вот изврат то, а!). У меня должно получиться так, что при изменение состояния порта должно выводиться в СОМ порт слово. Но блин... Так обидно... Слово выводиться ПРИ изменения состояния порта!!! Отладночкая программа тупо без перерыва гонит дамп: 41 21 0D 0A 41 21 0D 0A 41 21 0D 0A 41 21 0D 0A 41 21 0D 0A 41 21 0D 0A 41 21 0D 0A 41 21 0D 0A 41 21 0D 0A 41 21 0D 0A 41 21 0D 0A 41 21 0D 0A 41 21 0D 0A 41 21 0D 0A 41 21 0D 0A 41 21 0D 0A 41 21 0D 0A 41 21 0D 0A 41 21 0D 0A 41 21 0D 0A 41 21 0D 0A 41 21 0D 0A 41 21 0D 0A 41 21 0D 0A 41 21 0D 0A 41 21 0D 0A 41 21 0D 0A 41 21 0D 0A 41 21 0D 0A 41 21 0D 0A 41 21 0D 0A 41 21 0D 0A 41 21 0D 0A 41 21 0D 0A 41 21 0D 0A 41 21 0D 0A 41 21 0D 0A 41 21 0D 0A 41 21 0D 0A 41 21 0D 0A 41 21 0D 0A 41 21 0D 0A 41 21 0D 0A 41 21 И т.д. Т.е. ему срать на изменение порта. Коды асма взяты от моей проги часов... Но ничего не пашет... Обломно!

January 2026

S M T W T F S
    123
456 78910
11121314151617
18192021222324
25262728293031

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 22nd, 2026 04:48 am
Powered by Dreamwidth Studios