Jump to content

Вопросы от начинающих по МК


Recommended Posts

Кстати, по поводу Proteus.
Тут неделю назад была моя тема по поводу некорректной работы прерывания по таймеру Т1 на совпадение.
С таблицами и "всеми делами".
Так вот хочу сказать, что по измерениям в Proteus у меня время между прерываниями чётко одна секунда.
Это я по поводу моего г****кода.

1 - Обменник - 48.png

Link to comment
Share on other sites

6 минут назад, Юрий_Нд сказал:

Это я по поводу моего г****кода.

я правильно понял, ты целый таймер убил на получение тика в 1секунду,
а в майне вгоняешь МК в ступор делаями  по 200мс,
я ничего не упустил? Вот такой :i-m_so_happy:код...

Link to comment
Share on other sites

2 часа назад, Юрий_Нд сказал:

.. да хоть unsigned long int a=(1<<32);

а вот unsigned long int a=(1<<33);

это уже "фигвам называется"

(1<<32) будет тот же самый фигвам, как и (1<<33).

Мудрость приходит вместе с импотенцией...

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

Link to comment
Share on other sites

Решения Infineon для беспроводного электроинструмента с бесщеточными электродвигателями

Современные строительные электроинструменты достигают высокой производительности и эргономичности благодаря использованию мощных бесщеточных электродвигателей и литий-ионных аккумуляторов. Для реализации сложных алгоритмов питания таких двигателей и управления ими компания Infineon предлагает микросхему интеллектуального драйвера управления трехфазным бесщеточным двигателем 6EDL7141, MOSFET BSC007N04LS6 из семейства OptiMOS 6, а также отладочную плату EVAL6EDL7141TRAP1SH.

Подробнее

Приглашаем на вебинар «Необычное в обычном. Сравнительный анализ современных решений Recom» (27.01.2022)

Приглашаем 27/01/2022 всех желающих посетить вебинар, посвященный двум наиболее растущим сегментам интегрированных источников питания – AC/DC малой мощности (1-20Вт) и сегменту решений PoL без изоляции. На вебинаре рассмотрим проблему выбора AC/DC в бюджетном сегменте и концепцию тестирования ускоренного старения, проведем сравнительный анализ подходов к интеграции AC/DC модулей. Сделаем обзор решений концепции POL с доисторических времен до современных технологий и средств для разработки и тестирования.

Подробнее

5 часов назад, Юрий_Нд сказал:

Интернетом не пользовался, книжки умные по этому вопросe не читал

Это напрасно.

4 часа назад, Юрий_Нд сказал:

Я просто хочу сказать, что всё это числа. И смотреть на это всё нужно, как на числа.

Цифровая электроника в любом случае сводится к числам. Только числа эти не в статике существуют - с ними производятся различные операции. И операции эти имеют определённые формы записи, различные в разных языках программирования. Поэтому и int x - это тоже всего лишь число, а вовсе не кило картошки и не пушистый котёнок. Только толку от такого заявления без соответствующих уточнений - ноль. Тоже, что характерно, число.

 

Link to comment
Share on other sites

Как улучшить параметры преобразователей с помощью карбид-кремниевых модулей WolfPACK

Необходим быстродействующий преобразователь питания средней мощности с высоким КПД? Он должен быть компактным и недорогим? Решение – карбид-кремниевые модули средней мощности WolfPACK производства Wolfspeed. В статье рассмотрены основные особенности модулей WolfPACK и показано, что переход на эту универсальную и масштабируемую платформу позволяет не только быстро разработать новые устройства, но и без значительных затрат времени и средств модернизировать уже существующие схемы на традиционной элементной базе.

Подробнее

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

я ничего не упустил?

Да ты упустил вообще всё...
На данный момент у меня реализовано:

Глобальные переменные:
int z=0;                           //Общий таймер секунд.
int zsum=0;                   //Текущий таймер секунд.
int noel=0;                     //Номер элемента.
float volt[4];                  //Вольты.
float ampr[4];               //Амперы.
float chas[4];                //Время, часы.
float amch[4];               //Ампер-часы.
float vach[4];     
  
