?

Log in

No account? Create an account

Наболевшее-2

0. Вдогонку к вопросу первенства.

Посмотрите мой журнал, о роли Ю. Андропова и КГБ в развале СССР я писал давно (https://hagan-ahmedov.livejournal.com/1448.html), и посмотрите свежее интервью академика Жореса Алфёрова.

Опять-таки попытаюсь выдернуть из других форумов свои сообщения, связанные с прямым обвинением мною Ю. Андропова...

1. Немного из школьного детства

В далёком 1973 году по окончании 9-го класса пролистал загодя купленный учебник астрономии за 10-ый класс и загорелся идеей проверить вычисления Эратосфена расстояния до Солнца. И момент был удобный, 20-ые числа июня, равноденствие, было время посидеть в библиотеке и подготовиться теоретически. Да и практически. Компас там, отвес, достаточной длины ровный штырь, по длине тени которой будут идти вычисления...

Гугла и вики в те годы не было, были справочники, учебники и был азарт! И смутные сомнения в сотне миллионов км, навеянные пройденной недавно по учебнику оптикой. Ведь с такого расстояния практически все тени должны быть под одним углом. А они даже в пределах относительно небольшого Баку разные... Надо разбираться.

Из чего я тогда исходил? Ведь для корректного измерения далёкого расстояния необходимы как в радиопеленгации две точки. Уж что-что, а это знал почти каждый тогдашний радиолюбитель, способный на 6П3С собрать генератор, включить его, пока друг на балконе пасёт спецавтомобиль с вращающейся антенной)

Одна точка — это я, любимый и страждущий истины. Вторая точка может быть где-нить в Москве, но звонить туда дорого даже для беззаботных советских времён, да и некому — в МГУ поступлю через год тока))) Как ни крути, а вторая точка — это экватор, где тень хоть и нулевая по идее, но расстояние от Баку до него можно вычислить по справочникам. К тому же высота Солнца будет наименьшей 22 июня.

Для построений подобных треугольников нужен упомянутый компас. Штырь должен быть строго перпендикулярен, есть отвес, школьный треугольник и уровень в хозяйстве. И длину штыря можно измерить метром, который тоже есть в любом советском хозяйстве. К счастью на крыше пятиэтажки, в которой мы жили аккурат на пятом, антенн установлено много, подобрать относительно идеально перпендикулярную антенну не проблема даже для нашего города ветров. Поэтому 22 июня с 10 до 8 вечера проделал на всякий случай кучу замеров через каждый час и засел за вычисления, которые несмотря на всяческие мои ухищрения никак не хотели увеличиваться свыше 10 000 км!!! Побежал утром к математичке, благо жила по соседству, Рагиме Бабаевне, заслуженному учителю, сподвигшей меня к учёбе (похвалюсь, отличной!) во Всесоюзной заочной матшколе (ВЗМШ) при мехмате МГУ. Ошибок в чисто математических вычислениях она не нашла и конечно же посоветовала на всякий случай проверить методику измерений, где тоже не было ею найдено изъянов, у физички, которая должна была до летнего отпуска появиться в школе на дежурстве.

Физичка, Татьяна Яковлевна Мельян, к слову сказать появившейся у нас только в прошедшем учебном году, разительно отличалась от добрейшей бывшей учительницы Натаван Мухтаровны и поставила мне в первые дни девятого класса пару троек, была весьма требовательным преподавателем и требовала не заучивания, а понимания физических процессов. Мы с ней прошли всю цепочку рассуждений моих при подготовке эксперимента, она качественно оценила корректность моих измерений при помощи угла тени от карандаша прямо на учительском столе, задумалась и сказала что-то типа «конечно, всё правильно, но лучше помалкивать, если в следующем году захочу поступить») Уже будучи на мехмате я один раз её ослушался и по пьяни рассказал другу, Юрке Деркачу, об эпопее с расстоянием до солнца и был осмеян в лицо!

2. Типа постскриптума — как вычислять абсолютно корректно

Приведу методику Soulgoodman-а (в миру Сергей Тарасов) по его видеоклипу.

 © Copyright Ахмедов Хагани, сентябрь 2018 

Наболевшее

Начинаю цикл статей под несколько лукавым название «Наболевшее», которое уместно рассматривать как канание под эссе.

