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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> ATtiny48 - проблемы с тактированием
Паша_З
сообщение Mar 24 2011, 17:30
Сообщение #1





Группа: Участник
Сообщений: 14
Регистрация: 3-03-11
Из: Рыбинск
Пользователь №: 63 374



Захотел получить на выходе квадратный импульсный сигнал. Сделал бесконечный цикл с двумя одинаковыми паузами и выводом 1 и 0 после каждой из них. Но вместо ровного импульса на выходе получается огромное преобладание по времени либо 0, либо 1 - в зависимости от задержки.
Задержки делал с помощью _delay_ms() и _delay_us().
Не могу разобраться, в чём проблема.
Go to the top of the page
 
+Quote Post
V_N
сообщение Mar 24 2011, 17:33
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 162
Регистрация: 12-01-09
Из: Харьков
Пользователь №: 43 270



Код в студию
Go to the top of the page
 
+Quote Post
Паша_З
сообщение Mar 24 2011, 17:47
Сообщение #3





Группа: Участник
Сообщений: 14
Регистрация: 3-03-11
Из: Рыбинск
Пользователь №: 63 374



Код
#define F_CPU 8000000
#include <avr/io.h>
#include <util/delay.h>
int main() {
  DDRD = 0x0F;
  PORTD = 0x0F;
  while(1) {
    _delay_ms(20);
    PORTD = 0x0;
    _delay_ms(20);
    PORTD = 0x0F;
  }
}

Хотя в свойствах частота тоже проставлена. И тип контроллера, конечно, тоже.

Сообщение отредактировал Паша_З - Mar 24 2011, 17:48
Go to the top of the page
 
+Quote Post
V_N
сообщение Mar 24 2011, 18:05
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 162
Регистрация: 12-01-09
Из: Харьков
Пользователь №: 43 270



да вроде все верно а как обстоят дела с Watchdog не вклечен ли?
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Mar 24 2011, 18:05
Сообщение #5


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Выключите вочдог при прошивке. Если он программируется фузами.


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
Паша_З
сообщение Mar 24 2011, 18:51
Сообщение #6





Группа: Участник
Сообщений: 14
Регистрация: 3-03-11
Из: Рыбинск
Пользователь №: 63 374



Watchdog не включён. Проверял.
Go to the top of the page
 
+Quote Post
nk@
сообщение Mar 24 2011, 19:12
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 78
Регистрация: 8-12-09
Пользователь №: 54 138



Судя по коду у Вас GCC ?
Оптимизацию в опциях компилятора поставьте -Os

Сообщение отредактировал nk@ - Mar 24 2011, 19:16
Go to the top of the page
 
+Quote Post
hd44780
сообщение Mar 25 2011, 08:41
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



Используйте CvAVR.
Насколько я сталкивался с WinAVR, прекрасный компилятор, но функции _delay_xxxx у него чрезвычайно глюкавые ...

Даже один и тот же код, написанный на CvAVRе и работающий абсолютно без проблем, при простой перекомпиляции в WinAVRе (с мин. требуемыми изменениями) начинает дико глючить. При прочих равных условиях (плата, схема, частоты, ...).

Я это так и не поборол sad.gif .
Мне даже приходилось использовать для организации этих задержек таймер. На таймере все чисто работает.

Поэтому WinAvr стараюсь не применять. По факту, я использую его только для ObDev USB - деваться некуда.
Все остальное делаю на CvAvr. Глючки тоже встречаются, но они все вместе взятые не такие мерзопакостные, как _delay в WinAVR.

Сообщение отредактировал hd44780 - Mar 25 2011, 08:45


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
nk@
сообщение Mar 25 2011, 09:18
Сообщение #9


Частый гость
**

Группа: Участник
Сообщений: 78
Регистрация: 8-12-09
Пользователь №: 54 138



Цитата(hd44780 @ Mar 25 2011, 10:41) *
Мне даже приходилось использовать для организации этих задержек таймер. На таймере все чисто работает.

Это самый правильный и точный метод, КМК, если имеется незадействованный таймер.

Цитата(hd44780 @ Mar 25 2011, 10:41) *
Поэтому WinAvr стараюсь не применять. По факту, я использую его только для ObDev USB - деваться некуда.
Все остальное делаю на CvAvr. Глючки тоже встречаются, но они все вместе взятые не такие мерзопакостные, как _delay в WinAVR.


Я использую GCC (WinAVR) уже достаточно давно, имею опыт. И с _delay* нет никаких глюков, скорее проблема в некорректном использовании ;-)
Лично я не встретил еще идеального компилятора sm.gif
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Mar 25 2011, 09:26
Сообщение #10


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(hd44780 @ Mar 25 2011, 11:41) *
Все остальное делаю на CvAvr. Глючки тоже встречаются, но они все вместе взятые не такие мерзопакостные, как _delay в WinAVR.

cranky.gif мир сошел с ума мир сошел с ума
Go to the top of the page
 
+Quote Post
Stepan_L
сообщение Mar 25 2011, 10:22
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 59
Регистрация: 26-08-08
Из: Ереван
Пользователь №: 39 828



_delay_ms(20);
PORTD = 0x0;
_delay_ms(20);
PORTD = 0x0F;



PSSSSSSSSSSSSSSSSSSSSSSSSSSSSS



while(666)
{
_delay_ms(20);
PORTD ^= 0x0f;
}


--------------------
ARM_enia
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 25 2011, 10:48
Сообщение #12


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (nk@ @ Mar 25 2011, 11:18) *
И с _delay* нет никаких глюков
Ради истины: есть (был). В версии, которую допиливает и распространяет Атмел был глюк - задержки там формируются в 4 раза короче. Вроде бы в libc он уже устранен, внес ли эти исправления к себе Атмел - не знаю. До сих пор сижу на WinAVR 20100110.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
nk@
сообщение Mar 25 2011, 11:08
Сообщение #13


Частый гость
**

Группа: Участник
Сообщений: 78
Регистрация: 8-12-09
Пользователь №: 54 138



Цитата(Сергей Борщ @ Mar 25 2011, 12:48) *
Ради истины: есть (был). В версии, которую допиливает и распространяет Атмел был глюк - задержки там формируются в 4 раза короче.

Возможно... Я никогда не пользовал Atmel-овский toolchain, всегда брал WinAVR, как говорится, нативный. Может в какойто версии и был баг, но я его, похоже, перешагнул sm.gif

Теперь по теме. Так как там дела, Паша_3? Не молчи, рассказывай, где грабли лежали sm.gif
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Mar 27 2011, 09:35
Сообщение #14


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(Сергей Борщ @ Mar 25 2011, 13:48) *
Ради истины: есть (был). В версии, которую допиливает и распространяет Атмел был глюк - задержки там формируются в 4 раза короче. Вроде бы в libc он уже устранен, внес ли эти исправления к себе Атмел - не знаю. До сих пор сижу на WinAVR 20100110.

Ради истины в любой версии WinAVR (за последние лет 5) были небольшие трудно понимаемые косячки с задержками. Я об этом около года назад или даже больше писал в гнутой ветке. По моему опыту всё решается использованием delay_cycles из bultin'ов.
А что касается пропаганды CV - это ИМХО зря. CV - недоделок тот ещё. Тут всего два прямых пути: IAR или avr-gcc.
Я на avr-gcc множество проектов реализовал - только приятные впечатления как от процесса так и от результата.
И про компилятор из атмеловкого тулчейна - он работоспособен на все 100!


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
SysRq
сообщение Mar 28 2011, 14:28
Сообщение #15


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



Цитата(demiurg_spb @ Mar 27 2011, 13:35) *
...небольшие трудно понимаемые косячки с задержками
Старается же GCC по регистрам все константы распихать, а потом уже алгоритм крутить. Вроде бы, перестановки кода при оптимизации и дают такой эффект: задержка произвольно разваливается на загрузку констант и сам цикл.

Цитата(demiurg_spb @ Mar 27 2011, 13:35) *
По моему опыту всё решается использованием delay_cycles из bultin'ов.
Определенно да rolleyes.gif
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 04:53
Рейтинг@Mail.ru


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