[image]

Стенд и оборудование для испытаний и измерений VIII

 
1 155 156 157 158 159 216
UA Non-conformist #28.03.2013 10:56  @GOGI#28.03.2013 10:40
+
-
edit
 

Non-conformist

аксакал

Принял приглашение, вижу расшаренную папку.

Давно хотел спросить, как сохранять проекты ИАР, чтобы сохранялись все настройки конфига? И по какому файлу потом щёлкать, чтобы открывалось всё так же, как и было перед закрытием ИАР при окончании сеанса работы? По файлу с разводным ключом и отвёрткой?
   
RU GOGI #28.03.2013 11:00  @Non-conformist#28.03.2013 10:56
+
-
edit
 
Non-conformist>По файлу с разводным ключом и отвёрткой?
Да, по нему.
   19.019.0
UA Non-conformist #28.03.2013 11:01  @GOGI#28.03.2013 10:40
+
-
edit
 

Non-conformist

аксакал

GOGI> Какой следующий шаг?
А какой тут шаг... Поскриплю немного мозгами над тем, что ты там понаписал про шестнадцатеричную систему, хе-хе... Наведу справки... Это капец какой-то...

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

зы: Да, дропбокс для совместной работы - это вещь.
   
UA Non-conformist #28.03.2013 11:33  @Non-conformist#28.03.2013 11:01
+
-
edit
 

Non-conformist

аксакал

Что делает эта программа? Заменил файл, поставил галку, скомпилил без ошибок, прошил - ни на запале (РС4), ни на пищалке (РС5) импульсов нет... ??? Что такое "10000" и "100000"?

code text
  1. #include <ioavr.h>
  2. #include <inavr.h>
  3. #include <intrinsics.h>
  4. #define Out1DDR DDRC_DDC4
  5. #define Out1Pin PINC_PINC4
  6. #define Out1Port PORTC_PORTC4
  7. #define Crystal 12000000
  8.     void SetOut1 (unsigned char Duration)
  9.     {
  10.       unsigned long Duration1=10000*(long)Duration;
  11.       Out1DDR=1;
  12.       while(Duration1>0){
  13.         Out1Pin=1;
  14.         __delay_cycles(Crystal/100000);
  15.         Duration1-=1;
  16.       }
  17.     }
  18.     void main(void)
  19.     {
  20.       SetOut1(10);
  21.      
  22.     }
   

Xan

координатор

Никогда внутри программы не пишу строчек вроде

Порт_С = 0х08;

Всегда в отдельном файле (Ports.h) пишу определения вроде такого:

#define Led_Green RC3

(Мой компилятор "RC3" понимает как "Порт С, бит № 3"
Я не знаю, можно ли у Атмеля одной машинной командой устанавливать или сбрасывать один бит порта. Или проверять один бит.)

После этого я могу включить или выключить зелёный светодиод:

Led_Green = 1;
Led_Green = 0;

Если после этого зелёный светодиод придётся переселить на другую ногу, достаточно будет подправить только одну строчку в определении.

Но и это ещё неправильно (для выходов).
А правильно определить и вот такое:

#define Led_Green_On { Led_Green = 1; }
#define Led_Green_Off { Led_Green = 0; }

И в проге писать уже так:

Led_Green_On;
Led_Green_Off;

А если вдруг светодиод подключен к +5 вольтам и его зажигать надо, дёргая его ногу к земле, то достаточно переписать строчки в определении:

#define Led_Green_On { Led_Green = 0; }
#define Led_Green_Off { Led_Green = 1; }

-- зажигается подачей нуля.

При таком подходе от тыканья паяльником меняется только файл определений, но не текст программы.
Программу легко переносить между разными чипами с разным числом ног и разной разводкой.
   9.09.0
UA Non-conformist #28.03.2013 11:55  @Xan#28.03.2013 11:49
+
-
edit
 

Non-conformist

аксакал

Xan> Я не знаю, можно ли у Атмеля одной машинной командой устанавливать или сбрасывать один бит порта. Или проверять один бит.)

GOGI: ... Ну и IAR, если в конфигах биты расписаны, позволяет напрямую управлять отдельными битами в порту. И также получать состояние одного бита. Например, сделать что-то если на 4 пине порта C логическая единица
if (PINC_PINC4==1) {do_something()}
или просто
if (PINC_PINC4) {do_something()}
   
KZ Xan #28.03.2013 12:03  @Non-conformist#28.03.2013 11:55
+
-
edit
 

Xan

координатор

Non-conformist> if (PINC_PINC4) {do_something()}

Ну вот и здесь можно аналогично определить:

#define ADC_Ready PINC_PINC4

И потом писать:

if (ADC_Ready) {do_something()}

Или, если сигнал инверсный:

#define ADC_Ready !PINC_PINC4

ЗЫ
Наверное PortC_PINC4 ?

ЗЗЫ
или ~PINC_PINC4 ?
   9.09.0
