ساعة أخرى أو عندما يكون ذلك عارًا على وحدة التحكم الدقيقة

في المدرسة كان مغرمًا بالإلكترونيات الدقيقة ، وذهب إلى نادي الراديو ، وجمع عدة أجهزة بسيطة. ثم نادرا ما تذكرت الجامعة والعمل والزواج وهوايته.

مع ظهور الإنترنت في منزلي ، اكتشفت تفاصيل المتحكمات الدقيقة ، ونظرت إلى الأسعار وأصبحت متحمسة جدًا لجمع شيء ما على AVR أو STM. لقد أعدت قراءة العديد من المنتديات ومجموعة مختارة من المشاريع على وحدات التحكم الدقيقة ، ولكن كل شيء كان خطأ ، ولم أتمكن من فهم الخطأ. يبدو الأمر شيئًا مثيرًا للاهتمام: مشغل موسيقى يقوم بتشغيل ملفات من بطاقة ذاكرة ، أو منبه مزود بميزان حرارة ، ولكن هناك الكثير ، لكن الشعور برغبتي في عدم حدوث ذلك ...

لقد صادفت العديد من المقالات حول الساعات حول مؤشرات تفريغ الغاز من سلسلة IN وما شابه ذلك ، ظهرت ذاكرة الطفولة كما في متجر نظرت إلى الأرقام على المقاييس ، وهي منفصلة هناك على شكل أسلاك رقيقة وأحدها يضيء.

تقرر - سأفعل الساعة. تعمل مؤشرات تفريغ الغاز بجهد يبلغ حوالي 180 فولت ، لذلك للتنسيق مع وحدة التحكم ، غالبًا ما تستخدم شريحة k155id1 - رقاقة الجهد العالي الوحيدة ، وحدة فك ترميز ثنائية عشرية. للحصول على جهد عالي ، تستخدم معظم المشاريع أيضًا رقاقة PWM متخصصة منفصلة. وفي العديد من المشاريع ، هناك أيضًا ساعة في الوقت الحقيقي على شكل شريحة منفصلة أو مجموعة منتهية.

عند قراءة الوصف على موقع المتجر للحصول على Atmega8 بسيط ، تخيلت أنه كان هناك محول تناظري رقمي وتعديل عرض النبض ، وواجهات تسلسلية ، وما إلى ذلك ، وغالبًا ما يتم استخدامها فقط لتنفيذ برنامج الساعة ، حتى يتم تثبيت وحدة فك ترميز للمؤشر خارجيًا. لقد كان عارًا على وحدة التحكم الدقيقة ، إنه "قوي" للغاية ولا يسمح له بالعودة.

ونتيجة لذلك ، تجاوزًا للدائرة ، بدأت على الفور في رسم لوحة دوائر مطبوعة في SprintLayout ولدت هذه اللوحة في غضون أسبوعين:

صورة من ألبومات الصور E1.ru

على كل لوحة كل شيء مع الطاقة ، على المؤشرات الأخرى فقط:

صورة من ألبومات الصور E1.ru

يستخدم متحكم atmega8 في هذا المشروع جميع المؤقتات الثلاثة ، يعمل أحدها بشكل غير متزامن من ساعة كوارتز خارجية. تعمل وحدة التحكم نفسها بتردد 8 ميغا هرتز من سلسلة RC الداخلية. يتم استخدام PWM لتوليد جهد عالي في محول التعزيز ، ويتم التحكم في الجهد عن طريق إدخال تناظري ، ويتم تعديل دورة العمل إذا لزم الأمر. حسنًا ، كانت 28 أرجل كافية لإلقاء الضوء على مؤشرات IN 12 الأربعة ، وبقي بضعة مصابيح إضافية.

إليك كيف تبدو في شكل مجمّع:

صورة من ألبومات الصور E1.ru

وتضيء:

صورة من ألبومات الصور E1.ru

بعض وظائف وحدة التحكم ظلت بالتأكيد غير مستخدمة ، ولكنها ليست مسيئة عندما لا يوجد PWM منفصل و RTC قريب.

أضاف BB جزءًا من المخطط ، تم رسمه في بروتين ، ذهب الزوجان بقوة:


أخذت المخطط الرئيسي من هنا

رمز مشروع النظام الدولي
#define F_CPU 8000000UL

#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>

//

void init_pwm (void)
{
//
DDRB=0xFF; //OC1A,OC1B,OC2 —
TCCR1A=(1<<COM1B1)|(1<<WGM10)|(1<<WGM11); // OC1A
TCCR1B=(1<<CS10)|(1<<WGM12)|(1<<WGM13); // OC1B

//
OCR1A=250;
OCR1B=215; // 0 200/170 250/215
}

volatile unsigned char second, minute, hour, h, m;
int voltage_ADC, dimm;
// 2
ISR (TIMER2_OVF_vect)
{
if(second++ >= 59)
{
second = 0;
minute++;
}
if(minute > 59)
{
minute = 0;
hour++;
}
if(hour > 23)
hour = 0;

//set_time(hour,minute,second); //
}

ISR (TIMER0_OVF_vect)
{

PORTC |= (1 << PC2);

}

