Краткий Курс программирование AVR - часть 8

 
1 2 3 4 5 6 7 12
RU termostat #07.12.2005 11:45
+
-
edit
 

termostat

аксакал

Это продолжение темы.

предыдущая 7-я часть целиком по ссылке:
Форумы Авиабазы

Откройте и сохраните на своем ПК все предыдущие части топика кнопкой "версия для печати"


Краткий Курс AVR начинающим - avr123.nm.ru

Главное на первой странице !!! там ключ ко всему курсу и последние изменения.

Обязательно читатйте первую страницу Курса - в он-лайн самая свежая версия !


Вы можете скачать "Краткий Курс AVR с нуля" одним файлом
h--p://avr123.nm.ru/avr123.nm.ru.rar

Качайте, читайте, программируйте.

FAQ AVR - к курсу h--p://avr123.nm.ru/AVRFAQ.rar

Многое уже спрашивали, там есть ответы!


Если вы начинающий:

- используй МК ATmega16 (-32 -64 -128)

- лучший (на мой взгляд) для начинающего
компилятор Си для AVR CodeVisionAVR.

Дистрибутив содержит папку 'example' с великолепными примерами!


Проверить работу вашего устройства, не покупая радио
деталей (эл. копонентов) и без пайки, можно с помощью:

1) софт симулятора (почти эмулятора) для AVR - VMLAB

(маленькое чудо - помоему) от AmcTools.com
я видел его здесь: lord-n.narod.ru/walla.html

Там же куча книг в электронном виде для начинающих, и
Книга "Исскуство схемотехники" Хоровиц Хилл - оно вам НАДА!!!

2) PROTEUS - супер софтина от схемы до платы и с симуляцией AVR 8051 PIC Motorola, а с версии 6.8 и ARM7 !

Proteus 6.7 sp3 там я видел:
h--p://www.rivstech.ru/downloads/index.php?subcat=35&PHPSESSID=c1db59c4016edcc6dc2988398337701a


Application Notes -Апликухи от производителей микроконтроллеров

в них Примеры ПРАВИЛЬНОГО применения МК - главное Схемы ! теория ! и практика:

"AVR 8-Bit RISC - Application Notes"
atmel.com/dyn/products/app_notes.asp?family_id=607

"Проекты на Микроконтроллерах - на русском языке"
telesys.ru/projects.shtml

"PIC - Application Notes" более 800
microchip.com/1010/suppdoc/appnote/alpha/index.htm

"MOTOROLA = Freescale - Application Notes" около 200
freescale.com/webapp/sps/library/documentationlist.jsp?rootNodeId=0162468449&nodeId=0162468449&Device=All&DocTypeKey=10KscRcb&Results=99999999&tid=t8dr

По ссылкам выше вы найдете ЛЮБОЕ устройство и "КИРПИЧИКИ" для постройки вашего устройства !

=========

Узнать о ценах и наличии эл. компонентов
можно на REL.ru и eFind.ru

makc

новичок
Всем привет!
Начал осваивать курс AVR123 и споткнулся на первом же упражнении, где при инкрементировании PORTB нужно отображать двоичный код "горящими" светодиодами(изначально в примере автора курса он отображается "не горящими"). Насколько я понимаю светодиод горит только тогда, когда на выводе PORTB стоит 0, гаснет - когда 1. А в задаче нужно сделать наоборот, или я что-то не понимаю? И при чем здесь поразрядные и логические операции, которые автор рекомендует для этого использовать?
Думаю над этим уже дня 4, наверно я тупой, но разобраться очень хочется
 
RU termostat #07.12.2005 16:13
+
-
edit
 

termostat

аксакал



Друзья, пожалуйса добавьте в избраное этот линк:

-> поиск GOOGLE по Краткому курсу AVR начинающим

По этой ссылке открывается расширенная форма поиска по сайту avr123.nm.ru

Вы можете ввести интересующие ключевые слова и словосочетания и быстро найте где это содержится в курсе.