Функции:       
0.   100% int readADC(unsigned int ch) функция первичного опроса АЦП (10 бит, 6 каналов от мультиплексора);
1.   100% void siem(void)              процедура съёма показаний АЦП (формирование массива);
2.   20 % void rasschet(void)        процедура расчёта и обработки первичных показаний АЦП (только болванка, без математики);
3.1. 90 % void start (void)             процедура предварительных настроек (кнопки, светодиоды,таймер, прерывания);
3.2. 80 % void presets()                 процедура предварительных настроек (АЦП, дисплей 5110);
      3.1. + 3.2. = 3.                           объединить функции
4.   60 % void pokaz(void)             процедура вывода на экран дисплея, после функции 2;
5.   80 % ISR (TIMER1_COMPA_vect)      процедура прерываний по совпадению таймера Т1 (каждые 5 секунд, в последствии каждые 5 минут функция 1 АЦП, 2 расчёт);
5.   90 % int main(void)                  Главная функция (кнопка старт, кнопка следующий элемент (их будет 3), вывод показаний на дисплей каждые 5 секунд, мигалка).

 

Edited by Юрий_Нд
Link to comment
Share on other sites

LI/PR2 – надежные и недорогие ИП от MORNSUN на DIN-рейку

Компания Mornsun выпустила три серии источников питания с креплением на DIN-рейку в форм-факторе Home Automation на популярные значения выходной мощности 30, 60 и 100 Вт (серии LI30-20/PR2, LI60-20/PR2, LI100-20/PR2). Эти источники питания относятся ко второму поколению продукции (R2) и характеризуются высокой надежностью и хорошей стоимостью.

Подробнее

17 часов назад, dasZebra сказал:

Вам вам стоит бы прежде всего  себя, вообще неависимо от рода Вашей деятельности. 

Что?

Слушайте, после фразы "но чтобы кодить - нет" с вами всё понятно.
Очередной теоретик-фантазер.
Дальнейшую дискуссию считаю вредной, ибо тратит мое время

Link to comment
Share on other sites

8 часов назад, Юрий_Нд сказал:

А ещё, согласно этой логике, можно записать:
PORTD |= (1<<6);
можно:
PORTD |= (4<<4);
а можно и 
PORTD |= 64;

... и все это будут "однохренственные " операции.

Как-бы да, но -  зачем?
Вы понимаете смысл выражения (1<<x) применительно к работе с портами?
Это означает обращение к конкретному биту.
x
говорит нам в каком разряде будет эта единичка. Во всех остальных разрядах - нули.

Вот простенький пример - бегущий огонь.

while(1)
{
	for(uint8_t c=0; c<8; c++)
	{
		PORTD = (1<<c);
		//тут можно задержку поставить
	}
}

К вам, Юрий, есть претензии, но вы хотя-бы стараетесь разобраться.
Один минус - не хотите (по неведомой мне причине) идти правильным путем, а исследуете всё методом тыка.

И нет, я вам не предлагал помощь с кодом. Благотворительностью не занимаюсь.

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

еще хуже когда фигвам выглядит так:

А что там не так?
Вроде a тут 32 битная переменная? И единичку можно сдвинуть на 18 разрядов.

Или я, пардон, что-то не так понял?

1 час назад, Юрий_Нд сказал:

Глобальные переменные:

float volt[4];                  //Вольты.
float ampr[4];               //Амперы.
float chas[4];                //Время, часы.
float amch[4];               //Ампер-часы.
float vach[4];     

А зачем тут вообще float?
Вы в курсе, что это весьма неточный формат представления числа?
Если вам нужны десятичные дроби - используйте фиксированную точку.
Например, вам нужны сотые доли вольта. Берете переменную такого типа в который влезет максимальное напряжение умноженное на 100.
Т.е., у вас максимальное напряжение 20 вольт, а разрешение вам интересно 0,01 вольт. тогда вам нужно взять uint16_t, так как в него влезает число 2000.
Эта фиксированная точка потом просто вами учитывается в расчетах и всё.

Link to comment
Share on other sites

22 минуты назад, IMXO сказал:

внимательно посмотри значение а 

