Курс: программирование МК AVR "с нуля"

 
1 6 7 8 9 10 11 12
RU termostat #21.02.2004 03:49
+
-
edit
 

termostat

аксакал

Я понимаю, что не очень красиво выкладывать в форуме целые проги.
 


А ты просто убери через недельку эти тексты кнопочкой "edit" - а лучше прикреплять изнчально файл .zip с прогой.

Я так и не понял каких линий тебе не хватило для 6-ти преобрзований.

Компилируй прогу и смотри ее работу. а Тини26 можно в "Астудио" от Атмела тлаживать.
+
-
edit
 

Serge77

модератор

termostat, 21.02.2004 02:49:03 :
Я понимаю, что не очень красиво выкладывать в форуме целые проги.
 


А ты просто убери через недельку эти тексты кнопочкой "edit" - а лучше прикреплять изнчально файл .zip с прогой.
 


Не нужно убирать! Пока эта тема не очень сильно загружена, думаю можно и программы целиком выкладывать, конечно если не очень большие. А лучше прикреплять в виде ZIP архива.
+
-
edit
 

coolnik

новичок
termostat, 21.02.2004 03:49:03:
Я так и не понял каких линий тебе не хватило для 6-ти преобрзований.
 

Ну как же? Все что можно уже выдается в порт А, а все ADC каналы там! :( Где ж я их возьму-то? :( И все-таки, просветите насчет Pin Change. Please.
 
RU termostat #21.02.2004 19:11
+
-
edit
 

termostat

аксакал

Открываешь ДШ кликаешь бинокль, пишешь слово Change - ищешь: находишь на 38й странице:

Pin Change Interrupt

The pin change interrupt is triggered by any change on any I/O pin of Port B and pins PA3, PA6, and PA7...

Изменение на уровня сигнала на перечисленных ножках вызывает прерывания. Читаешь дальше - они отличаются от других прерываний: если они запрещены то флаг не выставляется!

Удобно организовывать програмные прерывания.
+
-
edit
 
RU termostat #25.02.2004 14:24
+
-
edit
 

termostat

аксакал

Появилась идейка у меня как отлаживать в эмуляторе VMLAB устройства которые он пока не поддерживает.

Используем мы МК менее чем на половину и ног свободных достаточно, дак вот нужно неиспользуемую часть ресурсов МК применить для эмуляции нужного устроцства-копонента.

Этот вариант полезен для эмуляции устройств принимающих сигналы от МК.

\\\\

А подавать на МК можно любые сигналы, в том числе и аналоговые используя генератор цифровых последовательностей и RC фильтр. Количество сигналов до 16. Можно например изобразить сигнлы с акселерометра и с датчика давления.

Для моделирования аналоговых сигналов нужно задать последовательность из значений "1" "0" и "половина питания" с мин. шагом в 100 нС.

Значит при 8-ми битном разрешении можно будет изобразить сигнал с мин. периодом по теор. Котельникова-Найквиста в 2 х 256 х 100 нС = 51.2 мкС т.е. макс частота аналогового сигнала

8-битного составит 19.5 кГц
10-битного в 2 раза меньше 9.75 кГц а
12-битного в 4 раза меньше 4.88 кГц

этого более чем достаточно для изображения аналогового сигнала акселерометра и датчика давления.

Можно обработать в эмуляторе на МК и реальный аналоговый сигнал - его нужно записать на звуковую карту и затем "оцифровку" перенести в текстовый файл генератора цифровых последовательностей. "Digital pattern generators. Non-ruturn-to-zero (NRZ) generator (interactive)"

Lioxa

втянувшийся
А ещё всё ето можно испытать здесь рельно Proteus 6 Professional.
 
?? Poputchik #25.02.2004 15:47
+
-
edit
 

Poputchik

новичок
termostat, 13.02.2004 12:55:46 :
12 февраля 2004 года получил посылку с Контеста ATMEL
Atmel AVR 2004 Design Contest (заказывал 31.01.2004 - очень быстро прислали!)
 


Аналогично

прислали по FedEX
из штатов ушло 23.02.04
изучаю.
 

Lioxa

втянувшийся
>>http://www.circuitcellar.com/avr2004 (заказывал 31.01.2004 - очень быстро >>прислали!)

Насколько я понял сейчас заказать уже нельзя :((

на Analog Devices | Semiconductors and Signal Processing ICs есть магнитный атчик AD22151G , можно заказать на халяву.
 
RU termostat #28.02.2004 03:41
+
-
edit
 

termostat

аксакал

Оказвается можно настроить эмулятор AVR - VMLAB версии 3.9 от AVR simulator, debugger and IDE with WinAVR support так, что он будет работать без ограничений.

Подробнее в пркрепленном файле (58 кБ)
Прикреплённые файлы:
 
+
-
edit
 

coolnik

новичок
Помогите разрешить такой вопросик. Можно ли читать только один бит из целого регистра. Например, меня интересует изменение 1-го бита в PINA, по которому будет производиться некоторое действие.(Если бит1 PINA = = 1, то DDRB=0x00;) Остальные биты этого регистра будут меняться непредсказуемо и трогать их мне не надо.
 
RU termostat #29.02.2004 03:26
+
-
edit
 

termostat

аксакал

coolnik, 29.02.2004 02:39:30 :
Если бит1 PINA = = 1, то DDRB=0x00;) Остальные биты этого регистра ... трогать мне не надо.
 


анализируй нужный бит:

Если проверить то:

if (PINA && 2) // xxxx xxx1x && 0000 0010 "истино"
DDRB=0x00;


Если ждать пока бит1 станет еденицей, то:

while (!(PINA && 2)); // в этом месте будем торчать
// пока бит1 не станет "1"
DDRB=0x00;


////////////////////

Чтоб ты не делал с регистром PINA - это не может повлиять на МК.
Это сообщение редактировалось 29.02.2004 в 03:31
+
-
edit
 

coolnik

новичок
termostat, 29.02.2004 03:26:35 :
if (PINA && 2) // xxxx xxx1x && 0000 0010 "истино"
 


Чего-то не работает так:

PORTC|=0X02; //выдаю импульс подсветки
while (!(PINC && 0x01));//пока не пришло подтверждение на PC0 жду.
DDRB=0X00;
PORTC=0x00;

не хочет VMLAB сидеть в цикле, если выполнилась комманда PORTC|=0х02 вне зависимости от того, что я вижу в регистре PINC, даже если 0-ой бит равен 0. А вот если убрать PORTC|=0х02, то все работает, но без нее никак нельзя. :(
 
+
-
edit
 

coolnik

новичок
Выкрутился маскированием PINC примерно так:

PORTC|=0X02;
go:
pin=PINC & 0b00000001 ;выделяем только нужный бит
if (!(pin == 0b00000001)) goto go;\\если не равны ждемс.

все работает, но корявость кода глаза режет даже мне. Есть предложения по оптимизации?
 
RU termostat #29.02.2004 17:44
+
-
edit
 

termostat

аксакал

Последняя строчка будет:

if (!pin) goto go; или if (pin) goto go;

я просто запутался уже какой бит у тебя чему должен быть равен. Сам выбери вариант.

\\\\\\\\

goto конечно режет глаз.

Но и первый вариант должен работать, может несколько "nop" поставить перед while - просто МК возможно "не успевает"

проверь была ли ; после вайл?
+
-
edit
 

coolnik

новичок
Исправления принял, спасибо.
Так вот вроде бы и все, программа написана, все работает, но, выполняя ее в пошаговом режиме, заметил такой глюк: после обработки прерывания по завершению АЦП программа возвращается в main() и сразу же скачет на обработчик INT0, хотя события для этого прерывания не было (но оно было раньше, когда выполнялось прерывание от АЦП). Как это объясняется? Может, существует очередь прерываний?
Прикреплённые файлы:
adc.c (скачать) [2,1 кБ]
 
 
 

Lioxa

втянувшийся
Существует . Для каждого МК смотри datasheet страницу Interrupts.
 

Lioxa

втянувшийся
termostat > у тебя в оглавлении на http://avr123.by.ru/avrpic06.htm написанно

> Задача 03
>пишем программу для AT90s2313 измеряющую 20 раз в секунду частоту входного >сигнала и отсылающую полученные данные по rs232 (например на COM порт ПК).

А на http://avr123.by.ru/mkkurs03.htm написанно
>1) Создать программу для МК AT90s2313 измеряющую 50 раз в секунду частоту >сигнала подаваемого на "ножку" МК и отсылающую полученные данные по rs232 >(например на COM порт ПК)

Так как всётаки считывать 20 раз в секунду а не 50 ???
 
RU termostat #29.02.2004 20:27
+
-
edit
 

termostat

аксакал

Это у меня "закладка" такая для определения внимательности чтения курса.

А по задаче конечно видно сколько раз в секунду меряем.
+
-
edit
 
Рад что народ интересуется AVR-ами.
Я видел на http://yurisoft.nm.ru С-компиляторы CodeVisionAVR и ImageCraft. версии старенькие, но полностью рабочие.

Если что - пишите на почту, чем смогу помогу.
fas_tmtut.by
 
Это сообщение редактировалось 01.03.2004 в 23:59
RU termostat #01.03.2004 08:16
+
-
edit
 

termostat

аксакал

coolnik, 29.02.2004 18:58:33 :
Исправления принял, спасибо.
... по завершению АЦП программа возвращается в main() и сразу же скачет на обработчик INT0, ... Как это объясняется?
 


вроде в тексте исправлений не видно?

Проверь по ДШ нужно ли сбрасывать флаги прерываний - тогда это нужно сделать в процедурах обработки прерываний. У тебя только в инициализации.

\\\\\\\\\

после: pin=PINA & 0b00001000;
pin - может быть либо 8 либо 0.

если ты ждешь 8, то можно написать:

if (!pin) goto go;

или

if (!pin) // если pin ноль, идем на go
goto go;

Условие "истино" если оно "не ноль", "ложно" это "ноль".
т.е. любое число не равное нулю - "истино"

не нужно {} скобки ставить если выражение идет после или в следующей строке за: if while for else.
+
-
edit
 
coolnik, 29.02.2004 02:39:30 :
Помогите разрешить такой вопросик. Можно ли читать только один бит из целого регистра. Например, меня интересует изменение 1-го бита в PINA, по которому будет производиться некоторое действие.(Если бит1 PINA = = 1, то DDRB=0x00;) Остальные биты этого регистра будут меняться непредсказуемо и трогать их мне не надо.
 


А не пробовал так (?):
if (PinB.1==1)
{
...
}
 
+
-
edit
 

Balancer

администратор
★★★★★
Народ, вам под этот топик отдельный подфорум не открыть? Проще разбираться в том, что уже есть будет :)
 
+
-
edit
 

coolnik

новичок
Слушай, [Vince]. То, что нужно. Это-то я и хотел. Все работает на ура!

Termostat, спасибо за консультацию, по правде сказать, я сначала-то просто и не въехал, что к чему. Но теперь до конца разобрался с этими «истина» и «ложно».
А насчет флагов прерываний, я как не понимал это, когда тренировался на задачах, в составе курса AVR c нуля, так и теперь не понимаю, зачем их сбрасывать? Что это дает? Тем более, что в VMLAB и так все работает. И еще как можно сбросить флаг, установленный в единицу, записав в него единицу? Тут же вопрос: может ли быть так, что в VMLAB все работает, а в железе откажется?
 
RU termostat #01.03.2004 19:13
+
-
edit
 

termostat

аксакал

А насчет флагов прерываний ... зачем их сбрасывать? Что это дает?
 


Сбрасывать их или нет звисит от устройства МК (читать ДШ) и собственно программы.

И еще как можно сбросить флаг, установленный в единицу, записав в него единицу?
 


Это скорей филосовский вопрос, просто так устроен AVR.
в PIC и 8051 например более "по-человечески" - чтоб сбросить "флаг" суть "единицу" нужно вписать "0". Так пожелали разработчики МК.


может ли быть так, что в VMLAB все работает, а в железе откажется?
 


Конечно. Критерий истины - эксперимент, а все что не само устройство это теория по сути.

Потому люди и платят по 300 бакс за железный эмулятор, чтоб прогу прямо в устройстве отлаживать по JTAG. Однако в таком режиме тоже не все возможно. Ведь внешние устройства не "заморозишь" как в VMLAB или PROTEUS.
1 6 7 8 9 10 11 12

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