Теперь в нашем онлайн-магазине доступна уникальная книга «BEAM-робототехника. От азов до создания практических устройств», идеально подходящая как для кружков робототехники, так и для самообучения дома. Вы можете приобрести её по привлекательной цене в 699 рублей. Дополнительная информация о книге доступна на нашем сайте. Также в ассортименте нашего онлайн-магазина представлены готовые наборы для сборки роботов, с помощью которых ваш ребенок сможет легко собрать своего первого робота, следуя нашим подробным инструкциям. Перейти в магазин


[ Раскрыть online-чат / Закрыть ] · [ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Модератор форума: nightmare, Huntswarrior, Aleks_Crow  
Форум » Программирование микроконтроллеров AVR, PIC » Вопросы по програмированию » Вопрос по использованию портов
Вопрос по использованию портов
Отправлено 15.10.2012 - 21:441
Участник
14 сообщений
Мужчина
Дело такое, мне лень читать литературу да и особо не знаю какую нужно... Научился управлять портами, делать бегущие светодиоды на порте С микроконтроллера ATmega8
Хочу задействовать все выводы какие можно и сделать рисунки из светодиодов с помощью прерываний.
Вопрос такой, порты PB3 по PB5 нужны для прошивки, тоесть их нельзя использовать, а как их не трогать чтобы управлять как выходами с PB0 по PB2 и с PB6 по PB7
Программирую в CodeVisionAVR в ней можно управлять отдельным портом, можно ли решить эту задачу такой записью?

DDRB=0b111; //первые 3 порта и последние 2 порта - выходы, т.к. 3 порта в середине настроены на прошивку
DDRB.6=1;
DDRB.7=1;
//дальше управлять ими

PORTB=0b1
deley_ms(50)
PORTB=0b10
deley_ms(50)
PORTB=0b100
deley_ms(50)
PORTB=0b000
PORTB.6=1
deley_ms(50)
PORTB.6=0
PORTB.7=1
deley_ms(50)
PORTB.7=0

На сколько знаю через точку можно задать отдельный порт и присвоить ему значение не трогая остальные порты и это запись чисто кодвиженавская. Или можно записать так?

DDRB=0b11100011
Дальше управление ими...
Я просто боюсь того что если я задействую эти порты то потом не смогу пере прошить м.к. и эта программа останется в памяти на вечно х)


Профиль Личное сообщение Дом. страница icq Skype
0
Отправлено 15.10.2012 - 21:522
Администраторы
3417 сообщений
Мужчина
Quote (ShiNi)
через точку можно задать отдельный порт и присвоить ему значение не трогая остальные порты и это запись чисто кодвиженавская.

- верно.

Надо смотреть в сторону "кубов" 4х4х4. 8х8х8 и смотреть в коде как там реализовано все. Ведь при ограниченном количестве портов, светодиодов там огромное множество wink Если nightmare зайдет, подскажет. Я давно в CvAVR не юзал мк... Но это реально - то что ты хочешь


Только дурак нуждается в порядке-гений господствует над хаосом...
Онлайн ЧАТ по робототехнике ! Заходи и общайся без регистрации =)
Профиль Личное сообщение Дом. страница icq Skype
34
Отправлено 15.10.2012 - 21:533
Администраторы
3417 сообщений
Мужчина
Глянь статью http://laserium.narod.ru/stx1.html


Только дурак нуждается в порядке-гений господствует над хаосом...
Онлайн ЧАТ по робототехнике ! Заходи и общайся без регистрации =)
Профиль Личное сообщение Дом. страница icq Skype
34
Отправлено 15.10.2012 - 22:224
Модераторы
211 сообщений
Мужчина
Да, такая запись валидна(правильна) PORTB.6=1; Это расшифровывается как 6 бит порта В установка в лог.1. В данном случае запись через точку означает индивидуальное задание нужного бита порта В. Если записать так PORTB.7=0 , то это установка 7 бит порта B в лог.0. Но сама программа, что-то не закончена, поэтому привожу такой вариант:

Code
#include <mega8.h>
#include <delay.h>
#define dl 50 /* директива заменит dl на значение 50 */
void main(void)
{
DDRB=0b111;
DDRB.6=1;
DDRB.7=1;
while(1) /* бесконечный цикл */
{
PORTB=0b1;
delay_ms(dl);
PORTB=0b10;
delay_ms(dl);
PORTB=0b100;
delay_ms(dl);
PORTB=0b000;;
PORTB.6=1;
delay_ms(dl);
PORTB.6=0;
PORTB.7=1;
delay_ms(dl);
PORTB.7=0;
};
}
если изменять переменную dl, то будет меняться скорость перемещения огня.


Исправил опечатки в коде /nightmare/


Профиль Личное сообщение Дом. страница icq Skype
50
Отправлено 15.10.2012 - 22:585
Начальная группа
1798 сообщений
Мужчина
К портам для программирования можно подключиться, лишь бы токоограничительные резисторы не были слишком малы и "держали" на этих выводах всегда логический ноль. Можно светодиоды подключить к этим выводам через транзисторные ключи с резистором в базе килоом на 10 и работать будет. В одном устройстве так электромагнитная пищалка подключена к MISO, в итоге при перепрошивке она проигрывает забавные мелодии, причем с разными программаторами разные мелодии.


Профиль Личное сообщение Дом. страница icq Skype
38
Отправлено 15.10.2012 - 23:166
Участник
14 сообщений
Мужчина
Я ввёл только отрывок программы, а сейчас другая проблема с прерыванием, вроде всё правильно, но при компиляции выдаёт ошибку... Сейчас кину программу

Добавлено (15.10.2012, 23:16)
---------------------------------------------
//Обработка прерываний через порты int1 int2
#include <mega8.h>
#include <delay.h>

