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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> АТмега 128 с внешней памятью и светодиоды на порту F, странное поведение
GDI
сообщение Nov 8 2006, 11:54
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



странную картину наблюдаю сейчас... атмега128 в режиме с внешней памятью PA0-PA7 - адрес/данные , на порте F есть светодиоды PF0-PF2 (3 штуки) при мигании лобым светодиодом почему то дергается аналогичный бит на порте А, т.е. вывожу "1" на PF0 - выводится "1" и на PA0 , "0" - соответственно тоже выводится, что за фигня? никто не сталкивался? Для чистоты эксперимента оторвал ноги от платы - таже фигня. Проверял на нескольких платах - одно и то же - т.е. это не выход из строя одной меги.


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
otrog
сообщение Nov 8 2006, 12:07
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 232
Регистрация: 22-02-06
Из: Воронеж
Пользователь №: 14 589



Может быть включен режим совместимости с M103?


--------------------
Истина рождается в спорах; но когда страсти кипят, истина испаряется.
Go to the top of the page
 
+Quote Post
GDI
сообщение Nov 8 2006, 12:26
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



режим совместимости не включен. написал новую программу где просто мигаю светодиодом на порту PF0, если поставить галку в опциях проекта в IARe - использовать внешнюю память, то появляются импульсы на порте PA0


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
Petka
сообщение Nov 8 2006, 12:30
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 453
Регистрация: 23-08-05
Пользователь №: 7 886



Цитата(GDI @ Nov 8 2006, 15:26) *
режим совместимости не включен. написал новую программу где просто мигаю светодиодом на порту PF0, если поставить галку в опциях проекта в IARe - использовать внешнюю память, то появляются импульсы на порте PA0

ещё попробуйте отключить jtag

для avreal это ключи "m103c=off,jtagen=off"
Go to the top of the page
 
+Quote Post
klop
сообщение Nov 8 2006, 12:36
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 433
Регистрация: 28-02-06
Пользователь №: 14 788



Цитата(GDI @ Nov 8 2006, 15:26) *
режим совместимости не включен. написал новую программу где просто мигаю светодиодом на порту PF0, если поставить галку в опциях проекта в IARe - использовать внешнюю память, то появляются импульсы на порте PA0


Вы бы листинг(асм) глянули
Go to the top of the page
 
+Quote Post
GDI
сообщение Nov 8 2006, 12:44
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



чтобы предотвратить вопросы по фьюзам: стоят биты CKSEL0 = 0, CKSEL1 = 0, CKSEL3 = 0, SUT0 = 0 остальные не установлены

Пробовал разрешить внешнюю шину прямой установкой MCUCR |= 0x80, а не в опциях проекта, ничего не меняется - при разрешении внешней памяти начинает в такт со светодиодом дергаться линия А0

листинг смотрел, запись идет только в прорт F по адресу 0х98

Сообщение отредактировал GDI - Nov 8 2006, 12:51


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
Petka
сообщение Nov 8 2006, 12:46
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 453
Регистрация: 23-08-05
Пользователь №: 7 886



Цитата(GDI @ Nov 8 2006, 15:44) *
чтобы предотвратить вопросы по фьюзам: стоят биты CKSEL0 = 0, CKSEL1 = 0, CKSEL3 = 0, SUT0 = 0 остальные не установлены

Пробовал разрешить внешнюю шину прямой установкой MCUCR |= 0x80, а не в опциях проекта, ничего не меняется - при разрешении внешней памяти начинает в такт со светодиодом дергаться линия А0


ОПАНЬКИ! как это не установлены?
Go to the top of the page
 
+Quote Post
GDI
сообщение Nov 8 2006, 12:52
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



= 0 - означает установленный фьюз бит


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
klop
сообщение Nov 8 2006, 12:59
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 433
Регистрация: 28-02-06
Пользователь №: 14 788



Цитата(GDI @ Nov 8 2006, 15:44) *
листинг смотрел, запись идет только в прорт F по адресу 0х98

Ну наверное все таки 98(Decimal) = 0x62 -> Действительно PORTF
Но ето не помогает решить проблему
Go to the top of the page
 
+Quote Post
otrog
сообщение Nov 8 2006, 13:03
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 232
Регистрация: 22-02-06
Из: Воронеж
Пользователь №: 14 589



Что бы исключить догадки, приведите все фьюзы и листинг программы. И какой программой шьете.


--------------------
Истина рождается в спорах; но когда страсти кипят, истина испаряется.
Go to the top of the page
 
+Quote Post
GDI
сообщение Nov 8 2006, 13:05
Сообщение #11


Профессионал
*****

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



причем проявляется этот эффект только при попытке управления портом F , если дергать ногой на порту E, то никаких эффектов на порте А не наблюдается..


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
GDI
сообщение Nov 8 2006, 15:56
Сообщение #12


Профессионал
*****

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



Похоже этот эффект не влияет на работу шины внешней памяти.. Сейчас сделал бесконечный тест на чтение с проверкой содержимого внешней памяти на фоне мигающего светодиода - 20 минут, полет нормальный сбоев чтения нет.

В архиве находится тестовый проект - мигающий светодиод на PF0, при добавлении в файле main.c в функцию init() строки MCUCR |= 0x80; появляются импульсы на PA0
Проект под IAR 4.20a для ATmega128L при питании 3.3В
Прикрепленные файлы
Прикрепленный файл  test.rar ( 22.5 килобайт ) Кол-во скачиваний: 41
 


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Nov 8 2006, 20:30
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(GDI @ Nov 8 2006, 18:56) *
Похоже этот эффект не влияет на работу шины внешней памяти.. Сейчас сделал бесконечный тест на чтение с проверкой содержимого внешней памяти на фоне мигающего светодиода - 20 минут, полет нормальный сбоев чтения нет.

В архиве находится тестовый проект - мигающий светодиод на PF0, при добавлении в файле main.c в функцию init() строки MCUCR |= 0x80; появляются импульсы на PA0
Проект под IAR 4.20a для ATmega128L при питании 3.3В


На ощущениях выглядит так. smile.gif
Поставь подпорку на шину данных (портА) примерно килоом так 4к7. Я думаю всё у нас будет хорошо. smile.gif
Go to the top of the page
 
+Quote Post
VDG
сообщение Nov 8 2006, 21:10
Сообщение #14


Знающий
****

Группа: Участник
Сообщений: 845
Регистрация: 10-02-06
Пользователь №: 14 193



Цитата(GDI @ Nov 8 2006, 15:54) *
странную картину наблюдаю сейчас... атмега128 в режиме с внешней памятью PA0-PA7 - адрес/данные , на порте F есть светодиоды PF0-PF2 (3 штуки) при мигании лобым светодиодом почему то дергается аналогичный бит на порте А, т.е. вывожу "1" на PF0 - выводится "1" и на PA0 , "0" - соответственно тоже выводится, что за фигня? никто не сталкивался? Для чистоты эксперимента оторвал ноги от платы - таже фигня. Проверял на нескольких платах - одно и то же - т.е. это не выход из строя одной меги.

А вы не забыли запитать AVCC и AREF?


--------------------
Go to the top of the page
 
+Quote Post
GDI
сообщение Nov 9 2006, 07:30
Сообщение #15


Профессионал
*****

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



To SasaVitebsk Подпорки ставить не могу - платы уже готовые, может на новых сделаем, правда этих уже партия сделана.

To VDG AVCC запитан, на AREF стоит кондер 0.1 мкФ на землю.

Плату оставлял включенной с тестом чтения внешней памяти на ночь - сбоев не было, так что, считаю, что данный эффект можно считать безобидным.

Никто не пробовал запустить мой тест? может это у меня партия атмег такая? Тест можно запустить на голой меге, даже светодиод не обязателен, у меня эффект проявляется, даже если ноги PF0 и PA0 висят в воздухе(контролировал осциллографом), в тесте и у меня на плате мега работает от внутреннего RC генератора на 8МГц


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
GDI
сообщение Nov 9 2006, 08:17
Сообщение #16


Профессионал
*****

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



Наконец то найдена ошибка (или не ошибка)... если включить бас кипер XMCRB = 0x80; то все эффекты пропадают, но даже и с выключенным бас кипером во время операций чтения-записи линия A0 перестает дергаться на время собственно записи-чтения - по-этому и не было ошибок чтения. Cпасибо Kurtу.


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
ARIM
сообщение Nov 9 2006, 08:58
Сообщение #17


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

