Портал для радиолюбителей
   Светофор на ATtiny13
    Главная -> Статьи -> Устройства на микроконтроллерах -> Светофор на ATtiny13


<< Назад в раздел   Распечатать Дата добавления: 2007-10-26 | Просмотров: 11106

Решил сделать для своего младшего брата светофор из подручных средств.
Под рукой оказался МК 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)  
Автор:  BATCOH (iupfan сабака mail тчк ru) 

Вас может заинтересовать:

  1. Музыкальный звонок, который умеет всё (Z80)
  2. Светодиодная гирлянда на МК ATtiny 2313
  3. Universal device
  4. Цифровой термометр на датчике LM75AD
  5. "Что позволено Юпитеру", или Почему одни микроконтроллеры надежнее других


    © PavKo, 2007-2018   Обратная связь   Ссылки   Яндекс.Метрика