Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.10.2016, 14:46   #1
lony322
Новичок
Джуниор
 
Регистрация: 26.10.2016
Сообщений: 7
По умолчанию AVR ATmega64 C++

Задача: Мигать светодиодом. Вкл. состояние 200 мс, выкл. 700 мс. Для реализации использовать таймер и режим Fast PWM.
Код, который смог написать:
Код:
#include <avr/io.h> 
#include <avr/interrupt.h> 
#define F_CPU 7372800UL 
#define LED PB5
int main(void)
{
    DDRB |= (1 << LED); 
    TCCR1A = (1 << WGM11) | (1 << WGM10) | (1 << COM1A1) | (0 << COM1A0);      
    TCCR1B = (1 << WGM13) | (1 << WGM12) | (1 << CS12) | (0 << CS11) | (1 << CS10);  
    OCR1A = 0x200; 
    while (1);
    {
    }
}
Вопроса два. Собственно проверка правильности написанного кода и значения OCR1A.
В протеусе диод просто загорается и все, никаких переодических свечений с заданным интервалом нет.

Последний раз редактировалось Пепел Феникса; 26.10.2016 в 15:29.
lony322 вне форума Ответить с цитированием
Старый 26.10.2016, 15:11   #2
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Я не знаком с программирование микроконтроллеров, но готов сообщить своё предположение. Вот нашёл в интернете пример мигания, но правда на С++. Но с другой стороны: синтаксис может отличаться, а логика работы - остаётся одной и той же.

11.jpg

Обрати внимание: мигание надо задавать в бесконечном цикле; ключевое слово "_delay(500)" - это задержка на 500 мс... А теперь посмотри на свой пример - цикл пустой... Я советую тебе сначала написать на С++ (просто списать с видеолекции), удостоверится что всё ОК, разобраться как алгоритм работает (он небольшой), - и только после этого переходить на ШАРП.

Вот видео-урок:

https://www.youtube.com/watch?v=dqAe7g1pgbo

Последний раз редактировалось ura_111; 26.10.2016 в 15:17.
ura_111 вне форума Ответить с цитированием
Старый 26.10.2016, 15:18   #3
lony322
Новичок
Джуниор
 
Регистрация: 26.10.2016
Сообщений: 7
По умолчанию

Цитата:
Я не знаком с программирование микроконтроллеров, но готов сообщить своё предположение. Вот нашёл в интернете пример мигания, но правда на С++. Но с другой стороны: синтаксис может отличаться, а логика работы - остаётся одной и той же.
Для реализации мигания необходимо использовать именно таймер и режим Fast PWM.
lony322 вне форума Ответить с цитированием
Старый 26.10.2016, 15:29   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
и только после этого переходить на ШАРП.
нет тут шарпа.

ТС, не надо # ставить, C# это иной язык.

я не вижу у вас ни таймера, ничего.

где обработчик таймера?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 26.10.2016, 15:29   #5
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

А ну посмотри (вроде то, что тебе надо):

https://www.youtube.com/watch?v=ZhIRRyhfhLM
ura_111 вне форума Ответить с цитированием
Старый 26.10.2016, 15:29   #6
lony322
Новичок
Джуниор
 
Регистрация: 26.10.2016
Сообщений: 7
По умолчанию

В названии опечатка, не на Шарпе необходимо решить задачу, а на С
lony322 вне форума Ответить с цитированием
Старый 26.10.2016, 15:34   #7
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Ты смотрел?

https://www.youtube.com/watch?v=ZhIRRyhfhLM
ura_111 вне форума Ответить с цитированием
Старый 26.10.2016, 15:36   #8
lony322
Новичок
Джуниор
 
Регистрация: 26.10.2016
Сообщений: 7
По умолчанию

Цитата:
Сообщение от ura_111 Посмотреть сообщение
Сейчас смотрю, разбираюсь, спасибо)
lony322 вне форума Ответить с цитированием
Старый 26.10.2016, 15:40   #9
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

lony322, в видео фигурировало "_delay_ms(100)". Узнай, опытным путём (т.е. поэкспериментируй - 200, 300...), что это такое?
Время отключенного состояния или включенного, или что?

Последний раз редактировалось ura_111; 26.10.2016 в 15:44.
ura_111 вне форума Ответить с цитированием
Старый 26.10.2016, 15:49   #10
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,708
По умолчанию

Делай это задержка. Включили, задержка, выключили, задержка, повторить - это и есть мигание.

ТС, же нужен PWM (т.е. ШИМ), который сам устроит мигание. Тут случай простой: если таймер поддерживает аппаратно генерацию шима, то просто настраиваему нужные параметры и пусть молотит. Если нет, то надо организовывать прерывание и в нем менять состояние ноги.

Последний раз редактировалось p51x; 26.10.2016 в 15:52.
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Assembler (AVR) PHC Помощь студентам 0 29.06.2014 19:26
avr/c++ 25-й кадр Общие вопросы C/C++ 24 14.05.2014 15:16
avr atmega16 Defunate Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 23.09.2011 14:46
прошивка AVR wanes101 Компьютерное железо 0 22.01.2011 20:28
AVR Sparky Микроконтроллеры, робототехника, схемотехника, 3D принтеры 6 31.12.2009 16:53