admin

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

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

Michael_M    1

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

А вобще - вы написали код который в случайном порядке зажигает на 1 секунду какой либо из портов....

Даю наводку

А что если вы случайные числа примените не к выбору порта а к времени свечения от 1 до 2 секунд например?

;)

Спасибо!

Старался пока по заданию выполнить, в дальнейшем с набором опыта буду импровизировать :)

Конечно же в ближайшее время выложу более компактный код.

Еще раз спасибо Вам!

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


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

Быстрый заказ печатных плат

Полный цикл производства PCB по низким ценам!

  • x
    мм
Заказать Получить купон на $5.00
kobzar    131

Готов 4 урок и практика к нему!

Господа - а что так тихо по домашнему заданию? У всех получилось? Не пренебрегайте... Я ведь специально стараюсь подобрать задачу на самостоятельную работу :)

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


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

Вот моя домашка.

http://youtu.be/KlAb2iIz6sM

#define F_CPU 8000000
#include <avr/io.h>
#include <util/delay.h>
#include <stdlib.h>
char array[10]={

0b11000000, 0b11111001,
0b10100100, 0b10110000,
0b10011001, 0b10010010,
0b10000010, 0b11111000,
0b10000000, 0b10010000 }; //масив от 0 до 9
void options_port()
{
DDRB=0xff;
PORTB=0Xff;
DDRC=0xff;
PORTC=0xff;
}
int main(void)
{
options_port();
int i=0;
int a=0;
int b=0;
int c=0;
while(1){
 a=rand() % 10;
 b=rand() % 10;
 c=rand() % 10;
   while(i<200){


  PORTC=0b11111110;
  PORTB=array[a];
  _delay_ms(1);

  PORTC=0b11111101;
  PORTB=array[b];
  _delay_ms(1);

  PORTC=0b11111011;
  PORTB=array[c];
  _delay_ms(1);

  i++;
 }
 i=0;

}
}


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


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

А у меня проблемка, не хочет работать даже пример из видео. такое ощущение после установки "PORTB = 0xFF;" что то происходит и дальше дебаг не идет.

Вот код: http://gyazo.com/cfd7ddffeb91b045e6936b6e261a93a3

А вот что я вижу когда делаю "Step Over" на "PORTB = 0xFF;": http://gyazo.com/aa706403e1ac2d49bfe8a9b7060fadda

Если же закоментировать delay то выполение переходит на "PORTB = 0x00;", если потом снова нажать на "Step Over" то выполение остается на "PORTB = 0x00;", те. не переходит на while: http://gyazo.com/71b6c936f27861ae7c359882ff11e22d

Может я что то не сконфигурил? HELP Please :)

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


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

init вроде как зарезервированная С

переназоваите функцию типа init_ports

И на счет делеев - таки да ! если надо дебаг - коментите строки с делеями! А то оно выбрасывает в бибилиотеку делея!

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


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

переназвал все равно зависает на "PORTB = 0x00;" =(

И еще пару вопросов по теории:

Зачем нужны ограничивающие резисторы? и почему именно 220 Ом?

Если написать:

while(1)
{
	PORTB = 0xFF;//PORT_ON;
//_delay_ms(1000);

PORTB = 0x00;//PORT_OFF;
//_delay_ms(1000);

PORTB = 0xFF;//PORT_ON;
}

то дебаг скачет со 2-ого PORTB на 3-ий PORTB. почему на 1-ый не идет не знаю???

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

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


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

"Зачем нужны ограничивающие резисторы?" - чтобы ограничить ток. Почитайте в даташите допустимый ток порта и по закону Ома посчитайте какой ток будет идти при данном сопротивлении. Также у светодиода есть рабочий ток. Вот насчет светодиодов http://cxem.net/beginner/beginner54.php

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


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

По поводу непонятного поведения дебага грешу на последнюю студию beta 6.2. Тк. в протеусе код отлично работает. Буду переустанавливать на стабильную. =)

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


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

У меня вторая и нет глюков. Весь код покажите я у себя запущу проверим

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


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

Все правильно!

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

Добавьте еще одну запись - любую и увидите результат! Либо же из цыкла вынесите для дебага - тогда тоже пройдут все шаги !

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


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

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

не совсем понял. Смотрите если нету след. степа но есть цикл, то он должен возвращатся на 1-ую инструкцию.

В качестве примера можете расскоментировать "PORTB = 0xFF" тогда он будет бегать по 2-ой и 3-ей инструкции а на 1-ую не заходить

Т.е.:

while(1)
{
	PORTB = 0xFF;// вот тут он не будет останавливаться почему-то

	PORTB = 0x00;//PORT_OFF; // тут будет начало цикла, те при прогонке эта почему то будет 1-ая инструкция

	PORTB = 0xFF;//тут будет конец цикла, последний степ. после чего он должен будет перейти на 1-ую, а не на 2-ую
}

