Форум по разработке и ремонту электронной техники Киевский форум радиолюбителей и электронщиков. Форумы по разработке и ремонту электронной техники
    Схемы электрические принципиальныеГлавная    ФорумФорум    ПоискПоиск по форуму    Личные сообщенияФайлообменник    Личные сообщенияРадиотехнический каталог   

Фотогалерея   <b>Профиль</b>Ваш профиль    Личные сообщенияЛичные сообщения    ГруппыГруппы   

FAQFAQ    РегистрацияРегистрация    ВходВход

Уважаемые посетители! Это старая версия форума. Новая версия находится по адресу: http://www.remexpert.com
Микроконтроллеры начинающим
На страницу Пред.  1, 2, 3, ... 12, 13, 14  След.
 
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Форум по разработке и ремонту электронной техники -> Микроконтроллеры, процессоры, ПЛИС...
 
Автор Сообщение
Alexx
Знатный посетитель (>20)
Знатный посетитель (>20)


Зарегистрирован: 25.09.2006
Сообщения: 49
Откуда: Украина, Киев

СообщениеДобавлено: 21 Ноя 2006, 11:03    Заголовок сообщения: Ответить с цитатой

tellurian писал(а):
Только там получается такая штука. Переключается один раз за весь цыкл. Не знаю в чем проблема Слезы


Забыли разрешить прерывания #asm("SEI")
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
AndryG
Модератор


Зарегистрирован: 24.07.2006
Сообщения: 411
Откуда: Helios-3

СообщениеДобавлено: 21 Ноя 2006, 11:31    Заголовок сообщения: Ответить с цитатой

Значится попорядку.
Инициализация переферии. Зачем нам прерывание по совпадению счетчика? Прерывание разрешено, а обработчика нет - это грубая ошибка! Прерывания перефирии выставили, а глобально прерывания не разрешили... перед while(1) необходимо #asm("sei") добавить.
Так работать будет.
Теперь мелочи, но из-за котрых можно в будущем нарваться:
Вы конфигурируете на выход все биты порта B, а используете только один... для любого конфигурирования должен быть повод, а не просто так - "за компанию"
Код:

  if (PORTB == 1) PORTB=0; else PORTB = 1;
 

Потенциальная опасность. Если Вы будете дальше наращивать проект и на порт B поставите кнопки, то можно получить глюк!
Такой записью вы постоянно записываете в биты 1-7 нули! А если там ноль не нужен?!
Возможен такой вариант:
Код:

  if (PORTB == 1)
    PORTB = PORTB & 0xFE;
  else PORTB = PORTB | 1;
 

Таким образом мы устанавливаем/сбрасываем только один бит... в данном случаем еще лучше ставить PORTB = PORTB ^ 1 -- будет переключение бита.
Инициализация счетчика:
верно сделали: писать сперва старший байт, а читать сперва младший... но CodeVision поймет и такую запись: TCNT1 = 0xB3B5.
И еще ...
не ставьте в таких программках задержки на 5 сек .... больше времени приходится ждать отладчика Радостный
и напоследок ... где комментарии?! Полезно комментировать хотя бы кусок инициализации... ведь не ясно, что включили, а что нет.
____
P.S.
Если куски кода небольшие - выкладывайте в посте.

_________________
AndryG
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
tellurian
Частый гость (>5)
Частый гость (>5)


Зарегистрирован: 15.11.2006
Сообщения: 15

СообщениеДобавлено: 21 Ноя 2006, 12:06    Заголовок сообщения: Ответить с цитатой

Замечания понятны, со своими ошибками разобрался Улыбка .
Вот что получилось в результате:

Код:
#include <90s2313.h>  //подключаем библиотеку работы с микроконтроллером

interrupt [TIM1_OVF] void timer1_ovf_isr(void) //описываем прерывание 
{
 TCNT1H = 0xb3; // задаем время для
 TCNT1L = 0xb5; // таймера/счетчика 1
// выполняемый код
 PORTB = PORTB ^ 1;// инвертируем последний бит порта
}             

void main(void) {
 DDRB  = 0x01; // определяем направление (выход)
 PORTB = 0x00; // загорается светодиод

 TCCR1A = 0x00;   TCCR1B = 0x05; // устанавливаем параметры счетчика
 TCNT1H = 0xb3;   TCNT1L = 0xb5; // устанавливаем временной интервал
 OCR1H  = 0x00;   OCR1L  = 0x00; // устанавливаем регистр совпадения
 
 TIMSK  = 0xB0;   // разрешаем прерывание от таймера/счетчика 1
 PORTB  = 0x01;   // светодиод гаснет
 #asm ("SEI")     // разрешаем прерывания
 while (1) { }    // запускаем бесконечный цыкл
} //main


Но вот у меня возник вопрос (просьба). Покажите вид окошка Scope в VMLab во время выполнения программы


Последний раз редактировалось: tellurian (22 Ноя 2006, 9:27), всего редактировалось 4 раз(а)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Alexx
Знатный посетитель (>20)
Знатный посетитель (>20)


Зарегистрирован: 25.09.2006
Сообщения: 49
Откуда: Украина, Киев

СообщениеДобавлено: 21 Ноя 2006, 12:22    Заголовок сообщения: Ответить с цитатой