//Прерывание ______________________________________________________________________________________________________________________________

interrupt(2) void ExtInt0(void); // Обработка прерываний на рорте Int0 (порт PD2, Вывод 4)
{
PORTC=0b1; delay_ms(200);
PORTC=0b10; delay_ms(200);

}

interrupt(3) void ExtInt1(void); // Обработка прерываний на рорте Int1 (порт PD3, Вывод 5)
{
PORTC=0b100000; delay_ms(200);
PORTC=0b010000; delay_ms(200);

}

//Настройка портов и регистров _____________________________________________________________________________________________________________

void main(void)
{

DDRC=0b1111111; //Все порты С сконфигурированы как выходы

DDRD=0b11110011; //Вне порты кроме PD2 и PD3 выходы (2 и 3 это прерывания)

delay_ms(10); // задержка нужна для зарядки антидребезгого конденсатора для правельной работы

GICR=0b11000000; /* Регистр eneral Interrupt Control Register разрешает внешнее прерывание
10 000000 - по выводу int1
01 000000 - по выводу int0
11 000000 - по всем выводам */

MCUCR=0b00001111; /* Регистр Micro Controller Unit Control Registr настраиваетпрерывания на срабатывание:

int1 int0
0000 10 10 - по спадающему фронту сигнала на выводе
0000 11 11 - по нарастающему фронту
0000 00 00 - по низкому уровню сигнала
0000 01 01 - по любому игменению уровня сигнала */

#asm("sei") // или SREG=(1<<7); Status Register разрешает общее прерывание

//Основная программа _____________________________________________________________________________________________________________________
while(1)
{
PORTC=0b1; delay_ms(50);
PORTC=0b10; delay_ms(50);
PORTC=0b100; delay_ms(50);
PORTC=0b1000; delay_ms(50);
PORTC=0b10000; delay_ms(50);
PORTC=0b0100000;delay_ms(50);
PORTC=0b10000; delay_ms(50);
PORTC=0b1000; delay_ms(50);
PORTC=0b100; delay_ms(50);
PORTC=0b10; delay_ms(50);
PORTC=0b1; delay_ms(50);

}
}
Error: C:\cvavreval\Проекты\Обработка прерываний\Обработка прерываний.c(7): '[' expected, but '(' found


Профиль Личное сообщение Дом. страница icq Skype
0
Отправлено 15.10.2012 - 23:187
Участник
97 сообщений
Мужчина
а какую ошибку выдает?


Профиль Личное сообщение Дом. страница icq Skype
2
Отправлено 15.10.2012 - 23:198
Участник
14 сообщений
Мужчина
ниже написал

Добавлено (15.10.2012, 23:19)
---------------------------------------------
Вот ещё раз Error: C:\cvavreval\Проекты\Обработка прерываний\Обработка прерываний.c(7): '[' expected, but '(' found



Профиль Личное сообщение Дом. страница icq Skype
0
Отправлено 15.10.2012 - 23:249
Участник
97 сообщений
Мужчина
а разве порты 0 и 1 можно использовать? это же связь через USB


Профиль Личное сообщение Дом. страница icq Skype
2
Отправлено 15.10.2012 - 23:3010
Участник
14 сообщений
Мужчина
USB? Я программирую через LTP порт, задействованы порты для прошивки PB3, PB4, PB5, PC6 (выводы 1,17,18,19) А вот порты PD2 и PD3 это INT0 и INT1(выводы 4,5)

Добавлено (15.10.2012, 23:30)
---------------------------------------------
Не пойму что не хватает для компиляции



Профиль Личное сообщение Дом. страница icq Skype
0
Администраторы
3417 сообщений
Мужчина
Quote (ShiNi)
Error: C:\cvavreval\Проекты\Обработка прерываний\Обработка прерываний.c(7): '[' expected, but '(' found

- ребятки, учите ка английский чтобы понимать )) Без этого никуда )

Тут говорится - символ скобки [ отсутствует, но скобка ( найдена.


Только дурак нуждается в порядке-гений господствует над хаосом...
Онлайн ЧАТ по робототехнике ! Заходи и общайся без регистрации =)
Профиль Личное сообщение Дом. страница icq Skype
34
Администраторы
3417 сообщений
Мужчина
избегайте путей с русскими названиями...


Только дурак нуждается в порядке-гений господствует над хаосом...
Онлайн ЧАТ по робототехнике ! Заходи и общайся без регистрации =)
Профиль Личное сообщение Дом. страница icq Skype
34
Отправлено 15.10.2012 - 23:3613
Участник
14 сообщений
Мужчина
Да, это признаю, английский у меня сильно хромает) Так куда эту скобку поставить то нужно?))


Профиль Личное сообщение Дом. страница icq Skype
0
Администраторы
3417 сообщений
Мужчина
Если в компиляторе нажать на сроку ошибки - обычно показывается место де именно, или там же рядом указывается строка с ошибкой


Только дурак нуждается в порядке-гений господствует над хаосом...
Онлайн ЧАТ по робототехнике ! Заходи и общайся без регистрации =)
Профиль Личное сообщение Дом. страница icq Skype
34
Администраторы
3417 сообщений
Мужчина
Quote (ShiNi)
____________________________________________________________________________________________________________________________

перед этой "тире" стоит // ??


Только дурак нуждается в порядке-гений господствует над хаосом...
Онлайн ЧАТ по робототехнике ! Заходи и общайся без регистрации =)
Профиль Личное сообщение Дом. страница icq Skype
34
Форум » Программирование микроконтроллеров AVR, PIC » Вопросы по програмированию » Вопрос по использованию портов
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Поиск: