Перейти к содержанию
    

Микроконтроллеры для начинающих

Добрый вечер. Подскажите пожалуйста, Как сделать секундомер на ATmega103 длительностью до 5 минут на Code VisionAVR C ?

 

Заранее большое спасибо!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 марат - вам нужно в интерупте по таймеру инкрементировать дабл например (если дискретность таймера маленькая -2х байт может не хватить ) - зная период таймера легко вычислить какое значение дабла будет по прошествию 5 минут ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Такой вопрос.

CodeVision, пример из пакета \cvavreval\examples\DS1820

Термометр с использованием Dallas Semiconductor DS1820, кварц 3.6864MHz

В программе используются библиотеки для работы с DS1820. Насколько я поинмаю, для обработки получаемых данных от DS1820 нужны определенные интервалы времени.

Я сделал проектик на Mega 16. Такого кварца у меня нет. Есть 4МГц, 4,5МГц и выше. Внутренние частоты МК - 1, 2, 4, 8. Попробывал в Протеусе симуляцию на 4 МГц. Работает. Но в реальном устройстве - нет.

Попробывал подключить внешнюю RC-цепь (4,2К 22пФ), выставив соответсвующие фюзы. Опять же на индикаторах ерунда.

Есть ли выход из данного положения? Можно ли обойтись без кварца на 3.6864MHz?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Разобрался. Забыл проинвертировать управление транзисторами, которые коммутируют сегменты. Работает и от внутреннего 4МГц и от внешней RC цепи.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

простенькй вопросик)

 

Первая моя прога на АТмелах. Атмега8.

 

последоательный порт (USART). принцип приема с прерыванием каков?

 

Система такова:

1. прием определенного байта, который соотв. 1му из 3х определенных последующих действий мк.

а) выслать по юарт одни данные

б) выслать по юарт другие данные

в) приготовится принять данные

 

с передачей проблемм нет, а как организовать прием?

я пока что сделал так:

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

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

 

спс за ответ.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Приём/передача по прерываниям.

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

Работа приблизительно такова - в ресив интерупте декодировался пакет -> есть комманада и данные - тогда выставляем определённый семафор и системный манагер (можна на таймер какой либо прицепить) по наступлению тика обрабатывает нужный запрос.

Передача - забиваете в буффер данные и кол-во для передачи - выставляете флаок и пошли интерупты клацать ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Kuzmi4,

спасибо.

передачу переделал на пакетную, прием тоже сделал красиво.

в симуляторе работает как часики..

надо дописать ПО под виндоз, тогда посмотрим, че там получится)

 

 

и, есть ли смысл считать контрольную сумму? или это все зависит от частот и скоростей?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 DeVOuR - вё зависит от зашумлённости среды в которой будет идти провод :)

 

Мне так видится, все зависит прежде всего от тяжести последствий приема и обработки искаженного пакета :) Потому что вероятность приема искаженных данных существует всегда (и причины могут быть самые разные). Особенно если одной из обменивающихся сторон является ПК с виндой :)

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

Во избежание пусть очень редко случающихся, но весьма неприятных и непредсказуемых глюков :) Даже простая арифметическая сумма или XOR байт пакета куда лучше чем ничего.

Ну а по-правильному - CRC8, CRC16 или CRC32 в зависимости от длин пакета и предполагаемой вероятности искажения данных. В качестве прикидки (где-то когда-то что-то такое слышал): CRC16 в типичном канале с BER (Bit Error Rate - вероятностью приема сбойного бита) = 10^-3 (один на тысячу) гарантирует обнаружение ошибки в пакетах с длиной, ограниченной на уровне 256 байт.

Изменено пользователем Олег Хохлов

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для работы от внешнего кварца снял все галки CKSELn. Другие галки не трогал. Поставил внешний кварц. После чего МК перестал отвечать програматору. В чем проблема? может нужно было еще какието фьюзы поменять? Как теперь запустить МК? (мега16)

 

Кажется я понял в чем проблема.... по дефолту CKSELn=0001. А в моей проге для програматора по дефолту стояла только 1 галка в CKSELn, соотвецтвенно в этой проге идет наоборот.... галка - 1, нету галки - 0.

Таким образом получилось у мну CKSELn=0000. :angry2:

 

Как запустить теперь МК и выставить фьюзы как положено?

Изменено пользователем Integral

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как запустить теперь МК и выставить фьюзы как положено?

Подать на МК внешний клок от любого источника.

При использовании адаптеров типа STK200/300 или Altera ByteBlaster клок можно генерить самим адаптером, если, конечно, программа программатора это умеет.

Например AvReal умеет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Будем пробывать... на К155ЛА3 генератор склипаю...

Частота порядка 100КГц - 1МГц покатит?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Будем пробывать... на К155ЛА3 генератор склипаю...

Частота порядка 100КГц - 1МГц покатит?

Должно при одном условии. Частота тактирования процессора должна быть в несколько раз выше частоты сигнала SCK при программировании.

 

конкретно для Мега16:

Depending on CKSEL Fuses, a valid clock must be present. The minimum low and high periods

for the serial clock (SCK) input are defined as follows:

Low:> 2 CPU clock cycles for fck < 12 MHz, 3 CPU clock cycles for fck ≥ 12 MHz

High:> аналогично.

 

т.е. низкий и высокий уровень на ноге SCK должны удерживаться не менее 2 (или даже 3) периодов тактирования процессора.

Быстрее одного раза за микросекунду порт принтера обычно не переключается, так что частоты от 2МГц точно хватит, немного более низкой - скорее всего хватит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

заработал на частоте 1.6МГц, програмируется у меня через СОМ порт.

 

Удивительно то что при напряжении 12В которое подавалось на питание МК около 30сек. он не накрылся... :07: (сгорел сволочь стабилизатор 7805)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...