Перейти к содержанию

Как отсчитать такты на си ATTINY2313?


Рекомендуемые сообщения

10 часов назад, tifaso сказал:

Только вот не совсем понятно для чего там чтение порта PORTB.

Вообще-то там PINB.

Но ты прав - этот код вообще не нужен, Я заменил код в сообщении со схемой.

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Тему надо назвать " Укрощение ассемблера" .

Начать можно с "малого" . Взять  "любимый" 595-й регистр и учиться включать нужные выхода . Можно в симуляторе , можно в натуре .

Через n-e  время придет мастерство по кодированию последовательных данных .   

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Я щас сам учу  этот " Асемблёр неприкаяный "  

Реально дана в книге схема и пример программы . 

Ну и ...  все ввел правильно . программа  рабоатет . но верх ногами . :rake:

Прохожу пошагово  в симулировании . все оки , а на деле  верх ногами ...

Смотрю схему , светодиод  подключен на плюс .

1249530282_AVR_048.jpg.81b53142c72cab84cf0aa2b29e686400.jpg

Но стоило  переподключить светодиод на минус  и картина маслом ... 

687984922_.jpg.3d8310d252c6550808f53df822e1f311.jpg

Зачем автор книги и издатели запутали учебный  пример  Фик его знает . 

Даже  снова призадумался  как правильно светодиод в 

МК на корпус  должен или на  питание  подлючатся  ??? 

Если  прямой логике  нуль выключен , единчка  ключен , то  на корпус . 

А если инверсно , то  нуль включен, единичка  выключен , на плюс . 

Так все может быть и в этом  пульте - приемнике ... 

Говорю автору топика  Симулятор пошагово . она сама  проматерь поиска  где  фигня зарыта ...

Изменено пользователем Нэцкэ

У меня есть мысль , и я её думаю ...  

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, Нэцкэ сказал:

Говорю автору топика  Симулятор пошагово . она сама  проматерь поиска  где  фигня зарыта ...

Все там работает от порта В, а от порта D не хочет.

Безымянный6.png

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, Нэцкэ сказал:

МК на корпус  должен или на  питание  подлючатся  ???

В современных МК можно и так и так. Главное не превысить максимальный ток микросхемы по линиям V+ и Gnd. Однако может печатная плата накладывать ограничения. Допустим "земля" в виде полигона, а "+" неширокая дорожка для питания собственно МК. Тогда предпочтительнее управлять нагрузкой "нулем", т. е. подключать СД анодом к "+", катодом к выходу МК (разумеется с резистором в этой цепи).

"Староверы", типа меня :), могут предпочесть именно такое подключение, анод СД к плюсу. Корни этой традиции в далеком прошлом, когда цифровая логика (ТТЛ) имела несимметричную выходную характеристику, "нолик" был гораздо мощнее "единички".

С уважением, Владимир

Ссылка на комментарий
Поделиться на другие сайты

Спойлер
#include <xc.h>
#include <avr/interrupt.h>
//
#define FCPU    8000000        // частота CPU
#define Ftsop    38000        // частота приемника, в зависимости от того какой приемник стоит
#define off        FCPU/Ftsop    // частота ШИМ - 8МГц/38000=210
#define on        off*2/3        // 148 - высокий уровень ШИМ
//
uint16_t keyDown, n;        // какие клавиши нажаты
uint8_t k, i;
uint8_t count;                // количество бит на передачу
uint8_t stop;
uint8_t key, keyout;        // код клавиши
uint8_t busy, mybusy;        // занят передачей

EMPTY_INTERRUPT(PCINT0_vect);
{
         //Кнопка 5
    if (~PINB & (1<<5))
    {
        //01011010
        //Кодируется и передаётся пакет данных
        
    }
}
EMPTY_INTERRUPT(PCINT1_vect);
{
        //Кнопка 9
    if (~PIND & (1<<3))
    {
        //10010110
        //Кодируется и передаётся пакет данных
        
    }
}
EMPTY_INTERRUPT(PCINT2_vect);
{
        //Кнопка 14
    if (~PINC & (1<<0))
    {
        //11010010
        //Кодируется и передаётся пакет данных
        
    }
}