Ок. 32-х битная переменная a, по адресу 0x20 имеет значение 1 (0x00000001).
По коду мы видим a = (1<<18); , т.е. переменной a присваивают значение 0x00040000.

если красненький треугольник означает текущий шаг в симуляции, то непонятно, почему эта переменная содержит число 1, хотя должно содержать то же, что и b.
Видимо, это особенности компилятора и он не использовал неявное приведение типов?

Я в таких случаях делаю так: a = ((uint32_t)1)<<18; 
Такое написание отнимает пару секунд времени, зато не приходится потом искать такого рода ошибки.

Подскажите пожалуйста, у вашего компилятора включена совместимость с C99? Возможно из-за этого неявное приведение типов не работает?

Link to comment
Share on other sites

12 минут назад, LiVit сказал:

у вашего компилятора включена совместимость с C99?

в ХС8 вообще нет этой опции , он включен по дефолту,
но суть в том что здесь нет неявного приведения типа
константа 1 вполне укладывается uint16_t , стандарт не нарушается

мало того если не включить оптимизацию на скорость кода
при явном указании размерности операнд b эта сцуко
вместо установки 18бита  ,  записывает в переменную b=1
и потом честно делает сдвиг на бит влево в цикле 18 раз :D

Link to comment
Share on other sites

23 минуты назад, LiVit сказал:

Как-бы да, но -  зачем?

Только с одной целью. Я хотел чтобы Вы увидели, что я в этой теме действительно разобрался, а не плаваю...

39 минут назад, LiVit сказал:

Вы понимаете смысл выражения (1<<x) применительно к работе с портами?

Обидеть хотите?
Ну что ж, как Вам будет угодно.
Я полностью Вашим услугам/желаниям.
Единственная просьба, от дискуссий не уходите.

43 минуты назад, LiVit сказал:

К вам, Юрий, есть претензии, но вы хотя-бы стараетесь разобраться.

... то есть, я уже НЕ агрессивный невежда. Спасибо и на этом.

47 минут назад, LiVit сказал:

Благотворительностью не занимаюсь.

С детства не люблю подачек. Ваших благотворительных консультаций здесь, более чем достаточно. И за это Вам Большое спасибо.
В отличии от многих здесь присутствующих, каждое Ваше сообщение несёт полезную информацию, а не разного рода ухмылки, которые похожи на банальный флуд. Но это совершенно не моё дело. Пусть продолжают, если им некуда девать времени...

54 минуты назад, LiVit сказал:

Один минус - не хотите (по неведомой мне причине) идти правильным путем, а исследуете всё методом тыка.

... Я думал, что это очевидно, но если Вы не понимаете, постараюсь пояснить. Как Вы думаете какова цена знаниям полученным собственным умом и знаниям прочитанным в книжке?
Нужно продолжать? 
Далее. В начале этого сообщения я Вам более чем красноречиво показал, что в этой теме я прекрасно разобрался. Чем мне поможет с Бьерн Страуструп, если не ошибаюсь 2007 года издания, который сейчас где-то пылится у меня на полке? В коричневом твёрдом переплёте, книга большого формата. Приходилось держать в руках подобный экземпляр?

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

Берете переменную такого типа в который влезет максимальное напряжение умноженное на 100.

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

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

весьма неточный формат представления числа?

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

Link to comment
Share on other sites

42 минуты назад, IMXO сказал:

мало того если не включить оптимизацию на скорость кода
при явном указании размерности операнд b эта сцуко
вместо установки 18бита  ,  записывает в переменную b=1
и потом честно делает сдвиг на бит влево в цикле 18 раз :D

Как страшно жыть.....:blink:

Мне легче - я для ARM-ов пишу, в KEIL

Link to comment
Share on other sites

13 минут назад, LiVit сказал:

ARM-ов пишу, в KEIL

там тоже  для (uint32_t) в CMSIS указан явный тип

Скрытый текст

 


/* SCB Interrupt Control State Register Definitions */
#define SCB_ICSR_NMIPENDSET_Pos            31                                             /*!< SCB ICSR: NMIPENDSET Position */
#define SCB_ICSR_NMIPENDSET_Msk            (1ul << SCB_ICSR_NMIPENDSET_Pos)               /*!< SCB ICSR: NMIPENDSET Mask */

 

 

 

