Понедельник, 25.11.2024, 10:34
Роботы как хобби. Главная
Меню сайта
Категории каталога
Мои проекты [6]
 Каталог проектов 
Главная » Проекты » Мои проекты

8x8 светодиодный "осциллограф" на pic 16f877a
У микроконтроллера 16f877a есть 3 полных порта по 8 ног (0-7) и ещё два порта по-кусочкам.
Для этого проекта используется два полных порта B и D и чуть-чуть от аналогово. При этом
только три входа микроконтроллера становятся аналоговыми, остальная часть порта А определяется
как цифровые ноги, и вы можете их использовать, если надо.
 
 
Светодиоды подключаются минусами к порту Б и плюсами к порту Д.
Напряжение на входе сверяется с Vref. И соответственно может быть
от 0 до Vref :) Резисторы в порте Д для ограничения тока через
матрицу. Не делайте слишком маленькие значения - контроллер
сгорит :)

 
 

Программа. PicBasic
 
' инициализация 
INCLUDE "bs2defs.bas"
DEFINE  OSC 24
Define ADC_BITS   8           ' восьми-битный АЦП
Define ADC_SAMPLEUS 10   ' "брать пробу" в течении 10мкс
an VAR byte
m  VAR byte
t  VAR byte
x  VAR byte[8]
st VAR byte
 ADCON1 = %01100101       ' частота конвертирования - Fosc / 64 и
                                          ' AN0 & AN1 - аналоговые, AN2-AN7 - цифр.
                                          ' кроме AN3 который Vref+
  TRISb = %00000000          ' порт B - outputs
  TRISd = %00000000          ' порт D - outputs
odin                  ' ой что будет...
st = 1     
' рисуем на экране из массива
                FOR t = 1 TO 50     'рисовать 50 раз каждый фрейм
FOR m = 0 TO 7
portb = 255 - st
portd = x[m]
st = st << 1                        ' st = st * 2 - двигаем порт Б на 1
PAUSEUS 10
NEXT m
portd = 0                           ' стереть экран
portb = 255                        ' cls
st = 1 
                NEXT t
' берём текущее значение напряжения
ADCIN 0, an                      ' an - from 0 to 255
an = an / 29                      ' an  from 0 to 8
 t = 1                                'т временная переменная для цикла
 FOR m = 1 TO an              'возведения 2 в степень an
 t = t << 1                         'умножаем т = т * 2
 NEXT m                            ''''''
t = t - 1                             ' чтобы загорелись бары, а не точки
 
 
FOR m = 7 TO 1 STEP -1
x[m] = x[m-1]                   ' сдвигаем данные в массиве на 1
NEXT m
x[0] = t                             ' и подставляем свежее значение
GOTO odin                           ' пахать ей вечно


Синие цифры - для настроек времени программы (паузы). Можно с ними поиграться.
Кварц на 24, Но это не очень критично - можно 8-10-12-16-20.

HEX
 
:020000040000FA
:100000004D28A000A00DA00D200D3839C1389F004B
:100010000030A1000A3013201F151F190D28A1015F
:100020001E084828A101FC3EA000A1090000031CF5
:100030001F28FF301B28A00703181A28A0076400F8
:100040002128A10F192808000310A00DA10DFF3EC3
:100050000318242820084828A501A4011030A60070
:10006000210DA40DA50D2208A4022308031C230FB3
:10007000A502031842282208A40723080318230F07
:10008000A5070310A00DA10DA60B302820084828B5
:1000900083130313831264000800831665309F00E6
:1000A0008601880183120130DE000130DF00640028
:1000B00033305F028A110A1203188228DD016400BE
:1000C00008305D028A110A12031878285E08FF3C86
:1000D00086005D08383E8400000888000310DE0DAD
:1000E0000A308A011220DD0A8A110A12031D5F28D4
:1000F0008801FF3086000130DE00DF0A8A110A1213
:10010000031D572800308A010120DC005C08A00094
:10011000A1011D30A200A3018A012C20DC000130C6
:10012000DF000130DD0064005D085C028A110A1204
:10013000031CA1280310DF0DDD0A8A110A12031D1A
:100140009328DF030730DD00640001305D028A116F
:100150000A12031CC228FF305D07C000FF300318DD
:10016000013EC1004008383E84000008C0005D0820
:10017000383E8400400880000130DD028A110A12F6
:0C0180000318A4285F08B8008A01532867
:02400E007D3FF4
:00000001FF
 
Категория: Мои проекты | Добавил: Airrr (11.05.2008) | Автор: Airrr Ok
Просмотров: 7214 | Рейтинг: 4.5/4 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Copyleft (c)Airrr(r) © 2024 Используются технологии uCoz