int main(void)
{
    DDRB = 0b00000010;
    PORTB = 0b11110000;
    //
    DDRD = 0b00000000;
    PORTD = 0b11111111;
    //
    DDRC = 0b00000000;
    PORTC = 0b00001111;
    //
    PCMSK2 = 0b11111111;    // включить прерывание PCINT
    PCMSK1 = 0b00001111;    // включить прерывание PCINT
    PCMSK0 = 0b11110000;    // включить прерывание PCINT
    PCICR = 0b00000111;
    ACSR = 0b10000000;        // выключает аналог. компаратор - никогда не использовать (экономия энергии)
    // настроить спячку
    //MCUCR = 0b00110000;    // включить спящий режим и установить режим отключения питания
    //PRR = 0b00000111;        // ;отключает другие вещи: цитаты, USI, USART (экономия энергии)
    //
    i = 0;
    busy = 0;
    OCR1A = off;
    ICR1 = off;
    TCCR1A = (1 << COM1A1) | (1 << COM1A0) | (1 << WGM11) | (0 << WGM10);
    TCCR1B = (1 << WGM13) | (1 << WGM12) | (0 << CS12) | (0 << CS11) |(1 << CS10); // включить таймер без делителя
    //
    while(1)
    {
        di();
            mybusy = busy;
        ei();
        //
        if (!i)
        {
            i = 1;
            for(keyDown = 0; keyDown < 10000; keyDown++);
        }
        keyDown = ~((PIND << 8) | (PINB & 0xF0) | (PINC & 0x0F));
        if (keyDown)
        {    // нажата хотя бы одна кнопка
            n = keyDown;
            for (key = 0; n; n &= (n - 1), key++);    // сколько кнопок нажато
            if (key == 1)
            {    // нажата только одна кнопка
                for(key = 0; keyDown; keyDown >>= 1, key++ );    // вычислить код клавиши
                if (!mybusy)
                {    // передача закончена
                    busy = 1;                                // занят передачей
                    keyout = (key << 4) | (~key & 0x0F);    // код на передачу
                    k = 1;
                    count = 8;                    // количество бит на передачу
                    OCR1A = on;                    // разрешить несущую
                    TIFR1 = (1 << TOV1);        // сбросить флаг прерывания
                    TIMSK1 |= (1 << TOV1);        // включить прерывание
                }
            }
        }
        else
        {
            if (!mybusy)
            {
                i = 0;
                SMCR = SLEEP_MODE_PWR_DOWN;    //    отправить в спячку;
            }
        }
    }
}
//
void __interrupt(TIMER1_OVF_vect_num) TIMER1_OVF_vect(void)
{
    k++;
    //
    if (k == 16)
    {    // передали несущую
        OCR1A = off;        // выключить несущую
        if (keyout & 0x80)    // какой бит на передачу
        stop = 80;        // бит равен 1
        else
        stop = 32;        // бит равен 0
        if (!count)
        stop = 255;        // пауза между передачами
        keyout <<= 1;        // на следующий бит
    }
    else
    {
        if (k == stop)
        {    // завершена передача бита
            if (count)
            {    // есть еще биты на передачу
                OCR1A = on;    // включить несущую
                count--;    // уменьшить количество бит
                k = 0;
            }
            else
            {    // все биты переданы
                TIMSK1 &= (~(1 << TOV1));    // выключить прерывание
                busy = 0;                    // передача окончена
            }
        }
    }
}
//

@donec , @bulat943 всё же объясните каким образом из кнопки данные передавать ведь здесь же таймером должно отсчитать интервалы и на светодиод отправить в это же время. Здесь весь этот механизм уже построен это понятно, но как засылаются данные на передачу при нажатии кнопки? В какую то переменную нужно заслать их или что сделать то? Дайте хоть пример на пару кнопок чтоб понять как это работает. А то на этом полуфабрикате не разобраться с этим.