RU Бывший генералиссимус #28.03.2013 12:06  @Non-conformist#28.03.2013 11:55
+
-
edit
 
Xan>> Я не знаю, можно ли у Атмеля одной машинной командой устанавливать или сбрасывать один бит порта. Или проверять один бит.)

Можно, sbi и cbi для установки и обнуления, sbis и sbic - для проверки.
   10.010.0
RU GOGI #28.03.2013 13:40  @Non-conformist#28.03.2013 11:33
+
-
edit
 
Non-conformist> Что делает эта программа? Заменил файл, поставил галку, скомпилил без ошибок, прошил - ни на запале (РС4), ни на пищалке (РС5) импульсов нет... ??? Что такое "10000" и "100000"?
Мне интересно, а каким файлом ты прошивал? Я в конфигурации Debug делал и на выходе просто не было ни хекс, ни бин прошивки, только ubrof8 файл для отладки. Ты файлом 1.d90 прошил?
Зайди в папку release, там файл 1.hex, которым нужно прошивать.
Цифры 10000 1000000 совместно с дефайном Crystal 12000000 позволяют уйти от установки задержек по программе в тактах процессора к задержкам в виде долей секунды. По сути сейчас __delay_cycles(Crystal) дает одну секунду задержки.
   19.019.0
UA Non-conformist #28.03.2013 13:42  @Non-conformist#27.03.2013 18:59
+
-
edit
 

Non-conformist

аксакал

Non-conformist> Обнаружил, что общий для МК и усилителя стабилизатор питания есть не совсем гут. При подключении МК-платы, питание на выходе стабилизатора проседает с 5,02 В до 4,99 В. Этого, как оказалось, вполне достаточно, чтобы ноль, сбалансированный делителем на входе ОУ, почти ушёл за пределы линейного диапазона.
Буду делать отдельный стабилизатор на МК. Бо шо попало получается - ток потребления МК будет гулять в зависимости от того, какое действие МК выполняет в данный момент (особенно в период настройки-калибровки - нажимание кнопок, активация пищалки и т.д.), а вместе с током потребления будет гулять и общее напряжение питания. А вместе с общим напряжением питания будут гулять данные АЦП...

На плату МК поставлю второй точно такой же стабилизатор, и общей деталью по питанию между усилителем и МК останется только батарейка. Думаю, должно помочь.
   
UA Non-conformist #28.03.2013 13:45  @GOGI#28.03.2013 13:40
+
-
edit
 

Non-conformist

аксакал

GOGI> Мне интересно, а каким файлом ты прошивал?
Я взял сишный текст из расшаренной папки, создал новый проект, скопипастил его туда, изменил в конфигах расширение с .d90 на .hex, mega32, intel standard - и всё скомпилилось без ошибок...

Файл .hex (которым прошивал) брал из папки Debug.
   
UA Non-conformist #28.03.2013 13:51  @GOGI#28.03.2013 13:40
+
-
edit
 

Non-conformist

аксакал

GOGI> Цифры 10000 1000000 совместно с дефайном Crystal 12000000 позволяют уйти от установки задержек по программе в тактах процессора к задержкам в виде долей секунды.
Я понял, что єто для того, чтобы уйти от тактов. Но к каким именно долям? Тысячным, т.е. "милли-"? Просто немного странно - 12 000 000 - это явно герцы, а 10 000 и 100 000 - явно не герцы, хотя выделены таким же зелёным цветом. Не вполне наглядно имхо...
   
RU GOGI #28.03.2013 13:52  @Non-conformist#28.03.2013 13:45
+
-
edit
 
Non-conformist> Я взял сишный текст из расшаренной папки
Зачем?!!! Прямо в ней и открывай проект, и с неё же прошивай. В этом и есть великий смысл общей папки!
   19.019.0
RU GOGI #28.03.2013 13:55  @Non-conformist#28.03.2013 13:51
+
-
edit
 
Non-conformist> Я понял, что єто для того, чтобы уйти от тактов. Но к каким именно долям? Тысячным, т.е. "милли-"? Просто немного странно - 12 000 000 - это явно герцы, а 10 000 и 100 000 - явно не герцы, хотя выделены таким же зелёным цветом. Не вполне наглядно имхо...
Ну я же пишу, когда ты хочешь сделать выдержку 1 секунду, ты пишешь __delay_cycles(Crystal);
А когда хочешь сделать выдержку 1/100000 секунду (10 мкс), то и пишешь __delay_cycles(Crystal/100000);
А если надо выдержку 5 секунд, то пишешь __delay_cycles(Crystal*5);
   19.019.0
А вот если ты скачаешь Proteus, то сможешь программу отлаживать вот так!
Прикреплённые файлы:
proteus.PNG (скачать) [1280x774, 140 кБ]
 
 
   19.019.0
UA Non-conformist #28.03.2013 14:17  @GOGI#28.03.2013 13:55
+
-
edit
 

