Мелкие вопросы по МК и ПЛИС.

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18678
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

SII писал(а):Лично я считаю, что так делать как раз неправильно, а правильно -- описывать все векторы подряд под конкретный тип контроллера.
да без проблем: каждый имеет право на ошибку :)))
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 690
Зарегистрирован: Вс мар 04, 2007 01:17:12

Сообщение Alexeus »

Meteor писал(а):
Alexeus писал(а):Метеор, я думаю что у меня возможна проблема с дребезгом контактов замка зажигания....Понимаю, что можно сделать программную коррекцию дребезга- типа считать несколько уровней и потом запускать программу, но интересует как бороться схематикой с дребезгом. получается транзистор может колебаться несколько раз в зависимости от износа контактной группы замка зажигания.
Поставьте таймер типа NE555 в режиме одновибратора. Длительность импульса нужно сделать шире времени дребезга. Выход уже подавать на МК
Отлично! Кардинальный метод )
А фильтр какой нть попроще на пассивных элементах как сделать? RC или какой другой?
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....

Сообщение Meteor »

Не так давно подключал свою приблуду. Решение было такое: сигналы с 12вольтовым уровнем подавались на светодиоды оптронов (применяю TLP521-4). Сигнал с выходов оптронов подавать на формирователи (тригер шмидта) и/или вывод (вход) запуска таймера NE555 (требования прежние, см. предыдущий тематический пост).
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Контактная информация:
Вымогатель припоя
Аватара пользователя
Сообщения: 690
Зарегистрирован: Вс мар 04, 2007 01:17:12

Сообщение Alexeus »

я понял, что формировать лог.уровень на м/с можно, но а все же на пассивных элементах более-менее сгладить дребезг можно- как?
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Сообщение Gudd-Head »

Alexeus писал(а):я понял, что формировать лог.уровень на м/с можно, но а все же на пассивных элементах более-менее сгладить дребезг можно- как?
Вы же сами себе ответили - ставьте RC фильтр.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....

Сообщение Meteor »

Реализация подавителя зависит от характера помехи. Если длительность не большая, то вполне подойдет RC-цепочка, иначе - придется думать, ведь не всегда хочется ставить конденсаторы емкостью в тыщи мкФ.
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Контактная информация:
Реклама
Chettuser

Сообщение Chettuser »

Вопрос по математическим библиотекам: можно ли как то обойтись без них если нужно посчитать степень?:

Код: Выделить всё

i=pow(2,a);
Просто слишком много памяти отъедает у МК.
Спасибо.
Друг Кота
Аватара пользователя
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Сообщение Gudd-Head »

Chettuser писал(а):

Код: Выделить всё

i=pow(2,a);
Просто слишком много памяти отъедает у МК.
Вы двойку хотите в степень возводить?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Chettuser

Сообщение Chettuser »

Отбой. Реализовал сдвигом влево.
Друг Кота
Аватара пользователя
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Сообщение Gudd-Head »

Chettuser писал(а):Реализовал сдвигом влево.
Гениально :idea:
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Chettuser

Сообщение Chettuser »

Gudd-Head писал(а):Гениально :idea:
Хорош ёрничать! Ну не все ж гении. Я вообще самоучка. Так что мне простительно :oops:
Открыл глаза
Аватара пользователя
Сообщения: 46
Зарегистрирован: Чт июл 02, 2009 12:08:24
Откуда: Казань

Сообщение vuln »

всем привет! есть вопрос:
делаю самодельный ламинатор из печки принтера. хочу его температуру регулировать по средствам ШИМ, качестве датчика буду использовать штатный терморезистор от принтера
точность в принципе не важно, пойдет ли вот такая схема?:
Вложения
adc0.jpg
(108.76 КБ) 385 скачиваний
Chettuser

Сообщение Chettuser »

Калибровать надо будет.
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1135
Зарегистрирован: Сб июл 11, 2009 18:42:21
Откуда: Украина, г.Николаев

Сообщение Roman Venom »

Простейшая прога.... в протеусе работает, на макетке - нет. Шью через понипрог. Прошивается всё нормально, но на ногах низкий уровень... Это первый раз когда я авр прошиваю...чувствую из-за какой-то фигни не запускается прога :oops: .
.device ATmega16
.nolist
.include "D:\Program Files\Atmel\AVR Studio\Appnotes\m16def.inc"
.list

