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

Почему Программатор Не Видит Микроконтроллера?


Рекомендуемые сообщения

Напрямую порт на землю лучше не замыкать. Нет, если он в состоянии лог.0, Z, Hi-Z ему ничего не случится, а вот если настроен на выход с лог. уровнем 1, может и погореть. Конечно, контроллеры достаточно живучи, но лучше не рисковать.

Приведенный код это не динамическая индикация. Суть динамической индикации в управлении большим количеством устройств (например, светодиодов) с небольшого набора выводов. В простейшем случае это M x N устройств, расположенных в матрице, где М-количество строк, N-количество столбцов. Тогда на их управление надо всего M+N выводов. Например, матрица 8х8 (аж 64 светодиода), управляется всего 16 линиями. Теоретически, именно для светодиодов, можно и меньше, но это уже извращение, гораздо сложнее и мало где используется.

Согласно документации, в большинстве AVR'ок есть встроенный многоканальный АЦП на 10 разрядов. Каналы выведены на обычные порты общего назначения и помечены ADC0-ADCx (в m48 это порты С). ЦАПов нет вовсе. Если сильно надо вместо них используют ШИМ.

RS232 и UART работают по одному протоколу, но с разными уровнями. Для RS232 лог.1 это -12В, лог.0 это +12В (вообще-то по абсолютным величинам от 3 до 15, но считается все же что 12), UART же прямой, совместимый с ТТЛ-уровнями. лог.0 - 0, лог.1 - питание. Аппаратный UART в контроллере есть, так что надо всего лишь согласовать уровни и подключиться к разъему. Способы описаны и интернете. Выходы скорее всего да, Rx==RD, Tx==TD, соответственно, соединяются накрест. Впрочем, лучше все же документации подтвердить.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

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

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Ясно. Ну как же это не динамика))) Суть динамики именно в том что здесь показано. Давайте разберем код:

PORTC = 0b0000001;

_delay_ms(3);

На первый диод подается питание на остальные ноль. Через три миллисекунды

PORTC = 0b0000001;

_delay_ms(3);

PORTC = 0b0000100;

_delay_ms(3);

Подаем на второй диод питание, а с первого убираем. И снова ждем 3мс. Замечу, что визуально первый светодиод ещё горит, а программно уже погашен.

PORTC = 0b0000001;

_delay_ms(3);

PORTC = 0b0000100;

_delay_ms(3);

PORTC = 0b0010000;

_delay_ms(3);

Теперь по аналогии так же врубаем 3-й диод и первые два так же выключаем. Но они визуально горят)))

Если переписать программу иначе. Вот так:

PORTC = 0b0000001;

_delay_ms(2);

PORTC = 0b0000000;

_delay_ms(23);

То диод будет гореть как будто с него и не убирали питание (проверено).

Вот и суть динамической индикации - пользоваться вот этим химическим явлением у диода для организации того, что вы написали.

Как вы будете писать букву А? Я бы начал снизу вверх. На первую строчку подали питание и на последний и первый столбец тоже, затем где то через 2мс (обязательно 2-е и более потом напишу почему) подаем питание на следующую строчку и столбци. Написать букву А в примере на моих диодах надо успеть за 25мс. Тут не сложно высчитать, что с такими диодами мы можем использовать только 12-ть строчек.

P.S. как и обещал пишу почему 2мс. По воли шанса у меня получилось управлять яркостью за счет ограничения времени подачи питания на диод.

Если я правильно понял то для полной реакции между катодом и анодом нужны не только амперы и вольты но и миллисекунды. Если урезать время то диод не разгорится и мы получим слабую яркость. Я ставил задержки около 0.1 мс.

Для моих диодов максимальная яркость при 4-х вольтах это 2мс.

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

"...Не верю в этот мир, если не верю в себя сам, я вижу цель и знаю, что я буду там..." Noize MC - Сам (2011)

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

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

кнопочку тогда через резистор бросать на порт?

"...Не верю в этот мир, если не верю в себя сам, я вижу цель и знаю, что я буду там..." Noize MC - Сам (2011)

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

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Да нет, все проще. Можно считать что светодиод загорается мгновенно. Дело в инерционности зрения. Никаких химических реакций там, разумеется, не происходит, дело только во времени жизни носителей заряда, для светодиода это доли микросекунды (сотни наносекунд). При частоте смены картинки быстрее примерно 100 Гц мерцание не будет заметно. 100 Гц это оценочно, просто медленнее не стоит, быстрее - сколько угодно. Для динамической индикации надо чтобы каждый ряд светодиодов горел равное время. Проще всего это делать по прерыванию таймера, тогда индикация практически не будет зависеть от основной программы контроллера. А уж сколько они будут гореть - не важно, обычно управлять яркостью при динамической индикации не нужно, а если и нужно - ШИМ/ЦАП в помощь.

Временем между подачей напряжения на светодиод и началом его свечения можно пренебречь. Ваша регулировка яркости - видимо, подобие ШИМа, когда светодиод загорается на определенное время на полную яркость а потом гаснет на другое время. Соотношением этих времен и можно регулировать яркость. Кстати, рекомендую все же реализовать аппаратный ШИМ на тактовой частоте. 8-разрядный таймер (Timer0 например) будет переключаться с частотой около 2 кГц, вот и увидите, что яркость точно так же меняется и, в отличие от регулировки напряжением или еще чем, меняется линейно.

Если порт точно настроен на вход (DDRx=0) можно и напрямую. Только прочти, что такое регистры DDR, PORT, PIN, что такое pull-up, Z и Hi-Z-состояния.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

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

Окей ладно. Хочу познакомится с этим ШИМ - с чего начать?

Он мне понадобится для управления двигателем)

"...Не верю в этот мир, если не верю в себя сам, я вижу цель и знаю, что я буду там..." Noize MC - Сам (2011)

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

а что значит настроить порт на выход? есть какие то команды?

"...Не верю в этот мир, если не верю в себя сам, я вижу цель и знаю, что я буду там..." Noize MC - Сам (2011)

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

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

Для понимания читаем: http://cxem.net/mc/mc123.php

П.С. В какой программе работаете? Avr studio? Просто программы имеют разный синтаксис.

Минин Андрей. Обращайтесь за помощью.

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

У него да, студия 6, где-то в этой теме было. Но лучше если начнет сам искать в даташите по ключевым словам, оно полезнее будет.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

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

Пытался разобраться с ШИМ по статье

http://cxem.net/mc/mc231.php Нефига не понятно.

В моем даташите написано следующее:

Warning: When switching between asynchronous and synchronous clocking of

Timer/Counter2, the Timer Registers TCNT2, OCR2x, and TCCR2x might be corrupted. A safe

procedure for switching clock source is:

a. Disable the Timer/Counter2 interrupts by clearing OCIE2x and TOIE2. (т.е. надо в конце программы прописать на эти порты 0?).(Об этом в статье не слова).

b. Select clock source by setting AS2 as appropriate. (так же в статье не слова. Что оно вообще такое не знаю).

c. Write new values to TCNT2, OCR2x, and TCCR2x. (тоже хоть бы слово)

d. To switch to asynchronous operation: Wait for TCN2xUB, OCR2xUB, and TCR2xUB. (тоже не слова)

e. Clear the Timer/Counter2 Interrupt Flags. (не слова в статье)

f. Enable interrupts, if needed.

Как я понял можно запороть как минимум таймер или МК если не придерживаться этих правил. Почему в статье не слова?

В даьшите нет примеров, а на английском я так шпарить ещё не научился, что бы правильно интерпретировать то, что там написанно.

ЧЕ делать(((

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

"...Не верю в этот мир, если не верю в себя сам, я вижу цель и знаю, что я буду там..." Noize MC - Сам (2011)

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

Скачай и прочитай хотя бы А.В.Евстифеева "Микроконтроллеры AVR семейств Tiny и Mega фирмы "ATMEL". Чтобы хоть какое-то иметь представление об изучаемых МК. Там все подробно и доходчиво описано. Странно, что никто еще тебя носом не ткнул в необходимость этой процедуры. (Без обид). Иначе так и будешь засыпать вопросами по любому поводу и "склеивать" Reset с SS.

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

=)) За книженцию спс. А резет и СС не я склеял, а в итоге так получилось)) СЕйчас реально СС на программаторе склеян через шину с Резетом на плате)

Проги из примера кстати не работают. Капец((( Создается впечатление, что я первый кто их вообще изучать начал. В инете все есть но нет откуда это взялось и адекватных объяснений. Уже качаю книгу.

Только я боюсь до конца я её не дочитаю или буду читать между строк. Мне проще учится по примерам и прислушиваясь советов.

"...Не верю в этот мир, если не верю в себя сам, я вижу цель и знаю, что я буду там..." Noize MC - Сам (2011)

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

Warning: When switching between asynchronous and synchronous clocking of

Timer/Counter2, the Timer Registers TCNT2, OCR2x, and TCCR2x might be corrupted. A safe

procedure for switching clock source is:

При переключении режима синхронный/асинхронный. Вы так часто это делаете?

Про книжки я писал во 2-м же посте прошлой темы.

Оставь ты программатор в покое! Его SS это на самом деле RESET, просто скрывается

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

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

Ох читать между строк))) что за странная книга, уже прочитал 120 страниц и еще бы продолжил да вот спать пора. Такого увлечения я не помню со времен изученя ХТМЛ и ПХП. Даже в тетраде небольшой конспект сделал, что бы не лазить потом и не искать. Нашел ответы на все вопросы и не только. Планирую закатать конспект (красиво оформлю) в печатном тексте на форум. Можно так?

Из вопросов только практическая сторона осталась.

"...Не верю в этот мир, если не верю в себя сам, я вижу цель и знаю, что я буду там..." Noize MC - Сам (2011)

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

На форум точно не стоит, лучше уж на сайт. Впрочем, туда тоже не стоит: обучающие материалы по AVR там есть, лучше вряд ли напишешь.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

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

Почитал обе ветки. Объясняетесь несколько туманно. По схеме программатора - линии Reset и SS соединяются перемычкой в случае программирования МК самого программатора внутрисхемно, через разъем. Для работы программатора перемычку необходимо снять. Тогда вход Reset МК программатора подтягивается к плюсу питания м в дальнейшей работе не участвует. А сигнал Reset для программируемого МК формируется по выходу SS.

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

На форум точно не стоит, лучше уж на сайт. Впрочем, туда тоже не стоит: обучающие материалы по AVR там есть, лучше вряд ли напишешь.

Хорошо. Тогда опишу в кратце только те функции которые в своей машинке буду использовать.

"...Не верю в этот мир, если не верю в себя сам, я вижу цель и знаю, что я буду там..." Noize MC - Сам (2011)

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

Первым что я надумал сделать это программу отслеживающую нажатие кнопки.

Вроде бы ничего сложно но мне ещё нужно помучатся с командами этого МК.

алгоритм прост:

1) Ловим низкий уровень сигнала

2) Пауза

3) Ловим следующий высокий уровень

4) Делаем действие

5) Пауза

Вот текст моей программы:

Button:

clr r16

sbic pinB,1;

rjmp Button;

out portC, r16

rcall Delay

Button2:

sbis PinB,1;

rjmp Button;

ldi r17, 0b0010001;

out portC, r17;

rcall Delay

rjmp Button;

rcall Delay;

Delay:

NOP;

NOP;

NOP;

NOP;

NOP;

NOP;

ret;

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

"...Не верю в этот мир, если не верю в себя сам, я вижу цель и знаю, что я буду там..." Noize MC - Сам (2011)

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

И все же как правильно подключить кнопку? через резистор 1к мб?

Ещё вопрос а как жерез ассемблер настроить порты на вход? Ну вот как на С например: DDRC = 0b0010101;

И библиотеки не нужны не какие для ассемблерного программирования? например вот такие: #include <avr/io.h> #include <util/delay.h>

Все воткнул вот так:

1377350756-clip-13kb.png

Но боюсь что спалю порт. Куда можно повесить кнопку что бы не убить его? или это нормально?

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

"...Не верю в этот мир, если не верю в себя сам, я вижу цель и знаю, что я буду там..." Noize MC - Сам (2011)

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

После запуска в Протесе на lED вроде как идет сигнал (квадратик горит) но сам led молчит может потому что порт на выход надо настроить?

И ещё: при нажатии на кнопку сигнал с led пропадает, а когда нажимаю ещё раз он появляется и уже не гаснит сколько бы раз кнопку я не нажимал

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

"...Не верю в этот мир, если не верю в себя сам, я вижу цель и знаю, что я буду там..." Noize MC - Сам (2011)

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

Вау. Посмотрите сюда http://chipmk.ru/ind...id=58&Itemid=69 статьи очень ценные особенно для меня. С асемблером хоть как то могу управиться, а с С++ вообще не как)))

Если у нас нет таких статей может быть переписать их? естественно указав автора))) Вот именно таких статей не хватает.

Добавлено: Вот ещё нашел материал исчерпывающий с примерами - тоже то что нужно)

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

"...Не верю в этот мир, если не верю в себя сам, я вижу цель и знаю, что я буду там..." Noize MC - Сам (2011)

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

Задержку лучше делать циклом. Загрузить в регистр какое-нибудь значение и в цикле уменьшать пока не станет нулем

DELAY_256:
 push r16	 ;мало ли, вдруг там ценная информация, положим в стек
 ldi r16,0  ; начальное значение
DELAY_256_LOOP:
 dec r16	 ;уменьшаем на 1
	  brne DELAY_256_LOOP	 ;если не 0 - прыжок на метку.
 pop r16	 ;восстановим ценную информацию
ret

После запуска в Протесе на lED вроде как идет сигнал (квадратик горит)
Ну в PORTx ты же умеешь записывать значения. С другими портами так же: DDRx, TCNTx, например.

<...>Вот текст моей программы:<...>

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

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

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

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

Вот тут и вопрос (я же вроде задал). Как это все прописать на асемблере? это асемблерная программа и просто так define или DRRx,PORTx не пропишешь(((

Ребят почему не получается с блоком IF. Диоды в этом коде мигают но после нажатия\отпускания кнопки не зависают на 5 секунд как должны.

#define F_CPU 1000000UL

#include <avr/io.h>

#include <util/delay.h>

int main(void)

{

DDRB = 0xFF;

PORTC = 0xFF;

while(1)

{

PORTB = 0x00;

_delay_ms(250);

PORTB = 0xFF;

_delay_ms(250);

if(PINC == 0xFF)

{

PORTB = 0xFF;

_delay_ms(5000);

}else{}

}

return 0;

}

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

"...Не верю в этот мир, если не верю в себя сам, я вижу цель и знаю, что я буду там..." Noize MC - Сам (2011)

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

out portC, r16 , это ты написал! Что мешало аналогично написать out DDRC,r16?

Шаблон ассемблерного кода я давал

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

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

Стоп DDR - это же настройка порта на вход выход. А не так надо? out portc, r16 - я походу чего то не понимаю.

Да и проблема в том, что IF не работает. Он по идее должен смотреть PINC и сравнивать, а он этого не делает. Я хотел ему помочь и прочитать с начало состояние в регистр, а потом же сравнивать состояние регистра)) Но я хз кк это сделать на С++...

"...Не верю в этот мир, если не верю в себя сам, я вижу цель и знаю, что я буду там..." Noize MC - Сам (2011)

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

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

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

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

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

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

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

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

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