Имейте ввиду что GOOGLE обновляет информацию в своих базах о содержании сайтов примерно не позднее 2 недель.


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

в любом случае не зацикливайся на задаче 1 а иди дальше, а это само решится со временем.
Это сообщение редактировалось 13.01.2006 в 09:16
+
-
edit
 

makc

новичок
termostat> там решение простое, но говорить его не интересно, напиши на бумажке какая щас последовательность вывода в порт и какая нужна для решения задачи и сравни их - будет ясно что делать.
termostat> в любом случае не зацикливайся на задаче 1 а иди дальше, а это само решится со временем. [»]

Уже написал и сравнил... Но получается что нужно выводить 1 вместо 0, и 0 вместо 1 а это уже будет не двоичный код инкрементирования порта а нечто иное. Или может так и задумывалось?

 
RU termostat #07.12.2005 17:16
+
-
edit
 

Yuran

опытный

Возник вопрос, попытался я передать данные с АВРки на 115000 бод/c, не работает, насколько я понял это из-за того что у меня кварц на 8 Мгц, я смотрел "термостат" предпочитает кристал 7.3728Мгц, по даташиту у него Error 0.0%, имеет ли смысл переставить кварц имеено эту частоту?

P.S. на 9600 и 38400 работает.

Меня смущает что время одного тика получается периодическая 1,3563368055555555555555555555556e-7 вместо конечной 0,000000125 для 8 MHz...

 
RU termostat #07.12.2005 22:47
+
-
edit
 
+
-
edit
 

Yuran

опытный

termostat> ну если тебе важна такая скорость передачи то лучше ставить спец кварц [»]

Да я тут просто анализирую шумы за 20-30 минутные отрезки телеметрии получается примерно 900000 байт, передча на 9600 занимает большое время хочется ускорить это дело, на радиомодулях это не так страшно, так как кварцы одинаковые тут и там и скокрость маленькая (4800).
 
+
-
edit
 

Serge77

модератор

Yuran> получается примерно 900000 байт

А в чём ты это хранишь? Сколько оно стоит?

Yuran

опытный

Yuran>> получается примерно 900000 байт
Serge77> А в чём ты это хранишь? Сколько оно стоит? [»]

Храню во флеше AT45DB161B на 2 Мегабайта, очень хорошая, я и термостат не однократно "её" пиарили =) сейчас стоит около 130 рублей, но вышли уже другие модификации на сайте атмела можно посмотреть что там новенького.

Atmel Corporation - -

MicrocontrollersTouchMemoryAutomotiveWireless / RFMore Products
Home >  >
Print
Overview
Parameters
Documents


// Дальше —
www.atmel.com
 


 

NoS

новичок
Написал кусок кода в кодвижн. В программе объявленно 2 функции обработки прерывания (одна-рез-тат деят-и визарда, вторая-копирования из другой рабочей проги) (верхний кусок представляет из себя инициализацию железа и объявление глобальных переменных):


101: interrupt [TIM2_OVF] void timer2_ovf_isr(void)
{
TCNT2=0xC0; //âîññòàíîâèì ÷èñëî îòñ÷åòà (4 ðàçà â ñåêóíäó)
TCCR1B=(0«1);//îñòàíîâèì òàéìåð 1
TCNT1L=0x00; //îáíóëèì ñîäåðæèìîå ðåãèñòðà ïåðâîãî òàéìåðà
TCNT1H=0x00; //îáíóëèì ñîäåðæèìîå ðåãèñòðà ïåðâîãî òàéìåðà
GIFR=0x20; //î÷èñòèì ôëàã 2-ãî ïðåðûâàíèÿ
GICR=0x20; //ðàçðåøèì âòîðîå ïðåðûâàíèå
while(no_Int);
no_Int=0;
GIFR=0x20; //î÷èñòèì ôëàã 2-ãî ïðåðûâàíèÿ
while(no_Int);
TCCR1B=0x00;
GICR=0x00; //çàïðåòèì âòîðîå ïðåðûâàíèå
GIFR=0x20; //î÷èñòèì ôëàã 2-ãî ïðåðûâàíèÿ
low_result=TCNT1L; // ìëàäøèé áàéò ðåçóëüòàòà
hi_result=TCNT1H; // ñòðøèé áàéò ðåçóëüòàòàÿ

}
// External Interrupt 2 service routine
121:interrupt [EXT_INT2] void ext_int2_isr(void)
{
TCCR1B^=0x01;
no_Int=1;
}


При проверки синтаксиса компиллер ругается так:
(101): undefined symbol 'interrupt'
(121): interrupt vector exceeds the allowable range

Подскажите, плзз, че это и как исправить.

И еще, кодвижн работает с функциями? А то я че-то попробывал (правда прототипы не писал), а он в ответ на вызов функций говорит Undefined simbol 'имя_функции'
 
RU termostat #08.12.2005 23:44
+
-
edit
 
RU termostat #09.12.2005 00:57
+
-
edit
 

termostat

аксакал

PROTEUS теперь работает с ARM7 филипсовскими серии LPC2000

Labcenter Electronics - Professional PCB Design and Simulation Software

Labcenter Electronics - a leading developer of electronics CAD (schematic, simulation and PCB autorouting) software.

// www.labcenter-electronics.com
 


а ImageCraft Embedded Systems C Development Tools дает компилятор для этих ARM'ов

и еще доступны компиляторы iar.com и keil.com

NoS

новичок
Вопрос по Иглу. Нужно развести плату под микросхему в корпусе dip16. Практически все схемы (если не все, то очень много), хранящееся в библиотеке, неиспользуют 8-ю и 16-ю ноги, которые нужны мне. В борде я нашел кнопку wire, но при попытке провести дорожку программа заругалась, сказав, что это надо делать в схеме. Что делать?
 
RU termostat #09.12.2005 03:31
+
-
edit
 

termostat

аксакал

они наверно названы VCC и GND и имеют атрибут "скрыты" - нужно просто так же назвать те цепи схемы куда ты их хочешь подключить. Или изменить атрибут.
+
-
edit
 

Serge77

модератор

NoS> Практически все схемы (если не все, то очень много), хранящееся в библиотеке, неиспользуют 8-ю и 16-ю ноги, которые нужны мне.

Но ведь не все же! Найди любую микросхему в том же корпусе со всеми ногами - и всех делов.

Или делай, как Термостат пишет.

NoS

новичок
А в Proteus Area никто не пробывал разводить платы. Там, вроде, намного удобнее для меня рисовать схемы, используя нужные корпуса, но по нажатию на кнопке развести с помощью электры выпадает окно с ошибкой???
 
+
-
edit
 

SensOR

новичок
Ребята, проблема с 3 задачей с avr123.nm.ru.

Не вызывается прерывание при переполнении 0-го таймера.
Ничего не понимаю, всю ночь просидел, все вроде в порядке,
прерывания разрешены (бит I SREG = 1), , бит TOV0 в TIFR устанавливается в 1 при первом переполнении 0-го таймера, а дальше - болт :blink:
VMLAB 3.10 зарегенная.
ICCAVR 6.31A аналогично.

И еще, ICCAVR ругается на вот эту строчку:

putchar('R');

вот так:

work.c(69):[warning] calling function without prototype may cause errors
 


Причем ругается один раз, при повторном ребилде уже молчит. Это нормально ?

И еще вопрос по курсу:

PORTB = 0x20; // 0010 0000 бит5=1
на PB5 появился высокий уровень "1"

PORTB = 0; // 0000 0000 бит5=0
на PB5 появился низкий уровень "0"
 


Это ведь не битовые операции, я правильно понял ?
Просто в порт записывается число, и в числе прочих битов 5 бит меняет свое значение, правильно ? Тогда комментарии не совсем верные и вводят в заблуждение чайников типа меня :)

Ну вот такие у меня проблемы, выручайте, кто может :)
 
RU termostat #11.12.2005 02:40
+
-
edit
 

termostat

аксакал


