Дата на обновяване:16.11.2012

   ПЧЕЛАР / ЕЛЕКТРОНЧИК - пробвай-сам.bg

     Страница за пчеларство, пчеларски и ел.  разработки, представени като статии

Комютърът на пчелина | Нестандартни кошери | Пчеларски сайтове | Пчеларски инвентар | Размисли и идеи за пчеларството Физиотерапия, Апитерапия, Фитотерапия | Книги, Списания, РС, Интернет |  Пчеларски технологии |  Видове мед  | Пчеларски хумор

Сезонни и месечни задължения на пчеларя | Пчеларски статии на руски език | Малки Oбяви свързани с пчеларството

Информация, която е полезна за начинаещия пчелар | Използване на автомобила ... не само за предвижване - видеоклипове

 

 

 
Информация  от  ОБЛАСТЕН  ПЧЕЛАРСКИ  СЪЮЗ  - ПЛЕВЕН

 

 

Полезна и забавна информация за начинаещи с ел., радио и електронен характер, част от която с приложение и в пчеларството

- Електронни схеми, радиосхеми и устройства удобни за повторение от начинаещи;

- Снимки на фигурки изработени от електрически, разноцветни кабели. Други ел. снимки;

- Детски любителски набори - радиоконструктори за сглобяване на радиоприемници наричани играчки;

- Детекторни радиоприемници, техни модели;

- Сувенирни радиоприемници - играчки, някои от тях предназначени за ученици;

- Модулни набори - радиоконструктори от типа "Електронни кубчета" или "Мозайка" с които се работи без поялник и се захранват с батерии;

Информация за електрически и електронни компоненти и устройства, някои от които приложими и в пчеларството

- Токозахранващи устройства. Стабилизатори, преобразуватели, удвоители на напрежение;

- Импулсни стабилизатори на напрежение. Инвертори на напрежение;

- Устройства за дозареждане и компенсиране на саморазряда на акумулаторни батерии;

- Релета за време. Процедурни часовници. Схеми с ИСх 555;

- Цветомузикални устройства. Светлинни ефекти;

- Схеми за регулиране и поддържане на температура;

- Измерване на топлинния режим на радиоелектронна апаратура. Електронни термометри;

- Мрежови трансформатори. Опростени методики за изчисляването им. Електрожен;

- Зарядни устройства за Ni-Cd акумулатори;

- Устройства за имитиране гласовете на животни и птици. Мелодични звънци;

- Уреди, пробници, индикатори, генератори, тестери, измервателни приставки за любителската лаборатория;

- Металотърсачи, включително такива за откриване на метални предмети и кабели;

- Схеми на устройства, приложими за и около автомобила;

- Схеми на устройства с приложение на оптрони;

- Измерване на относителна влажност. Прецизен влагорегулатор. Поддържане на влажността на въздуха;

- Регулатори и сигнализатори за ниво на течност;

- Регулатори на мощност и на обороти;

- Опростено изчисляване на повърхността на радиатори за полупроводникови елементи;

- Схеми за управление на стъпков двигател, включително четирифазен. Енкодер/Валкодер, някои от които реализирани със стъпков двигател;

- Мощни, широколентови, операционни усилватели. Логаритмичен и антилогаритмичен усилвател;

- Електронни реле - регулатори. Реле - регулатор за лек автомобил. Стенд за проверка на реле - регулатори;

- Променливотоков регулатор. Стабилизатор за променлив ток. Ферорезонансен стабилизатор;

- Електронни схеми и устройства приложими в медицината;

- Няколко светодиодни индикатора. Икономичен светодиод. Светодиодна стрелка;

Практически приложими ел. устройства с учебна цел, реализирани с PIC16F84A, PIC16F88, PIC16F628 ... Arduino и др.

Подобряване със свои ръце възпроизвеждането на звука в дома, офиса, автомобила - subwoofer и други варианти

Радиоелектронни сайтове | Електронни библиотеки

 

 Разработки     Главна (съдържание на статиите)                         
Собствено Търсене

 

 



 

Таймер обратного отсчета на 0-9999 секунд на PIC12F683 (Таймер за обратно броене на 0-9999 секунди с PIC12F683)


Целью этого проекта является создание простого таймера обратного отсчета на 0-9999 секунд с звуковым сигналом и дисплеем. Необходимое время устанавливается при помощи двух кнопок без фиксации, а отсчет секунд отображается на 4 разрядном семи сегментом дисплее. В проекте используется микроконтроллер PIC12F683 для отсчета времени и микросхема MAX7219 для управления семи-сегментным дисплеем. Конец отсчета обозначается звуковым сигналом зуммера.


