Модераторы: PILOT, ManiaK, Mazzi
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> AVR-Studio < Atmega 16 = Help, Освоение AVR 
:(
    Опции темы
fol
Дата 22.10.2006, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 22.10.2006

Репутация: нет
Всего: нет



Все пропало, все пропало!!! Гипс снимают, клиент уезжает…
Всем привет.
        На медне начал заниматься AVR-ками. До этого программил ПИКИ, но все время глядел на AVR, и вот наконец взялся и как обычно, за малое время (всего несколько дней юзаний) накопилось много вопросов.  
    Вначале мое общее впечатление, а затем несколько вопросов, и может кто и поможет начинающему AVR-щику.
    Вначале как положено новичку сделал дополнительный модуль к своему программатору PonyProg. Зарядил в софт  *.HEX файл простенькой программы-мигалки и атаковал кристалл под названием Atmega16. Все прошло гладко. Причем с первой же попытки. Мега замигала, задрыгала ногами. И с радость во внутри себя начал я извращатся с теми штуковинами которые все обзывают фьюзами. И тут была (как многие в рунете и говорят) засада. Все фьюзы довольно дружелюбны, а вот "CKSEL" подгадить так и норовит.
При установке фьюза "CKSEL":
          CKSEL  0001 (внутренний RC генератор)
          После записи проги в память контроллера  программатор выдает сообщение "Write        
          successful" (Успешная запись) то есть все нормально.

          CKSEL  1010 (внешний резонатор)
          После записи проги в память контроллера  программатор выдает сообщение "Write 
          successful" (Успешная запись) то есть все нормально.

          CKSEL  1111 (внешний резонатор)
          После записи проги в память контроллера программатор выдает сообщение "Write Failed" (Неудачная Запись) то есть НЕ ВСЕ нормально. При этом светодиод LED1  на плате адаптера остается светящимся (это у меня индикация того что транзистор который землит ногу RST проца, остался открытым). Не смотря на это, когда проц ставлю на макет, программа работает нормально.
Вот и пойми в чем дело. Странности. Может при установке CKSEL = 1111
не очень хороший режим для этого кварца (что стоит на плате адаптера)
и частота не устойчива... Не знаю.
Кстати после этих процедур выяснил вот что. Если по каким либо причинам кварц или внешний генератор на плате программатора не работают, то не дай вам бог установить фьюз "CKSEL" в режим внешнего генератора. После загрузки программы вы не достучитесь до камня. Это я говорю для таких же новичков как сам. Но есть способ. После того как сам попал. Нужно вначале прикоснуться пальцем к ногам XTAL и держать все время пока в проц грузится программа. Я думаю это наводка в теле выдает клоки в ядро проца, и программа хоть и медленнее но загрузится.
    Позанимавшись с железом  перешел к работе с программой. Работаю в AVR-Studio 3.56. Дело в том что два раза пробовал юзать новую AVR-Studio 4.12 но все время она во время компиляции завешивает систему. Да и вообще как то медленно и не устойчиво работает. Или это моя личная проблема.? 
   Ладно я не гордый, пока и с версией 3.56 нормально. 
   Но и она не идеал. Продолжаю исследовать мегу16. Тренируюсь на маленьких программках. И начались проблемы. С самого начала, как положено начал строить структуру проекта. Вначале установка режимов эмулятора. Дабы AVR-Studio эмулировала тот камень который я поставил. Заглянул в окно настройки эмулятора. И что я увидел?  Студия почему то считает что мега16 содержит 8192 кБа памяти? Ладно нет проблем, в НАСТРОЙКАХ СИМУЛЯТОРА я изменил вместо 8 поставил 16 (в даташите заявлено 16). После этого симулятор принял изменения и стал показывать что теперь мол кристалл имеет 16192 кБа памяти. Причем после этого никакие изменения в окне НАСТРОЙКА СИМУЛЯТОРА (в части изменения параметров памяти) не принимаются. То есть AVR студия "вцепился" в значение 16192 кБа и как крабик, и не выпускает. Причем для обоих вариантов установленной глубины памяти, компиляция и прогон по симулятору простых тестовых программ проходит без замечаний, софт считает что все OK, и не видит разницы.  Я изъелозил весь ДатаШит на мегу16, и не пойму, где лукавство, где WDT зарыта. В даташите говорится (ВАЖНО ЗАЯВЛЕНО) что мол имеется аж целых 16 кило памяти. Затем мелко (как в договорах на кредит) мол память  эта сконфигурирована как 8 кило 16 битных регистров. И что? Это ведь по сути 8 кБа памяти. Ячеек то не 16 а 8 килограмм !!!  Где я не понимаю? И какое значение объявлять симулятору AVR студии ??? 
   Вот такие пироги. Это общее, и не полное первое впечатление. Хотя здесь я конечно только жалуюсь. Есть и приятные впечатления. Такие как удобная работа с портами, да и много чего. Как то в следующий раз. 
   Теперь несколько вопросов. Если кто поможет, буду признателен. Кроме того не я один, много народу путешествует в сети, и многим эта инфа может помочь. Может даже, страшно сказать, жизнь чью спасет. О как.

    1. Фьюз "CKSEL" при установке 1111 для меги16 – почему софт программатора ругается, но программа тем не менее работает?
    2. У меня ли одного не устойчиво работает AVR-Studio версии 4.12 ?
    3. Сколько у меги16 памяти 8 или 16 кБа?
    4. Почему нельзя наблюдать в AVR-Studio изменения регистров  таймера/счетчика 0, 1. ???? Или можно ? Я по всякому пробовал. Не получается. Только в окне I/O изменения фиксируются при переполнении счетчика, то есть при переходе в 0 (при переполнении). А промежуточные значения  где смотреть ??? Или запрещено, не законно?
    5. В AVR-Studio (при ее запуске), начиная работать с проектом, в окне просмотра РОН, некоторые регистры имеют какое либо (не нулевое) значение. Точно так же открывая окно EEPROM, там тоже какой то хаос, многие регистры имеют не нулевое значение. Это что, глюк AVR-Studio, или я чего то не знаю?
    6. Наверно самый глупый вопрос. Что все таки такое «определение начала стека» в программе для AVR. Зачем? Коротко (примерно) или ссылку?
    7. Сколько конкретно вложений на возврат может содержать стек меги16 при вызове ПП по CALL. И где в AVR-Studio можно контролировать адреса возврата?

От всех начинающих заранее благодарю. Вот.

PM MAIL   Вверх
PILOT
Дата 23.10.2006, 08:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


производство
****


Профиль
Группа: Модератор
Сообщений: 2724
Регистрация: 4.4.2002
Где: москва

Репутация: 20
Всего: 54



1) Смотри внимательно даташит, там есть таблица, где указано какую комбинацию фьюзов CLKSEL в какой ситуации нужно применять. Если хочется экспериментировать, то нужно сначала обзавестись генератором, чтобы в случае чего запустить микроконтроллер. Но цель эксперимента мне не совсем понятна. Никакой выгодя я тут не вижу.
2) а что значит неустойчиво? Вообще любой софт рано или поздно обнаруживает в себе ошибки.
3) 16килобайт = 8 килослов. Организована память программ словами, т.к. каждая команда двухбайтовая, и это тоже описано в даташите.
4) TCNT0, TCNT1L, TCNT1H. При правильной установке режима работы они изменяются согласно настройке.
5) Вот поэтому существует методика инициализации перед началом работы основной программы. в частности это обнуление СРАМ и РОН (руками, специальной команды нет).
6) Стек нужен для временного сохранения точки в памяти программ (значение ПрограмКаунтера) где ты вызываешь подпрограмму или случается прерывание с тем, чтобы потом, после окончания завершения выполнения прерывания либо подпрограммы, вернуться обратно, а также для временного хранения данных другого процесса, чтобы не испортить значения которые до вызова хранились в регистрах общего назначения.
7) Столько сколько разрешишь устанавливая вершину стека, но не более СРАМ/10 (ориентировочно). SP тебе поможет.

