Перейти к содержанию
    

HELP ME?!

Есть Atmega 128 и программатор (без внешнего резонатора). Среда разработки CVAVR.

Не могу ни как заставить диод мигнуть два раза с интервалом в 2сек. Перебрал уже кучу решений, все-равно толку 0. Есть два варианта кода, которые должны ЯВНО работать корректно, но нет.

Вариант 1.

#include <mega128.h>

#include <delay.h>

void main(void)

{

 

PORTA=0x00;

DDRA=0xF0;

PORTA.2 = 1;

PORTA.7 = 1;

PORTA.6 = 1;

while (1)

{

//PORTA.2 = 0;

if(PINA.2 == 0)

{

PORTA.7 = 0;

delay_ms(2000);

if(PINA.7 == 1)

{

PORTA.6 = 0;

delay_ms(2000);

if(PINA.6 == 1)

{

PORTA.7 = 0;

delay_ms(2000);

}

}

 

}

 

}

}

Вариант 2.

 

#include <mega128.h>

#include <io.h>

#include <m8_128.h>

void main(void)

{

unsigned int pause = 0;

PORTA=0xFF;

DDRA |= PA6;

DDRA |= PA7;

ACSR=0x80;

SFIOR=0x00;

while (1)

{

PORTA |= PA6;

PORTA &=~PA7;

while(++pause < 1500);

PORTA &=~PA6;

PORTA |= PA7;

while(--pause >0);

}

}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если нет внешнего кристала, видать работает он у вас с частотой 1Mhz (заводские настройки).

 

Чтобы работали цацки типа delay_ms необходимо точно задать в настройках проекта частоту на которой работает чип. Иначе они работать не будут.

 

В общем. Определите на какой частоте у вас завелся чип, а потом делайте мигания.

 

по коду:

while(++pause < 1500);

while(--pause >0);

эти строчки могут быть выкинуты оптимизатором, чтобы этого не произошло необходимо

pause объявить как volatile.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не могу ни как заставить диод мигнуть два раза с интервалом в 2сек.

 

Наверно кроме мигания у вас там еще что-то делается раз опрашиваются PIN.

 

Начните с описания нужного алгоритма псевдокодом - т.е. просто русским языком.

 

А потом запишите алгоритм на Си.

 

например:

 

0. Бесконечный цикл

 

1. Ждать на PA2 появления "0"

 

2. При появлении на PA2 появления "0" включить светодиод на на PA3 (сделать "0" на PA3)

 

и так далее ...

 

// настройка МК

while(1){  // бесконечный цикл программы

while(PINA.2); //  тут пока на PA2 есть "1"  - т.е. ждем появления "0"  на PA2 

//  тут будем при появлении "0"  на PA2 

//  включить светодиод на на PA3 (сделать "0" на PA3)

PORTA.3 = 0;

/* далее напишите 

паузу - сколько будет гореть диод, 

выключите диод, 

опять паузу - не горит диод, 

включите второй раз диод, 

пауза, 

выключите диод */


while(! (PINA.2)); //  если на PA2 до сих пор "0"  подождем пока он исчезнет. 

}

 

возможно код ошибочный, так как написан наскоро.

 

Простейшее тех задание, алгоритм и мигание светодиодами

на [bANNED] проверить работу программы удобно

в симуляторе VMLAB.

Изменено пользователем IgorKossak

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В общем. Определите на какой частоте у вас завелся чип, а потом делайте мигания.

 

Проще всего наверное будет вычислить частоту по осциллограммам и делать соответствующие выводы.

Да, и потом, проверить настройки фузов CKSEL, по умолчанию вроде как работает от внутренней рс-цепочки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

для определения частоты тактовой удобно вывести на ножку ШИМ (пример - [bANNED]) и измерить его частоту мальтиметром или еще как.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

HELP ME?!

Есть Atmega 128 и программатор (без внешнего резонатора). Среда разработки CVAVR.

Не могу ни как заставить диод мигнуть два раза с интервалом в 2сек. Перебрал уже кучу решений, все-равно толку 0. Есть два варианта кода, которые должны ЯВНО работать корректно, но нет.

По-моему, в первом варианте у вас логическая ошибка, устанавливаете PA7 на вывод, выставляете в него 0, а потом ждёте, когда этот пин станет 1. Но он же никогда не станет 1. Будете ждать до посинения(:-).

 

Второй вариант должен работать, зависит от PA6 и PA7. Что это? Дайте определения.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня была похожая проблема.

Оказалось, что небыли запрещены прерывания сторожевого таймера и когда он срабатывал, программа запускалась с начала.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

...

if(PINA.2 == 0)

...

}

У вас наверно на pina.2 кнопка висит? Тогда после ее нажатия во время опроса ножки может быть хоть 0 хоть 1. Надо учитывать дребезг.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ИМХО сторожевик выключен по дефолту.

А вот и нет. По-моему во всех мегах он включен, причём на 16мС.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А вот и нет. По-моему во всех мегах он включен, причём на 16мС.

в некоторых мегах есть специальный фуз - WDTON (Watchdog Timer Always On), но он выключен по дефолту, а в m128 его даже нет. Так что WDT по-умолчанию выключен.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а в m128 его даже нет

 

Здрасьте!

Если посмотрите Fuses для Меги128 из Студии AVRISPом или JTAGICE - он второй сверху.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в некоторых мегах есть специальный фуз - WDTON (Watchdog Timer Always On), но он выключен по дефолту, а в m128 его даже нет. Так что WDT по-умолчанию выключен.

 

WDTON в Atmega128 есть, только по умалчанию он выключен.

А насчет программы, то там надо смотреть опрос кнопок.

 

В файле видны Fuse Bites для 128.

post-25618-1178536742_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Здрасьте!

Если посмотрите Fuses для Меги128 из Студии AVRISPом или JTAGICE - он второй сверху.

пардон, проглядел.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...