Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
07.02.2008, 17:02
|
#11
|
Почётный гражданин KAZUS.RU
Регистрация: 28.12.2007
Сообщений: 1,699
Сказал спасибо: 9
Сказали Спасибо 149 раз(а) в 128 сообщении(ях)
|
Я же пишу что кварц точно нормальный, а работает прога как буд-то кварц на мегагерц. И если менять значение в проге, то ведь программа соответтсвенно реагировать должна, не так ли?
|
|
|
|
07.02.2008, 17:13
|
#12
|
Супер-модератор
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,378
Сказал спасибо: 1,955
Сказали Спасибо 1,328 раз(а) в 578 сообщении(ях)
|
Сообщение от soladko
|
И если менять значение в проге, то ведь программа соответтсвенно реагировать должна, не так ли?
|
Ну, если тот компилятор понимает что-то типа delay_ms то по идее должен пересчитывать исходя из этого. Мой IAR так не умеет, у него есть delay_cycles
А у вас точно 2313 или все же тини2313? Если последнее, то надо бы фузы на кварц переключить, так как с завода он как раз на внутреннем RC работает - 8 МГц и делитель на 8. Симптомы похожие
|
|
|
|
07.02.2008, 17:21
|
#13
|
Почётный гражданин KAZUS.RU
Регистрация: 28.12.2007
Сообщений: 1,699
Сказал спасибо: 9
Сказали Спасибо 149 раз(а) в 128 сообщении(ях)
|
В том то и дело, что у меня AT90S2313, а там нету встроеного генератора, вот я не могу и понять, почему Delay так работает, компилятор то типа сам понимает время и должен пересчитывать, исходя из указаной частоты кварца. Тоесть допустим моргает светодиод раз в секунду, а в проге увеличим значение кварца в два раза, и он должен моргать в два раза медленнее....но не тут-то было.....
|
|
|
|
07.02.2008, 18:46
|
#14
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
F_CPU в тексте нужно определять ДО #include util/delay.h
Попробуйте так:
Код:
|
#include ‹avr/io.h›
#define F_CPU 4000000UL // 4 MHz
#include ‹avr/delay.h›
...... |
А в мейке Ваше определение вообще не используется.
Кстати посмотрите этот хидер, в нем существует ограничение на максимальную задержку в зависимости от тактовой частоты. При 4Мгц максимальная задержка равна 192мС. Все что длиннее обрежется до этого значения БЕЗ выдачи предупреждения! В случае неопределенной тактовой в хидере она назначается равной 1Мгц - это то, что происходит у Вас, и опять же без выдачи предупреждения
Попробуйте работать под студией - она убережет от таких ошибок. И не используйте INTERRUPT или SIGNAL - теперь прерывания определяются через
Код:
|
ISR(_vektor_name_)
{
} |
Добавлю - не сразу заметил - обновите компилятор!!! Ваш безнадежно устарел.
|
|
|
|
07.02.2008, 19:02
|
#15
|
Почётный гражданин KAZUS.RU
Регистрация: 28.12.2007
Сообщений: 1,699
Сказал спасибо: 9
Сказали Спасибо 149 раз(а) в 128 сообщении(ях)
|
Я пробовал тактовую оъявить раньше, ничего не поменялось. Только что пробовал. Я даже все файлы в папке удалил, чтоб случайно старый хекс не остался
Неопределенная тактовая в хидере-это где? потому что в самом деле получается игнорирует ту, что выставляю в программе.
Вы имеете ввиду новую версию винавра скачать?
|
|
|
|
07.02.2008, 19:13
|
#16
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Сообщение от soladko
|
Я пробовал тактовую оъявить раньше, ничего не поменялось. Только что пробовал. Я даже все файлы в папке удалил, чтоб случайно старый хекс не остался
Неопределенная тактовая в хидере-это где? потому что в самом деле получается игнорирует ту, что выставляю в программе.
Вы имеете ввиду новую версию винавра скачать?
|
Именно так объявляли:
Код:
|
#define F_CPU 4000000UL
#include ‹avr/delay.h› |
?
uL != UL
В новом хидере delay.h уже есть варнинг, кстати сам о нем только что узнал :
Код:
|
#ifndef F_CPU
/* prevent compiler error by supplying a default */
# warning "F_CPU not defined for ‹util/delay.h›"
# define F_CPU 1000000UL
#endif |
Хидер с задержками переехал в каталог util еще в 2006 году, так что Ваша версия "слегка" с бородой.
|
|
|
|
07.02.2008, 19:25
|
#17
|
Почётный гражданин KAZUS.RU
Регистрация: 28.12.2007
Сообщений: 1,699
Сказал спасибо: 9
Сказали Спасибо 149 раз(а) в 128 сообщении(ях)
|
Только что написал даже большими буквами UL. HEX получил идентичный. (((
› "make.exe" all
-------- begin --------
avr-gcc (GCC) 3.4.3
Copyright (C) 2004 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: main.c
avr-gcc -c -mmcu=at90s2313 -I. -gdwarf-2 -DF_CPU=4000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=main.lst -std=gnu99 -MD -MP -MF .dep/main.o.d main.c -o main.o
main.c:38:51: warning: no newline at end of file
Linking: main.elf
avr-gcc -mmcu=at90s2313 -I. -gdwarf-2 -DF_CPU=4000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=main.o -std=gnu99 -MD -MP -MF .dep/main.elf.d main.o --output main.elf -Wl,-Map=main.map,--cref -lm
Creating load file for Flash: main.hex
avr-objcopy -O ihex -R .eeprom main.elf main.hex
Creating load file for EEPROM: main.eep
avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load"
--change-section-lma .eeprom=0 -O ihex main.elf main.eep
Creating Extended Listing: main.lss
avr-objdump -h -S main.elf › main.lss
Creating Symbol Table: main.sym
avr-nm -n main.elf › main.sym
Size after:
main.elf :
section size addr
.text 162 0
.data 0 8388704
.bss 0 8388704
.noinit 0 8388704
.eeprom 0 8454144
.debug_aranges 20 0
.debug_pubnames 27 0
.debug_info 666 0
.debug_abbrev 203 0
.debug_line 203 0
.debug_str 159 0
Total 1440
AVR Memory Usage:
-----------------
Device: at90s2313
Program: 162 bytes (2.0% Full)
(.text + .data + .bootloader)
Data: 0 bytes (0.0% Full)
(.data + .bss + .noinit)
-------- end --------
› Process Exit Code: 0
|
|
|
|
07.02.2008, 19:25
|
#18
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Оказывается полезно почитать то, что казалось давно знаешь. Жизнь не стоит на месте - диапазон задержек был существенно расширен. В GCC 3.4.6(winavr20060421):
Код:
|
The maximal possible delay is 262.14 ms / F_CPU in MHz. |
В свежем уже:
Код:
|
When the user request delay which exceed the maximum possible one,
_delay_ms() provides a decreased resolution functionality. In this
mode _delay_ms() will work with a resolution of 1/10 ms, providing
delays up to 6.5535 seconds (independent from CPU frequency). The
user will not be informed about decreased resolution. |
|
|
|
|
07.02.2008, 19:41
|
#19
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Попробовал у себя:
Код:
|
#include ‹avr/io.h›
#define F_CPU 4000000UL // 4 MHz
#include ‹util/delay.h›
int main(void) // начало основой программы
{
unsigned char i;
DDRD = 0xff; // все выводы порта D сконфигурировать как выходы
while (1)
{
PORTD = 0xff; // установить "1" на всех линиях порта D
for(i=0;i‹20;i++) _delay_ms(50);
PORTD = 0x00; // установить "0" на всех линиях порта D
for(i=0;i‹20;i++) _delay_ms(50);
}
} // закрывающая скобка основной программы |
Все работает как и должно. F_CPU в мейке не определял.
|
|
|
|
07.02.2008, 19:42
|
#20
|
Почётный гражданин KAZUS.RU
Регистрация: 28.12.2007
Сообщений: 1,699
Сказал спасибо: 9
Сказали Спасибо 149 раз(а) в 128 сообщении(ях)
|
Интересная вещь получается, разницы в хекс фалах нету если ставить 4 или ставить 1 мегагерц, но если ставлю 100 килогерц, то светодиод моргает быстрее.....
Кто может дать новый компилятор , провереный на себе, и сказать как его установить? Поверх того что у меня есть? или как?
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 02:07.
|
|