Link to comment
Share on other sites

30 минут назад, Юрий_Нд сказал:

... то есть, я уже НЕ агрессивный невежда. Спасибо и на этом.

... Я думал, что это очевидно, но если Вы не понимаете, постараюсь пояснить. Как Вы думаете какова цена знаниям полученным собственным умом и знаниям прочитанным в книжке?

Чем мне поможет с Бьерн Страуструп, если не ошибаюсь 2007 года издания, который сейчас где-то пылится у меня на полке? 

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

1 - уточню - пассивно-агрессивный )))). А невежда от того, что не используете соответствующую литературу.

2 - цена - потраченное впустую время. Оно невосполнимо. Время можно тратить для закрепления знаний, но не для того, чтобы на своем опыте их получить. Вы же (надеюсь) не выводите формулу Ома каждый раз?

3 - ничем. Труп страуса про плюсы писал, если я не ошибаюсь. А Керниган и Ричи  - про Си. Был тут один гражданин на форуме. Он без затей попросил консультаций по Си, но за денежку. Я ему помогал, потом он пропал с горизонта. Недавно опять списывались. Так он понял, для чего ему Керниган и Ричи. Книжка бесплатная, там разжевано всё что нужно знать по Си. Если что-то нужно про двоичное счисление - тоже можно найти. Это просто.

4 - пишите, чем могу - помогу. Если время будет. А можно поступить проще - послушать умных людей на ютубе. Ссылка раз, ссылка два - это вообще по Си. А конкретно по float нужно у Хирьянова поискать. Возможно это было в цикле лекций по питону.

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

Link to comment
Share on other sites

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

float?
Вы в курсе, что это весьма неточный формат представления числа?

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

... можно количество значащих цифр.

Link to comment
Share on other sites

1 hour ago, Юрий_Нд said:

Только...  не нужно никаких выкладок из книжек.

"451 градус по Фаренгейту» - вы пришли к нам оттуда? За что вы так не доверяете книгам? Вы их ненавидите?

Edited by _abk_
Link to comment
Share on other sites

6 часов назад, Юрий_Нд сказал:

float chas[4];                //Время, часы.

это с каких пор время (целый тип данных) превратился в плавающую точку?

3 часа назад, Юрий_Нд сказал:

Насколько неточный?
Можете сказать самую большую относительную погрешность?

мантисса в флоте имеет 24 бита.

целые числа не более (2^24 - 1) ошибку не имеют.

а числа от 2^24 и выше сохраняются с погрешностью.

и самая большая погрешность - у самого большого числа типа флот.

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

Мудрость приходит вместе с импотенцией...

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

Link to comment
Share on other sites

Уважаемый Старичок,
Я Вам очень благодарен за такую подробную выкладку. 
Насколько я вижу, относительная погрешность измеряется меньше чем даже в тысячных долях в процента.
Поэтому, для инженерных расчётов можно считать, что погрешности вообще нет.
Ещё раз Вам Большое спасибо за помощь,
С уважением ___________ Юрий.
п.с. ... да, и по-моему Вы немножко недоглядели. В наименовании моей переменной последняя буква S, как доллар, а не R, как Вы подумали.

Link to comment
Share on other sites

я не совсем слепой. я видел, что название - час, в латинской транскрипции.

Мудрость приходит вместе с импотенцией...

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

Link to comment
Share on other sites

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

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

А зачем тут вообще float?

очень хочется послушать мнение анжинера

Link to comment
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.

  • Сообщения

    • Это не кастрюльчик. Скорее всего какойто ковшик, был с ручкой, выпускает какойто уральский завод, диаметр 125 мм, глубина 100мм., толщина 2мм, лишнее отрезал. Покупал в магазине посуды, купил сразу 3 шт. по цене 240 р.за  1 шт. На алике из тонкого железа такого размера стоит в 3 разы дороже. Хорошо полируется до зеркала. Спасибо Уралу!
    • статор с якорями - это какое-то новенькое "изобретение" в теории электромашин ...
    • Напряжение конечно можно еще поднять. запас по W2 еще большой. W1 каким образом выставить.
    • Мощность у меня не на пределе, но из вашего пояснения не увидел привязку к 100кГц...  На датагоровском по питанию вообще плёнка 0,22мкФ возле микросхемы, и норм, хотя там мощность выжимали максимальную.
    • А нельзя в начале другую сторону запаять а сторону с микросхемой потом?
    • ну все - этот БП достал всех - отключить R68 совсем R67 поставите 20 кОм(R79 4,99 кОм) - напряжение линии 12 В должно стабилизироваться   - на 5 В может стать 5,7 В и более - нагрузите 1-2 А Затестим ? проверить 3,3 В линию можете выложит фото БП со снятой крышкой, чтоб увидеть сколько там места свободного есть  
    • Речь о сигнале на выходе, по амплитуде близком к напряжению питания. Если не гонять усилитель на мощности, близкой к максимальной, оставляя 2-3 вольта от амплитуды выходного сигнала до питания, то небольшие просадки питания в пиках потребления из-за недостаточного шунтирования ёмкостью практически не будут сказываться на характеристиках усилителя. Будет работать коэффициент подавления пульсаций по питанию ОУ (Power Supply Rejection Ratio ), который у LT1210 не менее 60 дБ. С другой стороны, никто вам не мешает поставить LowESR шунтирующие конденсаторы около ножек микросхемы. В полосе пропускания, питание и "земля" должны быть замкнуты по переменному току. Чем лучше замкнуты, тем лучше. Шунтирующие конденсаторы, как ни покажется странным, точно так же входят в цепь прохождения сигнала, как разделительные. И точно так же влияют на звук.
  • Similar Content

    • By Super Akk
      Здравствуйте, я работаю в Proteus и у меня возникла ошибка Simulation is not running in real time due to excessive CPU load
      Подскажите пожалуйста как её исправить
      Код прошивки:
      #include <lm3s300.h> // Graphic Display functions #include <glcd.h> // Font used for displaying text // on the graphic display #include <font5x7.h> // Declare your global variables here void main(void) { unsigned char odin[] = { 0x08, 0x00, 0x08, 0x00, #ifndef _GLCD_DATA_BYTEY_ 0x00, 0x10, 0x18, 0x14, 0x10, 0x10, 0x7C, 0x00, #else 0x00, 0x00, 0x48, 0x44, 0x7E, 0x40, 0x40, 0x00, #endif }; // Declare your local variables here // Variable used to store graphic display // controller initialization data GLCDINIT_t glcd_init_data; // Crystal Oscillator division factor: 1 #pragma optsize- CLKPR=(1<<CLKPCE); CLKPR=(0<<CLKPCE) | (0<<CLKPS3) | (0<<CLKPS2) | (0<<CLKPS1) | (0<<CLKPS0); #ifdef _OPTIMIZE_SIZE_ #pragma optsize+ #endif // Input/Output Ports initialization // Port B initialization // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0); // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0); // Port C initialization // Function: Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In DDRC=(0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0); // State: Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T PORTC=(0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0); // Port D initialization // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0); // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0); // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: Timer 0 Stopped // Mode: Normal top=0xFF // OC0A output: Disconnected // OC0B output: Disconnected TCCR0A=(0<<COM0A1) | (0<<COM0A0) | (0<<COM0B1) | (0<<COM0B0) | (0<<WGM01) | (0<<WGM00); TCCR0B=(0<<WGM02) | (0<<CS02) | (0<<CS01) | (0<<CS00); TCNT0=0x00; OCR0A=0x00; OCR0B=0x00; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: Timer1 Stopped // Mode: Normal top=0xFFFF // OC1A output: Disconnected // OC1B output: Disconnected // Noise Canceler: Off // Input Capture on Falling Edge // Timer1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10); TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (0<<CS11) | (0<<CS10); TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; // Timer/Counter 2 initialization // Clock source: System Clock // Clock value: Timer2 Stopped // Mode: Normal top=0xFF // OC2A output: Disconnected // OC2B output: Disconnected ASSR=(0<<EXCLK) | (0<<AS2); TCCR2A=(0<<COM2A1) | (0<<COM2A0) | (0<<COM2B1) | (0<<COM2B0) | (0<<WGM21) | (0<<WGM20); TCCR2B=(0<<WGM22) | (0<<CS22) | (0<<CS21) | (0<<CS20); TCNT2=0x00; OCR2A=0x00; OCR2B=0x00; // Timer/Counter 0 Interrupt(s) initialization TIMSK0=(0<<OCIE0B) | (0<<OCIE0A) | (0<<TOIE0); // Timer/Counter 1 Interrupt(s) initialization TIMSK1=(0<<ICIE1) | (0<<OCIE1B) | (0<<OCIE1A) | (0<<TOIE1); // Timer/Counter 2 Interrupt(s) initialization TIMSK2=(0<<OCIE2B) | (0<<OCIE2A) | (0<<TOIE2); // External Interrupt(s) initialization // INT0: Off // INT1: Off // Interrupt on any change on pins PCINT0-7: Off // Interrupt on any change on pins PCINT8-14: Off // Interrupt on any change on pins PCINT16-23: Off EICRA=(0<<ISC11) | (0<<ISC10) | (0<<ISC01) | (0<<ISC00); EIMSK=(0<<INT1) | (0<<INT0); PCICR=(0<<PCIE2) | (0<<PCIE1) | (0<<PCIE0); // USART initialization // USART disabled UCSR0B=(0<<RXCIE0) | (0<<TXCIE0) | (0<<UDRIE0) | (0<<RXEN0) | (0<<TXEN0) | (0<<UCSZ02) | (0<<RXB80) | (0<<TXB80); // Analog Comparator initialization // Analog Comparator: Off // The Analog Comparator's positive input is // connected to the AIN0 pin // The Analog Comparator's negative input is // connected to the AIN1 pin ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0); ADCSRB=(0<<ACME); // Digital input buffer on AIN0: On // Digital input buffer on AIN1: On DIDR1=(0<<AIN0D) | (0<<AIN1D); // ADC initialization // ADC disabled ADCSRA=(0<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (0<<ADPS1) | (0<<ADPS0); // SPI initialization // SPI disabled SPCR=(0<<SPIE) | (0<<SPE) | (0<<DORD) | (0<<MSTR) | (0<<CPOL) | (0<<CPHA) | (0<<SPR1) | (0<<SPR0); // TWI initialization // TWI disabled TWCR=(0<<TWEA) | (0<<TWSTA) | (0<<TWSTO) | (0<<TWEN) | (0<<TWIE); // Graphic Display Controller initialization // The KS0108 connections are specified in the // Project|Configure|C Compiler|Libraries|Graphic Display menu: // DB0 - PORTB Bit 0 // DB1 - PORTB Bit 1 // DB2 - PORTB Bit 2 // DB3 - PORTB Bit 3 // DB4 - PORTB Bit 4 // DB5 - PORTB Bit 5 // DB6 - PORTB Bit 6 // DB7 - PORTB Bit 7 // E - PORTC Bit 0 // RD /WR - PORTC Bit 1 // RS - PORTC Bit 2 // /RST - PORTC Bit 3 // /CS1 - PORTC Bit 4 // /CS2 - PORTC Bit 5 // Specify the current font for displaying text glcd_init_data.font=font5x7; // No function is used for reading // image data from external memory glcd_init_data.readxmem=NULL; // No function is used for writing // image data to external memory glcd_init_data.writexmem=NULL; glcd_init(&glcd_init_data); glcd_putimage(0,0, odin, GLCD_PUTCOPY); while (1) { // Place your code here } } Схема прикреплена ниже в архиве

      Схема.rar
    • By Н_Д_А
      Всем привет).
      Может, кому-то эта статья  сэкономит много времени и нервов. 
      Недавно  по работе встретился с интересной задачкой.
      Нужно было передать на железку по порту RS485 информацию для проверки работоспособности последней.
      Так как не всегда имеется в ремонте вся система, то для начала нужно было посмотреть, на заведомо исправной системе, что же там между ними (железками) передаётся.
      Логический анализатор показал что девайсы общаются по не совсем стандартному, а по  9ти битному протоколу (USART 9n1).
      А это усложняло задачу, так-так известные мне терминальные программы его не поддерживают.  И без бубна не обойтись))).
      Начались поиски решения.
      Через некоторое время стало понятно, что AVR позволяет это делать и даже в даташите подробно это описывает.
      Дело за малым. Реализация задуманного))). 
      Все регистры выставлены по документу………..Для Atmega8a.
      void USART_Init( unsigned int speed) //Инициализация модуля USART { UBRRH = (unsigned char)(speed>>8); UBRRL = (unsigned char)speed; UCSRB=(1<<RXEN)|( 1<<TXEN); //Включаем прием и передачу по USART UCSRB |= (1<<RXCIE); //Разрешаем прерывание при передаче UCSRA |= (1<<U2X); //удвоение скорости UCSRC = (1<<URSEL)|(1<<USBS)|(1<<UCSZ1)|(1<<UCSZ0); UCSRB |= (1<<UCSZ2); // Включаем 9bit режим // Обращаемся именно к регистру UCSRC (URSEL=1) // ассинхронный режим (UMSEL=0), без контроля четности (UPM1=0 и UPM0=0) // 1 стоп-бит (USBS=0), 8-бит посылка (UCSZ1=1 и UCSZ0=1) // если (UCSZ1=1 и UCSZ0=1 и UCSZ2=1) 9bit mode. // UCSRC |= (1<<UPM1);//четность } По даташиту передача 9го бита происходит установкой или сбросом TXB8. 
      То есть, установили бит, передаётся 1 в старшем 9ом разряде, сбросили – 0. 
      void USART_Transmit( unsigned int data ) // функция передачи 9ти бит из даташита. { /* Wait for empty transmit buffer */ while ( !( UCSRA & (1<<UDRE)) ) ; /* Copy ninth bit to TXB8 */ UCSRB &= ~(1<<TXB8); if ( data & 0x0100 ) //не понял, что они хотели этим сделать. UCSRB |= (1<<TXB8); /* Put data into buffer, sends the data */ UDR = data; } И вот незадача, числа размером до 1 байт передаются без проблем, а числа больше 0xFF (255) нет).
      А устройство передаёт числа до 510.
      Предлагаю решение.  Может и не самое лучшее, но вполне работоспособное.
      int main(void) { USART_Init (103);//9600 //------------------------------------------------------------------------------------ while(1) { for (i=0; i<22; i++) { code_simbol = simbol[i]; //символ из массива //-------------------------------------отправка в UART-------------------------------- if (code_simbol > 255) { pr=1; // флаг передачи символа больше 0xff (255 десятичное) } else { pr=0; // флаг передачи символа меньше 0xff } USART_Transmit(code_simbol,pr);//собственно сама функция отаравки } } } А теперь и сама функция передачи .
      void USART_Transmit( unsigned char data, uint8_t prisnak ) //Функция отправки по USART { while ( !(UCSRA & (1<<UDRE)) ); //Ожидание опустошения буфера приема if (prisnak==1) { UCSRB |= (1<<TXB8); //устанавливаем для передачи еденицы в старшем разряде } else { UCSRB &= ~(1<<TXB8); //сбрасываем старший разряд } /* Put data into buffer, sends the data */ UDR = data; //Начало передачи данных asm volatile ("nop"); Соответственно если число для предачи мньше 256 мы передаём его при нулевом 9ом бите.
      Ну а если больше то 9й бит выставляем в единицу.
      А вот и результат.

       
    • By eyuw
      Б/у контролеры холодильной установки: 1) Eliwell 974LX  на atmega16A-PU , 3 реле - характеристики на фото.Цена 15 бел.руб. 2) Eliwell IDPlus974  на atmega32A-PU, 3 реле - характеристики на фото.Цена 18 бел.руб. Корпуса без передней панели закрывающей цифровой индикатор, без датчиков температуры! г.Толочин, Витебская обл. Отправка по Беларуси наложенным платежом. Покупатель также оплачивает почтовые расходы. 


    • By АртемК
      Уже весь интернет прошерстить, помогите найти, или где он приставует, чтоб его достать нужен очень срочно, или может у кого то есть куплю!

    • By Эдик Ибрагимов
      Использовать микроконтроллер семейства 8951
       
×
×
  • Create New...