Принципиальная схема
Полная схема этого проекта приведена ниже. Две кнопки без фиксации (называются INC
и TSET) используются для установки времени и запуска таймера. Они соединены параллельно и подключены к контакту AN3 АЦП микроконтроллера PIC12F683. На схеме видно, что при нажатии на кнопки на выходе получаются разные аналоговые напряжения. Когда кнопка INC нажата, напряжение на контакте на AN3 равно 0. Но если нажата кнопка TSET, напряжение на контакте AN3 около 2.5 В (делитель напряжения из двух резисторов 4,7 кОм). Если ни одна кнопка не нажата, то напряжение на контакте AN3 около 5В. Поэтому, опираясь на значение на выходе 10 битного АЦП, можно идентифицировать, какая кнопка нажата. Звуковой сигнал реализован при помощи ШИМ-сигнала на контакте GP2. В качестве дисплея используется 4 разрядный семи сегментный индикатор управляемый микросхемой MAX7219. Если вы не знакомы с микросхемой MAX7219, прочитайте мою статью Последовательный 4 разрядный семи сегментный индикатор для получения более подробной информации.


На фотографии показан полностью собранный проект. Я использую свою плату разработчика PIC12F и дисплейный модуль, состоящий их 4 разрядного семи сегментного индикатора и микросхемы MAX7219. Зуммер и кнопки установлены на макетной плате, но они могут легко поместиться на моей плате PIC12F.


Программа
Прошивка написана на C и скомпилирована в mikroC Pro для PIC микроконтроллеров. Часть программы для работы с MAX7219 взята из моего предыдущего проекта "Последовательный 4 разрядный семи сегментный дисплейный модуль". ШИМ сигнал 5 кГц появляется на контакте CCP1 при окончании времени таймера. Исходный код и HEX файл можно скачать ниже.


На рисунке выше показаны параметры фьюзов (внутренний генератор 4.0 МГц, MCLR, Power-Up timer, Brown out detection включены) для микроконтроллера PIC12F683.


Принцип работы
Таймер работает следующим образом. При подаче питания, дисплей инициализируется, и на всех 4 разрядах отображаются 0. Чтобы установить время, вам необходимо ввести значение одной цифры за один раз путем кратковременного нажатия TSET. При первом нажатии устанавливаются Единицы, по умолчанию 0. В это время другие разряды не горят. Чтобы установить цифровое значение от 0 до 9 используйте кнопку INC. При каждом нажатии INC, значение увеличивается на 1, и сбрасывается на 0 после 9. После установки значения Единиц, нажатием TSET выбираются Десятки, значение которых устанавливается аналогичным образом. Когда все 4 цифры заданы, вы можете запустить таймер путем удержания кнопки TSET примерно 2 секунды. Таймер запускается с коротким звуковым сигналом, а оставшееся время отображается на дисплее. Когда время истекает, дисплей мигает пять раз и звучит сигнал. На видео показана работа таймера.
Обратите внимание, что во время отсчета времени таймер не реагирует на нажатия кнопок INC и TSET. Если вы хотите сбросить или перезапустить таймер, нажмите кнопку Reset.
Вы можете купить 4 разрядный семи сегментный светодиодный индикатор SPI примерно за $12. Он позволяет вам работать с 4 разрядным 7-сегментным светодиодным индикатором, используя всего три порта ввода/вывода микроконтроллера, и позволяет управлять всеми сегментами, включая точки.


Скачать исходники и прошивку


Оригинал статьи на английском языке (перевод: Александр Касьянов для сайта cxem.net)

 

 

 

