Atmega8 LTO (перенос кода с ардуино)

Green
Offline
Зарегистрирован: 01.10.2015

BOOM пишет:

Прошу более опытных товарищей проверить ход моих вычислений и, если нужно, поправить:


Цель?

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

Именно так и по даташиту новое значение в OCR надо грузить в прерывании переполнения ...

Суть PWM - частота одна, но ширина импульсов разная !

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Green пишет:

BOOM пишет:

Прошу более опытных товарищей проверить ход моих вычислений и, если нужно, поправить:


Цель?

Уметь настраивать таймеры (под разные задачи).... ))

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Komandir пишет:

Суть PWM - частота одна, но ширина импульсов разная !

Это я знаю.

Komandir пишет:

Именно так и по даташиту новое значение в OCR надо грузить в прерывании переполнения ...

Я запутался. Мы говорим о режиме FastPWM сейчас или о NORMAL?

 

 

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

Цитата:
Fast PWM

В этом режиме счетчик считает от нуля до 255, после достижения переполнения сбрасывается в нуль и счет начинается снова. Когда значение в счетчике достигает значения регистра сравнения, то соответствующий ему вывод ОСхх сбрасыватся в ноль. При обнулении счетчика этот вывод устанавливается в 1. И все!"

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Значит изначально (FastPWM) было правильно:

void setup() {

  TIMSK |= (1<<TOIE2) | (1<<OCIE2);        // Разрешаем прерывания timer2 по переполнению (TOIE2)и совпадению (OCIE2)
  TCCR2 |= (1<<WGM21) | (1<<WGM20)         // Активируем режим FastPWM, в этом режиме при совпадении счетчика он не обнуляется и считает до переполнения
  OCR2 = 128;                              // Устанавливаем значение для совпадения
  TCCR2 |= (1<<CS22) | (1<<CS21);          // предделитель 1/256
  sei();
}

void loop() {
}

ISR(TIMER2_OVF_vect) {
  // Выполняю какие-то действия каждые 8,2 миллисекунды
  // Могу здесь менять значение OCR2 (в TIMER2_COMP_vect - нельзя?)
}

ISR (TIMER2_COMP_vect){
  // Выполняю какие-то действия, время определяется значением OCR2 от  0 до 8,2 миллисекунды
}

Так?

Осталось понять:

Цитата:
то соответствующий ему вывод ОСхх сбрасыватся в ноль

что это за вывод такой?

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

Иди уже в школу !!!

PB3 (MOSI/OC2) - для второго таймера это OC2 !!!

Настроил таймер, перевел вывод OC2 в режим OUTPUT и он сам ШИМит без обработчиков прерываний !!!

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Ухожу ухожу....

Дай ссылку на букварь на русском языке (если знаешь).

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

Лучше родной даташит читать - хоть через яндекс переводчик ...

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Да вот его через переводчик и читаю.... Ладно, буду разбираться. Если что - спрошу.

Green
Offline
Зарегистрирован: 01.10.2015

Для туземцев не умеющих гуглить https://forum.cxem.net/applications/core/interface/file/attachment.php?id=252071

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

Green супер краткое изложение ???

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Green пишет:

Для туземцев не умеющих гуглить https://forum.cxem.net/applications/core/interface/file/attachment.php?id=252071

Оборжаться. Полезности в этом pdf чуть меньше чем ничего - общие сведения.

Green
Offline
Зарегистрирован: 01.10.2015

Чё, не подошло?))
У меня имеется файл ATmega8_rus.pdf - даташит на русском. Где то ж я его брал... Ну я возьми и загугли по названию, и первую попавшуюся ссылку кинул, а тут вон какой облом.) И не попадается ничё.(

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Да тут не только в даташите дело. Надо ещё понимать все эти сокращения и как все меж собой завязано. Ладно, нет желания - лучше не помогать. Будем откатываться назад и снова более детально изучать. Уж не серчайте за тупость...

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

BOOM нужно мысленно встать на место китайцев, которые сидят внутри чипа и всё считают, переключают ... ...

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Komandir пишет:

BOOM нужно мысленно встать на место китайцев, которые сидят внутри чипа и всё считают, переключают ... ...

Согласен! А для этого нужно же знать как там эти «человечки» и почему что делают. А с этим пока пробел есть...

Эх, вот бы книгу типа как раньше «Си++ для чайников» только про микроко6троллеры, их регистры, Настройки, таймеры и тп... )

