Проблема с AtMega128

Обсуждаем контроллеры компании Atmel.
Ответить
Встал на лапы
Аватара пользователя
Сообщения: 142
Зарегистрирован: Сб май 25, 2013 21:14:11
Откуда: Москва

Сообщение 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, то светодиод будет просто гореть.
В чём проблема?
Если возникнут вопросы - посмотрите на мой аватар.
Контактная информация:
Реклама
Прорезались зубы
Сообщения: 223
Зарегистрирован: Вс апр 24, 2011 10:40:38

Сообщение 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 ;
На форуме даже есть видеоуроки, например, от Коробейникова.
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2584
Зарегистрирован: Вт сен 14, 2010 10:27:19

Сообщение radio-kot »

Может так?
PORTA ^= 1; :))
Будете проходить мимо- проходите!
Встал на лапы
Аватара пользователя
Сообщения: 142
Зарегистрирован: Сб май 25, 2013 21:14:11
Откуда: Москва

Сообщение 0867532 »

Sbor2511 писал(а): {
PORTA.5=1 ; // включить погашенный светодиод
delay_ms(500) ; // задать время горения светодиода
PORTA.5=0; // выключить светодиод
}
Вы думаете я списал этот код?, -Нет я уже программирую контроллеры 1год, и программа самописная.
Но AtMega128 для меня новый.
К тому же ваш код тоже с ошибкой, вы в цикле: включаете;ждёте;выключаете. Получается после выключения сразу включаете.
Если возникнут вопросы - посмотрите на мой аватар.
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

Sbor2511 писал(а):Цитата: В чем проблема?
Ответ: В отсутствии комментариев, и как следствие, неправильном понимании работы программы.
0867532 писал(а):К тому же ваш код тоже с ошибкой
Упс. Конфуз. :))
Docendo discimus
Контактная информация:
Реклама
Прорезались зубы
Сообщения: 223
Зарегистрирован: Вс апр 24, 2011 10:40:38

Сообщение Sbor2511 »

Признаю свою ошибку. поторопился и пропустил одну строчку кода в теле цикла. Правильно так:
{
PORTA.5=1 ; // включить погашенный светодиод
delay_ms(500) ; // задать время горения светодиода
PORTA.5=0; // выключить светодиод
delay_ms(500) ; // задержка в погашенном состоянии светодиода
}
Реклама
Встал на лапы
Аватара пользователя
Сообщения: 142
Зарегистрирован: Сб май 25, 2013 21:14:11
Откуда: Москва

Сообщение 0867532 »

всё равно, код то нерабочий.
Я думаю проблема не в программе.
=======
Я выяснил, что контроллер зависает после команды delay_ms( . . . )
В место делея поставил #asm("NOP NOP NOP NOP");
диод загорелся и осциллограф показывает прямоугольный сигнал на ноге PA5.
Как такое может быть, что б библиотека delay не работала с AtMega128?

P.S. У меня задержек в коде особых не будет, всё на таймерах, но всё равно, не приятно.
Я не могу поставить больше 7 NOP к ряду.
=======
Оказалось что не работает только delay_ms();, delay_us(); прекрасно работает.
Если возникнут вопросы - посмотрите на мой аватар.
Контактная информация:
Прорезались зубы
Сообщения: 223
Зарегистрирован: Вс апр 24, 2011 10:40:38

Сообщение Sbor2511 »

0867532! Это опять я. Попробовал свой код в Протеусе. У меня все работает. Твой код я не проверял. Может и тебе попробовать какой-нибудь симулятор. А то у меня такого контроллера нет в наличии. Так что пробовать не на чем. У меня все. Всех в Наступающим!
Встал на лапы
Сообщения: 106
Зарегистрирован: Чт мар 29, 2012 13:07:27

Сообщение dreamernf »

случайно фьюз совместимости с Atmega103 не включен?
Встал на лапы
Аватара пользователя
Сообщения: 142
Зарегистрирован: Сб май 25, 2013 21:14:11
Откуда: Москва

Сообщение 0867532 »

Изображение
Поменял фьюз и о ЧУДО!!!
СПАСИБО ВАМ БОЛЬШОЕ!!!
Если возникнут вопросы - посмотрите на мой аватар.
Контактная информация:
Встал на лапы
Сообщения: 106
Зарегистрирован: Чт мар 29, 2012 13:07:27

Сообщение dreamernf »

0867532 писал(а):Изображение
Поменял фьюз и о ЧУДО!!!
СПАСИБО ВАМ БОЛЬШОЕ!!!
:)) Сам на это натыкался неоднократно 8)
Ответить

Вернуться в «AVR»