Non-conformist

аксакал

GOGI> ...(Crystal);
GOGI> ...(Crystal/100000);
GOGI> ...(Crystal*5);
Вот теперь понятно: кристалл (в смысле одну секунду) поделить (умножить) на нужное кол-во частей.
   
UA Non-conformist #28.03.2013 14:19  @GOGI#28.03.2013 13:52
+
-
edit
 

Non-conformist

аксакал

Non-conformist>> Я взял сишный текст из расшаренной папки
GOGI> Зачем?!!! Прямо в ней и открывай проект, и с неё же прошивай. В этом и есть великий смысл общей папки!
Я решил проверить конфиг, а там меня не пустило (нет пунктов и вообще всё неактивно), вот я и решил для надёжности из твоего проекта взять только текст, а конфиг сделать по образцу проекта, который успешно прошился... Сейчас попробую.
   
UA Non-conformist #28.03.2013 14:20  @GOGI#28.03.2013 14:01
+
-
edit
 

Non-conformist

аксакал

GOGI> А вот если ты скачаешь Proteus, то сможешь программу отлаживать вот так!
Вечером скачаю.
   
UA Non-conformist #28.03.2013 14:39  @Non-conformist#28.03.2013 14:19
+
-
edit
 

Non-conformist

аксакал

GOGI>> Зачем?!!! Прямо в ней и открывай проект, и с неё же прошивай.
Non-conformist> Сейчас попробую.
Что-то не получается. Просто указал аврдуде на 1.hex в "Новой папке". С аврдудой всё в порядке. Нет импульсов на PORTC = 16 ((

Решил контрольно прошить той первой прошивкой, думал может отвалилось что - да нет, всё работает, наблюдаю импульсы. Вот твой текст main.c который у меня не даёт импульсов на PORTC = 16:

code text
  1. #include <ioavr.h>
  2. #include <inavr.h>
  3. #include <intrinsics.h>
  4. #define Out1DDR DDRC_DDC4
  5. #define Out1Pin PINC_PINC4
  6. #define Out1Port PORTC_PORTC4
  7. #define Crystal 12000000
  8.     void SetOut1 (unsigned char Duration)
  9.     {
  10.       unsigned long Duration1=10000*(long)Duration;
  11.       Out1DDR=1;
  12.       while(Duration1>0){
  13.         Out1Pin=1;
  14.         __delay_cycles(Crystal/100000);
  15.         Duration1-=1;
  16.       }
  17.     }
  18.     void main(void)
  19.     {
  20.       SetOut1(10);
  21.      
  22.     }


Может в конфигах что не так? Но этот текст и с моими конфигами почему-то не хочет ногой дёргать... ((
   
RU GOGI #28.03.2013 14:51  @Non-conformist#28.03.2013 14:39
+
-
edit
 
Мне кажется он просто дергает мало, ты не успеваешь осциллографом сесть. Зациклил дерганье.
   19.019.0
UA Non-conformist #28.03.2013 15:24  @GOGI#28.03.2013 14:51
+
-
edit
 

Non-conformist

аксакал

Пробую, не получается. Видно, что ток потребления МК после прошивки на пару миллиампер больше, чем со стёртым кристаллом. Видно, что такты есть (ВЧ-шум на РС4 20 мВ). Импульсов нет.

Почему в твоём проекте я не могу посмотреть настройки? Проект создан в какой-то другой конфигурации?
   
UA Non-conformist #28.03.2013 15:31  @Non-conformist#28.03.2013 15:24
+
-
edit
 

Non-conformist

аксакал

О, а сейчас уже видно конфигурацию. У тебя в Linker'е "output format" стоИт "ubprof8 (forced)", а надо, как я понимаю, "intel-standard"?
   
UA Non-conformist #28.03.2013 15:40  @Non-conformist#28.03.2013 15:31
+
-
edit
 

Non-conformist

аксакал

Попробовал и так. Без изменений. Прошивал 1.hex из папки Release.
   
UA Non-conformist #28.03.2013 15:58  @Non-conformist#28.03.2013 15:40
+
-
edit
 

Non-conformist

аксакал

Конфигурация проекта ни при чём. Сейчас создал проект с нуля, настроил, скопипастил свою "грамотную" прошивку, скомпилил, прошил - есть импульсы. Затёр текст в редакторе ИАР'а, скопипастил твой текст, скомпилил (т.е. с теми же самыми настройками конфигурации), прошил - нет импульсов.

Получается, что либо в тексте ошибка, либо в настройках конфигурации, которые чувствительны к данному конкретному тексту.

зы: А в Протеусе - всё пучочком, да? ))
   
UA Serge77 #28.03.2013 16:00  @Non-conformist#28.03.2013 15:58
+
-
edit
 

Serge77

модератор

давайте программирование обсуждать в теме МК, найдите её.
   3.0.193.0.19
1 155 156 157 158 159 216

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru