Re: Шим регулятор яркости светодиодов на atmega8
Добавлено: Чт сен 05, 2013 16:00:00
пару дней уже сижу разбираюсь с написанием прошивки, так до конца и не пойму принцип опроса энкодера, вообщем вот что примерно смог изобразить
кто разбирается в коде посмотрите хоть что то я правильно сделал или нет.#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <avr/eeprom.h>
unsigned char my_y;
EEMEM uint16_t ee_zn, ee_zns; /* переменная размером в 2 байта в EEPROM
volatile char pwm_counter,my_y,button1, button = 0;
// Обработчик прерывания int0
ISR(SIG_INTERRUPT0)
{_delay_us(50);
if((PIND & (1 << PD2))==0)
{_delay_us(50);
if((PIND & (1 << PD0))==0)
}
GIFR = (1< 63)
{
PORTB = 0x00;
pwm_counter = 0;
}
if (pwm_counter > my_y) PORTB |= (1 << PB0);
}
// Главная функция
int main (void)
{
DDRB |= (1 << PB0); // выходы
PORTB = 0x00;
DDRD |= (0 << PD3)|(0 << PD2)|(0 << PD1)|(0 << PD0); // входы
PORTD |= (1 << PD2)|(1 << PD1)|(1 << PD0)|(1 << PD3); // подключаем подтягивающие резисторы
TIMSK |= (1 << TOIE0); // разрешение прерывания по таймеру0
TCCR0 |= (1 << CS00);
MCUCR |= (0 << ISC00)|(1 << ISC01); // прерывание по заднему фронту INT0(по спаду импульса)
GIFR |= (1 << INTF0); // очищаем флаг внешнего прерывания
GICR |= (1 << INT0); // разрешаем внешние прерывания INT0
sei(); //глобально разрешаем прерывания
while(1) // первый режим
{
my_y = eeprom_read_byte(&ee_zn); // считали значение из EEPROM
{ my_y--; if(my_y < 1) my_y = 1; }
else
{ my_y++;}
if((PIND & (1 << PD1))==0) // если нажата кнопка энкодера
{
while((PIND & (1 << PD1))==0){} // ждем отпускания кнопки энкодера
eeprom_write_byte(&eeprom_var, ee_zn ); // записываем 1 значение в EEPROM;
}
while(2) ((PIND & (1 << PD3))==0) //второй режим пока нажата кнопка
{
my_y = eeprom_read_byte(&ee_zns); // считали 2 значение из EEPROM
{ my_y--; if(my_y < 1) my_y = 1;}
else
{ my_y++; }
if((PIND & (1 << PD1))==0) // если нажата кнопка энкодера
{
while((PIND & (1 << PD1))==0){} // ждем отпускания кнопки энкодера
eeprom_write_byte(&eeprom_var, ee_zns ); // записываем 2 значение в EEPROM;
}
}