admin

Видеокурс По Avr-Микроконтроллерам Для Начинающих

2 344 сообщения в этой теме

kobzar    130

post-20311-0-91714200-1396804797.gif

Нет, ну нельзя же так кнопку опрашивать (зачем подтяжку включать-то тогда? да и не только это...), даже в образовательных целях. Ну и почему Си-шный оператор поразрядного сдвига назван "регистровым", тоже не совсем понятно.

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

Изменено пользователем kobraz

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Геннадий    1 017

Надо приучать новичков к порядку с измальства. А если им трудно отличить 0 от 1, то эти уроки им еще рановаты. Иначе они так и будут в дальнейшем "опрашивать".

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
kobzar    130

Логика в ваших словах есть - но если я начну еще и основы схемотехники в уроки всовывать - то они растянуться навеки - а коментов сколько бууудееетттт :)

Ну и господа - не забывайте что ето не схема рабочего устройства а специально для тренировки сэмулированная цепь. По сему током потребления мы жертвуем во имя науки! Вот в конце курса будем собирать ампервольтметр - там уже будет данный момент актуальным :)

Лутче давайте критику по самим уокам - чего не хватает в начитке - что я обьясняю не понятно? НО !!! Непонятно для новичка совсем зеленого! ? а не для вас :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Goodefine    96

Логика в ваших словах есть - но если я начну еще и основы схемотехники в уроки всовывать - то они растянуться навеки - а коментов сколько бууудееетттт :)

Я представляю сколько новичек долбаться будет, если вместо 220 Ом включит резистор 5-10k (шоб не коротило, так сказать), да подтяжку. И без основ схемотехники и понимания что есть 0 а что 1 в МК... ох весело будет, без основ то )))

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
kobzar    130

Еще раз. Данная схема не имеет ничего общего с реальным устройством. А поскольку задачей урока есть работа с кодом то такими параметрами как потребление можно пренебречь. Нам главное что бы принцип был ясен и виден. Как я сказал выше учитывать ньюансы мы будем на устройстве которое будем собирать в живую. Но если вас уж так тревожит данный момент выложите картинку правильного включения. Пусть будет в обсуждении.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Goodefine    96

Да причем тут потребление. Речь о том, что если включить 220 Ом и подтяжку то работать будет. Неважно сколько оно будет потреблять. Но если включить номинал, соизмеримый с подтяжкой, то могут быть глюки, когда напряжение на ножке окажется на уровне лог. 1 конкретного МК при отжатой кнопке. Можно и так, но подтяжка то зачем включена? Выключаем ее и ставим хоть 10 килоом, и ток маленький - и все работает. Новичку нюансы неведомы, так зачем раскладывать потенциальные грабли?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
admin    2 326

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

Т.о. вместе можно сделать качественный видеокурс, т.к. одному человеку все же трудно знать все тонкости МК и схемотехники, даже если он пишет книги по ним.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
timon_ad    2
PORTB = 0xFF;// вот тут он не будет останавливаться почему-то

Оптимизацию проверьте, должна быть выключена

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

Господа из вопросов кот. еще возникли почему у меня порт PC6 светится серым и отказывается мигать? программка примитивная:

//Atmega8A
#define F_CPU 8000000
#include <avr/io.h>
#include <util/delay.h>
#define PORT_OUT 0xFF;
#define PORT_OFF 0x00;
#define PORT_ON 0xFF;
void preset()
{
// PORT B
DDRB = PORT_OUT;
PORTB = PORT_OFF;

DDRC = PORT_OUT;
PORTC = PORT_OFF;

DDRD = PORT_OUT;
PORTD = PORT_OFF;
}
int main(void)
{
preset();
while(1)
{
PORTB = PORT_OFF;
PORTC = PORT_OFF;
PORTD = PORT_OFF;
_delay_ms(1000);

PORTB = PORT_ON;
PORTC = PORT_ON;
PORTD = PORT_ON;
_delay_ms(1000);
}
}

