Jump to content

    
Sign in to follow this  
GSK

Проблема с функцией delay

Recommended Posts

Всем привет.

 

У меня следующая проблема:

 

Контроллет ATmega128. Установки заводские.

CKSEL=0001 SUT=10

К ножке 7 порта B и шине питания подключен светодиод.

Конструкция питаеться от 3,3 В.

 

 

В CodeVision в опциях выставлен кристал 1.000 МГц

 

#include <mega128.h>

#include <delay.h>

 

void main(void){

PORTB=0x80;

DDRB=0x80;

 

PORTB.7=0;

delay_us(10000);

// delay_us(10000); //<-------------------- Вот проблема !!!!

// delay_us(10000);

// delay_us(10000);

PORTB.7=1;

}

 

При включени питания светодиод загораеться и гаснет. Вроде всё как должно быть. Затем я убираю коментарий со строки delay_us(10000); и задержка увеличиваеться в двое. Диод также при включении мигает, но заметно дольше. Если же я убираю коментарий с третьей строки, то диод при подаче питания зажигаеться и больше не гаснет. Т.е. контроллер зависает.

delay_ms(10); - задержка в милисикунды также вешает контроллер.

 

Пробовал на BascomAVR

 

$regfile = "m128def.dat"

$crystal = 1000000

$baud = 19200

$baud1 = 19200

$hwstack = 32

$swstack = 10

$framesize = 40

 

Ddrb = &HFF

Portb = 0

Waitus 10

Portb = 255

 

End

 

Работает до тех пор пока задержка меньше 15 микросекунд.

 

В чем проблема?

Share this post


Link to post
Share on other sites

А нет ли у Вас проблем с питанием и фильтрацией. Может быть, светодиод включается и сжирает питание. Пока конденсатор фильтра не разрядился - все работает. Программно так быть не может.

Share this post


Link to post
Share on other sites
К ножке 7 порта B и шине питания подключен светодиод. Конструкция питается от 3,3 В

У вас светодиод подключен без балластного резистора?

Share this post


Link to post
Share on other sites

так и должно быть, зажигаем --- пауза---- тушим---- и тутже зажигаем

 

может так попробовать

 

PORTB.7=0;

delay_us(10000);

// delay_us(10000); //<-------------------- Вот проблема !!!!

// delay_us(10000);

// delay_us(10000);

PORTB.7=1;

delay_us(10000);

// delay_us(10000); //<-------------------- Вот проблема !!!!

// delay_us(10000);

// delay_us(10000);

Edited by psw

Share this post


Link to post
Share on other sites

Всем спасибо, кто откликнулся.

Проблема неожиданно снялась после снятия фьюза совместимости М103 и М128. (Хотя я понять почему не могу).

Эксперемены я провожу на плате AVR-SAVVY128.

1.Проблем с питанием нет. На плате есть регулятор.

2.Светодиод включен с баластным резистором.

3.ВатчДог выключен.

4.Перестановка функции delay_us не интересна, т.к. контроллер виснет, если задержки идут одна за одной или время задержки больше 20000 микросекунд.

 

Похоже этот глюк необьясним! Бывает.

Share this post


Link to post
Share on other sites
Проблема неожиданно снялась после снятия фьюза совместимости М103 и М128. (Хотя я понять почему не могу).

Потому что m103 и m128 это разные МК. Программа для m103 не будет работать на m128, также как и программа для m128 на m103 - разное распределение памяти.

 

при вызове функции используется стек, а значит - память. Т.е. у вас стек мог располагаться по адресам, где нет памяти физически. Отсюда и глюк.

Share this post


Link to post
Share on other sites

Ну, несовсем так.

ATmega128 полностью совместим по расположению выводов с ATmega103 и может быть установлен на существующую плату для ATmega103.

Если запрограммировать конфигурационный бит M103C, то ATmega128 будет функционировать в режиме совместимости с ATmega103, настраивая ОЗУ, линии ввода-вывода и векторы прерываний как описано выше. Однако, некоторые новые функции ATmega128 в этом режиме станут недоступными. Данные функции перечислены ниже:

 

Т.е. при запрограмированном бите M103C (заводская учтановка) неиспользуемая память будет недоступна для стека.

Share this post


Link to post
Share on other sites
Т.е. при запрограмированном бите M103C (заводская учтановка) неиспользуемая память будет недоступна для стека.

Cмотря как его CV распределяет.

Если стек расположен внизу, то он может пересечся с периферией.

 

настраивая ОЗУ, линии ввода-вывода и векторы прерываний.

Вы код в CV компилировали под m103 или под m128 с запрограммированным M103C?

Если под m128 то чему удивляться?

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this