Светофор на ATtiny13

Решил сделать для своего младшего брата светофор из подручных средств.
Под рукой оказался МК ATtiny13, несколько светодиодов и резисторов. У данного МК флэш память программ составляет 1кб, но нам этого хватит с головой, несмотря то, что программа пишется на Си в CodeVisionAVR.

Вот исходный текст программы:

 /***************************************************** This program was produced by the CodeWizardAVR V1.25.2 Beta1 Standard Automatic Program Generator © Copyright 1998-2006 Pavel Haiduc, HP InfoTech s.r.l. http://www.hpinfotech.com  Project : Version : Date : 27.07.2007 Author : Pavel Company : Home Comments:  Chip type : ATtiny13 Clock frequency : 4,800000 MHz Memory model : Tiny External SRAM size : 0 Data Stack size : 16 *****************************************************/  #include #include unsigned char svet=1; unsigned char onf=0; // Pin change interrupt service routine interrupt [PCINT0] void pin_change_isr(void) { // Place your code here if(PINB.4!=0) { if(svet<4)svet++; else svet=1; onf=0; } if(PINB.3!=0) { onf=1; // PORTB.1=1;PORTB.2=1; PORTB.0=1; } delay_ms(200); }  // Declare your global variables here  void main(void) { // Declare your local variables here  // Crystal Oscillator division factor: 1 #pragma optsize- CLKPR=0x80; CLKPR=0x00; #ifdef _OPTIMIZE_SIZE_ #pragma optsize+ #endif  // Input/Output Ports initialization // Port B initialization // Func5=In Func4=In Func3=In Func2=Out Func1=Out Func0=Out // State5=T State4=T State3=T State2=0 State1=0 State0=0 PORTB=0x00; DDRB=0x1F;  // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: Timer 0 Stopped // Mode: Normal top=FFh // OC0A output: Disconnected // OC0B output: Disconnected TCCR0A=0x00; TCCR0B=0x00; TCNT0=0x00; OCR0A=0x00; OCR0B=0x00;  // External Interrupt(s) initialization // INT0: Off // Interrupt on any change on pins PCINT0-5: On GIMSK=0x20; MCUCR=0x00; PCMSK=0x1F; GIFR=0x20;  // Timer/Counter 0 Interrupt(s) initialization TIMSK0=0x00;  // Analog Comparator initialization // Analog Comparator: Off ACSR=0x80; ADCSRB=0x00;  // Global enable interrupts #asm("sei") //PORTB.0=1; //gr //PORTB.1=1; //re //PORTB.2=1; //ye while (1) { if(onf==0) { switch (svet) { case 1:PORTB.0=1; PORTB.1=0; PORTB.2=0; break; case 2:PORTB.2=1; PORTB.0=0; PORTB.1=0; break; case 3:PORTB.1=1; PORTB.0=0; PORTB.2=0; break; case 4:PORTB.1=1;PORTB.2=1; PORTB.0=0; break; }  } if(onf==1) { if(svet<4)svet++; else svet=1;  switch (svet) { case 1:PORTB.0=1; PORTB.1=0; PORTB.2=0; break; case 2:PORTB.2=1; PORTB.0=0; PORTB.1=0; break; case 3:PORTB.1=1; PORTB.0=0; PORTB.2=0; break; case 4:PORTB.1=1;PORTB.2=1; PORTB.0=0; break; } delay_ms(1000); } }; }

Фотографии готового устройства:

Фото готового устройства

Фото готового устройства

Светофор в работе

Прошивку HEX, LAY-файл и схему устройства вы можете скачать ниже

BATCOH (iupfan сабака mail тчк ru)

Список радиоэлементов

Обозначение Тип Номинал Количество Примечание Магазин Мой блокнот
DD1 МК AVR 8-бит ATtiny13 1
C1 Конденсатор 0.01 мкФ 1
R1 Резистор 10 кОм 1
R2-R4 Резистор 1 кОм 1
VD1 Светодиод Желтый 1
VD2 Светодиод Красный 1
VD3 Светодиод Зеленый 1
SW1, SW2 Кнопка 2
SW3 Выключатель 1