Изменено пользователем timon_ad

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
timon_ad    2

я не думаю что это проблема дефайнов, насколько помню из курса по С: они подменяются на этапе компиляции. Но я попробовал и такое же поведение. При запуске загорается порт синим (ноль), а затем горит серым. Может дело в том что я даю на порт 0xFF а там 7 ног вместо 8-ми?

Изменено пользователем timon_ad

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
timon_ad    2

Да установлены: http://gyazo.com/9fb...6016bae42231ea3

вот код: https://www.dropbox....yfb/Lesson2.zip

Нашел в чем причина: http://gyazo.com/e24...1985e965c6a3c2e

Коротко: RSTDISBL надо поставить в Programmed в настройках микроконтроллера!

Вывод: смотреть сначала в даташит. :umnik2:

Изменено пользователем timon_ad

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Vasili    0

Вопрос по интерфейсу программы Атмел студия 6 ссылка на видео-вопрос http://youtu.be/sfFs5tgu-r0 :help:

.Хотелось больше узнать настройки самой Атм студии. :thank_you2:

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Goodefine    96
А где посмотреть? обыскал всю студию галочки по поводу оптимизации не нашел.

Это не я тут специалист по студии. Смотреть надо в настройках командной строки компилятора, там не просто галочки, а ключи, причем несколько. Впрочем могут задаваться и галочками. В первом приближении это конфигурация Debug и Release.

Коротко: RSTDISBL надо поставить в Programmed в настройках микроконтроллера!

...

Вывод: смотреть сначала в даташит. :umnik2:

Смотрите внимательно. Фокус с рст получится один раз, потом либо параллельный программатор либо мусорка для МК.

я не думаю что это проблема дефайнов

Тем не менее в дефайнах явная проблема - точка с запятой, которой там не должно быть

ЗЫ. Наверное в курсе надо сказать, что литературу читать тоже стоит, а то народ уже рст отключает смело )))

Изменено пользователем Goodefine

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
timon_ad    2

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

Заранее спасибо! =)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
rv3sbq    3

Тема очень хорошая Кобразу респект! Vasili у меня были подобные проблеммы один в один.Основная проблема обявлять частоту процессора надо не окне написания кода,а в насторйках толчан, симболс F_CPU=1000000UL добавьте строчку и все заработает .У меня прога даже не могла зациклица при бесконечном цикле равном 1. Данная фишка по ходу только для 6 студии.И кстати про это никто не говорит, а это важно.По ходу у Кобраза тоже ошибка! Коробаз если можно чуть чуть обяснять в уроках про вещи которые мы не совсем знаем, например в первом уроке мигаем светодиодом и сразу же применяем функцию,а что ето такое для начинающего не совсем понятно вроде простая программа но уже навороченая.Может сначало основы а потом в бой писать проги.Да и вот посмотрел последний урок, опять важная тема циклы да еще и два их вайл и фор,а что это и главное какие значения в скобках можно навертеть?

Изменено пользователем rv3sbq

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Геннадий    1 017

Коротко: RSTDISBL надо поставить в Programmed в настройках микроконтроллера!

Только полностью отдав себе отчет в том, что дальнейшие эксперименты с этим МК будут прекращены, если вы не обладаете параллельным программатором.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
kobzar    130

Ребята - как всегда спасибо за отзывы!

Но по поводу функций и циклов - это уже не относиться к МК! Это основы языка Си! Чуток раньше в этой теме я даже давал ссылку на вводный курс!

Поймите правильно! Тем работы с МК очень обширная! И как я уже говорил ранее - если в нее добавить еще схемотехнику и начальные курсы по Си то это будет сантабарбара... в которой черт ногу сломает!

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