СУВ.


--------------------
тут могла быть Ваша реклама...
PM MAIL WWW ICQ   Вверх
fol
Дата 23.10.2006, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 22.10.2006

Репутация: нет
Всего: нет



Спасибо большое за ответ.
Вроде потихоньку начал въезжать.

Поломаю пока голову над стеком. Конечно знаю что это такое,
были времена, сам паял на логике длиныые и довольно широкие регистры.
Работа стека внутри камня AVR может быть понята, это несомненно.
Я же ломаю голову не над тем как, а на тему типа "зачем"? 
Зачем именно так... Сам знаю что это бред, но...
Если стек аппаратный его включают,
если стек программный инициируют (запускают) определяют параметры и т.д... 
Ладно не буду грузить форум, это мое личное. В конце концов вставка прцедур
инициирования стека не сложная, чисто автоматическая, ее нужно
просто принять как должное, как факт и не ломать голову.

С памятью программ все же есть какое то коммерческое лукавство...

Ладно все, закругляюсь.

Вот только один не христоматийный (в глобальный даташит не заглянешь)
вопрос, как бы риторический.

2) AVR-Studio. Я понимаю что багов в каждом софте хватает,
и как часто они вылезают - дело индивидуальной эксплуатации софта.
Я просто хочу узнать, стоит ли мне вообще стремится к версии 4.12.
бороться и биться за нее, за ее работу на благо меня.
Пытаться искать нестыковки софта и моей системы.
Много ли в AVR-Studio 4.12 отличий, кроме как большее к-во 
поддерживаемых камней. Насколько и чего в ней лучше.
Может она вообще вся такая никакая. 
Просто я ее не смог попользовать и 5 минут,
сразу вешает операционку во время компиляции проекта и кирдык.
То есть КАКОВЫ ОТЛИЧИЯ НОВОЙ ВЕРСИИ  AVR-Studio ?