15 часов назад, bulat943 сказал:

Вас не смущает,что там приемник подключен к INT0,настроенный на прерывание по ниспадающему фронту

Понятно так и сделаю.

Ссылка на комментарий
Поделиться на другие сайты

3 часа назад, ДядяВован сказал:

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

Да кстати управление нагрузкой выгодней делать по минусу питания. Потому как бывают случаи когда в нагрузке с одного микроконтроллера разные напряжения и в таком случае как раз таки удобно управлять минусом питания.

Ссылка на комментарий
Поделиться на другие сайты

2 часа назад, tifaso сказал:

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

О чем это речь ??? 

Изменено пользователем ДядяВован

С уважением, Владимир

Ссылка на комментарий
Поделиться на другие сайты

5 часов назад, tifaso сказал:

здесь же таймером должно отсчитать интервалы и на светодиод отправить в это же время.

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

Светодиод включается ШИМ-ом

 

Что вы мечетесь-то пульт,то приемник,я вам еще раз советую-сделайте в первую очередь нормальный приемник с тем пультом,который исправно работает,когда окончательно доделаете приемник тогда и займетесь передатчиком,как горится-"за двумя зайцами..."

Ваш вопрос давно бы решился,но не в этом разделе,и не бесплатно

Ссылка на комментарий
Поделиться на другие сайты

@ДядяВован Да чего тут непонятного. Я говорю о том что если у микроконтроллера в нагрузке которой мы управляем из под него разные напряжения допустим одна линия пять вольт другая девять третья вообще двенадцать. То тут конечно лучше плюсы прямо на нагрузку, а управлять минусом питания нагрузок. Ну если нужно большими нагрузками управлять, тогда можно и через транзистор и возможно даже реле если нагрузка слишком мощная.

Ссылка на комментарий
Поделиться на другие сайты

1 минуту назад, tifaso сказал:

Я говорю о том что если у микроконтроллера в нагрузке которой мы управляем из под него разные напряжения допустим одна линия пять вольт другая девять третья вообще двенадцать.

поток сознательного бессознательного.
ЗЫ очередная тема ниАчем на 100500 постов.

Ссылка на комментарий
Поделиться на другие сайты

4 минуты назад, bulat943 сказал:

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

Светодиод включается ШИМ-ом

Это понятно. Здесь вопросов и нет. Вопрос заключается в том как из кнопок передать в таймер и светодиод данные для передачи? Я же уже и код свой подписал чтоб уже как бы обратить внимание именно на то что мне нужно. Всё равно не доходит.

8 минут назад, bulat943 сказал:

Что вы мечетесь-то пульт,то приемник,я вам еще раз советую-сделайте в первую очередь нормальный приемник

Да это понятно что приёмник нужен, но пульт тоже нужен. Об этом тоже не стоит забывать. Работать с прошивками я всё равно буду параллельно. Но а проверять конечно сперва на том пульте что у меня был до этого. Нужно вообще правильно все интервалы времени выставить. Чтобы соответствовало осциллограмме как в пульте так и приёмнике. 

avr_do2_prub.png.202b005bc9c73103e192b5891c608814.png

Потому как @bulat943 мне сам сказал что TCNT0 только 0...255 и тут нужно как то решать вопрос с настройкой временных промежутков потому как он определяется именно в TCNT0.

Ссылка на комментарий
Поделиться на другие сайты

3 минуты назад, tifaso сказал:

Работать с прошивками я всё равно буду параллельно.

Так вы нихрена не разберетесь,все в голове смешается,таймер штука непростая!

4 минуты назад, tifaso сказал:

Потому как @bulat943 мне сам сказал что TCNT0 только 0...255

То есть я сам такое выдумал... ну-ну,жги дальше!

Ссылка на комментарий
Поделиться на другие сайты

1 минуту назад, bulat943 сказал:

То есть я сам такое выдумал