Так что такие вещи как вводный курс по Си - вам необходимо найти уже самостоятельно! Те моменты которые не стандартны например использование dtostr или rand() как в предыдущем уроке я подсказывал и буду подсказывать - но сильно расширять не могу! У меня и так уроки по пол часа и это я стараюсь сухо но понятно обьяснить основные моменты :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
timon_ad    2

Тема очень хорошая Кобразу респект! Vasili у меня были подобные проблеммы один в один.Основная проблема обявлять частоту процессора надо не окне написания кода,а в насторйках толчан, симболс F_CPU=1000000UL добавьте строчку и все заработает .У меня прога даже не могла зациклица при бесконечном цикле равном 1. Данная фишка по ходу только для 6 студии.

Вот у меня была такая же проблема была решилась с помощью симболс! Спасибо rv3sbq!

Коротко: RSTDISBL надо поставить в Programmed в настройках микроконтроллера!

Только полностью отдав себе отчет в том, что дальнейшие эксперименты с этим МК будут прекращены, если вы не обладаете параллельным программатором.

Спасибо за предостережение! новичокс, что скажешь... Хотел просто заставить мигать эту ножку тоже. Но на будущее буду иметь ввиду про RESET.

Изменено пользователем timon_ad

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
rv3sbq    3

В любом случае Ваши уроки полезны! Моё мнение с позиции новечка!вчера моргал светодиодом с помощью мультивибратора, а сегодня хочу с помощью мк и что такое СИ для меня проблема,а тут вроде для новечков и все просто в видео, но реальный новечек без знания СИ не сможет сделать домашку,а если сможет то ему мигание светиком не интересно и это уже не новечек! В моем случае так и происходит что вроде и читаешь и даже что то понимаешь как работает Цикл но применить и понять до конца не получается.По сути тем кто знает СИ, курс по изучению можно заканчивать на первом уроке,который обясняет что такое мк и что с ним делать.Поэтому считаю небольшие отступления в пользу пояснений по СИ все же необходимы.Лучше меньше уделять время в уроках лишним компиляциям и протеусу, а больше обяснять непосредственно по коду.Хороший урок 4 по операторам но он должен был быть чуть ли не первым.И я этот урок как раз считаю по СИ который вроде к мк отношения не имеет ,но тем не менее он есть этот урок номер 4.На счет схемотехники может быть и перебор так как мк изучает уже мало мальски радиолюбитель,и обяснять что такое светодиод и гасящий резистор конечно нет смысла.Поэтому для новечка является проблемой непосредственно написание кода и понимания его работы, как можно сократить или оптимизировать и вообще применять массивы функции циклы и.т.д.Кстати атмел студия 6 это правильно,а кто хочет ездить на запорожцах пусть ездит не надо нам их навязывать! Почитайте полезная инфа про настройку студии http://www.rukodelie-ds.ru/forum/viewtopic.php?f=13&t=620

Изменено пользователем rv3sbq

Поделиться сообщением


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

начинать не с Си (Паскаля, Бейсика, Питона и проч), а только со схемотехники! без понимания основ - дальше "ой, мамочки! откуда дым" дело не пойдёт

учил удаленно мужичка, который мне в отцы годится, вроде в электронике не ноль

делаю простую схему, пишу программу, даю ему - глючит, виснет, кнопка не работает- живёт своей жизнью!

перепроверяю у себя - нормалёк!

пишу: дай фото своей конструкции

а он и кнопку, и св.диоды БЕЗ резисторов подцепил - "а так же ярче!"

Благо PIC выдержал такие муки )))

так что, сперва основы схемотехники, а уж потом - алгоритмы и языки...

Изменено пользователем Александр Д.

Поделиться сообщением


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

Ваша публикация должна быть проверена модератором

Гость
Вы не авторизованы. Если у вас есть аккаунт, пожалуйста, войдите.
Ответить в тему...

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

  Разрешено не более 75 смайлов.

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

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

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

Загрузка...

  • Похожие публикации

    • Автор: Николай Зубий
      Как сделать  устройство, выводящие на индикатор время, прошедшее с момента последней перезагрузки контроллера?
    • Автор: forestdozor
      Здравствуйте!

      Мне нужно измерить длительность импульса. Для этого сначала применял внешнее прерывание, а теперь перешел на режим захвата таймера в Atmega 328.
      Однако сейчас происходит странное: Через определенное таймер просто останавливается. Гугл результатов не дает, ни у кого захват таймера 1 не останавливается.
      Подскажите пожалуйста, что делать?
      Среда разработки CodeVisionAVR v3.12. Сейчас попробовал версию 3.3, толку нет. Не работает. Код максимально упростил, но по прежнему толку ноль.
      Переполнение таймера 0 так же работает отлично, до тех пор, пока что-то не произойдет с прерыванием по захвату. Как только что-то произошло - мк останавливается...
      Может немножко подождать, и увеличить значение счетчика current_timp еще на пару значений... Совсем не знаю что делать.
       
       
      interrupt [TIM1_OVF] void timer1_ovf_isr(void)
      {
      TCNT1H = 0x00;
      TCNT1L = 0x00;
      }
      // Timer1 input capture interrupt service routine
      interrupt [TIM1_CAPT] void timer1_capt_isr(void)
      {
       
             TCNT1H = 0x00;
             TCNT1L = 0x00;           // Это уже уровень танцев с бубном "авось поможет" - не помогает.
         
              current_timp++;          // Все упрощено до максимума. Мне бы он хоть количество периодов для начала...
              
        //  }
      }
      // Прерывание по переполнению первого таймера
      interrupt [TIM0_OVF] void timer0_ovf_isr(void)
      {
      // Обнуление счетного регистра.
      TCNT0=0x00;

          
          counter ++;
          if (counter > 10)
          {
                  lcd_clear();
                  sprintf(buffer,"%d us", current_timp);
                  lcd_gotoxy(0,0);
                  lcd_puts(buffer);
                  counter = 0;
          }
          
          
      }

      // Главный цикл программы
      void main(void)
      {

      #pragma optsize-
      CLKPR=(1<<CLKPCE);
      CLKPR=(0<<CLKPCE) | (0<<CLKPS3) | (0<<CLKPS2) | (0<<CLKPS1) | (0<<CLKPS0);
      #ifdef _OPTIMIZE_SIZE_
      #pragma optsize+
      #endif

      // 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=Out Bit4=Out Bit3=Out Bit2=Out Bit1=Out Bit0=Out
      DDRC=(0<<DDC6) | (1<<DDC5) | (1<<DDC4) | (1<<DDC3) | (1<<DDC2) | (1<<DDC1) | (1<<DDC0);
      // State: Bit6=T Bit5=1 Bit4=1 Bit3=1 Bit2=1 Bit1=1 Bit0=1
      PORTC=(0<<PORTC6) | (1<<PORTC5) | (1<<PORTC4) | (1<<PORTC3) | (1<<PORTC2) | (1<<PORTC1) | (1<<PORTC0);
      // Port D initialization
      // Function: Bit7=Out Bit6=Out Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
      DDRD=(1<<DDD7) | (1<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0);
      // State: Bit7=1 Bit6=1 Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
      PORTD=(1<<PORTD7) | (1<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);
      // Делители таймера 0 рассчитаны таким образом , что его тактовая частота = 15,625 КГц. Расчет был на применение в схеме семисегментников, но с LCD индикатором будет информативнее.
      TCCR0A=(0<<COM0A1) | (0<<COM0A0) | (0<<COM0B1) | (0<<COM0B0) | (0<<WGM01) | (0<<WGM00);
      TCCR0B=(0<<WGM02) | (1<<CS02) | (0<<CS01) | (1<<CS00);
      TCNT0=0x00;
      OCR0A=0x00;
      OCR0B=0x00;
       
      // Настройка таймера 1
      TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10);
      TCCR1B=(1<<ICNC1) | (1<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (0<<CS11) | (1<<CS10);
      TCNT1H=0x00;
      TCNT1L=0x00;
      ICR1H=0x00;
      ICR1L=0x00;
      OCR1AH=0x00;
      OCR1AL=0x00;
      OCR1BH=0x00;
      OCR1BL=0x00;
      // Разрешение прерывания по переполнению таймера 0
      TIMSK0=(0<<OCIE0B) | (0<<OCIE0A) | (1<<TOIE0);
      // Timer/Counter 1 Interrupt(s) initialization
      TIMSK1=(1<<ICIE1) | (0<<OCIE1B) | (0<<OCIE1A) | (1<<TOIE1);
    • Автор: 55nlo
      Нужно написать программу "календарь" на АСМ
      Примерное ТЗ 
       
       
      1    5     по значению R0 (ввода)  в R20 вводим табличные значения        табл.1        
      1    6     по значению R0 (ввода)  в R21 вводим табличные значения        табл.1        
      1    7    NOP     (возможно доп. Команда)                 
      1    8    NOP     (возможно доп. Команда)           
      1    9    значение ОЗУ (адрес Rz) копируем в регистр R18(остаток)                
      1    10    R18(остат) прибавляем R24(лист) результат в R18(остат)                 
      1    11    провер. R18(остат) < 8, то п.12, нет то  R18(остат) -7, результат в R18(остат) и к п.12.                
      1    12    R 18(остат)  копируем в ОЗУ адрес Rz                
      1    13    адрес Rz увеличиваем на 1                
      1                        
      1    14    R19(стр.) увелич. на 1, проверяем Rстр =13.если не равно, п. 15. если  равно, то                 
      1             R19 стр. обнуляем, Rлиста увеличиваем на 1,             
      1            Rлиста если не =13, то к п. 9, если равно 13,             
      1            то  R17(листа) обнуляем и перех к п. 2.5(2-й участок, следующий)            
      1                        
      1    15    R18(ост.)+ 1 = в R18(ост.)                
      1    16    проверяем R18(ост) больше 10, если больше то -10, результат в R18(ост) и в п. 17 нет, то п. 17                
      1    17    значение ОЗУ (адрес Rz  текущий) копируем в R25сравн.                
      1    18    R25(сравн.) увелич на 1                
      1    19    R1(книги) установить значение "2"                
      1    20    NOP           (возможно доп. Команда)     
      1    21    NOP          (возможно доп. Команда)            
      1    22   R18(ост) =R20? если не равно ,то к 23, равно, то R сравн. обнуляем заносим 0 в ОЗУ и к п.13            
      1    23    R18(ост)=R21,если не равно, то к 24,    равно    то R сравн. обнуляем, заносим 0 в ОЗУ и к п.13            
      1    24    R25(сравн.) в ОЗУ (текущий) адрес Rz                
      1    25    R25(сравн.) более 20, то к п. 26. менее.то перех к п. 13                
      1    26    R учета =Rсравн.? да к п. 27 нет к п. 13                
      1    27    R7 обнуляем                
      1    28    R18(остат) копируем в Rморзе                 
      1    29    R7+ Rлиста в R7                
      1    30    проверяем R7  больше 12, если больше то -12, результат в R7 и к п. 31, нет к п. 31                
      1    31    R7  значение конвертируем через таблицу  в R7          табл.1м        
      1    32    Выполняем  прогу "М".                
      1    33    переходим к п.13             
       + ДВЕ ТАБЛИЦЫ ПО 40 СТРОК.   
    • Автор: voltex
      Всем привет! Подскажите, пожалуйста, как правильно считать данные с внешней eeprom по шине spi, в данном случае 25LC256.
      Написал код ссылаясь на даташит. Собрал схему в протеусе, подключил spi отладчик и вот что получил в итоге. Так же не могу проверить получается записать данные в память или нет. Весь код прикрепил.
       

      main.c