SensOR> ICCAVR ругается на вот эту строчку:
putchar('R');

вот так: work.c(69):[warning] calling function without prototype may cause errors
 


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


SensOR>
И еще вопрос по курсу:

PORTB = 0x20; // 0010 0000 бит5=1
на PB5 появился высокий уровень "1"
PORTB = 0; // 0000 0000 бит5=0
на PB5 появился низкий уровень "0"

Это ведь не битовые операции, я правильно понял ?

Тогда комментарии не совсем верные и вводят в заблуждение чайников типа меня :)
 


да это не битовые обперации, но я посмотрел задачу там вроде не сказано что это "битовые" - какой комментарий ты имеешь ввиду ?
+
-
edit
 

SensOR

новичок
Разобрался с прерываниями !
Ух, только лег спать и вспомнил, что кроме бит I SREG = 1 еще для каждого события можно разрешать-запрещать прерывания. Посмотрел по даташиту, TOIE0 разрешает прерывание по переполнению таймера 0. А по умолчанию в TOIE0 стояло 0. Поменял на 1 прямо в VMLABе, все заработало !!!
Получается, что если следовать обучалке 1 в 1, то натыкаешься вот на эти грабли, или это специально задумано так для развития ?! :)

termostat> work.c(69):[warning] calling function without prototype may cause errors
termostat> [/QUOTE]
termostat> это вонинг - предупреждение, в курсе написано что лучше использовать прототипы функций, но не обязательно.

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

termostat>
SensOR>
termostat> И еще вопрос по курсу:
termostat> PORTB = 0x20; // 0010 0000 бит5=1
termostat> на PB5 появился высокий уровень "1"
termostat> PORTB = 0; // 0000 0000 бит5=0
termostat> на PB5 появился низкий уровень "0"
termostat> Это ведь не битовые операции, я правильно понял ?
termostat> Тогда комментарии не совсем верные и вводят в заблуждение чайников типа меня :)
termostat>
 

termostat> да это не битовые обперации, но я посмотрел задачу там вроде не сказано что это "битовые" - какой комментарий ты имеешь ввиду ?

Да меня смутило, что "бит5=1" и "бит5=0" при присвоении всему байту конкретного значения. Сначала было подумал, что присвоение идет по маске 0x20 не затрагивая остальные биты :)
 
+
-
edit
 

Serge77

модератор

termostat> PORTB = 0x20; // 0010 0000 бит5=1
termostat> на PB5 появился высокий уровень "1"

Очень верное замечание сделал SensOR!
Фраза "на PB5 появился высокий уровень "1"" конечно верная, но её обязательно нужно дополнить вот так: "одновременно на всех остальных появился 0, не забудьте об этом! Если нужно поменять значение только одного бита, используйте битовые операции".

Ведь у тебя курс, а не просто комментарии к какой-то программе.
RU termostat #11.12.2005 13:46
+
-
edit
 

termostat

аксакал

SensOR >
меня смутило, что "бит5=1" и "бит5=0" при присвоении всему байту конкретного значения.
Сначала было подумал, что присвоение идет по маске 0x20 не затрагивая остальные биты
 


==

Serge77 > Очень верное замечание сделал SensOR!

Фраза "на PB5 появился высокий уровень "1"" конечно верная,

но её обязательно нужно дополнить вот так: "одновременно на всех остальных появился 0, не забудьте об этом! Если нужно поменять значение только одного бита, используйте битовые операции".

Ведь у тебя курс, а не просто комментарии к какой-то программе.
 



дак курс то у меня краткий, а уже РАР архив за мегабайт перевалил.

я ж прошу на 1-й странице читать последовательно иначе конечно будет не понятно, ведь битовые операции я описал подробно в задаче 1. причем как написадл:

Очень важно! Битовые операции!

Как вы уже поняли МК должен "дергать ножками" - создавать на них то "1" то "0" то считывать что там на них есть.

И часто не всеми сразу, а по одной! значит Вы должны уметь эффективно управлять не целым портом, регистром, а отдельными битами!
 


и далше подробности.

