Ассемблер (ASM) для AVR в вопросах и ответах
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Тагды так
LDI r16, 255-((1<<Bit1)|(1<<Bit2))
И всё равно указанные биты запишутся нулями.
LDI r16, 255-((1<<Bit1)|(1<<Bit2))
И всё равно указанные биты запишутся нулями.
Прибор, защищённый предохранителем, сгорает первым, защитив предохранитель. Закон Мерфи.
- Gudd-Head
- Друг Кота
- Сообщения: 20091
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Seriyvolk писал(а):LDI r16, 255-((1<<Bit1)|(1<<Bit2))
Наверное, проще так LDI r16, ~((1<<Bit1)|(1<<Bit2))
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Да, способов масса, и все хороши!
Между тем, есть ещё вопрос по работе с датчиком температуры 18В20.
Принципы отправки и приёма информации по шине мне в принципе понятны, вот непонятно как именно с этим датчиком работать. Даташит большой, инфа в нём структурирована плохо, поэтому самостоятельно разобраться не получилось.
Итак, проц стартует... Нужна ли датчику начальная инициализация (допустим как, например, дисплею 44780)? Если нужна, то что ему слать и в какой последовательности?
И второй вопрос: какая должна быть последовательность команд для простого считывания температуры? (датчик один)
Спасибо заранее!
Между тем, есть ещё вопрос по работе с датчиком температуры 18В20.
Принципы отправки и приёма информации по шине мне в принципе понятны, вот непонятно как именно с этим датчиком работать. Даташит большой, инфа в нём структурирована плохо, поэтому самостоятельно разобраться не получилось.
Итак, проц стартует... Нужна ли датчику начальная инициализация (допустим как, например, дисплею 44780)? Если нужна, то что ему слать и в какой последовательности?
И второй вопрос: какая должна быть последовательность команд для простого считывания температуры? (датчик один)
Спасибо заранее!
Прибор, защищённый предохранителем, сгорает первым, защитив предохранитель. Закон Мерфи.
- unalex
- Мучитель микросхем
- Сообщения: 424
- Зарегистрирован: Сб авг 25, 2007 22:02:05
- Откуда: Германия, Viernheim
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Seriyvolk писал(а):по работе с датчиком температуры 18В20
http://chipenable.ru/index.php/programm ... ast-1.html
http://chipenable.ru/index.php/programm ... ast-2.html
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Сброс датчика низким уровнем на шине на время >480мкс -> отпускание линии -> через 60 мкс опрос низкого уровня от датчика при его наличии -> если низкого уровня нет, то нет и датчика; если есть, то дождаться когда датчик отпустит линию -> выдать команду SKIP ROM (0xCC) -> выдать команду начала измерения температуры Convert T (0x44); при паразитном питании подключить линию к питанию и выдержать паузу; при постоянном питании окончание преобразования можно контролировать появлением 1 на шине -> сбросить датчик -> выдать команду SKIP ROM (0xCC) -> выдать команду чтения памяти (0xBE) -> прочитав 2 байта температуры сбросить датчик. Обмен ведётся байтами младшими битами вперёд.Seriyvolk писал(а):... Нужна ли датчику начальная инициализация... какая должна быть последовательность команд для простого считывания температуры? (датчик один)
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Seriyvolk, прикладываю фай программы с моими часами. Всё раскомментировано, работу с датчиком тоже хорошо видно (начинается со строки 1300).
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Спасибо всем! Насколько мне понятно - никакой предварительной инициализации датчику не нужно.
Сначала ресет-скип ром-запустить конверт темп, потом подождать и ресет-скип ром- считать темп. Так будет правильно?
ploop, а с чем у тебя в коде связано формирование такой точной задержки в 1uS? Только с тем, что из неё формируются все остальные? Датчику ведь даже между битами не нужны такие точные интервалы, там вродя от 1 до 12 uS окно
Сначала ресет-скип ром-запустить конверт темп, потом подождать и ресет-скип ром- считать темп. Так будет правильно?
ploop, а с чем у тебя в коде связано формирование такой точной задержки в 1uS? Только с тем, что из неё формируются все остальные? Датчику ведь даже между битами не нужны такие точные интервалы, там вродя от 1 до 12 uS окно

Прибор, защищённый предохранителем, сгорает первым, защитив предохранитель. Закон Мерфи.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Seriyvolk писал(а):Датчику ведь даже между битами не нужны такие точные интервалы, там вродя от 1 до 12 uS окно
Не помню уже, но вроде при передаче бита. Да и код работы с ним не весь мой, сам алгоритм слизан у ARV
Во всяком случае датчик замечательно работает 2 года на 30-метровой лапше рядом с силовыми проводами
- Gudd-Head
- Друг Кота
- Сообщения: 20091
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Кстати, по идее можно извратиться и использовать UART для 1-wire 
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Да, мне говорили. Вот только для этой затеи не было у меня 2 свободные ноги МК.
Прибор, защищённый предохранителем, сгорает первым, защитив предохранитель. Закон Мерфи.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Всем привет опять! Уж простите, что так плотно данную тему оккупировал
, но иных вариантов нет
И за второй пост тож простите, но если я поправлю предыдущий - его никто не почитает...
Бросьте в меня идеей пожалуйста, если не сложно... В общем, ща мучаюсь как бы правильней организовать алгоритм опроса кнопок с дальнейшим альтернативным действием по удержанию.
К примеру хочется, чтобы при нажатии на "+" сначала плюсовалась одна секунда, потом секунды начинали тикать в плюс всё быстрее и быстрее. Аналогично и с минусом.
Есть таймер, который тикает каждую секунду, думаю можно его для этого приспособить. У самого идеи кончились, надеюсь на помощь более опытных товарищей...
Алгоритм опроса кнопок выглядит так:
Бросьте в меня идеей пожалуйста, если не сложно... В общем, ща мучаюсь как бы правильней организовать алгоритм опроса кнопок с дальнейшим альтернативным действием по удержанию.
К примеру хочется, чтобы при нажатии на "+" сначала плюсовалась одна секунда, потом секунды начинали тикать в плюс всё быстрее и быстрее. Аналогично и с минусом.
Есть таймер, который тикает каждую секунду, думаю можно его для этого приспособить. У самого идеи кончились, надеюсь на помощь более опытных товарищей...
Алгоритм опроса кнопок выглядит так:
Спойлер
Код: Выделить всё
//----------
;----------
; PUSH_KEY - процедура чтения клавиатуры
;----------
PUSH_KEY:
IN R16,PIND
ANDI R16,0b00011111
PUSH R16
ldi DelayBuf,255 ;формируем задержку времени 640 мкс
rcall delay
IN R16,PIND
ANDI R16,0b00011111
POP R17
CPSE R16,R17
RET
CPI R16,0b00011111
BREQ EXIT
SBRS R16,Plus
RCALL TimePlus
SBRS R16,Minus
RCALL TimeMinus
SBRS R16,Enter
RJMP Run_Stop
SBRS R16,Preset
RJMP Preset_Load_Store
EXIT: CBR FLAG,1<<PushedKey
CLR HoldCount
EndPK: RET
TimePlus:
SBRC FLAG,Run ; Если мы попали сюда и таймер запущен
RET ; то просто выходим
CPI HTime,99
BRSH EndTP
ADIW HTime:LTime,1
CPI LTime,60
BRLO EndTP
LDI LTime,255
ADIW HTime:LTime,1
EndTP: SBR FLAG,(1<<TimeUpdate)|(1<<PushedKey)
RET
TimeMinus:
SBRC FLAG,Run ; Если мы попали сюда и таймер запущен
RET ; то просто выходим
CPSE LTime,Zero
RJMP TimeMinusINT
CPSE HTime,Zero
RJMP TimeMinusINT
RJMP EndTM
TimeMinusINT:
SBIW HTime:LTime,1
CPI LTime,60
BRLO EndTM
LDI LTime,59
EndTM: SBR FLAG,(1<<TimeUpdate)|(1<<PushedKey)
RETПрибор, защищённый предохранителем, сгорает первым, защитив предохранитель. Закон Мерфи.
- Gudd-Head
- Друг Кота
- Сообщения: 20091
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Seriyvolk писал(а):но если я поправлю предыдущий - его никто не почитает...
Можно скопировать текст сообщения, удалить его и написать новое, вставив туда текст старого и добавив нового текста.
А про кнопку есть отдельная тема: viewtopic.php?f=61&t=79801
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Re: Ассемблер (ASM) для AVR в вопросах и ответах
За ссыль спасибо
, а вот кнопка удаления если у тебя не пропадает никогда, то у меня она через часок исчезает. Вот такая каверзная ситуация. 
, а вот кнопка удаления если у тебя не пропадает никогда, то у меня она через часок исчезает. Вот такая каверзная ситуация. 
Прибор, защищённый предохранителем, сгорает первым, защитив предохранитель. Закон Мерфи.
команды assembler
не могу найти команду xor (исключающее ИЛИ) под ATmega8
- unalex
- Мучитель микросхем
- Сообщения: 424
- Зарегистрирован: Сб авг 25, 2007 22:02:05
- Откуда: Германия, Viernheim
Re: Ассемблер (ASM) для AVR в вопросах и ответах
grinya писал(а):(исключающее ИЛИ) под ATmega8
EOR
http://www.gaw.ru/html.cgi/txt/doc/micr ... sm/eor.htm
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Прошу помощи опытных котов- а то уже сам себя запутал..
Значит пишу программку под МЕГУ8- терморегулятор для электроплитки - и вот засада- температура будет от 0- до 420 градусов.. посоветуйте как лучше обрабатывать числа больше 256.. Старший байт,младший байт и смещение? Данные будут хранится в трех байтных переменных ..
Значит пишу программку под МЕГУ8- терморегулятор для электроплитки - и вот засада- температура будет от 0- до 420 градусов.. посоветуйте как лучше обрабатывать числа больше 256.. Старший байт,младший байт и смещение? Данные будут хранится в трех байтных переменных ..
- Gudd-Head
- Друг Кота
- Сообщения: 20091
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Ассемблер (ASM) для AVR в вопросах и ответах
vik1977ck писал(а):Старший байт,младший байт и смещение?
Эээ, какое смещение? 9 бит = 512 градусов, 9-й бит в старшем байте, остальные 8 — в младшем.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- pyzhman
- Друг Кота
- Сообщения: 7016
- Зарегистрирован: Вс июл 12, 2009 19:15:29
- Откуда: Ижевск
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Нужно складывать это значение в переменную, размерность которой превышает байтовую величину. Например integer. На у если на ассемблере (на что очень смахивает запрос), то ручками/лапками.
Docendo discimus
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Gudd-Head писал(а):vik1977ck писал(а):Старший байт,младший байт и смещение?
Эээ, какое смещение? 9 бит = 512 градусов, 9-й бит в старшем байте, остальные 8 — в младшем.
Да... вот смотрите- измерил я с помощью АЦП температуру - например 2,507 вольт -там термопара через ОУ- и вот теперь мне нужно сделать из этого числа температуру- перевести в градусы - я знаю что при 2,507 -это 366 градусов по Цельсию- сравнить с константой которая внесена в ОЗУ- типа ограничение при котором выключиться симистор и вывести показания на 4-рядный семи сегментный дисплей- вот тут и попал в засаду- умственную..
Re: Ассемблер (ASM) для AVR в вопросах и ответах
pyzhman писал(а):Нужно складывать это значение в переменную, размерность которой превышает байтовую величину. Например integer. На у если на ассемблере (на что очень смахивает запрос), то ручками/лапками.
Да на ассемблере пишу- как-то с самого начала у меня с СИ и с PIC не срослось...