Еще раз благодарю за ответы.

PM MAIL   Вверх
Слава
Дата 14.11.2006, 23:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 25.6.2006

Репутация: нет
Всего: нет



Цитата(fol @ 23.10.2006,  23:29)
Много ли в AVR-Studio 4.12 отличий,...

У меня  AVR-Studio 4.12  работает стабильно. В эту версию встроена GCC , да и макросы уже более продвинутые.   Ещё вот WDR команда не работает, по этому при отладке я этот WD отключаю.
PM MAIL   Вверх
PILOT
Дата 20.11.2006, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


производство
****


Профиль
Группа: Модератор
Сообщений: 2724
Регистрация: 4.4.2002
Где: москва

Репутация: 20
Всего: 54



Стек в AVR аппаратный требующий обязательной инициализации (а точнее указания вершины стека), иначе не одна из команд вызова подпрокрам и прерываний не будет выполнятся корректно (а точнее всегда будет иметь место сброс или неправильная работа программы)

СУВ.


--------------------
тут могла быть Ваша реклама...
PM MAIL WWW ICQ   Вверх
Severyanin
Дата 6.8.2007, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Исследователь
**


Профиль
Группа: Участник
Сообщений: 554
Регистрация: 31.7.2007
Где: Россия, Омск

Репутация: нет
Всего: 9



Хм, насчет стека. А как Вы хотели работать с вызовами подпрограмм без его инициализации? Программе просто некуда будет возвращаться. А с FUSE-битами все же лучше не шутить. они могут не переписаться и влиять на работу программы при следующей прошивке камня. У меня была как-то такая проблема. И, на мой взгляд, лучше использовать не прямые вызовы и переходы jmp и call, а относительные - rjmp и rcall соответственно. А еще лучше - писать в IAR на С.  smile  


--------------------
"Звонким вереском скроются наши следы, и не вспомнят о них. Кто поверит нам, рыцарям павшей звезды из отвергнутых книг? Пусть в узоре времен ни стихов. ни имен, но напомнит забывшим их полуночный крик." Тэм Гринхилл
"Ужели суслик твоего коварства нагадит в плов доверья моего?". Л.Филатов 
PM MAIL WWW ICQ   Вверх
Severyanin
Дата 7.8.2007, 05:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Исследователь
**


Профиль
Группа: Участник
Сообщений: 554
Регистрация: 31.7.2007
Где: Россия, Омск

Репутация: нет
Всего: 9



да, и еще .Есть книга Джона Мортона "микроконтроллеры AVR. Вводный курс" издательства "ДОДЭКА". В ней изложение материала по AVR идет с постоянным сравнением с PIC, обстоятельно рассказывается, что в этих камнях надо делать по-другому. smile 


--------------------
"Звонким вереском скроются наши следы, и не вспомнят о них. Кто поверит нам, рыцарям павшей звезды из отвергнутых книг? Пусть в узоре времен ни стихов. ни имен, но напомнит забывшим их полуночный крик." Тэм Гринхилл
"Ужели суслик твоего коварства нагадит в плов доверья моего?". Л.Филатов 
PM MAIL WWW ICQ   Вверх
klukva
Дата 6.11.2012, 23:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 6.11.2012