Конечно если начать с задачи 3 пропустив 1-ю и 2ю то можно что-то не понять.

=========

и еще. там остальные биты и были нулями.

т.е. получилось бы: "внимание - остальные биты были равны "0" и станут теперь "0".

=========

SensOR >
вспомнил, что кроме бит I SREG = 1 еще для каждого события можно разрешать-запрещать прерывания. Посмотрел по даташиту, TOIE0 разрешает прерывание по переполнению таймера 0.

А по умолчанию в TOIE0 стояло 0.
 


по умолчанию он действительно равен 0.

но в файле work.c для задачи 3 есть строчка:

TIMSK = 0x02;

она и делает бит TOIE0 равным "1" - т.е. разрешает прерывание по переполнению таймера_0

========

в задаче 3 написано:
Почитайте код дальше самостоятельно -
подумайте, что он означает.
 


значит ты не сделал этого раз не видел строчки TIMSK = 0x02; или не подумал что он означает.

========

кстати у меня vmlab 3.10 3.11 симулируют старый avr2313 с ограничением 35 мС всего. в курсе я написал об этом и посоветовал на ATmega переходить.

есть вариант 3-ей задачи - задача 3new под атмега16
Это сообщение редактировалось 11.12.2005 в 14:45
RU termostat #11.12.2005 16:00
+
-
edit
 

termostat

аксакал

кстати там "выход" только ножка PB5 - в программе ранее идет строчка:

code text
  1. DDRB = 0x20; // 0010 0000


остальные ножки порта - "входы"

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

а я это тоже уже сделал в задаче 1 - вот так:

code text
  1. ВАЖНО! - если бит в регистре DDRx равен "0", а в такой же бит PORTх записана "1" то "ножка" МК будет "входом с подтяжкой" т.е. к ней как бы подключен резистор примерно 30-120 кОм от питания МК.


так что читать курс ТОЛЬКО последовательно ! без перепрыгиваний.


кстати и прототипы функций прямо в задаче 3 и написано ! а SensOR спрашивает ?!
+
-
edit
 

Serge77

модератор

Всё, молчу, молчу ;^))
Ты же знаешь, чем больше сделаешь, тем больше найдётся поводов для замечаний ;^))
RU termostat #11.12.2005 17:02
+
-
edit
 

termostat

аксакал

я скачал демо PROTEUS 6.9 SP1

http://www.labcenter-electronics.com/download/prodemo.exe (26 884 429 байт)

очень рад!

Все библиотеки и модели октябрь-декабрь 2005 их можно скопировать в крякнутый 6.7 и использовать.

Но можно работать и в демо 6.9 SP1 - у него ограничение: лишь нельзя сохранить результат работы.


добавлена симуляция

Proteus VSM ARM/LPC2000 model can simulate the behaviour of the following microcontrollers from Philips™:

LPC2104 - 128K ROM, 16K RAM
LPC2105 - 128K ROM, 32K RAM
LPC2106 - 128K ROM, 64K RAM

LPC2114 - 128K ROM , 16K RAM, 10 BIT ADC
LPC2124 - 256K ROM , 16K RAM, 10 BIT ADC

Support for the LPC213X range of devices will be added shortly.

These models make use of the ARM7TDMI core model primitive in conjunction with DLL based models for the on-chip peripherals.


AVR'ов новых не добавили, но модели обновили:

Proteus VSM AVR model can simulate the behaviour of the following microcontrollers from Atmel™:

TINY10, TINY11, TINY12, TINY15

AT90S2313, AT90S2323, AT90S2333, AT90S2343, AT90S4433,
AT90S4434, AT90S8515,
ATMEGA103

New in Release 6.2

AT90S8535, ATMEGA8, ATMEGA16, ATMEGA32

New in Release 6.6

ATMEGA64, ATMEGA128

1 2 3 4 5 6 7 12

в начало страницы | новое
 
Поиск
Поддержка
Поддержи форум!
ЯндексЯндекс. ДеньгиХочу такую же кнопку
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru