Котуинко

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Друг Кота
Аватара пользователя
Сообщения: 15816
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Уважаемый sharpey
Можно было бы и ссылкой ограничиться.
Кому надо - тот сам дальше просмотрит.
Рассмотрение/обсуждение/реклама схем устройств С ЯВНЫМ КРИМИНАЛЬНЫМ УКЛОНОМ в данной теме производиться не будет.
:tea:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 15816
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

ГЫММ...
Никогда особо не присматривался к завершающему фрагменту листинга ассемблерного проекта в АВР студии...
Это участок с анализом частоты применения команд.
А тут попалось пред глазы воть это:

Код: Выделить всё

ATtiny13A instruction use summary:
.lds  :   0 .sts  :   0
и так далее...
Выделил именно то, что чуток озадачило:
что за команды с префиксной точкой
.lds и .sts ...??
в документации на команды таких вроде нету...
:dont_know:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

на аврфрексе с точками давно разбирались - типа в тини10 такая разновидность команд (именно в листинге) может появиться
https://www.avrfreaks.net/forum/unknown ... structions
Друг Кота
Аватара пользователя
Сообщения: 15816
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Я имел ввиду официальное описание команд (документация)...
А там такого нету.
8)
Типа "неуж-то чего пропустил?"
:dont_know:
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

еще раз - точка будет только в листинге, чтоб разница видна была.
Микроконтроллеры ATtiny 4/5/9/10 поставляются с "уменьшенным" (reduced) ядром AVR CPU. Одно из изменений ядра касается введения различных инструкций доступа к памяти. Вместо инструкций из 2 слов LDS/STS поддерживается инструкция в 1 слово LDS/STS, что позволяет осуществить доступ к SRAM за 1 такт.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 15816
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Могли бы таки и в описании команд поставить - там в документации ведь давно есть оговорка о "16-битовых"...
Только написание команд в тексте исходника одинаково.
:roll:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 15816
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Обновленный бук по системе команд AVRок от МИКРОЩИПА (версия от 2020года):
AVR-Instruction-Set-Manual-DS40002198A.pdf
(1.14 МБ) 240 скачиваний
Рекомендуется в качестве нового буклетика настольного (распечатать и изучить).
:roll:
Чего относительно нового - расфасовали "поколения"

Код: Выделить всё

Table 4-1. Versions of AVR® 8-bit CPU
Name           Description
AVR        Original instruction set from 1995
AVRe       AVR instruction set extended with the Move Word (MOVW) instruction, and the Load Program
                  Memory (LPM) instruction has been enhanced. Same timing as AVR.
AVRe+     AVRe instruction set extended with the Multiply (xMULxx) instruction. Same timing as AVR and
                  AVRe.
AVRxm     AVRe+ instruction set extended with the Read Modify Write (RMW) and Data Encryption
                 Standard (DES) instructions. SPM extended to include SPM Z+2. Significantly different
                  timing compared to AVR, AVRe, AVRe+.
AVRxt     A combination of AVRe+ and AVRxm. Available instructions are the same as AVRe+, but the
                  timing has been improved compared to AVR, AVRe, AVRe+ and AVRxm.
                  AVRrc AVRrc has only 16 registers in its register file (R31-R16), and the instruction
                  set is reduced. The timing is significantly different compared to the AVR, AVRe, AVRe+,
                  AVRxm and AVRxt. Refer to the instruction set summary for further details.
Остальное пока не вычитывал... хотя дока у меня в архивах уже давненько лежит (с беглым просмотром)...
:write:
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

ассемблер уже даже для тини10 не актуален - есть ядро для ардуино :o
https://github.com/technoblogy/attiny10core
ATtiny10Core Для программирования ATtiny10/9/5/4.
Поддерживаемые версии IDE
ATtiny10Core должен работать со всеми версиями официальной IDE (из arduino.cc), начиная с версии 1.6.3. Рекомендуется версия 1.8.3.

Установка
Загрузите .zip, распакуйте его и поместите в папку оборудования внутри папки Arduino в папке Documents . Если папки оборудования нет, сначала создайте ее.

Поддерживаемые варианты микросхем:
ATtiny10
ATtiny9
ATtiny5
ATtiny4
з.ы. ардуины заполонили - пора на пенсион :cry:
OKF
Это не хвост, это антенна
Сообщения: 1457
Зарегистрирован: Вт июн 07, 2011 08:03:18

Сообщение OKF »

pic10f200 программировал на Си лет 5 назад.)
Друг Кота
Аватара пользователя
Сообщения: 15816
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

oleg110592
Так то весьма давно уже было... за 10е...
Только вот "кривовато"....
Да и смысл те "козявки" под Си пускать - у них и ассемблера в избытке.
(тем более, что в свободной продаже редкость и паять ... в........)
8)
А насчет "пора на пенсион" - это Вы ЗРЯ - можно в ответ микс на основе проекта с содержанием самодельных СБИС из "подручных средств" замутить. Используем "всякой твари" (имеющихся в наличии МК) понемножку и с максимальной выгодой.
В том числе и ту адуринку не как "высший уровень", а всего-то как рядовую "DIPмикросборку" в рамках проекта на MIX смеси.
:beer:
OKF
pic10f200 под Си разве что для садомазохизма с извратом делать.
Там же "потрохов" совершенно мало.
:)))
Порадовать только СВОЕ САМОЛЮБИЕ ради "НА СЛАБО" - для практики такой подход весьма избыточен.
:beer:

ПЫ.СЫ...
Сейчас мозг совершенно расслаблен в предверии НОВОГОДА - ЛЕНЬ да .....
ОДОЛЕЛИ!!!
:beer:
OKF
Это не хвост, это антенна
Сообщения: 1457
Зарегистрирован: Вт июн 07, 2011 08:03:18

Сообщение OKF »

[uquote="BOB51",url="/forum/viewtopic.php?p=3939633#p3939633"]OKF
pic10f200 под Си разве что для садомазохизма с извратом делать.
Там же "потрохов" совершенно мало.
:)))
Порадовать только СВОЕ САМОЛЮБИЕ ради "НА СЛАБО" - для практики такой подход весьма избыточен.[/uquote]
Никакого самолюбия. Влазит, ну и хорошо. Там обычный блинкер на 6 светодиодов с кнопкой выбора режима.
Друг Кота
Аватара пользователя
Сообщения: 15816
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Нееее... ТЪХУ -ТЬХУ- ТЬХУ!!!
С теми 256 ячеек программной памяти ПЗУ и прочими "особенностями" 200го...
Разве что на самые простейшие применения да под ассемблером...
8)
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

[uquote="BOB51",url="/forum/viewtopic.php?p=3939633#p3939633"]oleg110592
Так то весьма давно уже было... за 10е...
Только вот "кривовато"....
Да и смысл те "козявки" под Си пускать - у них и ассемблера в избытке.[/uquote]
ядро там годичный свежачок, 3 месяца назад подправляли. Да и ядра там того - главное в среде родной пашет и юсбаспом из коробки скетчи шить может.
С ассемблером точно уже конкурирует - там и дигиталврайт нету, все как в обычном Цэ. Скетчик блинканья:

Код: Выделить всё

#include <avr/io.h>
#include <stdint.h>

int main (void) {
  DDRB = 1;                       // PB0 as an output
  TCCR0A = 1<<COM0A0 | 0<<WGM00;  // Toggle OC0A, CTC mode
  TCCR0B = 1<<WGM02 | 3<<CS00;    // CTC mode; use OCR0A; /64
  OCR0A = 15624;                  // 1 second; ie 0.5Hz
  while (1);
}
забрало 66 байт - а ну на ассемблере скока с таблицей прерываний
Изображение
Друг Кота
Аватара пользователя
Сообщения: 15816
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Вообще-то под 10-ю я имел ввиду более практичный вариант от DIY Attiny...
(https://raw.githubusercontent.com/sleem ... index.json)
Другие (в то время когда DIY ставил) попросту не запускались без сбоев. А этот хош корректно работал да настроек там куча (хош и не слишком понятных).
:roll:
Чет насчет СКОТча не понял - там замигайка аппаратными средствами таймера с периодом в 1 секунду что-ли?
:?
За 10ку не скажу, но прикинуть для 13й можно... Правда не слишком корректно - судя по содержимому в OCR0A Т0 16-разрядный...
Это ближе таки к Т1 в "стандартных" малолапых АВРках... в принципе для Т1 у 2313...
Хотя... "для приколоться" можно и 13ю прикинуть... на вопрос "сикоки надо на блинк с периодом в пол-секунды"...
:roll:
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

[uquote="BOB51",url="/forum/viewtopic.php?p=3939843#p3939843"]Вообще-то под 10-ю я имел ввиду более практичный вариант от DIY Attiny[/uquote]
там ссылка на конкретное ядро, а чем DIY Attiny практичнее - наоборот написано о troubleshooting.
Блинк на тини10 написано (перевод):
Он использует Timer / Counter0 для деления системных часов 1 МГц на значение предварительного делителя, равное 64, а затем на 15625, переключая выходной PB0 с периодом в 1 секунду.
еще
Аналоговый генератор частоты
Следующая программа считывает напряжение с потенциометра на аналоговом входе ADC1 (PB1), а затем использует его для установки регистра сравнения OCR0A таймера / счетчика0 для генерации прямоугольной волны на PB0, частоту которой вы можете контролировать с помощью потенциометра:

Код: Выделить всё

#include <avr/io.h>
#include <stdint.h>

int main (void) {
  DDRB = 1;                       // PB0 as an output
  // Set up ADC on PB2
  ADMUX = 1<<MUX0;                // ADC1 (PB1)
  ADCSRA = 1<<ADEN | 3<<ADPS0;    // Enable ADC, 125kHz clock
  // Set up waveform on PB0
  TCCR0A = 1<<COM0A0 | 3<<WGM00;  // Toggle OC0A, Fast PWM
  TCCR0B = 3<<WGM02 | 4<<CS00;    // Fast PWM with OCR0A as TOP; /256
  // Main loop
  for (;;) {
    ADCSRA = ADCSRA | 1<<ADSC;    // Start
    while (ADCSRA & 1<<ADSC);     // Wait while conversion in progress
    OCR0A = ADCL;                 // Copy result to frequency output
  }
}
Друг Кота
Аватара пользователя
Сообщения: 15816
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Насчет соотношения сааемблер/Си по вышеобсуждаемому простейшему блинку...
https://radiokot.ru/forum/viewtopic.php ... 8#p3939698
У Вас в результате 66 байт...
Уж чей-то очень моного...
У меня для тиньки 13, с учетом, что управление выводами программное (при возможности произвольной комбинации задействованных в "блинк" выводов) и таймер 8-разрядный с использованием промежуточного счетчика досчета и то... 62 байта...
:wink:
Это вроде ядра для простейшей новогодней "заморгайки":
test13.zip
(19.12 КБ) 243 скачивания
:tea:
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

[uquote="BOB51",url="/forum/viewtopic.php?p=3939985#p3939985"]Уж чей-то очень моного...[/uquote]
разница в 4 байта, с учетом что это ардуино, смешно. А ведь все не хуже все чем на ассемблере (весь листинг):
Спойлер

Код: Выделить всё

00000000 <__vectors>:
   0:	0a c0       	rjmp	.+20     	; 0x16 <__ctors_end>
   2:	11 c0       	rjmp	.+34     	; 0x26 <__bad_interrupt>
   4:	10 c0       	rjmp	.+32     	; 0x26 <__bad_interrupt>
   6:	0f c0       	rjmp	.+30     	; 0x26 <__bad_interrupt>
   8:	0e c0       	rjmp	.+28     	; 0x26 <__bad_interrupt>
   a:	0d c0       	rjmp	.+26     	; 0x26 <__bad_interrupt>
   c:	0c c0       	rjmp	.+24     	; 0x26 <__bad_interrupt>
   e:	0b c0       	rjmp	.+22     	; 0x26 <__bad_interrupt>
  10:	0a c0       	rjmp	.+20     	; 0x26 <__bad_interrupt>
  12:	09 c0       	rjmp	.+18     	; 0x26 <__bad_interrupt>
  14:	08 c0       	rjmp	.+16     	; 0x26 <__bad_interrupt>

00000016 <__ctors_end>:
  16:	11 27       	eor	r17, r17
  18:	1f bf       	out	0x3f, r17	; 63
  1a:	cf e5       	ldi	r28, 0x5F	; 95
  1c:	d0 e0       	ldi	r29, 0x00	; 0
  1e:	de bf       	out	0x3e, r29	; 62
  20:	cd bf       	out	0x3d, r28	; 61
  22:	02 d0       	rcall	.+4      	; 0x28 <main>
  24:	0c c0       	rjmp	.+24     	; 0x3e <_exit>

00000026 <__bad_interrupt>:
  26:	ec cf       	rjmp	.-40     	; 0x0 <__vectors>

00000028 <main>:
#include <avr/io.h>
#include <stdint.h>

int main (void) {
  DDRB = 1;                       // PB0 as an output
  28:	41 e0       	ldi	r20, 0x01	; 1
  2a:	41 b9       	out	0x01, r20	; 1
  TCCR0A = 1<<COM0A0 | 0<<WGM00;  // Toggle OC0A, CTC mode
  2c:	40 e4       	ldi	r20, 0x40	; 64
  2e:	4e bd       	out	0x2e, r20	; 46
  TCCR0B = 1<<WGM02 | 3<<CS00;    // CTC mode; use OCR0A; /64
  30:	4b e0       	ldi	r20, 0x0B	; 11
  32:	4d bd       	out	0x2d, r20	; 45
  OCR0A = 15624;                  // 1 second; ie 0.5Hz
  34:	48 e0       	ldi	r20, 0x08	; 8
  36:	5d e3       	ldi	r21, 0x3D	; 61
  38:	57 bd       	out	0x27, r21	; 39
  3a:	46 bd       	out	0x26, r20	; 38
  3c:	ff cf       	rjmp	.-2      	; 0x3c <__CCP__>

0000003e <_exit>:
  3e:	f8 94       	cli

00000040 <__stop_program>:
  40:	ff cf       	rjmp	.-2      	; 0x40 <__stop_program>
да поначалу совсем немного излишков есть, но это ж С++ - он так думает. Дальше размер уже от пограмиста уже будет зависеть. Зато например математика на Цэ намного нагляднее и проще.
Друг Кота
Аватара пользователя
Сообщения: 15816
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Какой там "всего 4"?!
Разница гораздо больше - ведь у проекта под адуринкой всего-то конфигурация таймера на досчет до 0,5 секунды и АППАРАТНЫЙ ногодрыг ЕДИНСТВЕННО ВОЗМОЖНОГО ВЫВОДА. (Аппаратные преимущества соответствующего МК явные).
А в моем варианте из-за 8 разрядной организации таймера (специфика аппаратной начинки тиньки13й) и счетчик досчета и обработчик прерывания и дополнительный "хвост" для обеспечения программно селектируемого "ногодрыга".
Так что заведомо избыточный код добавлен.
И то разница в 4 байта.
А Ёжли бы полное соответствие (допустим с 2313 на Т1) то вряд-ли уже можно говорить о "малом размере"...
8)
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

Цифры же озвучены 66-62=4. :)))
Сравнивать надо одинаковые действующие программы на одинаковом МК.
Листинг же привел - да это чисто на ассемблере можно подсократить, но не много. В дальнейшем оверхеда скорее не будет. Компилятор еще можно поуговаривать, типа векторы выкинуть и др.
Друг Кота
Аватара пользователя
Сообщения: 15816
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

УВЫ... тиньки 10й у меня нету(в том числе и проработки документации по причине перспектив применения).
Так что речь может идти только об аналогии.
:(
Одначе и при том - там всего-то установить режимы таймера и запуск отсчета при остальных функциях на основе аппаратной составляющей - и 66 байт (33 команды)?...
Это явно перебор...
8)
Так что при всем уважении, но ассемблер таки остается базовым языком программирования для прикладных устройств простой периферии. А уже далее комплект из комбинированного применения как периферийных интерфейсных СБИС на основе МК под ассемблером/ЯВУ, так и более крупных МК/систем на кристалле под ЯВУ.
Соответственно и подготовка материала для ассемблера заметно более затратная - но там компенсация за счет применения небольшого арсенала хорошо проработанных представителей различных семейств для разнообразных прикладушек.
В случае с ЯВУ затрат времени на проработку документации МК заметно меньше, но "абсолютная власть" над ресурсами становится более "заморочной" - но под ЯВУ этого в большинстве случаев и не требуется.
:beer:
Ответить

Вернуться в «Разные вопросы по МК»