0-9999 seconds count down timer using PIC12F683 microcontroller

 
The goal of this project is to construct a simple 0-9999 seconds count down timer with an alarm and a display. The time is set through two tact switches and the count down seconds are displayed on a 4-digit seven segment LED display. The project uses PIC12F683 microcontroller for all I/O and timing operations and MAX7219 IC for driving the seven segment LED module. The time out condition is indicated by an audible alarm from a buzzer.
Circuit diagram
The complete circuit diagram of this project is shown below. Two tact switches (named INC and TSET) are used for setting time and turning the timer on. These switches are connected in parallel and their inputs are read through the AN3 ADC channel of PIC12F683 microcontroller. You can see from the circuit diagram how these two tact switches give rise to different analog voltages when pressed. When INC is pressed, the input voltage to AN3 pin is 0. But if TSET is pressed, the input to AN3 ADC channel would be around 2.5V (two 4.7K resistors make a voltage divider network). And if none of them are pressed the ADC input is pulled up close to 5V. Therefore, based on the value of 10-bit ADC count, it is possible to detect and identify if any of the two switches is pressed. The buzzer is driven by a PWM signal generated at the GP2 output pin of PIC12F683. The display part uses a 4-digit seven segment (common cathode type) LED module which is driven by the MAX7219 IC. If you are not familiar with MAX7219 device, please read my earlier project Serial four digit 7-segment LED display module for further detail on that.
The picture below shows the complete setup of the project. I am using my PIC12F project board and MAX7219 based seven segment LED display module for illustration. The buzzer and tact switches are wired on a breadboard but they can easily fit over the small prototyping area available on the PIC12F project board.
Software
The firmware is developed in C and compiled with mikroC Pro for PIC compiler. The driver routine for MAX7219 is taken from my previous project Serial four digit 7-segment LED display module. A 5KHz PWM signal is generated at the CCP1 output pin for the audible alarm when the timer is out. The overall operation of this timer project is described in the next section. That will help you to understand how the firmware for this project works. Here’s the complete source code for this project. A download link for source and HEX files is also provided below.
// Define Software-SPI connections for MAX7219
#define CS_Pin GP0_bit
#define MOSI_Pin GP1_bit
#define CLK_Pin GP5_bit

unsigned short i, k, unit=0, ten=0;
unsigned int counter = 0, hundred=0, thousand=0, l;

void SPI_Write_Byte(unsigned short num){
unsigned short t, Mask, Flag;
CLK_Pin = 0;
Mask = 128;
for (t=0; t<8; t++){
Flag = num & Mask;
if(Flag == 0) MOSI_Pin = 0;
else MOSI_Pin = 1;
CLK_Pin = 1;
CLK_Pin = 0;
Mask = Mask >> 1;
}
}

void MAX7219_INIT() {
// Disable Shutdown mode
CS_Pin = 0; // CS pin is pulled LOW
SPI_Write_Byte(0x0C); // Select Shutdown register
SPI_Write_Byte(0x01); // Set D0 bit to return to normal operation
CS_Pin = 1; // CS pin is pulled HIGH

// Set BCD decode mode for digits DIG0-DIG3
CS_Pin = 0; // CS pin is pulled LOW
SPI_Write_Byte(0x09); // Select Decode Mode register
SPI_Write_Byte(0x0F); // Select BCD mode for digits DIG0-DIG3
CS_Pin = 1; // CS pin is pulled HIGH

// Set display brighness
CS_Pin = 0; // CS pin is pulled LOW
SPI_Write_Byte(0x0A); // Select Intensity register
SPI_Write_Byte(0x0F); // Set maximum brightness
CS_Pin = 1; // CS pin is pulled HIGH

// Set display refresh
CS_Pin = 0; // CS pin is pulled LOW
SPI_Write_Byte(0x0B); // Select Scan-Limit register
SPI_Write_Byte(0x03); // Select digits DIG0-DIG3
CS_Pin = 1; // CS pin is pulled HIGH

// Enable Display-Test
CS_Pin = 0; // CS pin is pulled LOW
SPI_Write_Byte(0x0F); // Select Display-Test register
SPI_Write_Byte(0x01); // Enable Display-Test
CS_Pin = 1; // CS pin is pulled HIGH

Delay_ms(1000);
// Disable Display-Test
CS_Pin = 0; // CS pin is pulled LOW
SPI_Write_Byte(0x0F); // Select Display-Test register
SPI_Write_Byte(0x00); // Disable Display-Test
CS_Pin = 1; // CS pin is pulled HIGH

}

void Display_Counter(unsigned int j){
CS_Pin = 0; // CS pin is pulled LOW
SPI_Write_Byte(4); // Send thousands digit
SPI_Write_Byte((j/1000)%10);
CS_Pin = 1; // CS pin is pulled HIGH

CS_Pin = 0; // CS pin is pulled LOW
SPI_Write_Byte(3); // Send hundreds digit
SPI_Write_Byte((j/100)%10);
CS_Pin = 1; // CS pin is pulled HIGH

CS_Pin = 0; // CS pin is pulled LOW
SPI_Write_Byte(2); // Send tens digit
SPI_Write_Byte((j/10)%10);
CS_Pin = 1; // CS pin is pulled HIGH

CS_Pin = 0; // CS pin is pulled LOW
SPI_Write_Byte(1); // Send ones digit
SPI_Write_Byte(j%10);
CS_Pin = 1; // CS pin is pulled HIGH
}

void update_counter(){
counter = thousand*1000 + hundred*100 + ten*10 + unit;
}

