Добрый день. Только начал осваивать AVR, поэтому хочу задать вам кучу глупых вопросов.
Попросили меня сделать реквезит - фонарик на трехцветном светодиоде, который умеет по кнопке выбирать цвет свечения, запоминать его и отключаться. Задача, собственно, простая, программатор и запас 13а у человека был, программку я на основе примеров сварганил. Но оказалось, что attiny13a, если не заморачиваться с энергоэффективностью очень неплохо кушает - фонарика на 300 мАч батарейке хватало на сутки в выключенном состоянии, потому как работало все на delay. Начал вникать в сон, interrupt и wdr - набил себе граблями огромную шишку.
Проблема 1 - начинал я это делать в CVAVR, но у меня происходит что-то непонятное с библиотеками. Просто нет ни sleep.h, ни interrupt.h, ни wdr.h. Как их к нему прилепить я не понял.
Скачал WinAVR, благо узнал что можно с ним работать напрямую из протеуса, проблема с библиотеками исчезла, но у меня не хотят компилироваться даже простейшие готовые примеры.
Собственно, вот простая мигалка светодиодом на том же delay, которая должна падать в сон при длинном нажатии и по нему просыпаться.
Но она выдает ошибки
и я их абсолютно не понимаю. Ткните носом, пожалуйста. Можно даже тапком.
Попросили меня сделать реквезит - фонарик на трехцветном светодиоде, который умеет по кнопке выбирать цвет свечения, запоминать его и отключаться. Задача, собственно, простая, программатор и запас 13а у человека был, программку я на основе примеров сварганил. Но оказалось, что attiny13a, если не заморачиваться с энергоэффективностью очень неплохо кушает - фонарика на 300 мАч батарейке хватало на сутки в выключенном состоянии, потому как работало все на delay. Начал вникать в сон, interrupt и wdr - набил себе граблями огромную шишку.
Проблема 1 - начинал я это делать в CVAVR, но у меня происходит что-то непонятное с библиотеками. Просто нет ни sleep.h, ни interrupt.h, ни wdr.h. Как их к нему прилепить я не понял.
Скачал WinAVR, благо узнал что можно с ним работать напрямую из протеуса, проблема с библиотеками исчезла, но у меня не хотят компилироваться даже простейшие готовые примеры.
Собственно, вот простая мигалка светодиодом на том же delay, которая должна падать в сон при длинном нажатии и по нему просыпаться.
Код: Выделить всё
#include <avr/io.h>
#include <avr/sleep.h>
#include <avr/interrupt.h>
#include <util/delay.h>
typedef unsigned char byte;
unsigned char trig, count;
unsigned short pushtime;
SIGNAL(SIG_INTERRUPT0)
{
disable_int0();
}
int main()
{
count = 0;
while(1)
{
if ((PINB & (1<<PB1))==0)
{
pushtime++;
if ( pushtime>15)
{
pushtime=0;
while ((PINB & (1<<PB1))==0)
{
delay_ms(10);
}
sleep_power_down();
}
}
else
{
if (pushtime>2 & pushtime<=15)
{
PORTB |= _BV(PB2);
delay_ms(500);
PORTB &= ~_BV(PB2);
delay_ms(100);
PORTB |= _BV(PB2);
delay_ms(500);
PORTB &= ~_BV(PB2);
}
pushtime=0;
}
if(count==10)
{
PORTB |= _BV(PB0);
}
if (count==20)
{
PORTB &= ~_BV(PB0);
count=0;
}
count++;
delay_ms(100);
}
}Код: Выделить всё
avr-gcc.exe -mmcu=attiny13 -o "./Debug.elf" "main.o"
main.o: In function `main':
C:\Users\nikollor\AppData\Local\Temp\d2d5e583d4a14410bb8265b98c3f5f3c\ATtiny13\Debug/../main.c:35: undefined reference to `delay_ms'
C:\Users\nikollor\AppData\Local\Temp\d2d5e583d4a14410bb8265b98c3f5f3c\ATtiny13\Debug/../main.c:37: undefined reference to `sleep_power_down'
C:\Users\nikollor\AppData\Local\Temp\d2d5e583d4a14410bb8265b98c3f5f3c\ATtiny13\Debug/../main.c:46: undefined reference to `delay_ms'
C:\Users\nikollor\AppData\Local\Temp\d2d5e583d4a14410bb8265b98c3f5f3c\ATtiny13\Debug/../main.c:48: undefined reference to `delay_ms'
C:\Users\nikollor\AppData\Local\Temp\d2d5e583d4a14410bb8265b98c3f5f3c\ATtiny13\Debug/../main.c:50: undefined reference to `delay_ms'
C:\Users\nikollor\AppData\Local\Temp\d2d5e583d4a14410bb8265b98c3f5f3c\ATtiny13\Debug/../main.c:67: undefined reference to `delay_ms'
main.o: In function `__vector_1':
C:\Users\nikollor\AppData\Local\Temp\d2d5e583d4a14410bb8265b98c3f5f3c\ATtiny13\Debug/../main.c:13: undefined reference to `disable_int0'
make: *** [Debug.elf] Error 1
Error code 2
