Светофор на 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-файл и схему устройства вы можете скачать здесь (67 кБайт).

Посмотреть видео работы светофора.


Добавил:  Павел (Admin)  [email protected] | 

Автор:  BATCOH (iupfan сабака mail тчк ru)  Рейтинг@Mail.ru