|
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
Скачать