реклама на сайте
подробности

 
 
> Шпак индикатор мигающий каждую секунду
zeonix0
сообщение Aug 18 2011, 12:04
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 18-08-11
Пользователь №: 66 777



Цитата
/*Индикатор, мигающий каждую секунду AT90S8515
К выводу 0 порта В подключен светодиодный индикатор, который должен переключаться каждую секунду.
Это можно сделать с помощью прерывания при переполнении таймера.
Воспользуемся, например, таймером/счетчиком Т/С1.
С помощью разрядов CS10-CS12 регистра TCCR1B устанавливается коэффициент деления частоты системной
синхронизации для тактирования таймера. Выберем коэффициент 1024, что соответствует значению 0b101
или просто 5.
Таким образом, в случае рабочей частоты микроконтроллера в 4 МГц
значение счетного регистра TCNT1 будет увеличиваться через каждые 1024 / 4000000 = 0,000256 с.
Следовательно, необходимо установить такое стартовое значение счетчика, чтобы до его переполнения
отсчитывалось 1 / 0,000256 = 3906 импульсов. Поскольку с помощью 16 разрядов счетчика можно
получить максимальное значение 65535 (0xFFFF), то он должен инициализироваться значением 65536-3906.*/

#include <avr/io.h>
#include <avr/interrupt.h> //Для доступа к функции sei()
#include <avr/signal.h> //Для доступа к макросу INTERRUPT

#define Freq 4000000 //Частота системной синхронизации в Гц
ISR(TIMER1_OVF_vect) //Подпрограмма обработки прерывания по
{ //переполнению счетчика Т/С1
//Инициализируем счетный регистр значением 61630
TCNT1 = 0x10000 - (Freq / 1024);
PORTB ^= 0x01; //Меняем состояние вывода 0 порта В
}

int main (void)
{
DDRB = 0x01; //Вывод 0 порта В — выход
TCCR1A = 0; //Т/С1 отсоединен от вывода ОС1, режим ШИМ отключен
TCCR1B = 5; //Коэффициент деления частоты системной
//синхронизации = 1024
//Инициализируем счетный регистр значением 61630
TCNT1 = 0x10000 - (Freq / 1024);
TIFR = 0; //Сбрасываем все флаги прерываний от Т/С1
TIMSK = 0x80; //Разрешаем прерывание при переполнении Т/С1
GIMSK = 0; //Запрет внешних прерываний
sei(); //Общее разрешение прерываний
while(1) ; //Ожидаем прерывания от Т/С1 каждую секунду
}


в результате

Цитата
> "make.exe" all

-------- begin --------
avr-gcc (WinAVR 20100110) 4.3.3
Copyright © 2008 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


Compiling C: test1.c
avr-gcc -c -mmcu=atmega16a -I. -gdwarf-2 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=./test1.lst -std=gnu99 -MMD -MP -MF .dep/test1.o.d test1.c -o test1.o
In file included from test1.c:16:
c:/winavr/lib/gcc/../../avr/include/avr/signal.h:36:2: warning: #warning "This header file is obsolete. Use <avr/interrupt.h>."
test1.c: In function 'main':
test1.c:36: error: 'GIMSK' undeclared (first use in this function)
test1.c:36: error: (Each undeclared identifier is reported only once
test1.c:36: error: for each function it appears in.)
make.exe: *** [test1.o] Error 1

> Process Exit Code: 2
> Time Taken: 00:00
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
zeonix0
сообщение Aug 19 2011, 07:39
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 18-08-11
Пользователь №: 66 777



Цитата
Зачем delay_loop вызываете, вместо нормальной _delay_ms(x)?

ну проверил просто. Заработал и с delay_loop.



Сейчас хочу Шпаковскую прогу добить:

Код
#include <avr/io.h>
#include <avr/interrupt.h>  
#include <avr/signal.h>  
#include <avr/wdt.h>

#define Freq 4000000      
ISR(TIMER1_OVF_vect)  
{    
    TCNT1 = 0x10000 - (Freq / 1024);
    PORTB ^= 0x01;  
}

int main (void)
{
    DDRB = 0x01;
    wdt_disable();
    TCCR1A = 0;
    TCCR1B = 5;
    TCNT1 = 0x10000 - (Freq / 1024);
    TIFR = 0x00;
    TIMSK = 0x80;
//    GICR = 0x00;
    sei();
    while(1){};
}



лог такой:
Цитата
> "make.exe" all

-------- begin --------
avr-gcc (WinAVR 20100110) 4.3.3
Copyright © 2008 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


Compiling C: test1.c
avr-gcc -c -mmcu=atmega16a -I. -gdwarf-2 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=./test1.lst -std=gnu99 -MMD -MP -MF .dep/test1.o.d test1.c -o test1.o
In file included from test1.c:3:
c:/winavr/lib/gcc/../../avr/include/avr/signal.h:36:2: warning: #warning "This header file is obsolete. Use <avr/interrupt.h>."

Linking: test1.elf
avr-gcc -mmcu=atmega16a -I. -gdwarf-2 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=test1.o -std=gnu99 -MMD -MP -MF .dep/test1.elf.d test1.o --output test1.elf -Wl,-Map=test1.map,--cref -lm

Creating load file for Flash: test1.hex
avr-objcopy -O ihex -R .eeprom -R .fuse -R .lock test1.elf test1.hex

Creating load file for EEPROM: test1.eep
avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" \
--change-section-lma .eeprom=0 --no-change-warnings -O ihex test1.elf test1.eep || exit 0

Creating Extended Listing: test1.lss
avr-objdump -h -S -z test1.elf > test1.lss

Creating Symbol Table: test1.sym
avr-nm -n test1.elf > test1.sym

Size after:
AVR Memory Usage
----------------
Device: atmega16a

Program: 196 bytes (1.2% Full)
(.text + .data + .bootloader)

Data: 0 bytes (0.0% Full)
(.data + .bss + .noinit)



-------- end --------


> Process Exit Code: 0
> Time Taken: 00:01


должен мигать(светодиод заведен ) PB0(1 ножка МК). Ноль реакции.

Какие ещё предложения?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- zeonix0   Шпак индикатор мигающий каждую секунду   Aug 18 2011, 12:04
- - Genadi Zawidowski   В исходном коде написано, что использует аппаратны...   Aug 18 2011, 19:28
- - zeonix0   Код#include <avr/io.h> #include <avr/i...   Aug 19 2011, 05:05
|- - demiurg_spb   Цитата(zeonix0 @ Aug 19 2011, 09:05) Что ...   Aug 19 2011, 05:35
- - zeonix0   чето у меня даже такое не катит Цитата#include ...   Aug 19 2011, 06:17
|- - Petka   Цитата(zeonix0 @ Aug 19 2011, 10:17) ... ...   Aug 19 2011, 06:23
- - zeonix0   могу вообще без _delay_loop_2 Код#include <avr...   Aug 19 2011, 06:51
|- - Petka   Цитата(zeonix0 @ Aug 19 2011, 10:51) чето...   Aug 19 2011, 06:56
- - zeonix0   вообщем не знаю от чего такой глюк был, но светоди...   Aug 19 2011, 07:12
|- - demiurg_spb   Цитата(zeonix0 @ Aug 19 2011, 11:12) я хз...   Aug 19 2011, 07:30
|- - demiurg_spb   Цитата(zeonix0 @ Aug 19 2011, 11:12) во ф...   Aug 19 2011, 07:53
- - zeonix0   demiurg_spb, а, каюсь. Короче убрал его. Перепрогр...   Aug 19 2011, 08:33
|- - demiurg_spb   Цитата(zeonix0 @ Aug 19 2011, 12:33) Посо...   Aug 19 2011, 08:53
- - Genadi Zawidowski   Если не боитесь утонуть - посмотрите в проект в пе...   Aug 20 2011, 06:21


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 19:37
Рейтинг@Mail.ru


Страница сгенерированна за 0.01387 секунд с 7
ELECTRONIX ©2004-2016