ISR (ADC_vect)//
{
voltage_ADC = ADCW;//

if(voltage_ADC<260 && OCR1A<300){OCR1A++;OCR1B=OCR1A-dimm;}
if(voltage_ADC>260 && OCR1A>170){OCR1A--;OCR1B=OCR1A-dimm;}

ADCSR |= (1<<ADSC);//
}

//

int main(void)
{
unsigned char r;
unsigned char mode;
init_pwm(); //
PORTD=0x00; // D 0, D
DDRD=0xFF; // D , 5
PORTC = 0b00000000; DDRC = 0b11101111;

TIMSK &= ~(1 << OCIE2)|(1 << TOIE2); // T2
ASSR |= (1 << AS2); // T2
TCNT2 = 0; //
TCCR2 |= (1 << CS22)|(0 << CS21)|(1 << CS20); // 128-(32768/128 = 256 /c)
TIMSK |= (1 << TOIE2); // 2

TCCR0|=(0<<CS02)|(1<<CS00);
//TIMSK |= (1 << TOIE0); // 2

//ads
ADMUX|= (1<<REFS0)|(1<<REFS1)|(1<<MUX2); //
//ADCSRA|=(1<<ADEN)|(1<<ADFR)|(1<<ADIE)|(1<<ADPS1)|(1<<ADPS0);
ADCSRA |= (1<<ADEN) | (1<<ADSC) | (1<<ADIE) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0);
sei(); //

hour = 23; //
minute = 13;
second = 23;

mode=1;

while (1) //
{
/*
PORTD |= (1 << PD1); // 1
PORTD &= ~ (1 << PD1); // 1
*/
dimm=35;
PORTC &= ~ (1 << PC2);
if(mode==1){m=minute; h=hour;}
if(mode==2){m=second; h=minute;}
if(mode==3){m=voltage_ADC%100; h=voltage_ADC/100;};

for (r=0;r<4;r++)
{
if(r==1)
{
PORTC |= (1 << PC3);//
if (m/10==0) PORTD |= (1 << PD3);//0
if (m/10==1) PORTD |= (1 << PD2);//1
if (m/10==2) PORTB |= (1 << PB1);//2
if (m/10==3) PORTB |= (1 << PB3);//3
if (m/10==4) PORTB |= (1 << PB4);//4
if (m/10==5) PORTD |= (1 << PD5);//5
if (m/10==6) PORTD |= (1 << PD6);//6
if (m/10==7) PORTD |= (1 << PD7);//7
if (m/10==8) PORTB |= (1 << PB0);//8
if (m/10==9) PORTD |= (1 << PD4);//9

}

if(r==0)
{
PORTC |= (1 << PC5);//
if (m%10==0) PORTD |= (1 << PD3);//0
if (m%10==1) PORTD |= (1 << PD2);//1
if (m%10==2) PORTB |= (1 << PB1);//2
if (m%10==3) PORTB |= (1 << PB3);//3
if (m%10==4) PORTB |= (1 << PB4);//4
if (m%10==5) PORTD |= (1 << PD5);//5
if (m%10==6) PORTD |= (1 << PD6);//6
if (m%10==7) PORTD |= (1 << PD7);//7
if (m%10==8) PORTB |= (1 << PB0);//8
if (m%10==9) PORTD |= (1 << PD4);//9
}

if(r==2)
{
PORTD |= (1 << PD1);//
if (h/10==0) PORTD |= (1 << PD3);//0
if (h/10==1) PORTD |= (1 << PD2);//1
if (h/10==2) PORTB |= (1 << PB1);//2
if (h/10==3) PORTB |= (1 << PB3);//3
if (h/10==4) PORTB |= (1 << PB4);//4
if (h/10==5) PORTD |= (1 << PD5);//5
if (h/10==6) PORTD |= (1 << PD6);//6
if (h/10==7) PORTD |= (1 << PD7);//7
if (h/10==8) PORTB |= (1 << PB0);//8
if (h/10==9) PORTD |= (1 << PD4);//9

}

if(r==3)

{
PORTD |= (1 << PD0);//
if (h%10==0) PORTD |= (1 << PD3);//0
if (h%10==1) PORTD |= (1 << PD2);//1
if (h%10==2) PORTB |= (1 << PB1);//2
if (h%10==3) PORTB |= (1 << PB3);//3
if (h%10==4) PORTB |= (1 << PB4);//4
if (h%10==5) PORTD |= (1 << PD5);//5
if (h%10==6) PORTD |= (1 << PD6);//6
if (h%10==7) PORTD |= (1 << PD7);//7
if (h%10==8) PORTB |= (1 << PB0);//8
if (h%10==9) PORTD |= (1 << PD4);//9
}

_delay_ms(3);
PORTC &= ~ (1 << PC3);
PORTC &= ~ (1 << PC1);
PORTC &= ~ (1 << PC5);
PORTD &= ~ (1 << PD1);
PORTB=0x00;PORTC=0x00;PORTD=0x00;
_delay_ms(1);
}

}
}

Source: https://habr.com/ru/post/ar386755/


All Articles