Спешу успокоить читателя, плакаться в жилетку не буду. Или почти не буду)

1. Затянувшееся молчание.

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

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

а) Андрей Тюняев и его экзотическая (в ряду других экзотических !!!) версия ультракороткой истории.

Если отбросить всё не архиважное, то версия А. Тюняева основана прежде всего на некой инсайдерской информации из недр КГБ СССР.

Read more...Collapse )

Американец под псевдонимом D. Marble, который уверен, что Земля плоская, решил доказать свою правоту — с помощью науки!

D. Marble рассудил так: если Земля шарообразная, то самолет, летящий на одной высоте, будет вынужден компенсировать изгиб и наклоняться вперед.

«Этот парень взял на самолет уровень, чтобы доказать, что Земля плоская»

Чтобы проверить, происходит ли это на самом деле, он взял с собой в полет строительный уровень и 23 минуты следил за его показаниями. За это время, по расчетам D. Marble, самолету пришлось бы компенсировать изгиб в 8 километров. Но он не обнаружил никакого наклона — и убедился в том, что Земля плоская.





https://www.youtube.com/watch?v=6nNUEU8gnf4
Видео-сюжет на youtube.com
Flat Earth: Spirit Level Flight Experiment


Фамилия Путин происходит, как известно, не от слова "путь", а от слова "путать". И черт страшно попутал Путина в очередной раз, подсказав ему арестовать Вячеслава Мальцева.

Почему вообще Басманный суд занимается делами Саратова? Ответ прост. Судьи Басманного суда считают себя людьми приговоренными, людьми, которым нечего терять.

дальше...Collapse )
Оглавление и помощь — здесь
Встречается ещё в нашем бренном мире, объятом кризисом, и вопреки ему такая штука как служебные обязанности.
Иногда они значительно далеки от хобби, в частности одного из моих - ковыряния в наблюдаемом историческом антиматериализме, иногда не очень, а в моём случае совсем не очень)
Электроника, бывшая голубой мечтой пузатого детства, плавно перешла из разряда хобби к основному виду моей деятельности, равно как и к основному средству поддержки штанов, измерительную технику, которой меня нагружают по месту работы, знаю вполне себе ничего и даже имею некий вес, ибо теоретически достаточно подкован. Да и куда деваться бедным грядущим эйнштейнам нашего академического института, если все их эксперименты зависят от наличествующей измерительной аппаратуры, на 80% морально и физически так сказать устаревшей.) Крутятся как могут и меня подкручивают)
Например на какой-нить терморегулятор с завидной точностью поддержания, а следовательно и измерения (!!!) температуры один градус при полном диапазоне в тыщу, который в свободное от терморегулирования время подрабатывает электронным самописцем или как ща модно говорить - дата-логгером.) Таково наших планов громадьё! А максимум, на что тянут эйнштейны при их нищенской зарплате - это бюджетное Arduino и как вы наверняка догадываетесь - Uno)
Вот такое вот uno momento,,,
Подкреплённое барахлом из светлого советского прошлого, которое даже побрезговали растащить за прошедшие четверть века нищеты. Ну типа древнючих, не содержащих драгметаллы диодов Д2Е))) Героев этого программерского этюда.
Так как же прицепить эту древность к современному вполне микроконтроллеру?
Любой терморегулятор нуждается в ручной предустановке. Причём достаточно точной с учётом точности поддержания 0.1%.
Можно поставить кнопочный набор, но это затратно и нетехнологично. Проще поставить резисторы, благо 6 аналоговых входов наличествуют, хотя заявленный процент выставить без многооборотника проблематично. Да и надёжность со стабильностью у резисторов не айс. Как ни крути, а без переключателя диапазонов не обойтись. Который и был найден в закромах бывшей родины, на 15 позиций.)
Казалось бы остаётся подобрать 15 одинаковых резисторов и делу конец! Но 15 одинаковых резисторов нет, а есть как минимум 50 штучек диодиков, да ещё в изящных стеклянных корпусах - применяй не хочу. Падение на них порядка 280-300 мв, умножая на 15 мы не выходим из диапазона 5 вольт.
Короче, диоды спаял, программку сваял и упс - нелинейность вылезает. Закономерно.
Если токозадающий, точнее токоограничивающий резистор R, то ток через него гуляет от I=(U/R) в первом положении переключателя до I=((U-15*Uпр. диода)/R) в последнем, 15-ом положении, т. е. практически в 10 раз. Ставить стабилизатор тока? Проблематично. Как с точки зрения усложнения схемы, так и с точки зрения минимального напряжения на источнике тока в крайнем положении переключателя, равном (U-15*Uпр. диода), а это порядка 0.5 вольт, что практически близко к напряжению насыщения коллектор-эмиттерного перехода биполярного транзистора.
Самое время вспомнить кусочно-линейную аппроксимацию! Не зря ж в университетах забивают моск студентов теорией функций)
Так я и поступил, пожертвовав максимум 30-ю байтами из 32К адресного пространства Atmega328P -
Сначала как всегда дэвки, определения, которые я просто тупо копирую и возможно часть их не фигурирует в этюде.
Но я старался)))


 .def data      = R23    ; регистр для передачи адреса данных
 .def temp2   = R25    ; для промежуточных операций
 .def temp3   = R24    ; для промежуточных операций
 .def temp     = R16     ; для промежуточных операций
 .def temp1   = R17     ; для промежуточных операций
 .def temp4   = R18     ; для промежуточных операций
 .equ DELAY = 16       ; задержка времени на частоте 16 МГЦ
 .equ DI     = PD5        ; к этим ножкам прикручен средневековый КОИ-4 из панафонов)))
 .equ SK    = PD6        ;
 .equ Sel    = PD7        ;
 .equ B_max   = 3        ; maximum 3 button
 .equ FREQ  = 16000000  ; Частота кварца ардуинки
.dseg
.org  SRAM_START    ; буферные ячейки в SRAM для отображения
 screen:        .byte 10    ; на 10-разрядном панафоновском индикаторе
 RX_sel:        .byte 1
 ADCH_sel:   .byte 1
 ADCCH:       .byte 8
 PovCT:         .byte 1
 U_B:             .byte 1
 button:          .byte 1     ; ячейка с кодом нажатой кнопки
; ADC
 cnt1h:     .byte 1     ; старшая цифра после измерения
 cnt2h:     .byte 1     ; младшая цифра после измерения
 cnt1:       .byte 1     ; 1 цифра после преобразования
 cnt2:       .byte 1     ; 2 цифра после преобразования
 cnt3:       .byte 1     ; 3 цифра после преобразования
 cnt4:       .byte 1     ; 4 цифра после преобразования
 cnt5:       .byte 1     ; 5 цифра после преобразования
 DCnt:      .byte 1     ; Некоторые переменные в памяти
 .equ UART_CNT = SRAM_START+30
 .equ UART_DAT = SRAM_START+30+1
 .equ Blink_ON  = SRAM_START+30+2
 .equ LCD_Pos   = SRAM_START+30+3
 .equ LCD_Reg  = SRAM_START+30+4
Теперь сама подпрограмма предустановки -
; Сканирование задатчиков температуры с портов ADC3, ADC4
scant:
; вывод напряжения с переключателя для грубой установки диапазона температуры
 ldi temp, (1 << ADEN)|(1 << ADPS2)|(1 << ADPS1) ;|(1 << ADSC)|(1 << ADPS0) - точность высокая не нужна
 sts ADCSRA, temp
 ldi temp, (1 << ADLAR)|(1 << REFS0)|(1<<MUX2)|(0<<MUX1)|(0<<MUX0)  ; порт ADC4, выравнивание слева
 sts ADMUX, temp
; пуск преобразования и ожидание его конца
 call c_start
; преобразовать для получения номера позиции переключателя
 lds temp2, cnt1h  ; считываем измеренное значение из памяти
 ldi data, 0xff
 ldi temp, 14         ; падение на германиевых диодах
 ldi temp3, 5         ; 2 точки коррекции
 ldi temp4, 9
ts1:
   inc data                ; в регистре data грубое задание диапазона температур
 cpse data, temp3  ; коррекция нелинейности диодов
 inc temp
 dec temp
 cpse data, temp4  ; 2-я коррекция нелинейности диодов
 inc temp
 dec temp
 cpse data, temp   ; 3-я коррекция нелинейности диодов
 inc temp
 dec temp
 sub temp2, temp
 brcc ts1