Репутация: нет
Всего: нет



дОБРОЕ ВРЕМЯ СУТОК)  ребята нужна ваша помощь.. 
есть програма но сделана не до конца помогите дописать , вот условие  . Буду очень благодарна если поможете!
                          Використання інтерфейсу І2С.
Мета: Освоїти програмні методи реалізації інтерфейсу І2С та взаємодію контролера з інтегральним датчиком температури та годинником реального часу.
Хід роботи.
1.    В середовищі AVR Studio скласти та відлагодити підпрограми необхідні для програмної реалізації інтерфейсу І2С:
1.1.    генератора синхроімпульсів та  запису байту;
1.2.    генератора синхроімпульсів та читання байту;
1.3.    формування умови «старт» та «рестарт»;
1.4.    формування умови прийому та передачі імпульсу підтвердження;
1.5.    формування умови «стоп».
2.    Скласти програму читання коду температури з цифрового датчика DS1621, апаратний адрес 0х90. Записати програму в пам'ять ЕОМ, та перевірити її роботу на лабораторному макеті. Цифровий код перетворити в 0С та відобразити на екрані, в разі потреби удосконалити програму.
3.    Скласти програму котра зчитує поточну дату та час з годинника реального часу DS 1302 та відображає результат на дисплеї. Записати програму в пам'ять ЕОМ та перевірити роботу на макеті.
4.    Доповнити програму п.3 можливістю корекції дати та часу; вводу нових значень  дати та часу. Для наглядності роботи використати РК – дисплей, текстові пояснення та мигаючий курсор.

Короткі теоретичні відомості.
Мереж І2С передбачає використання пристроями ліній як на вхід так і на вихід; всі пристрої, що об’єднані в мережу І2С мають вихід відкритий колектор. Вони можуть видавати лише сигнал лог. 0 (підкороти на нульову шину), а сигнал лог. 1 формується за допомогою додаткових резисторів, котрі «підтягують»  мережу до  шини живлення. Сигнал лог. 1 присутній лише тоді, коли виводи всіх абоненти мережі знаходяться в стані «на вхід», а видача хоча б одним абонентом лог. 0 встановить нуль на шині. 
Будь трансакція по інтерфейсу І2С починається з умови «Старт»: обидві лінії мережі знаходяться в стані лог. 1,  це передумова старту, пристрій Майстер переводить шину SDA з 1 в 0 при одиниці на шині SLC. При програмній реалізації І2С необхідно, як мінімум, два рази перевірити наявність лог. 1 на шині SDA (передумова старту). 
Всі передачі по шині виконуються 8-ми розрядними байтами,  починаючи з старшого біту. Кількість  байт в посилці – необмежена, однак кожен байт повинен супроводжуватись бітом підтвердження (ASC). Сигнал свідчить про успішне отримання приймачем байту та про готовність приймати наступний. 
Якщо приймач не готовий отримувати наступний байт даних він не видає сигналу підтвердження, це може свідчити також про несправність приймача, його відсутність, чи помилку в передачі. 
Посилка складається з байту адресу відомого пристрою, молодший біт вказує на операцію читання якщо він рівний 1, чи запису молодший біт 0; потім пристрій майстер передає адрес регістру в пристрої слейв  з котрим  буде запис/читання, далі рестарт для читання чи байт для запису в вибраний регістр. 

ReStart:    ; Перевірка можливості  старту
SCL_Dwn    ;перевести шину SCL в лог.0
nop
SDA_Hi    ; Шину SDA в 1
nop
rcall wait5us    ; Цикл затримкики
nop
SCL_Up    ; Наростаючий фронт SCL->1
RS1:    sbis  PinB,SCL    ; Стан очікування відомого пристрою?
rjmp  RS1
rcall wait5us    ; Цикл затримки
Start:                
SDA_Lo    ; SDA = 0: умова старту
rcall wait4us    ; Цикл затримки
Підпрограма запису байта в відомий пристрій:
WriteByte:    
sec    ; Прапорець переносу C = 1
rol   dbyt    ; Зсув вліво C->LSB, MSB->C
rjmp  bit1    ; Особлива обробка для розряду 1
WriteBit:
lsl   dbyt    ; Якщо dbyt пустий, ...
bit1:    breq  GetAck    ; ... то передача завершена
SCL_Dwn    ; Спадаючий фронт SCL
brcc  WriteLow    ; Перехід, якщо прапорець C = 0
nop    ; Щоб урівняти час виконання
SDA_Hi    ; Встановити  SDA в 1
rjmp  SCL_High
WriteLow:
SDA_Lo    ; Встановити SDA в 0
rjmp  SCL_High    ; Щоб зрівняти тривалість такту
SCL_High:
rcall wait4us    ; Цикл затримки
SCL_Up    ; Спадаючий фронт SCL
WB1:sbis  PinB,SCL    ; Стан очікування відомого пристрою?
rjmp  WB1
rcall wait5us    ; Цикл затримки
rjmp  WriteBit

Підпрограма читання біта підтвердження:
GetAck:    
SCL_Dwn    ; Спадаючий фронт SCL
SDA_Hi    ; SDA – високоомний стан
rcall wait5us    ; Цикл затримки
SCL_Up    ; Наростаючий фронт SCL
GA1:sbis  PinB,SCL    ; Стан очікування відомого пристрою
rjmp  GA1
cbr   Flg,1<<Ack    ; Прапорець Ack = 0
sbic  PinB,SDA    ; якщо SDA = 1,
sbr   Flg,1<<Ack    ;   прапорець Ack = 1
rcall wait4us    ; Цикл затримки
ret

Підпрограма читання байту з відомого пристрою:
ReadByte:
ldi   dbyt,1    ; Назначаємо в якості лічильника бітів
RB1:
SCL_Dwn        ; спадаючий фронт SCL
rcall wait5us    
SCL_Up        ; Наростаючий фронт SCL
RB2:
sbis  PinB,SCL    ; Стан очікування відомого пристрою 
rjmp  RB2
rcall wait5us    
clc            ; Прапорець C = 0
sbic  PinB,SDA    ; Якщо SDA = 1
sec            ;то    Carry = 1
rol   dbyt    ; Зсуваємо прочитаний біт в байті
brcc  RB1    ; Перехід, якщо читання не завершено

SetAck:    ; Видача біту підтвердження
SCL_Dwn    ; Спадаючий фронт SCL
sbrs  Flg,Ack    ;Пропускаємо наступну команду, якщо 
;Ack=1
rjmp  SA1    ; Перехід, якщо Ack = 0
SDA_Hi    ; Встановить SDA в 1
rjmp  SA2
SA1:    SDA_Lo    ; Встановити SDA в 0
SA2:    rcall wait5us    
SCL_Up    ; Наростаючий фронт SCL
SA3:    sbis  PinB,SCL    ; Стан очікування відомого пристрою 
rjmp  SA3
rcall wait5us    
ret

Видача умови завершення трансакції:
Stopp:    
SCL_Dwn    ; спадаючий фронт SCL
SDA_Lo    ; SDA в 0
rcall wait5us    
SCL_Up    ; SCL в 1
rcall wait5us    
SDA_Hi    ; Наростаючий фронт SCL
rcall wait5us    
ret



Это сообщение отредактировал(а) klukva - 6.11.2012, 23:40
PM MAIL   Вверх
UniBomb
Дата 7.11.2012, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 1754
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 97



klukva, первое - на русскоязычном форуме принято просить на соответствующем языке. Второе - правило форума гласит "одна тема - один вопрос", следовательно надо создать новую тему. Третье - просьбы о помощи постят в раздел "центр помощи". Если нет желания просить помощи в рамках местных норм и правил, то откуда у участников возникнет желание помогать?


--------------------
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)"
PILOT ManiaK
UniBomb Mazzi

На данный раздел помимо Правил форума распространяются текже следующие правила:


  • Прежде чем создать тему воспользуйтесь поиском или посмотрите в faq. Возможно на форуме уже есть ответ на ваш или близкий к вашему вопрос.
  • В заголовке темы в квадратных скобках обозначьте используемое семейство микроконтроллера: [avr],[pic],[arm].
  • При создании темы с вопросом указывайте участок кода с ошибкой, версию компилятора, схемы подключения, fuse биты и прочие данные, которые помогут найти правильный ответ. Для форматирования текста программ используйте кнопку код.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Для флуда, просьб выполнить задание, поиска партнёров или исполнителей существуют свои разделы.
  • Если вы заметили несовместимое с правилами сообщение, то можете уведомить об этом модератора раздела нажав кнопку Репорт у соответствующего сообщения.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема »


 




[ Время генерации скрипта: 0.0932 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.