Группа: Свой
Сообщений: 94
Регистрация: 14-04-05
Из: Россия
Пользователь №: 4 130



Цитата(GDI @ Nov 9 2006, 11:17) *
Cпасибо Kurtу.

а почему не SasaVitebsk'у?
Go to the top of the page
 
+Quote Post
KRS
сообщение Nov 9 2006, 09:59
Сообщение #18


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(GDI @ Nov 9 2006, 11:17) *
Наконец то найдена ошибка (или не ошибка)... если включить бас кипер XMCRB = 0x80; то все эффекты пропадают, но даже и с выключенным бас кипером во время операций чтения-записи линия A0 перестает дергаться на время собственно записи-чтения - по-этому и не было ошибок чтения. Cпасибо Kurtу.


Так это просто помеха, может плата криво разведена. или наводка на оцилограф! Шина то в 3ьем состоянии если баскипер выключить
Go to the top of the page
 
+Quote Post
=GM=
сообщение Nov 10 2006, 10:18
Сообщение #19


Ambidexter
*****

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



Цитата(GDI @ Nov 8 2006, 15:56) *
Похоже этот эффект не влияет на работу шины внешней памяти.. Сейчас сделал бесконечный тест на чтение с проверкой содержимого внешней памяти на фоне мигающего светодиода - 20 минут, полет нормальный сбоев чтения нет.
В архиве находится тестовый проект - мигающий светодиод на PF0, при добавлении в файле main.c в функцию init() строки MCUCR |= 0x80; появляются импульсы на PA0
Проект под IAR 4.20a для ATmega128L при питании 3.3В

Удосужился взглянуть на вашу тестовую пограмму, не могу понять, как она работает.

В программе обработки прерывания от таймера вызывается программа led_act_fsm. В первой строке этой подпрограммы инициализируется переменная led_act_delay=10. Затем в следующей строке из этой переменной вычитается единица. Затем проверяется, не равна ли нулю эта переменная. Если она равна нулю, то инвертируется ножка, управляющая светодиодом. Но эта переменная никогда не будет равна 0, т.к. на входе в подпрограмму устанавливается на 10, на выходе - 9. Смотрите фрагмент ниже.

Код
#define LED_ACT_NORMAL_DELAY    10
#pragma vector = TIMER1_OVF_vect
__interrupt void timer_isr(void)
{
  TCNT1 = TIMER_VALUE;
  led_act_fsm();
}

void led_act_fsm(void)
{
  static byte led_act_delay = LED_ACT_NORMAL_DELAY;
  led_act_delay--;
  if(!led_act_delay)
  {
   leds_act_tgl();
   switch(led_act_state)
   {
    case ACT_LED_NORMAL:
     led_act_delay = LED_ACT_NORMAL_DELAY;
     break;
    case ACT_LED_QF_ERROR:
     led_act_delay = LED_ACT_QF_ALARM_DELAY;
     break;
   }
  }
}


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
vooon
сообщение Nov 10 2006, 22:15
Сообщение #20


Участник
*

Группа: Свой
Сообщений: 72
Регистрация: 27-06-06
Из: Msk
Пользователь №: 18 401



Цитата
Но эта переменная никогда не будет равна 0, т.к. на входе в подпрограмму устанавливается на 10, на выходе - 9
Код
static byte led_act_delay = LED_ACT_NORMAL_DELAY;


Хм, мне всегда казалось что static инициализируется только один раз wacko.gif
Go to the top of the page
 
+Quote Post
=GM=
сообщение Nov 13 2006, 15:14
Сообщение #21


Ambidexter
*****

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



Цитата(vooon @ Nov 10 2006, 22:15) *
Цитата
Но эта переменная никогда не будет равна 0, т.к. на входе в подпрограмму устанавливается на 10, на выходе - 9
Код
static byte led_act_delay = LED_ACT_NORMAL_DELAY;


Хм, мне всегда казалось что static инициализируется только один раз wacko.gif


Объясните тогда, что делает этот оператор static byte led_act_delay = LED_ACT_NORMAL_DELAY;?
Делается ли присвоение каждый раз при входе в подпрограмму или нет?

Вообще непонятно, зачем объявлять static в подпрограмме, переменная static является такой же глобальной переменной, как и extern, только в пределах файла, где она объявлена, и для удобства пользования должна быть объявлена на внешнем уровне. Объявление переменной может, конечно, включать инициализацию.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
vooon
сообщение Nov 13 2006, 16:48
Сообщение #22


Участник
*

Группа: Свой
Сообщений: 72
Регистрация: 27-06-06
Из: Msk
Пользователь №: 18 401



Цитата
Объясните тогда, что делает этот оператор static byte led_act_delay = LED_ACT_NORMAL_DELAY;?


Попробую smile.gif

в программе определена символическая константа:
#define LED_ACT_NORMAL_DELAY 10

препроцессор везде где встретит LED_ACT_NORMAL_DELAY заменит на 10
т.е. мы получим код:
static byte led_act_delay = 10;

Переменные типа static инициализируются только один раз (только при первом вызове функции)
т.е. мы определяем led_act_delay имеющую тип byte (typedef unsigned char byte;) которой присваивается 10.

Цитата
Вообще непонятно, зачем объявлять static в подпрограмме, переменная static является такой же глобальной переменной, как и extern, только в пределах файла, где она объявлена, и для удобства пользования должна быть объявлена на внешнем уровне. Объявление переменной может, конечно, включать инициализацию.


С этим не соглашусь, static является локальной => виден только
в этой функции, а не в пределах файла.

Два простых примера:
Код
/* Демонстрация автоматических и статических локальных переменных */
#include <stdio.h>

void func1 (void)
{
    static int x = 20;
    int y = 20;

    printf ( "x = %i, y = %i\r\n", x--, y-- );
}

void main (void)
{
    int count;

    for ( count = 0; count < 20; count++ )
    {
        printf ( "Iteration %i: ", count );
        func1 ();
    }
}

Код
/* Демонстрация автоматических и статических локальных переменных
** попробуем узнать x из основной программы
*/
#include <stdio.h>

void func1 (void)
{
    static int x = 20;
    int y = 20;

    printf ( "x = %i, y = %i\t", x--, y-- );
}

void main (void)
{
    int count;

    for ( count = 0; count < 20; count++ )
    {
        printf ( "Iteration %i: ", count );
        func1 ();
        printf ( "x = %i\r\n", x );
    }
}


PS: пытался обьяснить точно (чтобы небыло недоразумений smile.gif )
Go to the top of the page
 
+Quote Post
=GM=
сообщение Nov 13 2006, 17:36
Сообщение #23


Ambidexter
*****

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



Цитата(vooon @ Nov 13 2006, 16:48) *
Цитата
Объясните тогда, что делает этот оператор static byte led_act_delay = LED_ACT_NORMAL_DELAY;?

Попробую smile.gif
PS: пытался обьяснить точно (чтобы небыло недоразумений smile.gif )

Как я понял, объявляя статическую переменную внутри функции, мы как бы сохраняем ее текущее значение вне этой функции, но использовать ее вне функции не можем. Тогда понятно, как вышеупомянутый фрагмент работает, но так неудобно для понимания...Присваивание делается один раз, скорее всего, при инициализации, а видится как будто, переменная присваивается каждый раз при вызове функции. Я ж и говорю, птичий язык(:-).


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
GDI
сообщение Nov 14 2006, 08:29
Сообщение #24


Профессионал
*****

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



Цитата
(GDI @ Nov 9 2006, 11:17)

Cпасибо Kurtу.


а почему не SasaVitebsk'у?


Потому что Kurt на #ru_embedded подсказал мне про бас-кипер.

Цитата
Так это просто помеха, может плата криво разведена. или наводка на оцилограф! Шина то в 3ьем состоянии если баскипер выключить


Плата разведена нормально - минимальное расстояние между этими проводниками ~1см (как между ножками PA0 и PF0), да и наводкой это не назовешь - красивый сигнал размахом 3.3 вольта.

Цитата
Я ж и говорю, птичий язык(:-).


Это Си.


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post

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

 


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


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