; записываем значение переключателя в буфер индикации
 lsl data   ; практически умножаем на 4 в соответствии с таблицей p_tabl
 lsl data
 ldi ZH,high(2*p_tabl)     ; заносим в указатель Z адрес
 ldi ZL,low(2*p_tabl)  ; начала таблицы предустановок
 clr temp
 add ZL, data        ; добавляем к указателю Z смещение,
 adc ZH, temp        ; соответствующее положению символа в таблице
 lpm temp1,Z+    ; извлекаем в temp-регистр из таблицы символ
 lpm temp2,Z+    ; извлекаем в temp-регистр из таблицы символ
 lpm temp3,Z+        ; извлекаем в temp-регистр из таблицы символ
 lpm temp,Z+
 sts Dcnt,temp
 ldi YH,high(SRAM_START+5)  ; конец буфера памяти дисплея
 ldi YL,low(SRAM_START+5)
 ldi temp,12         ; код правого уголка
 st -Y,temp
 st -Y,temp3        ; выбранный диапазон
 st -Y,temp2        ; выбранный диапазон
 st -Y,temp1        ; выбранный диапазон
 inc temp            ; код левого уголка
 st -Y,temp
; вывод напряжения с резистора для точной предустановки температуры
ldi temp,(1 << ADEN)|(1 << ADPS2)|(1 << ADPS1)   ;|(1 << ADPS0) - точность высокая не нужна
sts ADCSRA,temp
ldi temp,(0 << ADLAR)|(1 << REFS0)|(0<<MUX2)|(1<<MUX1)|(1<<MUX0)  ; порт ADC3, выравнивание справа
sts ADMUX,temp
; пуск преобразования и ожидание его конца
call c_start
; преобразовать с учётом позиции переключателя диапазонов
clr YL        ; здесь будем копить предустановку температуры
clr YH
clr temp1
ldi temp2,68    ; delta T - поддиапазон такой
lds temp,Dcnt  ; восстановили номер поддиапазона
inc temp
r_pm:
dec temp         ; крутим шарманку)
breq r_mp
add YL,temp2
adc YH,temp1
rjmp r_pm
; начинаем точную установку резистором)
r_mp:
lds XL,cnt2h  ; напряжение с резистора
lds XH,cnt1h
r_mp2:
sbiw XL,15    ; цена одного градуса)
brcs r_mp1
adiw YL,1     ; сюда и добавляем
r_mp3:
rjmp r_mp2
r_mp1:
sts cnt1h,YH  ; приводим к виду, необходимому для подпрограммы конвертации
sts cnt2h,YL
; далее обычный вывод полученных данных
call bin16_data
call adc_buffer
call  write_ind      ; выводим информацию на дисплей
ret
p_tabl:           ; таблица диапазонов грубой установки температуры
          ;                        символы      номер позиции нужен будет
.db 0x00,0x00,0x00,0x00 ; 0,0,0        0 - первый диапазон
.db 0x00,0x06,0x08,0x01 ; 0,6,8        1 - ...
.db 0x01,0x03,0x06,0x02 ; 1,3,6        2 - ...
.db 0x02,0x00,0x04,0x03 ; 2,0,4        3 - ...
.db 0x02,0x07,0x02,0x04 ; 2,7,2        4 - ...
.db 0x03,0x04,0x00,0x05 ; 3,4,0        5 - ...
.db 0x04,0x00,0x08,0x06 ; 4,0,8        6 - ...
.db 0x04,0x07,0x06,0x07 ; 4,7,6        7 - ...
.db 0x05,0x04,0x04,0x08 ; 5,4,4        8 - ...
.db 0x06,0x01,0x02,0x09 ; 6,1,2        9 - ...
.db 0x06,0x08,0x00,0x0A ; 6,8,0       10 - ...
.db 0x07,0x04,0x08,0x0B ; 7,4,8       11 - ...
.db 0x08,0x01,0x06,0x0C ; 8,1,6       12 - ...
.db 0x08,0x08,0x04,0x0D ; 8,8,4       13 - ...
.db 0x09,0x05,0x02,0x0E ; 9,5,2       14 - ...
.db 0x09,0x09,0x09,0x0F ; 9,9,9       15 - maximum

Для полноты картины приведу листинги подпрограмм.

; Подпрограмма пуска преобразования АЦП и ожидание его конца
c_start:
lds temp,ADCSRA
ori temp,1<<ADSC
sts ADCSRA,temp
cnv:
lds temp,ADCSRA
sbrs temp,ADIF
rjmp cnv
lds temp,ADCSRA
ori temp,1<<ADIF
sts ADCSRA,temp
lds temp,ADCL         ; обязательно надо считывать оба регистра
sts cnt2h,temp         ; сохраняем в памяти
lds temp,ADCH
sts cnt1h,temp
ret
; формирование буфера для вывода измерений с ADC
adc_buffer:
ldi   YH,high(SRAM_START+10)    ; конец буфера памяти
ldi   YL,low(SRAM_START+10)
lds   temp,cnt1                 ; считали младшую цифру результата измерения и преобразования с ADC
st    -Y,temp                      ; запись последнего (крайне правого) символа
lds   temp,cnt2                 ; считали следующую цифру результата измерения и преобразования с ADC
st    -Y,temp                      ; запись следующего (справа) символа
lds   temp,cnt3                 ; считали следующую цифру результата измерения и преобразования с ADC
st    -Y,temp                      ; следующий справа налево символ
lds   temp,cnt4                 ; считали следующую цифру результата измерения и преобразования с ADC
st    -Y,temp                      ;
lds   temp,cnt5                 ; считали старшую цифру результата измерения и преобразования с ADC
st    -Y,temp
ret
; Подпрограмма перевода десятиразрядного двоичного результата АЦП в табличное
; В моём случае от ASCII отличается отсутствием смещения '0'
; input: cnt1h, cnt2h = 16 bit value 0 ... 65535
; output: cnt1, cnt2, cnt3, cnt4, cnt5 = 5 цифр (ASCII в общем случае)
; тактов: 25 ... 180
bin16_data:
lds     temp1,cnt2h
lds     temp2,cnt1h
ldi     temp, -1                      ; + '0' для ASCII-символа
_bcd1:  inc     temp
subi    temp1, low(10000)    ; -10000
sbci    temp2, high(10000)
brcc    _bcd1
sts     cnt5,temp                  ; сохраняем в памяти
ldi     temp, 10                     ; + '0' для ASCII-символа
_bcd2:  dec     temp
subi    temp1, low(-1000)     ; +1000
sbci    temp2, high(-1000)
brcs    _bcd2
sts     cnt4,temp              ; сохраняем в памяти
ldi     temp, -1                  ; + '0' для ASCII-символа
_bcd3:  inc     temp
subi    temp1, low(100)     ; -100
sbci    temp2, high(100)
brcc    _bcd3
sts     cnt3,temp               ; сохраняем в памяти
ldi     temp, 10                  ; + '0' для ASCII-символа
_bcd4:  dec     temp
subi    temp1, -10             ; +10
brcs    _bcd4
sts     cnt2,temp               ; сохраняем в памяти
sts     cnt1,temp1             ; сохраняем в памяти
subi    temp1, -'0'              ; для ASCII-символа
ret
;    Подпрограмма записи 10 символов на дисплей
; из буфера 10-байтового screen, который должен быть заполнен ранее
write_ind:
 ldi YH, high(screen) ; заносим в указатель Y адрес
 ldi YL, low(screen)   ; буфера индикации screen
 ldi temp, 10              ; инициализируем счетчик байтов
wi1:
   ld data, Y+                ; извлекаем в data очередной символ
 rcall write_simbol      ; записываем этот символ в индикатор
 dec temp                   ; декрементируем счетчик байтов
 brne wi1                    ; повторяем запись 10 раз
 ret
P.S. 1. Прошу прощения за плохую читабельность. Здешний так называемый визуальный редактор совсем не айс))) Впрочем, текст скорее всего будет отредактирован, возможно портирован прямо с AVR Studio. Когда разберусь как)
       2. Коды абсолютно рабочие, я вам не DI_Halt.


© Copyright Ахмедов Хагани, январь 2017

Подноготная антикварного бизнеса, поданная в виде частной мелодрамы. Лишнее подтверждение моей теории о Матрице Лжи.

Знаем ли мы себя?


"Новая Земля" (фильм, Россия 2008)