Изменено пользователем admin
CODE для чего тэг?

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


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

попробуйте изменить цикл в мейн функции на

do
{
  PORTB = 0xFF;// вот тут он не будет останавливаться почему-то
PORTB = 0x00;//PORT_OFF; // тут будет начало цикла, те при прогонке эта почему то будет 1-ая инструкция
}
while(1);

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

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


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

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

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


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

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

#, ; ,{}, include, main, void и так далее: что они означают и что в какой последовательности делать?

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


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

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

#, ; ,{}, include, main, void и так далее: что они означают и что в какой последовательности делать?

http://yandex.ru/yan...&clid=9582&lr=5

ИМХО, перечитывать и пересказывать это всё нет никакого смысла. Это основы языка, а не особенности микроконтроллеров, про которые нужно рассказывать в уроках.

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


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

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

Чуть позже будет добавлен видеоурок с практикой и домашнее задание

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


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

Туда же добавлен пятый видеоурок (практика и домашнее задание).

Ждем ваших решений для оценки.

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


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

post-20311-0-91714200-1396804797.gif

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

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

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


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

Соглашусь с Goodefine. Даже с точки зрения портативных устройств, тратить на опрос кнопки около 2мА - не лучшее решение..

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


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

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

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

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

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

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

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

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

Загрузка...

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

    • Автор: Atreides
      Добрый день. Мне требуется реализовать программный юарт на атмеге16. Он нужен для того, чтобы принятые по нему данные отправить на аппаратный юарт. В интернете нашел примеры кода, но понять его мне трудно. Прошу вас словами в общих чертах объяснить принцип реализации программного юарта. Буду рад примерам, которые, на ваш взгляд, являются наиболее простыми и понятными. Заранее спасибо.
    • Автор: Igor Kuznietsov
      Здравствуйте.
      Поставил Atmel Studio 7 на ноут (windows 10 64).
      В отладке при пошаговом выполнении команды в
      регистр не записывается значение. В память данных (data IRAM memory 1 (проверял все 4...)) тоже ничего не записывает.
      Но компилируется. 
      Поэтому перешел на AVR Studio 4.
      Хочется разобраться с Atmel Studio 7.
      Помогите разобраться. 
      Вот код, который я пытался дебагить:
      .include "m16def.inc" .DSEG .org $100 var3: .byte 3 var2: .byte 2 var1: .byte 1 .CSEG lds R16, $10 sts var3, R16 NOP NOP NOP  
    • Автор: iiwanc
      Здравствуйте!
      Интересует такой вопрос...
      Имеется мат. плата ноутбука Petronas-D-15E. Дабы исключить неработающий видео чип, перевел на UMA, убрав резистор.
      Если все исправно, то может ли в данном случае работать внешний монитор, подключенный к разъему VGA? Должно ли выводиться изображение?
      Буду благодарен помощи.
    • Автор: karomag
      Добрый день.
      Экспериментирую с подключение 7-сегментного индикатора к мк stm32. Индикатор с общим катодом. Соответственно для вывода цифры необходимо на анод каждого сегмента подать 1, а на общий катод 0. И тут я не могу понять какие токи будут через порты. Теоретически, пины МК подключенные через резистор 300 Ом к аноду (напряжение МК 3.3 В) то ток будет 4 мА, тогда на общем катоде должно быть 7 * 4 = 28 мА (цифра 8, т.е. горят все сегменты). Т.е. это небольшое, но превышение макс тока на ногу 20 мА. И надо общий вывод подключать через транзисторный ключ.
      Взял мультиметр. Результаты замера: ток каждого сегмента ~2.5 мА, ток общего катода 5 мА. Вот тут я подумал о школе Хогвардс))) Как все таки рассчитывается все таки ток на общем выводе? 
    • Автор: art_budka
      Ищу подрядчика для разработки проекта робота-рисовальщика. Есть бюджет, ТЗ. 
      Устройство представляет собой манипулятор передвигающий головку в плоскости XY в пределах жесткой рамы на которой установлены двигатели и направляющие перемещения. Головка представляет собой блок, отвечающий за передвижение закрепленного в фиксаторе объекта-пера по оси Z на расстояние до 20 мм. Фиксатор на элементе подъёма головки должен обеспечить жесткое закрепление предметов массой 10 - 80 грамм - кистей, шариковых ручек, карандашей и маркеров диаметром от 5 до 20 мм.
      Решение необходимо для обеспечения точных, многократно повторяющихся перемещений “пера” над плоской поверхностью. Для формирования движений в устройстве должна быть реализована электромеханическая схема, подключенная посредством USB-интерфейса к персональному компьютеру для отправки команд на манипулятор и получения обратной связи от контроллера манипулятора. 
      ТЗ, смета и бюджет через art_budka@rambler.ru