• I






      
           

Научно-популярный образовательный ресурс для юных и начинающих радиолюбителей - Popular science educational resource for young and novice hams

Основы электричества, учебные материалы и опыт профессионалов - Basics of electricity, educational materials and professional experience

КОНКУРС
language
 
Поиск junradio

Радиодетали
ОК
Сервисы

Stock Images
Покупка - продажа
Фото и изображений


 
Выгодный обмен
электронных валют

Друзья JR



JUNIOR RADIO





xTimer на регистре сдвига4094



Статьи публикуются по мере поступления. Для упорядоченного тематического
поиска воспользуйтесь блоком  "Карта сайта"







Новая схема xTimerа с использованием CMOS регистра сдвига 4094 для управления 7-сегментным LED напрямую. Оригинальная версия xTimer использует MAX7219 . Моя схема использует дешевый КМОП регистр сдвига 4094 для светодиодного интерфейса, без необходимости впаивания ограничительных резисторов. Левый блок выполняет функцию таймера с выходом звуковой сигнализации. Правый для отображения часов.

 

Рисунок 1: xTimer V1.0 с использованием регистра сдвига 4094.

 

Рисунок. 2 показывает полную аппаратную схему. U2 это ATMEL 89C2051 работает на 24MHz XTAL. Оригинальная версия использует 11.0592 МГц, но мне нужно точное время, поэтому я выбрал 24MHz.  Для получения 100Гц прерывания таймера, мы можем использовать значение перезагрузки для Timer0 с 65536-20000 = 45536.

Входа клавиатуры для установки таймера key1 и key 4 привязаны к P3.2 P3.5. Для использования внутренней подтягивающей. P3.0 и п. P3.1 подключены два зуммера через буфер 7407. Активный Выход имеет низкий уровень. Выхода 1 и 4 с открытым коллектором. Мы можем использовать их для управления небольшого 12V реле  напрямую.

 


Рисунок 2: Схема xTimer V1.0.

 

U3, U5, U7, U9, U12, U14, U16 и U18 регистры сдвига КМОП 4094 выходного порта. Каждый чип управляет сегментами напрямую.  Все 64-разрядные КМОП выхода управляется тремя сигналами, DATA - P1.6, STROBE - P1.5 и CLK -  P1.7.

 

 

Рисунок 3: Управление 7-сегментным индикатором с помощью CMOS регистра сдвига 4094.

64-битовый поток данных сдвигается в U3 pin2 по фронту CLK сигнала. QS - выходной бит, который связывает прием ввода данных. STROBE и сигнал CLK привязаны к каждому 4094 чипу. Когда все 64-бит завершают смещаться, STROBE выводит их на выход (одновременно). 

Программное обеспечение

Скорость прерывания 100 Гц. XTAL 24MHz. Timer0 получает 24MHz / 12 = 2 МГц. Для получения 100Гц, значение перезагрузки будет равняться 65536-20000 = 45536 или 0xB1E0. Все задачи будут выполняться каждые 10 мс.

КОД

void timer_isr(void) interrupt 1 using 1
{
TH0 |= 0xb1; // reload value with 24MHz Xtal
TL0 |= 0xe0;
cputick++;
clock(); // update realtime clock
set_timer();
run_timer();
key_release();
updatedisplay();
ring1();
ring2();
}

Я заменил функцию таймера оригинальной схемы часами. Теперь блок timer 3 - HOUR, а timer4 - MIN. Ниже показан новый макет. Теперь кнопками Key3 и Key4 можно настроить текущее время в часах и минутах.


Сигналы SPI: DIN, CLK и STROBE используют P1.6 P1.7 и P1.5. Функция write_LED () взаимодействует с восьмью 4094. Функция заключена в циклы, использующие переменные I и J.  Внутренний цикл сдвигает 8-бит от переменной буфера с buffer[0] в буфер [7].  Это делается путем ORing с 0x80.

КОД

sbit CLK = P1^7;
sbit DIN = P1^6;
sbit strobe = P1^5;
// write 64-bit data to 4094 x 8, COMS shift regsiter
// The output of each register was tied to common chathod 7-segment LED
// data was shifted with rising edge, 0-to-1 CLK signal
// all bits are sent to the output with 1-to-0 STROBE signal
void write_led()
{
char i,j;
for(j=0; j<8; j++)
{
for(i=0;i<8; i++)
{
if(buffer[j]&0x80) DIN = 1; // set bit data line
else DIN=0; // clear bit data line
CLK= 1; // make clock high
buffer[j] <<=1; // shift 1 bit left
CLK = 0; // make clock low
}
}
strobe = 1; // make strobe high
;
strobe = 0; // then low
}
}

 

 

Пользователь может нажать СБРОС, чтобы войти в режим ожидания в Timer1 и Таймер2, не нарушая отображения часов. При компиляции исходного кода, вы должны включить файл запуска в файле проекта. 

Звуковой сигнал

Пример

unsigned char code busy_pattern[4]= {1,20,0,100}; // on 20ticks, off 100ticks
unsigned char code busy_pattern2[4]= {1,20,0,20}; // on 20ticks, off 20ticks

Скачать

 

МАТЕРИАЛЫ К СТАТЬЕ

 







Просмотров: 2040 | Добавил: Chinas | Рейтинг: 0.0/0








Необходимо добавить материалы...
Результат опроса Результаты Все опросы нашего сайта Архив опросов
Всего голосовало: 372



          

Радио для всех© 2024