tellurian писал(а):
Замечания понятны, со своими ошибками разобрался Улыбка .
Но вот у меня возник вопрос (просьба). Покажите вид окошка Scope в VMLab во время выполнения программы


прежде, чем там что-то увидеть надо соответственно его настроить.
Смотрите описание директивы .PLOT в хелпе
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
tellurian
Частый гость (>5)
Частый гость (>5)


Зарегистрирован: 15.11.2006
Сообщения: 15

СообщениеДобавлено: 21 Ноя 2006, 13:26    Заголовок сообщения: Ответить с цитатой

Alexx писал(а):

прежде, чем там что-то увидеть надо соответственно его настроить.
Смотрите описание директивы .PLOT в хелпе


Посмотрел. Нормально получилось. Если ничего не помогает, то полезно почитать ХЭЛП Я просто тащусь!

Для настройки окна Scope необходимо в файле проекта задать новый блок. Например:
Код:
.PLOT V (PB0) V (PB1) V (PB2) V (PB3) V (PB4) V (PB5) V (PB6) V (PB7)


Последний раз редактировалось: tellurian (22 Ноя 2006, 9:23), всего редактировалось 1 раз
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
tellurian
Частый гость (>5)
Частый гость (>5)


Зарегистрирован: 15.11.2006
Сообщения: 15

СообщениеДобавлено: 21 Ноя 2006, 13:43    Заголовок сообщения: Ответить с цитатой

Какое задание следующее, на этом тернистом и нелёгком пути?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
AndryG
Модератор


Зарегистрирован: 24.07.2006
Сообщения: 411
Откуда: Helios-3

СообщениеДобавлено: 21 Ноя 2006, 14:17    Заголовок сообщения: Ответить с цитатой

Продолжаем шагать... КНОПКИ
Наращиваем задачку... На PortB на старший бит вешаем кнопку.
Кнопка отжата - диод моргает с одной частотой, нажали - чаще моргает.
Читаем внимательно о дребезге контактов.
В задаче разрешаем использовать только один таймер.

Дальше развинем до супер-пупер автомата световых эффектов. (это дабы не забыть Радостный )

Давай вопросы/уточнения по задаче - дополню этот пост.
И еще ... задача 1,2 готовы - если не влом оформи немного посты по ним, пжлст, ... для пототмков Радостный

_________________
AndryG
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
tellurian
Частый гость (>5)
Частый гость (>5)


Зарегистрирован: 15.11.2006
Сообщения: 15

СообщениеДобавлено: 21 Ноя 2006, 14:47    Заголовок сообщения: Ответить с цитатой

Вопросы:
1. Где лутше всего прочитать про работу с кнопками?
2. При программировании таймера работать отдельно со старшим и младшым байтом, или вместе?
3. Сколько комманд допускается в прерывании, чтобы не надолго знимать процессорное время?


Последний раз редактировалось: tellurian (22 Ноя 2006, 9:57), всего редактировалось 1 раз
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
AndryG
Модератор


Зарегистрирован: 24.07.2006
Сообщения: 411
Откуда: Helios-3

СообщениеДобавлено: 21 Ноя 2006, 16:03    Заголовок сообщения: Ответить с цитатой

1. Где лутше всего прочитать про работу с кнопками?

В Сети Радостный найдешь толковые ссылки - не забудь сюда закинуть.
Голубцов "Микроконтроллеры AVR: от простого к сложному" ... если еще не скачал - дай знать - закину в файлообменник ... думаю там должно быть обязательно

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

3. Сколько комманд допускается в прерывании, чтобы не надолго знимать процессорное время?
Всё зависит от программы. Допустим у тебя используется одно прерывание. (от таймера) оно генерится раз в 10 мСек. Таким образом, дабы не было облома, необходимо как максимум за 10 мСек с прерывания выйти... допустим тактовая 1МГц ... получаем, что AVR за 10 мСек может выполнить 10 000 операций ...
А вообще прерывание на то оно и прерывание - не стоит там долго зависать.

_________________
AndryG
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
tellurian
Частый гость (>5)
Частый гость (>5)


Зарегистрирован: 15.11.2006
Сообщения: 15

СообщениеДобавлено: 21 Ноя 2006, 16:07    Заголовок сообщения: Ответить с цитатой

Я выкачал все книжки по ссылкам, которые опрубликованы вначале Улыбка
Теперь буду работать в этом направлении.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Форум по разработке и ремонту электронной техники -> Микроконтроллеры, процессоры, ПЛИС... Часовой пояс: GMT + 2
На страницу Пред.  1, 2, 3, ... 12, 13, 14  След.
Страница 2 из 14

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете добавлять вложения в этом форуме
Вы можете просматривать вложения в этом форуме


Rambler's Top100 PageRank Яндекс цитирования
Сайты наших друзей: Гири, все о гирях, Автоматизация магазинов, супермаркетов, ресторанов, кинотеатров,
Весы электронные, Сканеры штрих-кода, Принтеры штрих-кода

Powered by phpBB © 2001, 2005 phpBB Group

Время генерации страницы: 1.4645s (PHP: 52% - SQL: 48%) - SQL запросов: 11 - GZIP enabled - Debug on