Для повышения точности и стабильности были выполнены четыре преобразования. Полученные данные были просуммированы и разделены на четыре (среднее арифметическое). Это дает гораздо более точные и стабильные результаты измерений. Длительность паузы и импульсов дешифратора равны, что говорит о хорошей повторяемости данных, получаемых от АЦП.
Подпрограмма задержки выполнена в виде трех вложенных циклов (их количество определяется числом, считанным из АЦП). На данном этапе можно изменить программу и использовать встроенный в микроконтроллер таймер Timer 1. При этом работа АЦП будет более наглядно проявляться паузами между моментами включения светодиодов (в представленной программе не реализовано).
Подпрограмма опроса реализована с применением команды загрузки данных из памяти программ LPM. При этом данные сохраняются в регистре R0. Считанные данные поступают в порт В на выводы PB0--PB3. Двоичный код с порта В микроконтроллера поступает на двоично-десятичный дешифратор VI. Работа дешифратора описана в [11]. Он преобразует двоичный код в единичный сигнал (активный уровень — нулевой) на одном из выводов.
Первый световой эффект — бегущая единица, второй — поочередное мигание светодиодов по кругу, третий — чередующееся последовательное мерцание с реверсом по одному (табл. 2.1).
В памяти программ микроконтроллера осталось еще много свободного места, поэтому можно придумать дополнительные световые эффекты [9, 12].
Создание световых эффектов с помощью АЦП
55
Таблица 2.1. Порядок размещения светодиодов по часовой стрелке, начиная
с 12:00: 3, 9, 8, 7, 4, 2, 1, 6, 5, 10
Светодиоды |
10 |
9 |
8 |
7 |
6 |
5 . 4 |
3 |
2 |
1 |
Порт В, двоичный код |
Шестна-дцатерич-ные коды прошивки порта В |
||
Программа |
Шаг |
||||||||||||
1 |
1 |
0 |
0 |
0 |
0 |
0 |
0 I 0 |
1 |
о 10 |
0010 |
02 |
||
1 |
2 |
0 |
1 |
0 |
0 |
0 |
о ! о |
0 |
о I 0 |
1000 |
08 |
||
1 |
3 |
0 |
0 |
1 |
0 |
0 |
0 j 0 |
0 |
0 |
0 |
0111 |
07 |
|
1 |
4 |
0 |
0 |
о! 1 |
0 |
0 i 0 |
0 |
0 |
0 |
0110 |
06 |
||
1 |
5 |
0 |
0 |
0 | 0 |
0 |
о ! 1 |
0 |
0 |
0 |
0011 |
03 |
||
1 |
6 |
0 |
0 |
о ! о |
0 |
0 |
0 |
0 |
1 l 0 |
0001 |
01 |
||
1 |
7 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
о ! 1 |
0000 |
00 |
|
1 |
8 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0101 |
05 |
1 |
9 |
0 |
0 |
0 |
0 |
0 |
1 ! о |
0 |
0 |
0 |
0100 |
04 |
|
1 |
10 |
1 |
0 |
0 |
0 |
0 |
0 i 0 |
0 |
0 |
0 |
1001 |
09 |
|
2 |
1 |
0 |
1 |
0 |
0 |
0 |
0 I 0 |
0 |
0 |
0 |
1000 |
08 |
|
2 |
2 |
0 |
0 |
0 |
0 |
0 |
1 i 0 |
0 |
0 |
0 |
0100 |
04 |
|
2 |
3 |
0 |
0 |
1 |
0 |
0 |
0 ! 0 |
0 |
0 |
0 |
0111 |
07 |
|
2 |
4 |
0 |
0 |
0 |
0 |
1 |
0 ! 0 1 |
0 |
0 |
0 |
0101 |
05 |
|
2 |
5 |
0 |
0 |
0 |
1 |
0 |
0 [ 0 |
0 |
0 |
0 |
0110 |
06 |
|
2 |
6 |
0 |
0 |
0 |
0 |
0 |
о ! о |
0 |
0 |
1 |
0000 |
00 |
|
2 |
7 |
0 |
0 |
0 |
0 |
0 |
о : 1 |
0 |
0 |
0 |
0011 |
03 |
|
2 |
8 |
0 |
0 |
0 |
0 |
0 |
0 j 0 |
0 |
1 |
0 |
0001 |
01 |
|
2 |
9 |
0 |
0 |
0 |
1 |
0 |
0 : 0 |
0 |
0 |
0 |
0110 |
06 |
|
2 |
10 |
0 |
0 |
0 | 0 |
0 |
0 0 |
0 |
0 |
1 |
0000 |
00 |
||
2 |
11 |
0 |
0 |
1 jo |
0 |
0 , 0 |
0 |
о ! о |
0111 |
07 |
|||
2 |
12 |
0 |
0 |
0 |
0 |
1 |
о: о |
0 |
0 I 0 |
0101 |
05 |
||
2 |
13 |
0 |
1 |
0 i 0 |
0 |
0 ! 0 |
0 |
0 |
0 |
1000 |
08 |
||
2 |
14 |
0 |
0 |
0 I 0 |
0 |
1 : 0 |
0 |
о i 0 |
0100 |
04 |
|||
2 |
15 |
0 |
0 |
0 |
0 |
0 |
о ■■ 0 |
1 |
о I 0 |
0010 |
02 |
||
2 |
16 |
1 |
о I о |
0 |
0 |
0 0 |
0 |
0 I 0 |
1001 |
09 |
|||
3 I 1 |
0 |
0 ! 0 |
0 |
0 |
0 0 |
1 |
0 ; 0 |
0010 |
02 |
||||
з ; 2 |
0 |
о ! о | о |
0 |
1 0 |
0 |
0 I 0 |
0100 |
04 |
|||||
з : з |
1 |
о ! о | о |
0 |
0 0 |
0 |
о ! о |
1001 |
09 |
|||||
3 I 4 |
0 |
0 I 0 | 0 |
1 |
0 0 |
0 |
0 I 0 |
0101 |
05 |
Глава 2
Таблица 2.1. Окончание
Светодиоды |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
Порт В, |
Шестна- |
|
двоич- |
дцатерич- |
||||||||||||
Про- |
Шаг |
ный |
ные коды |
||||||||||
грам- |
I |
код |
прошивки |
||||||||||
ма |
I |
порта В |
|||||||||||
3 |
5 |
0 |
0 |
0 |
0 |
о |
1 |
0 |
0 |
0 |
0 |
0100 |
04 |
3 |
6 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
11 |
0000 |
00 |
3 |
7 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
о ' |
0101 |
05 |
. 3 |
8 |
0 |
0 |
0 |
о |
о |
0 |
0 |
о |
1 |
о! |
0001 |
01 |
3 |
9 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 I |
0000 |
00 |
3 |
10 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
о ! |
0011 |
03 |
3 |
11 |
0 |
0 |
0 |
0 |
0 |
0 |
0 | 0 |
1 |
0 i |
0001 |
01 |
|
3 |
12 |
0 |
0 |
0 |
1 |
0 |
0 |
о |
о |
0 |
о ! |
0110 |
06 |
3 |
13 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
о ! |
0011 |
03 |
3 |
14 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
о ! |
0111 |
07 |
3 |
15 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
о ! |
0110 |
06 |
3 |
16 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
о I |
1000 |
08 |
3 |
17 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 ; |
0111 |
07 |
3 |
18 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 I |
0010 |
02 |
Примечание: В таблице для простоты чтения даны инверсные значения
НА ГЛАВНУЮ | | ЧТО ТАКОЕ PIC ? | | ПРОГРАММАТОР | | ПРОЕКТЫ | | СТАТЬИ | | ССЫЛКИ | | КАРТА САЙТА |