.def work=r16

rjmp init
init:
ser work
out DDRB,work
out DDRD,work
SID:
out PORTB,work
out PORTD,work


rjmp SID
Успех - императив!
Встал на лапы
Сообщения: 126
Зарегистрирован: Пн мар 16, 2009 07:37:42
Откуда: Новосибирск

Сообщение Stepan »

В начале даташит читай внимательно, ты пишешь программу в вектора прерываний, вот и глючит всё. rjmp Init - это вектор резета, он на месте, но потом нужно отступить байт эдак 40 с помощью .org , чтоб не промахнуться и не напороться на другие %).
меньше слов - больше дела
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1135
Зарегистрирован: Сб июл 11, 2009 18:42:21
Откуда: Украина, г.Николаев

Сообщение Roman Venom »

если честно я не очень понял... в пиках надо было прописывать org 0x00 в директивах. Тут надо .org 0x40? Скажи, пожалуйста, куда конкретно вставить эту директиву.
.device ATmega16
.nolist
.include "D:\Program Files\Atmel\AVR Studio\Appnotes\m16def.inc"
.list

.def work=r16
.def work1=r17
.org 0x40

rjmp init


delay2:
ldi work1,0
del_1:
inc work1
cpi work1,254
brne del_1
rjmp del_0

delay1:
ldi work,0
del_0:
inc work
cpi work,255
brne delay2
ret




init:

call delay1

ser work
out DDRB,work
out DDRD,work
SID:
out PORTB,work
out PORTD,work


rjmp SID
Успех - императив!
Друг Кота
Аватара пользователя
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....

Сообщение Meteor »

Ставлю данную директиву в сегменте .CSEG со значениями:
0x0000 перед таблицей векторов,
0x0050 перед меткой RESET,
0x.... В том месте где хочу разместить обработку прерываний или таблицу например
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Сообщение Gudd-Head »

Roman Venom писал(а): rjmp init
init:
ser work
out DDRB,work
out DDRD,work
SID:
out PORTB,work
out PORTD,work
rjmp SID
1. Зачем делать rjmp на метку, которая идёт сразу за командой rjmp???
2. Зачем циклично устанавливать на портах "1", если это достаточно сделать один раз?
3. Если не используются прерывания, прогу можно начинать с самого начала флэша.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Встал на лапы
Сообщения: 126
Зарегистрирован: Пн мар 16, 2009 07:37:42
Откуда: Новосибирск

Сообщение Stepan »

в начале памяти программ у AVR обычно находится таблица векторов прерываний, туда пишутся jmp'ы на соответствующие функции обработки прерываний, или ниче не пишется. поэтому ты туда не пиши, ты сюда пиши, а то снег в башка попадет... вот у тебя стоит первый rjmp Init это вектор прерывания reset с которого начинает выполняться программа, а дальше нужно перепрыгнуть через таблицу векторов и писать программу вне её, параллельно почитывая базовую литературу ;).
меньше слов - больше дела
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1135
Зарегистрирован: Сб июл 11, 2009 18:42:21
Откуда: Украина, г.Николаев

Сообщение Roman Venom »

Stepan
Спасибо, я читаю книгу Мортона, но там ничего такого не встретил. В примерах программ в приложениях так же ничего такого нету... Поэтому и написал на форум.
вот у тебя стоит первый rjmp Init это вектор прерывания reset с которого начинает выполняться программа, а дальше нужно перепрыгнуть через таблицу векторов и писать программу вне её
сейчас я понял.
Поставил
.org 0x30 после rjmp init.
Однако программа работает если только есть .org 0x40

Почему так?

.device ATmega16
.nolist
.include "D:\Program Files\Atmel\AVR Studio\Appnotes\m16def.inc"
.list

.def work=r16
.def work1=r17
.org 0x00

rjmp init

.org 0x30




delay2:
ldi work1,0
del_1:
inc work1; ув на 1
cpi work1,105;сравнить с 5. если=перепрыгнуть команду
brne del_1
rjmp del_0

delay1:
ldi work,0
del_0:
inc work
cpi work,105
brne delay2
ret




init:
.org 0x40
call delay1

ser work
out DDRD,work
SID:
out PORTD,work
end:

rjmp end
Успех - императив!
Ответить

Вернуться в «Разные вопросы по МК»