Всем доброго времени суток друзья.Не хотел ни кого тревожить,но решил с экономить на ногах камня и пристроил регистр 74CH595.Но при отображении для пробы числа 1234,почему то получается такая картина 1233.Не пойму где в коде косяк?Буду рад кого - нибудь услышать
Device = 16F628A Xtal = 4 ;частота кварца 4МГц 'Declare Create_Coff = 1 Reminders = 0 Config BODEN_OFF, BOREN_OFF, CP_OFF, DATA_CP_OFF, PWRTE_ON, WDT_OFF, LVP_OFF, MCLRE_OFF, XT_OSC Reminders = 1 Declare All_Digital = On Declare PortB_Pullups = OFF TRISA = %00000000 TRISB = %00000000 CMCON = 7 'Компаратор нам не нужен, отключим ... '--------------------------------------------------------------------------------------------------- Symbol SH_CP = PORTB.7 ;порт управления регистром Symbol DS = PORTB.6 ;порт управления регистром Symbol ST_CP = PORTB.5 ;порт управления регистром Symbol RAZ1 = PORTB.1 ;порт упр.1 разрядом индикатора Symbol RAZ2 = PORTB.2 ;порт упр.2 разрядом индикатора Symbol RAZ3 = PORTB.3 ;порт упр.3 разрядом индикатора Symbol RAZ4 = PORTB.4 ;порт упр.4 разрядом индикатора '--------------------------------------------------------------------------------------------------- Dim N As Byte 'для выделения цифры из числа Dim Value As Byte 'Переменная для осуществления табличного конвертирования цифры Dim RAZR As Byte 'переменная для управления табличного конвертирования разрядами ССИ Dim A As Dword ;переменная № разряда Dim B As Byte ;переменная для общего счета A = 1234
GoTo MAIN Indic: '---------------Зажигание первого справа разряда индикатора и вывод на него цифры------------------- N = 1'Dig A,3 'Выделяем из числа 1-ю с права цифру GoSub Convert 'и конвертируем в код ССИ SHOut DS, SH_CP, MsbFirst, [Value]'Проталкиваем в регистр семисегментный код
'---------------Зажигание второго справа разряда индикатора и вывод на него цифры------------------- N = 2'Dig A,2 'Выделяем из числа 2-ю с права цифру GoSub Convert 'и конвертируем в код ССИ SHOut DS, SH_CP, MsbFirst, [Value]'Проталкиваем в регистр семисегментный код
'---------------Зажигание третьего справа разряда индикатора и вывод на него цифры------------------ N = 3'Dig A,1 'Выделяем из числа 3-ю с права цифру GoSub Convert 'и конвертируем в код ССИ SHOut DS, SH_CP, MsbFirst, [Value]'Проталкиваем в регистр семисегментный код
ST_CP = 1 'Защелкиваем данные DelayMS 4 ST_CP = 0 'Обнуляем защелку данных
'---------------Зажигание четвертого справа разряда индикатора и вывод на него цифры---------------- N = 4'Dig A,0 'Выделяем из числа 4-ю с права цифру GoSub Convert 'и конвертируем в код ССИ SHOut DS, SH_CP, MsbFirst, [Value]'Проталкиваем в регистр семисегментный код
Anatoliy1000, возьмите тестер и напишите нам сюда какой вывод МК идет на какой вывод 74HC595. МК у Вас 12F675??? Тот модуль можно проверить вообще без контроллера, проводками потыкать.
возьмите тестер и напишите нам сюда какой вывод МК идет на какой вывод 74HC595
Попробую тестером. Как проводками потыкать не понимаю. Я новичок. За помощь стараюсь плюсовать репутацию (пока других способов сказать спасибо не знаю).
Anatoliy1000, без обид, но мне кажется, что Вы все делаете методом тыка. В чем Вы разобрались? Оно у Вас работает? Не будет оно так работать, нормально. Вывод на дисплей, со сдвиговым регистром, нужно делать через одинаковые промежутки времени и эту процедуру нужно вращать в цикле вечно. Вот представьте себе, Вам нужно вывести число 1234. Зашли Вы в процедуру вывода послали число 1 и знакоместо 4, далее число 2 и знакоместо 3, и так далее, при выходе из процедуры, что у Вас будет на индикаторе???? Правильно - только цифра 4! И если оставить только процедуру вывода, то все как бы работает, а добавьте для контроллера еще каких то задач, что тогда??? Повторяюсь, Вы поймите,в вашем модуле только два сдвиговых регистра. Один отвечает за код цифры, а другой какую показывать. Так вот, тот первый, посылает код сразу на все четыре знакоместа.
Поставьте паузу в программе, между выводом на дисплей и увидите, что будет творится у Вас. Меня все время преследуют умные мысли...но я быстрее!!!
Да, заработало, поэтому и написал. Код такой: SHOut DS, SH_CP, MsbFirst, [164] 'Проталкиваем 2 SHOut DS, SH_CP, MsbFirst, [%0010] ' на второе знакоместо потом другое число (3) потом бесконечный цикл и они "светятся" как-будто непрерывно. Конечно, я понимаю что это "моргание". К сожалению Вы правы "методом тыка". Я новичок. За помощь стараюсь плюсовать репутацию (пока других способов сказать спасибо не знаю).
Сообщение отредактировал
Anatoliy1000 - Вт, 20.11.2018, 06:46