Да я не говорю что ты выдумал. Я говорю о том что ты мне сказал. Ведь так было. И тут вот тоже нужно что то делать с этими интервалами времени.

Ссылка на комментарий
Поделиться на другие сайты

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

От тебя требуется записать прошивку в МК, и все, этому ты поверишь?

Ссылка на комментарий
Поделиться на другие сайты

18 минут назад, donec сказал:

От тебя требуется записать прошивку в МК, и все

Тогда вопросы следующие:

Где хранятся данные на передачу?

Как понять какая кнопка нажата?

И где заложена  сама эта осциллограмма данных?

Изменено пользователем tifaso
Ссылка на комментарий
Поделиться на другие сайты

2 минуты назад, donec сказал:

В тексте программы это все есть

Я так и не нашёл. Видимо не достаточно подробно расписано. Либо чего то не могу понять.

Ссылка на комментарий
Поделиться на другие сайты

1 минуту назад, donec сказал:

Если читать через слово, тогда конечно не найдёшь, там нет ни одного лишнего слова

Прочитал то я полностью и не на один раз, но нужной информации не нашёл. Значит не достаточно прокомментировано.

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, tifaso сказал:

одна линия пять вольт другая девять третья вообще двенадцать. То тут конечно лучше плюсы прямо на нагрузку, а управлять минусом питания нагрузок.

Смотри не пожги МК !!! Нагрузки, питаемые источником отличным от питания МК, подключать напрямую к выводам микроконтроллера недопустимо !!! :wall:

Я уже рекомендовал, понимаю, что это бесполезно, но попробую еще.
@tifaso нужно собирать конструкции только по готовым схемам. :wall: Не нужно ничего изобретать! Для создания собственных схем необходимо иметь хоть какой-нибудь "фундамент". Нельзя просто сказать себе "хочу" и создать принципиальную схему. Нет, ну наверное можно, но она будет 100% неработоспособна.
Тоже самое и с программированием. Бери готовые прошивки и пользуйся. Невозможно, вот просто так, нисхрена, взять и начать писать программы для МК. Ну, опять таки можно, но работать они не будут.

С уважением, Владимир

Ссылка на комментарий
Поделиться на другие сайты

3 часа назад, tifaso сказал:

Значит не достаточно прокомментировано.

Не могу понять, как ты собираешься писать программы, если в готовой программе на 60 строк с комментариями и с пониманием, что должно делать устройство, ты не можешь разобраться, что там вообще происходит?

Это риторический вопрос, можно не отвечать.

Ссылка на комментарий
Поделиться на другие сайты

Дадим человеку шанс, разберись, что здесь написано, если и после этого ступор, тогда ой.

Счетчик 1 работает в 14 режиме FastPWM:

1 . Какое назначение в этом случае регистров OCR1A и ICR1, какие значения в них записаны перед включением прерывания;

2. Как в программе настроено изменение вывода OC1A и когда происходит его изменение при разных значениях OCR1A;

3. Как в программе происходит отключение изменения вывода OC1A;

4. "Привяжи" к "осциллограмме светодиода" изменение вывода OC1A;

5. В какой момент времени ("осциллограммы светодиода") срабатывает прерывание TIMER1_OVF;

6. Какую роль в подпрограмме прерывания выполняет переменная k;

5. и т.д. и т.п.

 

Ссылка на комментарий
Поделиться на другие сайты

@tifaso  Я полез в танк , там  тише... :wall:

Я вот только начал учится и то понял , даже  простеькая  програмка ,

просто зажечь светодиодик при включении,

И то требует пошагово пройти в симуляторе ,

чтобы понять что к чему и исправить ошибки 

Пока  пошагово  не изучишь всю программу

и пока осциллографом не поглядишь в 

гланды конторолеру , 

То увы  ...  Ответов не найдёшь .... :rake:

( Да если программа  откоментирована ,то даже  осциллографа не понадобится :P )

Изменено пользователем Нэцкэ

У меня есть мысль , и я её думаю ...  

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...