Green
Offline
Зарегистрирован: 01.10.2015

Полно же в сети уроков всяких. Давай почту - скину даташит. 

Kakmyc
Offline
Зарегистрирован: 15.01.2018

BOOM пишет:

Да тут не только в даташите дело. Надо ещё понимать все эти сокращения и как все меж собой завязано. Ладно, нет желания - лучше не помогать. Будем откатываться назад и снова более детально изучать. Уж не серчайте за тупость...

В даташите все эти сокращения расписаны.

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Green пишет:

Давай почту - скину даташит. 

Посмотри, пожалуйста, вот это не он случаем: https://vk.com/doc-135806404_453841665?hash=HY9J3fvigon4qFH9Nfu62YtwHNxO... ?

Искал по твоей наводке atmega8_rus ...

Green
Offline
Зарегистрирован: 01.10.2015

Да, это он. "Так значит можешь, если захочешь!"))

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Green пишет:

Да, это он. "Так значит можешь, если захочешь!"))

Это не совсем так...

BOOM пишет:

Искал по твоей наводке atmega8_rus ...

 

Green
Offline
Зарегистрирован: 01.10.2015

А я искал по быстрому, не внимательно.) Вообще, летом КПД низкий.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Ну дак летом в Крыму актуально не даташиты всякие, а лопата для денег, туристов околачивать. 

Green
Offline
Зарегистрирован: 01.10.2015

Это да. А ещё жара, море, расслабон.) 

SAB
Offline
Зарегистрирован: 27.12.2016

Green, какое море, ты вроде с Краснодара?

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

SAB пишет:

какое море, ты вроде с Краснодара?

А чо в окрестностях Краснодара море кончилось?

SAB
Offline
Зарегистрирован: 27.12.2016

BOOM пишет:

А чо в окрестностях Краснодара море кончилось?

Ну если радиус окресностей в 100 км. то море только начинается :)))))

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

По Российским меркам все что ближе 300км - окрестности... )))

Green
Offline
Зарегистрирован: 01.10.2015

От меня далеко до моря, 900м.

Green
Offline
Зарегистрирован: 01.10.2015

BOOM пишет:

Уметь настраивать таймеры (под разные задачи).... ))


В большинстве  случаев, для большинства простых поделок, таймерами вообще не пользуюсь. В крайнем случае, формирую системный тик (обычно 10 или 1 мс), без прерываний даже. А то и без таймеров, ставлю delay(10) и норм. Ну а в Ардуино уже есть и millis, и tone. Асинхронный таймер иногда нужен для часового кварца. Ну и всё. Только для измерений иногда нужен ICR или ворота точные для частотомера (но это уже для PIC-ов).
Во! Стоит только что то написать, отправить, как сразу же кажется что это уже было... Офигеть!(

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Ну мне прерывание нужно, чтобы вне зависимости от исполняемого кода делал «что приказано» )))

ЗЫ: Свою задачу я решил (она первой была), а про использование одного таймера под две задачи - это больше из-за интереса и просто саморазвития... 

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018
Скетч использует 8132 байт (99%) памяти устройства. Всего доступно 8192 байт.
Глобальные переменные используют 495 байт (48%) динамической памяти, оставляя 529 байт для локальных переменных. Максимум: 1024 байт.

HEX-файл успешно загружается в микроконтроллер и исполняется (так, как я и задумывал).

Собственно вопрос: Сильно ли (и как сильно?) влияет на работу микроконтроллера тот факт, что свободно всего 60 байт во flash?

Его же (место во flash) не солить, правильно? Или нужно обязательно сколько-то оставлять свободного (для чего)?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Во флэше свободное место некритично, главное, что оно есть.  Вот ОЗУ - критично, если String используешь, или вручную в куче ковыряешься. 

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

БРЕД !

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Komandir пишет:

БРЕД !

Не буду спорить, тебе виднее. 

Green
Offline
Зарегистрирован: 01.10.2015

Ой, та нормально всё. От задачи зависит. Бывает что и 90% норм. Ну уж точно что не 48%.)))

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

А зачем оно (свободное место) там должно быть? Там что, фрагментация какая-то происходит или тому подобное?

DetSimen пишет:

Во флэше свободное место некритично, главное, что оно есть.  Вот ОЗУ - критично, если String используешь, или вручную в куче ковыряешься. 

String не использую, локальные переменные дай Бог байт 150 из ОЗУ занимают (в сумме разом)...

Komandir пишет:

БРЕД !

Поделись своим видением, пожалуйста...

 

 

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

В озу стек может наехать на данные. С флешем то никаких записей не производится !!!

Green
Offline
Зарегистрирован: 01.10.2015

Да, вопрос, конечно, интересный...) Когда ты пишешь на ассемблере, у тебя всё под контролем, ты сам себе хозяин. На Си же, тут за тобой находятся хозяева... И насколько Ане считают нормальными мы не знаем. По крайней мере, я об этом не слышал.(

Green
Offline
Зарегистрирован: 01.10.2015

Ха-ха! Вот почему я читаю у некоторых что они любят ПОПИСЫВАТЬ на ассемблере. В Windows! Слабо? Потому что всё под контролем, из ихнего объяснения.)

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Green пишет:

Ха-ха! Вот почему я читаю у некоторых что они любят ПОПИСЫВАТЬ на ассемблере. В Windows! Слабо? 

Я люблю. 

//
// декодирование байтового массива, закодированного функцией выше, обратно в мирную строку (Unicode)
// на входе, сатвецтвенно байтомассив, на выходе - строка
//
function    DecodeString(const AValues: TBytes): string; register;
var xByte: byte;
    len: Int32;
begin
  len:=Length(AValues);
  xByte:=AValues[len-1];        // раскодирующий байт лежит в жопе массива, сохраним
  SetLength(Result, (len div 2) + 2);  // длина результирующей строки в символах в 2 раза меньше массива + #0
                                // SetLenght  сам выделит память для len/2 символов + #0
  len := len-1;                 // длина самого массива на 1 байт меньше

  asm
    push    ebx             // EBX сохранять ОБЯЗАТЕЛЬНО, процедура НИКОГДА не должна портить EBX унутре себя

    mov     bl,[xByte]      // раскодирующий байт -> bl

    mov     eax, [Result]   // в самом Result лежит указатель на указатель на адрес рез. строки, 2 косвенности
    mov     edx, [eax]      // и теперь в EDX - адрес начала выходной строки

    mov     eax, [AValues]  // EAX - начало закодированного массива

    mov     ecx, [len]      // длина закодированного массива

@loop:
    mov     bh, [eax]       // берем первый символ
    xor     bh, 0AAH
    xor     bh, bl
    rol     bh, 3           // раскодируем его в обратной последовательности

    mov     [edx],bh        // запоминаем
    rol     bl,1            // вращаем раскодирующий байт

    inc     edx
    inc     eax
    loop    @loop           // цыкал, пока ECX не кончицца

    xor     eax,eax
    mov     word ptr [edx], ax // пхаем взад строке завершающий нуль (2 байта)

    pop     ebx
  end;                      // сопсно, это всё. END.

end;

В этом годе пИсано. 

Upd. Аптамуш, в любом ЯВУ, будь то Си, или Паскаль, нету логического сдвига.  Арифметический есть, а логического, сука, нету. Приходится извращацца. 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

абожаю матреть, как кот работает

тижало ему. 

Минусовщики, думаю, Теодоро, тебя не за@бало каждый мой пост минусовать?

TeodorNetto
TeodorNetto аватар
Offline
Зарегистрирован: 03.06.2021

Нет. Вы гавно-человек. 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Ну, бывает, чо...

Green
Offline
Зарегистрирован: 01.10.2015

TeodorNetto пишет:

Нет. Вы гавно-человек. 


А у меня такой же, токо чёрный.(

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

TeodorNetto пишет:

Нет. Вы гавно-человек. 

Да, ты прав, наерна, даже Командир сказал, что я бред пишу. Мошт, я даже исправлюся. Кагда-нить. 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Наданапицца, и слёзы ронять на толькаштовыданную робу. 

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

DetSimen пишет:

Наданапицца, и слёзы ронять на толькаштовыданную робу. 

Деда, как? Опять? Ты ж завизалл?!...

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Komandir пишет:

В озу стек может наехать на данные. С флешем то никаких записей не производится !!!

То есть и 1 байт свободного места во флеше - это нормально?