void digit_refresh(unsigned short n){
// Set display refresh
CS_Pin = 0; // CS pin is pulled LOW
SPI_Write_Byte(0x0B); // Select Scan-Limit register
SPI_Write_Byte(n); // Select digits DIG0-DIG3
CS_Pin = 1; // CS pin is pulled HIGH
}

void delay_debounce(){
Delay_ms(300);
}

void blink_zeros(){
unsigned short loop;
for (loop = 0; loop < 5; loop++) {
// Enable Shutdown mode
CS_Pin = 0; // CS pin is pulled LOW
SPI_Write_Byte(0x0C); // Select Shutdown register
SPI_Write_Byte(0x00); // Set D0 bit to return to normal operation
CS_Pin = 1; // CS pin is pulled HIGH
delay_debounce();
digit_refresh(3);
// Disable Shutdown mode
CS_Pin = 0; // CS pin is pulled LOW
SPI_Write_Byte(0x0C); // Select Shutdown register
SPI_Write_Byte(0x01); // Set D0 bit to return to normal operation
CS_Pin = 1; // CS pin is pulled HIGH
delay_debounce();
}
}

unsigned short time_set_mode = 0, select_digit, TMRON = 0;
void main() {
TRISIO=0b00011000; // GP3, GP4 are input
GPIO=0x00; // All O/Ps zero
CMCON0 = 0x07;
ANSEL = 0x08; // AN3 active
MAX7219_INIT(); // initialize max7219
Display_Counter(counter);
i = 0;
PWM1_Init(5000); // PWM module initialization (5KHz)
PWM1_Set_Duty(127);
do{

if(ADC_Read(3) > 400 && ADC_Read(3) < 700 && TMRON == 0){
l = 1000;
while(ADC_Read(3) > 400 && ADC_Read(3) < 700){
delay_ms(1);
l--;
if(l == 0 && counter > 0){
TMRON = 1;
PWM1_Start();
Delay_ms(500);
PWM1_Stop();
time_set_mode = 0;
break;
}
}
if(!TMRON){
digit_refresh(i);
select_digit = i;
i ++;
if (i >=4) i = 0;
time_set_mode = 1;
}
}

if(ADC_Read(3) < 100 && time_set_mode == 1){
delay_debounce();
switch(select_digit){
case 0: unit ++;
if (unit > 9) unit = 0;
break;
case 1: ten ++;
if (ten > 9) ten = 0;
break;
case 2: hundred ++;
if (hundred > 9) hundred = 0;
break;
case 3: thousand ++;
if (thousand > 9) thousand = 0;
break;
}
}

if(TMRON && counter > 0){
counter --;
Display_Counter(counter);
Delay_ms(1000);
// Initialize all relevant variables after timer runs out
if(counter == 0) {
TMRON = 0;
unit = 0;
ten = 0;
hundred = 0;
thousand = 0;
i = 0;
PWM1_Start();
blink_zeros();
PWM1_Stop();
}
}
if(!TMRON){
update_counter();
Display_Counter(counter);
}
}while(1);
}
Download source and HEX files
The following picture shows the configuration bit settings (4.0 MHz internal clock, MCLR, Power-Up timer, and Brown out detection are enabled) for the PIC12F683 microcontroller.
Operation
This timer operates in the following way. When the power is first turned on, the displays are initialized and you will see all four digits displaying ’0′. In order to set time you need to select one digit at a time. You can do that by momentarily pressing TSET. At first press, it selects the units digit (rightmost digit), which by default is 0. All other digits will be blank at this point. You can use the INC switch to set the digit value anywhere between 0-9. With each pressing of INC, the digit value is incremented by 1, and it rolls over to 0 after 9. After setting the units digit value, pressing TSET selects tens digit. You can set the tens digit value in the similar way. Once all 4 digits are set, you can turn on the timer by holding the TSET button pressed for around 2 seconds. The timer starts with a short beep and you can see the left over seconds on the display. When the timer is out, the display flashes five times and an audible alarm is generated from the buzzer. The following video shows the timer in action.
Note that when the timer is running, it will not respond to any inputs given through INC and TSET switches. If you want to clear or restart the timer before it is out, you should press the Reset button.
You can buy the SPI 4-digit seven segment LED display module kit for $11.99 including shipping within the US. This allows you to interface a 4-digit 7-segment LED display with only three I/O pins of a microcontroller, and gives you full control of all digits and decimal points.
http://embedded-lab.com/blog/?p=5569

 

 

 

Материалите подготви за сайта:

Иван Парашкевов

e-mail: ivanparst@dir.bg

 

         главна страница                   горе

 

 
 
СТАТИСТИКА
    

Copyright2007  Design by