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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Мигание диода, Возникли непонятки с алгоритмом работы программы Atmega128
N_A
сообщение Feb 23 2007, 12:09
Сообщение #1





Группа: Новичок
Сообщений: 6
Регистрация: 23-02-07
Пользователь №: 25 610



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);
}
}
Go to the top of the page
 
+Quote Post
defunct
сообщение Feb 23 2007, 13:43
Сообщение #2


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



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

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

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

по коду:
while(++pause < 1500);
while(--pause >0);
эти строчки могут быть выкинуты оптимизатором, чтобы этого не произошло необходимо
pause объявить как volatile.
Go to the top of the page
 
+Quote Post
kada
сообщение Feb 23 2007, 14:32
Сообщение #3


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

Группа: Свой
Сообщений: 106
Регистрация: 23-05-05
Из: Ташкент
Пользователь №: 5 324



Для начала покажите Вашу схему подключения.
Go to the top of the page
 
+Quote Post
Abakt
сообщение Feb 23 2007, 14:35
Сообщение #4


Участник
*

Группа: Новичок
Сообщений: 73
Регистрация: 10-01-07
Пользователь №: 24 292



Цитата(N_A @ Feb 23 2007, 12:09) *
Не могу ни как заставить диод мигнуть два раза с интервалом в 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 - Feb 28 2007, 18:26
Go to the top of the page
 
+Quote Post
Algol
сообщение Feb 23 2007, 14:37
Сообщение #5


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

Группа: Свой
Сообщений: 140
Регистрация: 7-04-05
Из: Россия, Владимир
Пользователь №: 3 941



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


Проще всего наверное будет вычислить частоту по осциллограммам и делать соответствующие выводы.
Да, и потом, проверить настройки фузов CKSEL, по умолчанию вроде как работает от внутренней рс-цепочки.
Go to the top of the page
 
+Quote Post
Abakt
сообщение Feb 23 2007, 15:23
Сообщение #6


Участник
*

Группа: Новичок
Сообщений: 73
Регистрация: 10-01-07
Пользователь №: 24 292



для определения частоты тактовой удобно вывести на ножку ШИМ (пример - [BANNED]) и измерить его частоту мальтиметром или еще как.
Go to the top of the page
 
+Quote Post
=GM=
сообщение Feb 23 2007, 15:37
Сообщение #7


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(N_A @ Feb 23 2007, 09:09) *
HELP ME?!
Есть Atmega 128 и программатор (без внешнего резонатора). Среда разработки CVAVR.
Не могу ни как заставить диод мигнуть два раза с интервалом в 2сек. Перебрал уже кучу решений, все-равно толку 0. Есть два варианта кода, которые должны ЯВНО работать корректно, но нет.

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

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


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
Marian
сообщение Feb 23 2007, 21:18
Сообщение #8


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

Группа: Участник
Сообщений: 148
Регистрация: 23-02-07
Пользователь №: 25 618



У меня была похожая проблема.
Оказалось, что небыли запрещены прерывания сторожевого таймера и когда он срабатывал, программа запускалась с начала.
Go to the top of the page
 
+Quote Post
Abakt
сообщение Feb 24 2007, 00:32
Сообщение #9


Участник
*

Группа: Новичок
Сообщений: 73
Регистрация: 10-01-07
Пользователь №: 24 292



ИМХО сторожевик выключен по дефолту.
Go to the top of the page
 
+Quote Post
Artur Nikitin
сообщение Feb 28 2007, 10:30
Сообщение #10


Участник
*

Группа: Новичок
Сообщений: 30
Регистрация: 28-11-06
Из: Набережные Челны
Пользователь №: 22 856



Цитата(N_A @ Feb 23 2007, 12:09) *
...
if(PINA.2 == 0)
...
}

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


--------------------
начинающий программист
Go to the top of the page
 
+Quote Post
bloodden
сообщение May 5 2007, 19:16
Сообщение #11


Бывалый
***

Группа: Validating
Сообщений: 375
Регистрация: 19-10-05
Из: Kiev, UA
Пользователь №: 9 853



Цитата(Abakt @ Feb 24 2007, 03:32) *
ИМХО сторожевик выключен по дефолту.

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


--------------------
Заходите кому надо на мой сайт
Go to the top of the page
 
+Quote Post
defunct
сообщение May 6 2007, 02:30
Сообщение #12


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(bloodden @ May 5 2007, 21:16) *
А вот и нет. По-моему во всех мегах он включен, причём на 16мС.

в некоторых мегах есть специальный фуз - WDTON (Watchdog Timer Always On), но он выключен по дефолту, а в m128 его даже нет. Так что WDT по-умолчанию выключен.
Go to the top of the page
 
+Quote Post
Igor26
сообщение May 7 2007, 05:22
Сообщение #13


Знающий
****

Группа: Свой
Сообщений: 521
Регистрация: 10-02-05
Пользователь №: 2 544



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


Здрасьте!
Если посмотрите Fuses для Меги128 из Студии AVRISPом или JTAGICE - он второй сверху.
Go to the top of the page
 
+Quote Post
Marian
сообщение May 7 2007, 11:21
Сообщение #14


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

Группа: Участник
Сообщений: 148
Регистрация: 23-02-07
Пользователь №: 25 618



Цитата(defunct @ May 6 2007, 04:30) *
в некоторых мегах есть специальный фуз - WDTON (Watchdog Timer Always On), но он выключен по дефолту, а в m128 его даже нет. Так что WDT по-умолчанию выключен.


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

В файле видны Fuse Bites для 128.
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
defunct
сообщение May 7 2007, 12:12
Сообщение #15


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Igor26 @ May 7 2007, 07:22) *
Здрасьте!
Если посмотрите Fuses для Меги128 из Студии AVRISPом или JTAGICE - он второй сверху.

пардон, проглядел.
Go to the top of the page
 
+Quote Post

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

 


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


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