Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ru_Led_Cube_6.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
144.43 Кб
Скачать

51. Программное обеспечение. Инициализация портов ввода-вывода

Первым делом после загрузки ATmega вызывает функцию ioinit ()

Эта функция настраивает порты IO, таймеры, прерывания и последовательность передачи данных. Все порты IO на ATmega двунаправлены. Они могут использоваться как в качестве входа, так и в качестве выхода. Мы формируем все как выходы, кроме контактов IO, где две кнопки связаны. Контакт RX для последовательного порта автоматически становится входом, когда USART RX включена.

52. Программное обеспечение.Метод генерации случайных чисел

Когда мы начали писать эффекты и отлаживать их, мы заметили, что функции, используя случайные числа, каждый раз показывали одинаковые мультипликации. Это было в случайном порядке, но эта же самая случайная последовательность повторялась каждый раз. Генератор случайных чисел в ATmega необходимо заполнить со случайным числом, для создания истинно случайных чисел.

Мы написали небольшую функцию, вызванную bootwait (). Эта функция нужна для:

1) Создания случайных чисел.

2) Выбора режима работы по нажатию кнопки.

Это делает следующее:

1) Устанавливает счётчик х на 0.

2) Начинает бесконечный цикл, while(1).

3) Увеличивает счётчик х на один.

4) Использует x в качестве случайного числа.

5) Задержка на некоторое время и включение красного светодиода.

6) Проверьте нажатие кнопки. Если главная кнопка нажата, функция возвращается 1. Если кнопка PGM нажата это возвращает 2. Заявления возвращения выходят из функции, заканчивая бесконечный цикл.

7) Задержитесь снова и установите зеленое состояние светодиода.

8) Проверьте, нажата ли кнопки снова.

9) Цикл повторяется, пока кнопка не нажата.

Цикл повторяется очень быстро, и очень мала вероятность того что вы остановите его в том же самом значении x два раза подряд. Это - эффективный способ получения хорошего случайного числа.

Bootwait () вызывают от основного () функцию и ее возвращаемое значение, назначенное на переменную i.

Если i == 1, начинается цикл, который отображает эффекты, порождаемые ATmega.. Если i == 2, то входит в режим RS232 и ждет данных от компьютера.

53. Программное обеспечение. Прерывание

Каждый раз, во время прерывания, происходит сброс, данные для нового слоя загружаются в массив триггеров, и новый слой включается. Значения сохраняются до следующего прерывания, снова происходит сброс, данные для следующего слоя загружены на массив триггеров, и следующий слой включен.

У ATmega32 есть 3 таймера. Они могут собираться учитываться непрерывно и вызвать прерывание каждый раз, когда они достигают определенного значения. Таймер перезагружается, после прерывания.

Мы используем Timer2 с делителем на 128, значение на выходе которого сравнивается с 10. Это означает, что значение счетчика увеличивается на 1 для каждого 128-ого процессорного цикла. Когда Timer2 достигает 10, он перезагружается и вызывает прерывание. Процессор с частотой 14745600 Гц, и выходным делителем на 128, считающий до 10, вызывает прерывание каждый 1408-ый цикл ЦП (128*11) или 10472.7 раз в секунду. За одно прерывание включается один слой, требуется 8 повторений прерываний, чтобы загорелся весь куб. Частота составляет 1309 кадров в секунду (10472.7/8). При такой частоте, светодиодный куб точно не будет мерцать. Некоторые могли бы сказать, что 1300 кадров в секунду - излишество, но это довольно эффективно. При такой высокой частоте обновления, используется около 21% процессорного времени. Это можно измерить осциллографом, подключив его к выходу линии разрешения (OE). Импульс в начале каждого прерывания и пауза в конце, дают довольно хорошее представление о времени, проведенном внутри прерывания.

Прежде, чем начнутся прерывания, необходимо настроить Таймер 2. Это делается с помощью функции ioinit ().

TCCR2 (регистр управления таймера 2) является 8-битным регистром, который содержит параметры настройки для источника часов таймера и режима работы. Мы выбираем источник синхронизации 1/128 делителя. Это означает, что Таймер 2 является инкрементной 1 каждым 128-ым циклом ЦП.

Мы устанавливаем его в способ CTC(очищающий таймер компаратора).В этом способе значение TCNT2 непрерывно по сравнению с OCR2. Каждый раз, когда TCNT2 достигает значения, сохраненного в OCR2, перезагружается и начинает отсчёт от 0, вызывая прерывание.

Во время прерывания происходят следующие действия:

1) Все транзисторы заперты.

2) Напряжение на входах OE высокие – выходы массива триггеров выключены.

3) Цикл проходит от 0 до 7. Каждый шаг на шину данных поступает новый байт, на адресную шину выводим i+1. Мы добавляем +1, потому что у 74HC138 активные низкие выходы, а у 74HC574 линии синхронизации запускаются по переднему фронту (переход от 0 к 1).

4) Подаётся низкое напряжение на входы ОЕ для включения триггеров.

5) Открывается транзистор для текущего слоя.

6) переменная i увеличивается или сбрасывается в 0, если она больше 7.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]