Деньги интересуют не существенно(скорее как стимул, обязательство довести до конца), хочется интересных проектов. Пишу на ассемблере, для AVR, практически с детства(уже лет 15!).. Создавал просто ЧУМОВЫЕ алгоритмы, что собственно меня и увлекает, не просто сделать чтоб работало, а чтоб потом смотреть и радаваться! (поэтому и ассемблер, там я вижу ВСЁ!). ..за простые и тривиальные проектики тоже возьмусь, делаются они легко и быстро, но особенно хочется с изысками. Силён в ситуациях когда требуется максимальное быстродействие, и абсолютная безотказность по программной части. Очень хорошо понимаю аппаратное устройство МК(т.е. как он работает, а не только знание команд). Сейчас взялся за язык "Python", так-что в скором может и более разумное сопряжение с компом/мобилкой, чем просто отправка цифер в программу-терминал. ...Выкладывал свои проекты мало, но кое-что есть. https://radiokot.ru/circuit/digital/home/59/
Последний раз редактировалось Faun Пн авг 27, 2018 11:59:47, всего редактировалось 1 раз.
Все лежит на компе, в горах исходников (в основном недописанных) . если-б цель, заработать денег была-б в приоритете, взялся-б портфолио собирать,. А так лень. По ссылочке один из них. т.с. подтверждение что это не сказки.
Это снаружи он прост(такова была задумка), внутри доволе наворочен.. Но это далеко не самое чумовое, просто доделано и выложено.. Спойлер.Include "2313def.inc" ;=== .equ OCR1BL = 0x28 .equ OCR1BH = 0x29 ;В инклуднике их пачемуто небыло .equ TCCR0B = 0x33 ; Позже люди ругались, что это устаревший инклудник, увы, другова у меня нет ;===
; Недоделки ; -Выключать при простое (по идее неплохо-б, если-б он сам отключался ;через некоторое время, если его включили, и не пользуют) ; -глюк прокрутки (Пака колёсико не провернётся на один шаг(т.е. зависло на пол шага), ;отсчёт времени не начинается, впринципи не существенно, но у каво-нить вал-кодер может ;оказаться без фиксации на полном шаге,..) ; ; ; ;
;-------- а патом уж можна считать что включенО(калесо и кнопка) ldi reg,0b11100000 out GIMSK,reg ;жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж ; -прога- ;жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ;|||||||||||||||||||||||||||| ЗВУК ||||||||||||||||||||||||||||||||| ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;--- Пермонентный визг серены VIZG_SERENI: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ тон ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ sbi portD,5 ldi reg,30 pauza_cikl_1: dec reg brne pauza_cikl_1 ; cbi portD,5 ldi reg,30 pauza_cikl_11: dec reg brne pauza_cikl_11 ; ret ;===================
;--- Счелчек s4el4ek: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ cbr flajki,0b00100000 ldi reg_1,24 ;-каличество колебаний p_2: ldi reg,15 ;продолжительность off p_1: dec reg brne p_1 ;пауза полупериуда одного колебания динамика sbi portD,5 ldi reg,2 ;продолжительность onn p_1_: dec reg brne p_1_ ;пауза полупериуда одного колебания динамика cbi portD,5 dec reg_1 brne p_2 ;Цикл для 256-ти колебаний ret ;===================
;шшшшшшшшшшшшшшшшшш http://radiokot.ru/lab/controller/02/ Partiture: clr YL clr YH ;YX, счётчик.. последовательный адрес в мелодии Play: rcall HymnUSS ;Загрузка ноты в Temp3 cpi Temp3,0xff brne PartitureEnd_ ;Проверка на конец пестни rjmp PartitureEnd ;!!??? Чёта ругалось, паэтаму тут перепрыгиваю... какая-то страшная карявость PartitureEnd_: rcall Note ;Загрузить чтота в Temp2 и Temp1 последовательно (адрес в "нотеплее" соответствующи Temp3) ;и далее погнать в функцию плея(каторая на 3 перемножает и в первы кампаратор загоняет)... rcall HymnUSS_1
HymnUSS: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ ldi ZH,High(HymnUSSR*2) ldi ZL,Low(HymnUSSR*2) add ZL,YL adc ZH,YH ;в Z паследовательно загружается весь гимн lpm mov Temp3,r0 adiw YL,1 ;штоб не матлялась внутри проги, серавно кажды раз увеличивать ret ;===================
HymnUSS_1: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ ldi ZH,High(HymnUSSR*2) ldi ZL,Low(HymnUSSR*2) add ZL,YL adc ZH,YH ;в Z паследовательно загружается весь гимн lpm mov Temp3,r0 adiw YL,1 ;штоб не матлялась внутри проги, серавно кажды раз увеличивать ret ;===================
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ;|||||||||||||||||||||||||||| ВРЕМЯ ||||||||||||||||||||||||||||||||| ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;--- 65536-пауза PAUZA_65536: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ clr reg_1 EXT_PAUZA: dec reg_1 brne EXT_PAUZA dec reg brne EXT_PAUZA ret ;===================
ZAPUSK_OTS4ETA: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ rcall TIM_1A_TIME ;ВКЛ и настройка таймера ;--- вЫкл музыку, сирену и т.п. cbr flajki,0b01001000 sbr flajki,0b00100000 ;выйдя из прерывания красиво счЁлкнет.
sbi portB,7 ; РОЗЕТКА! ret ;===================
STOP_OTS4ETA: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ ;--- вЫключение счета времени. 1A (на всякий и Б тоже) in reg,TIMSK cbr reg,0b01100000 out TIMSK,reg
cbi portB,7 ; РОЗЕТКА-выкл! ret ;===================
;-------- Отсчёт 240-> 0 (цифры "-" ) TIMER: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ Отсчёт 240-ка ;Есть адна загвоздина, когда я накрутил калёсиком 1, то отсчитав 240 отсчёт устанавливается ;в ноль, и срабатывает серена... ;Но если я нажал секундомер, то до еденицы ано просчитает 240, А в обратную сторану получается ТУТ-ЖЕ ;и обнулится(минута пропадёт безвозвратно, а если ее не набежало, то счёт провалится в 99). ;ПосемуЮ задействую флаг, обозначающий, до 99, или до нуля считать! ;----------
;--- Cчёт времени. TIM_1A_TIME: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ ;--- СК/8 ldi reg,0b00000010 out tccr1B,reg ;--- Компоратор (по четверть секунды(это чтоб красиво тикать!!!)) ldi reg,0b00111101 out OCR1aH,reg ;H-00111101 L-00001001 ldi reg,0b00001001 out OCR1aL,reg ;Четверть_секунд (в минуте 240) (500.000*60)/240/8=15625 (в итоге минута! %).) ;--- ВКЛ прерыв in reg,TIMSK sbr reg,0b01000000 cbr reg,0b00100000 out TIMSK,reg out TCNT1H,Nolik out TCNT1L,Nolik ret;===================
;--- Сирену. TIM_1B_SERENU: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ ;--- вЫключить 1A, В_ключить 1B in reg,TIMSK cbr reg,0b01000000 sbr reg,0b00100000 out TIMSK,reg ;--- Компоратор (Как и А, но вдвое больше) ldi reg,0b01111010 out OCR1bH,reg ldi reg,0b00010010 out OCR1bL,reg ; ret;===================
;--- Динамическая индикация. TIM_0A_INDICAT: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ ;--- Обрубить ШИМ out 0x30,Nolik ; tccr0a ;--- CK/8 ldi reg,0b00000010 out TCCR0b,reg ;--- ВКЛ прерыв in reg,TIMSK sbr reg,0b00000001 out TIMSK,reg ;включить динамическую индикацию
ret;===================
;--- ШИМ. SHIM: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ ;--- вЫключить свет экрана in reg,TIMSK cbr reg,0b00000001 out TIMSK,reg ;прерывание вырубить cbi portD,4 cbi portD,6 ;Свет... ;--- CK/0 ldi reg,0b00000010 out TCCR0b,reg ;--- ;грЁбаная комбинация СОМ-а и ВГМ-а, над каторой я ДЕНЬ парился! :-/ (в даташите-ж написали "резерв", а ано исправна работае!) ldi reg,0b00010010 out 0x30,reg ; tccr0a ret;===================
;-- Выведение цифры на экран, динамическое! ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ TIMER0_COMPA: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ Динамич. индикац. ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ push reg ;I in reg,SREG;I push reg ;I ;============+ in reg,portB bst reg,7 ; !Бит розетки сбереч!
sbic portD,4 rjmp PIATIY rjmp CHETVERTIY CHETVERTIY: sbi portD,4 cbi portD,6 bld obraz_L,7 out portB,obraz_L rjmp END_PEREKID_ PIATIY: cbi portD,4 sbi portD,6 bld obraz_H,7 out portB,obraz_H END_PEREKID_: ;============+ pop reg ;I out SREG,reg;I pop reg ;I reti;----------
;-- Выявляет в которую сторану его крутнули(цифру крутит), запускает ;обратны отсчёт ВСЕГДА, а патом красиво счёлкнуть ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ intt_1: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ колёсеко ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ push reg ;I in reg,SREG;I push reg ;I push reg_1 ;I push reg_2 ;I ;============+ rcall TIM_0A_INDICAT cbr flajki,0b01001000 ;--- прервать визжание(и гимн) ;--- Проверка состояния бита направления колеса sbic pinD,0 ; rjmp X_V_PLIUS rjmp X_V_MINUS X_V_PLIUS: rcall V_PLIUS rjmp X_V_end X_V_MINUS: rcall V_MINUS X_V_end:
;--- Флажок штоб считало до 0 при тайминге cbr flajki,0b00000100
;--- Фитча с проверкой на ноль(ато не нравится что считает когда накрутил зеро) cpi slot_H,10 brne NE_V_NULE cpi slot_L,0 brne NE_V_NULE rcall STOP_OTS4ETA
;--- Чтоб при попытке RE не считало от 99, а скручивало дулю, и серенило! sts POSLEDNIY_slot_L,slot_L sts POSLEDNIY_slot_H,slot_H ldi reg,1 sts POSLEDNIY_TIK_TAK,reg rjmp NE_PROKRUTILI
NE_V_NULE: ;--- Сейвить последнее значение таймера для перезапуска (вроде это здесь от глюков, при отсчёте обратном тоже сейвит-же) sts POSLEDNIY_slot_L,slot_L sts POSLEDNIY_slot_H,slot_H ldi reg,240 sts POSLEDNIY_TIK_TAK,reg sts TIK_TAK,reg ;Сохранить для (на случай RE) rcall ZAPUSK_OTS4ETA
;--- удерживать от самонакручивания(ато выскочит из прерывания, и пайдёт кружить ...) NE_PROKRUTILI: sbis pinD,3 rjmp NE_PROKRUTILI ; Тут нада какта по другому(ато стапарится если калесо астановится на тени)
;============+ pop reg_2 ;I pop reg_1 ;I pop reg ;I out SREG,reg;I pop reg ;I reti;----------
;-- Сам механизм тайминга(по четвертьсекунды) ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ TIM1_COMPA: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ Отсчёт ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ out TCNT1L,Nolik out TCNT1H,Nolik ; не влияет на флаги, патаму и вынес вперёд ;---------- push reg ;I in reg,SREG;I push reg ;I push reg_1 ;I push reg_2 ;I ;============+ ;--- Направление отсчёта определить sbrc flajki,4 rcall SEKUNDOMER ;Когда еденичка, тогда секундомер считает sbrs flajki,4 rcall TIMER ;Если нолик, таймер
sbr flajki,0b00100000 ;выйдя из прерывания красиво счЁлкнет ;============+ pop reg_2 ;I pop reg_1 ;I pop reg ;I out SREG,reg;I pop reg ;I reti;----------
;-- Визг из серены должен быть пи-п, пи-п, пи-п, пи-п, (его продолжительность здесь(пепрекидывая флажком)) ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ TIMER1_COMPB: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ Серена ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ out TCNT1L,Nolik out TCNT1H,Nolik ;------Пака мелодия не отзвучит, не серенить! sbrc flajki,3 rjmp PI__end ;-------- инвертация флажка ВКЛ-непрерывного визка sbrc flajki,6 rjmp PIS4IT rjmp MOL4IT PIS4IT: cbr flajki,0b01000000 ldi obraz_H,0b01000000 ldi obraz_L,0b01000000 rjmp PI__end ;*00 на экран вывести* MOL4IT: sbr flajki,0b01000000 ldi obraz_H,0b01111111 ldi obraz_L,0b01111111 PI__end: ;* на экран вывести* reti;----------
;-- Перед уходом в сон выключает перефирию а с выходом, перебрасывает на ресет ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ intt_0: ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ sleep (И ПРОЧИЕ РЕЖИМЫ) ЖЖЖЖЖЖЖЖЖЖЖЖ ;ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ push reg ;I in reg,SREG;I push reg ;I push reg_1 ;I push reg_2 ;I ;============+ ;>>>>>>>>---------- ;включить динамическую индикацию rcall TIM_0A_INDICAT cbr flajki,0b01001000 ;--- прервать визжание(и гимн) ;---------- Выключить прерывание кнопки (чтоб sei-индикация продолжалась) in reg,GIMSK cbr reg,0b01000000 out GIMSK,reg sei
;>>>>>>>>---------- из сна методом ресета! sbrs flajki,7 ;ПЕРЕЗАПУСК?(по флагу) rjmp NE_IZ_ZSNA rjmp RESET NE_IZ_ZSNA:
;>>>>>>>>----------;определение нужды продцедуры останова секундомера sbrs flajki,4 ;определение нужды продцедуры останова секундомера (по флагу) rjmp NE_PAUZA ;--- иначе останавить/запустить секундомер in reg,TIMSK sbrs reg,6 ;Прям по состоянию бита TIM1_COMPA определяю, вкл. или выкл. секундомера. rjmp START rjmp STOP START: rcall ZAPUSK_OTS4ETA rjmp ST__end STOP: rcall STOP_OTS4ETA ST__end: ;----------, просто затем, чтоб не пащло перебирать режимы что далее по списку ldi reg_2,4 ;каличество пееропрашиваний X_STSTOP_PAUZA_1: ldi reg,64 rcall PAUZA_65536 sbic pinD,2 rjmp NU_VSIO_UJE dec reg_2 brne X_STSTOP_PAUZA_1 ; ;>>>>>>>>----- ---------;----------
NE_PAUZA: in reg,TIMSK cbr reg,0b01100000 out TIMSK,reg ;Вырубить таймер 1А-1В. дальше установятся, а тут нахер ненада rcall STOP_OTS4ETA ;это на всякий случай(дп и палюбому, начнётся чтота новае) PO_KRUGU: ;===================Пауза "ОФФ". rcall s4el4ek ;Щёлкнуть для наглядности ldi obraz_H,0b01000000 ldi obraz_L,0b00001110 ;"ОФФ" ldi reg_2,7 ;каличество пееропрашиваний X_SON_PAUZA_1: ldi reg,64 rcall PAUZA_65536 sbic pinD,2 rjmp V_SON ;---------- dec reg_2 brne X_SON_PAUZA_1 ;Х5 Палучится ВДВЕ секунды! ;===================Пауза в 2сек, ***РЕ*** rcall s4el4ek ;Щёлкнуть для наглядности ldi obraz_H,0b00001100 ldi obraz_L,0b00000110 ;*РЕ* ldi reg_2,7 ;каличество пееропрашиваний X_RE_PAUZA_1: ldi reg,64 rcall PAUZA_65536 sbic pinD,2 rjmp V_RE ;---------- dec reg_2 brne X_RE_PAUZA_1 ;Х5 Палучится ВДВЕ секунды! ;===================Пауза в 2сек, ***СЕкундамер*** rcall s4el4ek ;Щёлкнуть для наглядности ldi obraz_H,0b01000110 ldi obraz_L,0b00000110 ;СЕ ldi reg_2,7 ;каличество пееропрашиваний X_CE_PAUZA_1: ldi reg,64 rcall PAUZA_65536 sbic pinD,2 rjmp V_CE ;---------- dec reg_2 brne X_CE_PAUZA_1 ;Х5 Палучится ВДВЕ секунды! rjmp PO_KRUGU ;================
V_CE: cli ;========Секундомер sbr flajki,0b00010100 ;СЕККУНДОМЕР,.. Задать направление отсчёта (флагом) ;Флажок штоб считало 2-1-0-99-стоп!! при тайминге ;--- обнуление для РЕ с нуля ldi slot_L,0 sts POSLEDNIY_slot_L,slot_L rcall load_cifer_L ldi slot_H,10 sts POSLEDNIY_slot_H,slot_H rcall load_cifer_H ldi reg,1 sts TIK_TAK,reg sts POSLEDNIY_TIK_TAK,reg ;обнулить секунды(точнее обьеденичивание, от греха..) ;--- вЫключить калёсика(ано тепер незачем) in reg,GIMSK cbr reg,0b10000000 out GIMSK,reg rjmp NU_VSIO_UJE ;-;-;-;-;-;-
V_RE: cli ;========ПЕРЕЗАПУСК ТАЙМЕРА cbr flajki,0b00010000 ; поменял направление отсчёта на ТАЙМЕРное (бит 2 трогать нельзя!, ато вдруг после секундамера???) ;--- Загрузить,.. и на экран последнее значение.. lds slot_L,POSLEDNIY_slot_L lds slot_H,POSLEDNIY_slot_H rcall load_cifer_L rcall load_cifer_H ;--- Загрузить последнее значение секунд в секундосчётчик lds reg,POSLEDNIY_TIK_TAK sts TIK_TAK,reg ;(востановить минутные доли) rcall ZAPUSK_OTS4ETA rjmp NU_VSIO_UJE ;-;-;-;-;-;-
V_SON: cli ;========СОН(подготовка) out ddrB,Nolik out portB,Nolik ;(погасить) Индикатор, розетка, out ddrD,Nolik ;-вся перефирия ldi reg,0b00000100 out portD,reg ;кнопку оставить подтянутой(ей-же включать!!) ;--- ;Изалировать прерывание колёсика(чтоб не глюкноло ва сне(мот и нинада)) ((((кнопку включить, я-ж ее отрубал уходя в прерывание!)))) in reg,GIMSK sbr reg,0b01000000 cbr reg,0b10000000 out GIMSK,reg sbr flajki,0b10000000 ;Уйдёт в сон зная что следующее нажатие кнопы, вызавит RESET!(он праписан в самам верху прерывания) sei ;-ато ведь и не сможет выйти из сна! sleep ;-;-;-;-;-;-;-;-
NU_VSIO_UJE: sei ldi reg,125 rcall PAUZA_65536 ;Пауза от дребезга. cli ;В прерывании ведь дефолтам стаит запрет прерываний (паэтаму нада вернуть как и було, чтоб ано благапалучно завершило сваи дела) in reg,GIMSK sbr reg,0b01000000 out GIMSK,reg ;В_ключить прерывание кнопки
;============+ pop reg_2 ;I pop reg_1 ;I pop reg ;I out SREG,reg;I pop reg ;I reti;----------
Наверное самым чумовым был проект с GPS-компасом для грибников... Там пришлось городить двоичную тригонометрию, учитывать разные там склонения и прочую муть, короче описать как я там изгалялся, сложно.. А логика работы должна была быть такой, ставишь точку, и идешь собирать грибы.. МК будит GPS по своему алгоритму, чем дальше ты от точки, тем реже, а когда приближаешся, чаще, вплоть до непрерывной работы.. Магнитометр дает такое преимущество, не нужно включать GPS и ждать поиск спутников(или носить с собой горсть батареек, и держать его всегда включенным), не нужно быстро двигаться, чтобы понять, где какое направление(сейчас в телефоны магнитометр встроен, но кто помнит прежние времена,. нужно было пройтись метров 10, чтобы по собственному движению понять направление). Магнитометр-же практически ни чего не потребляет.. и стороны света тебе покажет, и направление к своей точке, мгновенно!. .. Вобщем я раскурил магнитометр, ЖПС-модуль, написал программу.. Осталось все собрать, и тут как обычно пропал интерес, самое интересное и сложное уже сделано . Последние пол года страдаю Устройством_Опережения_Зажигания. Простое магу за день написать, но мне-ж с изысками подавай!.. Вот это и есть моя слабая сторона, со временем понимаю, что меня захватывает именно ПРОЦЕСС!, а не конечный результат.. Вот это меня и склонило к мысли, что нужно обратиться к тем, у кого конкретная задача, РЕЗУЛЬТАТ!. Тут глядишь и копейка какая появится , все-ж радость! Надоело заниматься программированием ради самого программирования.
если вам нужны проекты-головоломки, чтобы, как вы выразились, добиться чумового эффекта, могу предложить одну идею правда, на практике не проверенную - ну так вам же это и надо?
короче: добавьте в любой свой проект с индикатором на 7-сегментных светодиодах автоматическую регулировку яркости индикатора в зависимости от освещенности. только без любых дополнительных фоточувствительных компонентов: используйте тот факт, что светодиод является одновременно и фотодиодом, хоть и плохоньким. то есть заставьте один или несколько сегментов индикатора служить датчиком освещенности в моменты, когда эти сегменты не светятся. сумеете?
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Простое магу за день написать, но мне-ж с изысками подавай!.. Вот это и есть моя слабая сторона, со временем понимаю, что меня захватывает именно ПРОЦЕСС!, а не конечный результат.. Вот это меня и склонило к мысли, что нужно обратиться к тем, у кого конкретная задача, РЕЗУЛЬТАТ!. Тут глядишь и копейка какая появится , все-ж радость! Надоело заниматься программированием ради самого программирования.
Есть у меня такая задача. Сам в написании программ для МК не силён, поэтому несколько раз обращался сюда за помощью в написании простейших программ. Обращаться со сложной программой всё не хватало смелости, а тут Вы сами просите посложнее. Вознаграждение естественно гарантируется.
_________________ Большой опыт, порой, не даёт находить/видеть нам простые и очевидные решения. Всегда с уважением, Александр.
ARV Да, интересненькая идейка, мне такая в голову пака не приходила, как появится ей применение, вспомню ее и поразмыслю .. С переключением ног в разные режимы, то вовсе не задача, там скорей с электроникой.. Кстати, из того-же разряда.. Например для таймера, я его как предельно простой позиционировал, и на схемке нарисовал один резистор для всего 7-сегментника(хоть и рекомендовал ставить как положено).. Короче можно было дописать прогу, чтобы слишком яркие(например "1") светились чуть меншее время, а например "8", подольше.. Это сгладило-бы эфект разной яркости. Правда косяк в том, что этот-же таймер как-бы очень неприхотлив к батарейкам, и когда они будут просаживаться, всеравно эфект начнет вылазить, но можно подобрать что-та средне.. Жаль что я об этом подумал уже когда марально поставил точку на проекте. ---------- Вспомнил свой проект, выключатель света для аквариума(растения там, им свет нужен), и он несколько лет без сбоев работал, пака аквариум не сплавил.. Там программа была не так уж сложнА, интересен алгоритм.. Всего одна кнопка, и светодиод. Логика работы такая, включаешь его в разетку в полночь. Ближе к вечеру(когда темнееет) нажимаеш кнопку, свет зажигается,.. и нажимаеш когда нужно выключить... МК считает ровно сутки, и повторяет этот цикл день за днем.. ...а если вдруг пропал свет, и время сбросилось, то смотриш на часы,.. например 17 часов.. Прижимаешь кнопку, и ждешь когда светодиод маргнет 17-ть раз.. Отпускаешь, и он настраивается как-будто 17:00, и он работает в нормальном режиме. А вот сейчас о том, в чем оказался интересный плюс этого выключателя!.. Чтобы знать что он правильно работает(настроен верно), светодиод маргает столько раз, сколько сейчас часов, потом пауза подольше. И это оказалось ароста суперско!.. Просыпаешься ночью, и думаешь, "а сколько-это мне еще спать, и на работу вставать?", смотришь на потолок(а в темноте маргание хорошо видно), и быстро вьезжаеш, 2, 4 или 5 часов сейчас.. Это оказалось реально клево и полезно! ---------- korob, пишите в личку .
Хм... Говорят, у дураков мысли сходятся... Ваш вариант с одним резисторов на разряд семисегментника был мною применен на несколько лет раньше, но с яркостью проблем не было, т.к. я использовал посегментную динамическую индикацию, а не поразрядную. Таймер по вашему принципу я тоже делал, и ещё раньше, чем посегментную индикацию. Ещё на AT89C2051... И, признаться, впервые с тех пор встречаю человека, которому интересен нестандартный подход к простым вещам.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Такие люди перевелись с "потребительством", (думать не нада, просто найди что тебе наужно). Прогресс дает все решения, и цена вопроса пара копеек. Я наверное был-бы "интрошечником", родись покаление раньше... Наверное вы видели визуально-потрясающие ролики, созданные из 256 килобайт кода?. Сейчас это не удивит ни кого, т.к. килобайты уже не имеют значения... Возьми микруху в 20! раз мощнее (а по цене в полтора дороже), и эти фокусы просто пшик Вот и ишу свое место в жизни, когда задачу нужно решать методом баллистика, каждый такт, решение! ..Но после таких задач, тривиальные решаются на раз! но вдруг копейку подбросят.
Раньше проводились конкурсы, и были различные номинации, для разных килобайт и под разное железо. На сайтах лежали десятки и сотни таких творений в каждой папке..(правда большинство не запускаются, или убоги(на фоне прочих), но победители в отдельных папках, хватало и без них). Жаль что это вымерло,.. отношение к программированию как к искусству, стремление к совершенству. Вот, сходу нашел один из них http://chaostheory.conspiracy.hu/downloads.php или если комп не тянет(у меня видюха дохлая), можно на ютубе посмотреть.. https://www.youtube.com/watch?v=ZfuierUvx1A Вот здесь https://www.youtube.com/channel/UC96JVq ... AkIkKp1_6w лежит МНОГО видюшек, можно позалипать.. И не ленитесь читать, сколько килобайт ЭТО весит А это кажись был моим любимым117 кб. https://www.youtube.com/watch?v=mxfmxi- ... m0QuM1CAy3 Целый город отгрохали(а потом угрохали)! Качнуть можно здесь,.. https://files.scene.org/view/parties/20 ... debris.zip Заодно проверите как комп тянет . Создавалось в 2007-ом "Хэло ворд" обычно весит больше
Раньше проводились конкурсы, и были различные номинации, для разных килобайт и под разное железо. На сайтах лежали десятки и сотни таких творений в каждой папке..(правда большинство не запускаются, или убоги(на фоне прочих), но победители в отдельных папках, хватало и без них). Жаль что это вымерло,.. отношение к программированию как к искусству, стремление к совершенству.
Ничего никуда не делось, только на одной "Revision 2017" demoparty было 93 демки, для разных платформ, от 4К.
Ага... Было. Только в 2017 году в демке на 4к на самом деле задействован графический движок из системы, а в нем весу несколько десятков мегабайт, если не больше. Нечестное сравнение.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Ага... Было. Только в 2017 году в демке на 4к на самом деле задействован графический движок из системы, а в нем весу несколько десятков мегабайт, если не больше. Нечестное сравнение.
С таким подходом только на тиньках и остается писать, потому что вполне возможно даже для создания пустого окна уже потребуется загрузить dll-ок на мегабайты
Именно так. Демки изначально затачивались под DOS, где о графике и графическом драйвере даже думать никто не мог. И тем интереснее было видеть, как из каждого байта выжимается максимум, например, как текстуры одновременно были и мелодиями и скриптами движения. А сейчас уже совсем не то. Скоро демкой будут звать питоновскую строчку, запускающую плейер...
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Все лежит на компе, в горах исходников (в основном недописанных) . если-б цель, заработать денег была-б в приоритете, взялся-б портфолио собирать,. А так лень. По ссылочке один из них. т.с. подтверждение что это не сказки.
Выкладывайте на гитхабе. Это снимает кучу вопросов, и дает бонусные ачивки к квалификации
У меня пока не дошли руки до этой задачи https://radiokot.ru/forum/viewtopic.php?f=53&t=155360. Был бы рад если бы кто-нибудь присоединился. Правда не AVR и не ассемблер, но будет не стыдно тыкать пальцем, указывая в достижениях.
Почитал, очень непонятно пишите(возможно для того, кого вы ищите все понятно).. ...Так-что просто поделюсь своим опытом размышлений на эту тему... Последний мой проект. был круто-нафаршированный Устройство_Опережения_Зажигания(УОЗ). Хотелось добавить туда ВСЁ, на все случаи жизни... Например у любого зажигания по разному расположены датчики, (ориентируясь на которые УОЗ определяет время искры, могут быть доролниетельные устройства, датчики разряжения на входе в карбюратор, положения заслонки,.. датчики температуры и может что-та еще.. Сперва писал программу так, что это ВСЁ сразу было включено, но выставляя переменную, которая определяте, какие функции программа будет использовать, а какие нет.. В результате получился жуткий фарш (НО и ЕСЛИ).. ..Тогда решил писать программу в другом стиле.. Все наверное помнят приставки Дэнди и пр. к ним продавались картриджи, и на некоторых было по ТЫСЯЧЕ игр.. По детской наивности казалось что это МЕГА-картридж, но на поверку оказывалось, что все игры внутри, это просто разные вариации нескольких разных. Короче програмисты писали функции из которых по сути на 98% состаит игра, а потом писали в основной функции ссылались на дополнительные. Получается, чтобы написать другую игру, нужен час, и пара десятков килобайт, и можно проделать такой трюк, как "1000 игр!" В общем я думаю сл. версию УОЗ делать по такому принципу, некая переменная будет определять, на какой код перепрыгнет при включении программа, В каждой из них будет ВСЁ ТОЛЬКО ОСНОВНОЕ!.. а функции можно просто сложить в общую стопкоу. Впрочем ни чего нового, так все и должно быть. ... Это такая большая присказка, а сказка,.. Раз уж оно такое универсальное, значит управлять этим "много(безо)/бразием" нужно как-то удобнее. Решил что лучше всего это будет мобилка, т.к. в ней есть все безпроводные интерфейсы, мне по душе именно блютуз.. Начал ковырять, с помощью чего можно легко сделать прогу для мобилки. Оказалось что "Pithon" самое оно!. Во первых он задуман как максимально простой(не сравнить с Си), и является интерпретируемым(т.е. не код на выходе формируется, а блок используемых в программе функций, а сама программ преобразуется в просто более компактный набор байт, который просто дублирует текстовый вариант). Фишка оказалась в том, что из-за растущей популярности, и заложенной "крос-платформенности", сейчас наделали стООлька библиотек, модулей и инструментов облегчения создания программ. что пиши под что хочеш!, даже что хочеш(вплоть трёх-дэшных игр). ..от программирования мне нужно по сути не много, сделать окошко(есть модуль, в котором просто мышкой рисуеш окно какое тебе нравится), выводить графики(есть библиотеки, бери и пользуй, учить ничего не нада).. Вводить в поля свои цифры(в первом уроке о переменных, просто пишеш input, и переменной присваивается значение), и кое-какие манипуляции, +-/*... Сохранить в файл, было в 4-ом уроке, команда "оpen" присваивает переменной содержимое файла, (и в ковычках, "w(т.е. открыть как сохраняемый)"), чтобы при закрытии файла содержимое переменной сохранилось в файл,.. ну не красота-ли?! . .....Мне еще предстоит найти библиотеку, которая открывает блютуз... Но теперь я ТОЧНО знаю, что там все будет примерно так-же "открыть, включить, отправить.." . Я когда-то пытался раскурить макросы в терминале, чтобы сделать простейшую обработку полученых от МК цифр.. Наверное освоить питона, и написать свой терминал не многим сложнее, А приятный бонус, потом можно создавать все что угодно, под любые платформы, и все заточено чтобы любой чайник мог сразу всё!. Так-что рекомендую не проходить мимо, если хотите расширить возможности своих творений на МК. . Конечно-же С++ много круче, но осваивать его для простеньких прог для связи с компом, серавно что покупать промышленный пневмо-молоток, когда нужно просто забить гвоздь.
Конечно-же С++ много круче, но осваивать его для простеньких прог для связи с компом, серавно что покупать промышленный пневмо-молоток, когда нужно просто забить гвоздь.
За это мне и нравится си - можно и прошивку микроконтроллера писать, и программу для компа (по крайней мере, консольные - на раз). Что-нибудь чисто-алгоритмическое при правильном подходе даже можно отладить на компе собирая под x86 а потом перенести на процессор. Я правда с STM32 развлекаюсь и под Linux.
И для SMT питоны есть. ..поговаривают что и для AVR-ок. Нужно взвешивать свои потребности, и возможности.. Как-бы не скатилось в извечный спор, какоя язык самый лучший
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения