Страница 1 из 1
Проблема с AtMega128
Добавлено: Пн дек 30, 2013 02:04:55
0867532
Ребята, помогите дураку...
Купил AtMega128, запаял на макетку, подключил программатор.
Контроллер программируется(после длительного чтения документации), но не выполняет программу.
Взял самую простую:
Код: Выделить всё
#include <mega128.h>
#include <delay.h>
void main(void) {
PORTA=0x00;
DDRA=0xFF;
while (1) {
delay_ms(100);
PORTA.5=!PORTA.5; }
}
Ничего не происходит.
Причём, если поставить PORTA=0xFF, то светодиод будет просто гореть.
В чём проблема?
Re: Проблема с AtMega128
Добавлено: Пн дек 30, 2013 06:40:45
Sbor2511
Цитата: В чем проблема?
Ответ: В отсутствии комментариев, и как следствие, неправильном понимании работы программы. Чем не устраивает классическое решение?:
Код:
#include <mega128.h>
#include <delay.h>
void main(void) {
DDRA=0xFF ; // установить все ножки порта на выход
PORTA=0x00 ; // установить на этих ножках логический ноль (светодиод погашен)
while (1) // бесконечный цикл
{
PORTA.5=1 ; // включить погашенный светодиод
delay_ms(500) ; // задать время горения светодиода
PORTA.5=0; // выключить светодиод
}
}
При желании можно работать только с пятой ножкой порта:
DDRA=0b00100000 ; // установить только пятую ножку порта на выход
PORTA=0x00000000 ;
На форуме даже есть видеоуроки, например, от Коробейникова.
Re: Проблема с AtMega128
Добавлено: Пн дек 30, 2013 10:03:08
radio-kot
Может так?
PORTA ^= 1;

Re: Проблема с AtMega128
Добавлено: Пн дек 30, 2013 10:11:55
0867532
Sbor2511 писал(а):
{
PORTA.5=1 ; // включить погашенный светодиод
delay_ms(500) ; // задать время горения светодиода
PORTA.5=0; // выключить светодиод
}
Вы думаете я списал этот код?, -Нет я уже программирую контроллеры 1год, и программа самописная.
Но AtMega128 для меня новый.
К тому же ваш код тоже с ошибкой, вы в цикле: включаете;ждёте;выключаете. Получается после выключения сразу включаете.
Re: Проблема с AtMega128
Добавлено: Пн дек 30, 2013 10:16:31
pyzhman
Sbor2511 писал(а):Цитата: В чем проблема?
Ответ: В отсутствии комментариев, и как следствие, неправильном понимании работы программы.
0867532 писал(а):К тому же ваш код тоже с ошибкой
Упс. Конфуз.

Re: Проблема с AtMega128
Добавлено: Пн дек 30, 2013 11:18:30
Sbor2511
Признаю свою ошибку. поторопился и пропустил одну строчку кода в теле цикла. Правильно так:
{
PORTA.5=1 ; // включить погашенный светодиод
delay_ms(500) ; // задать время горения светодиода
PORTA.5=0; // выключить светодиод
delay_ms(500) ; // задержка в погашенном состоянии светодиода
}
Re: Проблема с AtMega128
Добавлено: Пн дек 30, 2013 11:20:58
0867532
всё равно, код то нерабочий.
Я думаю проблема не в программе.
=======
Я выяснил, что контроллер зависает после команды delay_ms( . . . )
В место делея поставил #asm("NOP NOP NOP NOP");
диод загорелся и осциллограф показывает прямоугольный сигнал на ноге PA5.
Как такое может быть, что б библиотека delay не работала с AtMega128?
P.S. У меня задержек в коде особых не будет, всё на таймерах, но всё равно, не приятно.
Я не могу поставить больше 7 NOP к ряду.
=======
Оказалось что не работает только delay_ms();, delay_us(); прекрасно работает.
Re: Проблема с AtMega128
Добавлено: Пн дек 30, 2013 12:40:52
Sbor2511
0867532! Это опять я. Попробовал свой код в Протеусе. У меня все работает. Твой код я не проверял. Может и тебе попробовать какой-нибудь симулятор. А то у меня такого контроллера нет в наличии. Так что пробовать не на чем. У меня все. Всех в Наступающим!
Re: Проблема с AtMega128
Добавлено: Пн дек 30, 2013 13:05:23
dreamernf
случайно фьюз совместимости с Atmega103 не включен?
Re: Проблема с AtMega128
Добавлено: Пн дек 30, 2013 14:09:55
0867532

Поменял фьюз и о ЧУДО!!!
СПАСИБО ВАМ БОЛЬШОЕ!!!
Re: Проблема с AtMega128
Добавлено: Пт янв 17, 2014 10:08:08
dreamernf
0867532 писал(а):
Поменял фьюз и о ЧУДО!!!
СПАСИБО ВАМ БОЛЬШОЕ!!!

Сам на это натыкался неоднократно
