Ассемблер (ASM) для AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
Seriyvolk
Друг Кота
Сообщения: 4961
Зарегистрирован: Сб май 05, 2012 20:19:55
Откуда: Минск

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Seriyvolk »

Тагды так
LDI r16, 255-((1<<Bit1)|(1<<Bit2))
И всё равно указанные биты запишутся нулями.
Прибор, защищённый предохранителем, сгорает первым, защитив предохранитель. Закон Мерфи.
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20091
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Ассемблер (ASM) для AVR в вопросах и ответах

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

Seriyvolk писал(а):LDI r16, 255-((1<<Bit1)|(1<<Bit2))

Наверное, проще так LDI r16, ~((1<<Bit1)|(1<<Bit2))
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
Seriyvolk
Друг Кота
Сообщения: 4961
Зарегистрирован: Сб май 05, 2012 20:19:55
Откуда: Минск

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Seriyvolk »

Да, способов масса, и все хороши! :))
Между тем, есть ещё вопрос по работе с датчиком температуры 18В20.
Принципы отправки и приёма информации по шине мне в принципе понятны, вот непонятно как именно с этим датчиком работать. Даташит большой, инфа в нём структурирована плохо, поэтому самостоятельно разобраться не получилось.
Итак, проц стартует... Нужна ли датчику начальная инициализация (допустим как, например, дисплею 44780)? Если нужна, то что ему слать и в какой последовательности?
И второй вопрос: какая должна быть последовательность команд для простого считывания температуры? (датчик один)
Спасибо заранее!
Прибор, защищённый предохранителем, сгорает первым, защитив предохранитель. Закон Мерфи.
Аватара пользователя
unalex
Мучитель микросхем
Сообщения: 424
Зарегистрирован: Сб авг 25, 2007 22:02:05
Откуда: Германия, Viernheim

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение unalex »

Seriyvolk писал(а):по работе с датчиком температуры 18В20

http://chipenable.ru/index.php/programm ... ast-1.html
http://chipenable.ru/index.php/programm ... ast-2.html
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение akl »

Seriyvolk писал(а):... Нужна ли датчику начальная инициализация... какая должна быть последовательность команд для простого считывания температуры? (датчик один)
Сброс датчика низким уровнем на шине на время >480мкс -> отпускание линии -> через 60 мкс опрос низкого уровня от датчика при его наличии -> если низкого уровня нет, то нет и датчика; если есть, то дождаться когда датчик отпустит линию -> выдать команду SKIP ROM (0xCC) -> выдать команду начала измерения температуры Convert T (0x44); при паразитном питании подключить линию к питанию и выдержать паузу; при постоянном питании окончание преобразования можно контролировать появлением 1 на шине -> сбросить датчик -> выдать команду SKIP ROM (0xCC) -> выдать команду чтения памяти (0xBE) -> прочитав 2 байта температуры сбросить датчик. Обмен ведётся байтами младшими битами вперёд.
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ploop »

Seriyvolk, прикладываю фай программы с моими часами. Всё раскомментировано, работу с датчиком тоже хорошо видно (начинается со строки 1300).
Аватара пользователя
Seriyvolk
Друг Кота
Сообщения: 4961
Зарегистрирован: Сб май 05, 2012 20:19:55
Откуда: Минск

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Seriyvolk »

Спасибо всем! Насколько мне понятно - никакой предварительной инициализации датчику не нужно.
Сначала ресет-скип ром-запустить конверт темп, потом подождать и ресет-скип ром- считать темп. Так будет правильно?
ploop, а с чем у тебя в коде связано формирование такой точной задержки в 1uS? Только с тем, что из неё формируются все остальные? Датчику ведь даже между битами не нужны такие точные интервалы, там вродя от 1 до 12 uS окно :dont_know:
Прибор, защищённый предохранителем, сгорает первым, защитив предохранитель. Закон Мерфи.
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ploop »

Seriyvolk писал(а):Датчику ведь даже между битами не нужны такие точные интервалы, там вродя от 1 до 12 uS окно

Не помню уже, но вроде при передаче бита. Да и код работы с ним не весь мой, сам алгоритм слизан у ARV
Во всяком случае датчик замечательно работает 2 года на 30-метровой лапше рядом с силовыми проводами :)
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20091
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Ассемблер (ASM) для AVR в вопросах и ответах

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

Кстати, по идее можно извратиться и использовать UART для 1-wire :)
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
Seriyvolk
Друг Кота
Сообщения: 4961
Зарегистрирован: Сб май 05, 2012 20:19:55
Откуда: Минск

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Seriyvolk »

Да, мне говорили. Вот только для этой затеи не было у меня 2 свободные ноги МК.
Прибор, защищённый предохранителем, сгорает первым, защитив предохранитель. Закон Мерфи.
Аватара пользователя
Seriyvolk
Друг Кота
Сообщения: 4961
Зарегистрирован: Сб май 05, 2012 20:19:55
Откуда: Минск

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Seriyvolk »

Всем привет опять! Уж простите, что так плотно данную тему оккупировал :oops: , но иных вариантов нет :)) И за второй пост тож простите, но если я поправлю предыдущий - его никто не почитает...
Бросьте в меня идеей пожалуйста, если не сложно... В общем, ща мучаюсь как бы правильней организовать алгоритм опроса кнопок с дальнейшим альтернативным действием по удержанию.
К примеру хочется, чтобы при нажатии на "+" сначала плюсовалась одна секунда, потом секунды начинали тикать в плюс всё быстрее и быстрее. Аналогично и с минусом.
Есть таймер, который тикает каждую секунду, думаю можно его для этого приспособить. У самого идеи кончились, надеюсь на помощь более опытных товарищей...
Алгоритм опроса кнопок выглядит так:
Спойлер

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

//----------
;----------
; 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 в вопросах и ответах

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

Seriyvolk писал(а):но если я поправлю предыдущий - его никто не почитает...

Можно скопировать текст сообщения, удалить его и написать новое, вставив туда текст старого и добавив нового текста.
А про кнопку есть отдельная тема: viewtopic.php?f=61&t=79801
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
Seriyvolk
Друг Кота
Сообщения: 4961
Зарегистрирован: Сб май 05, 2012 20:19:55
Откуда: Минск

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Seriyvolk »

За ссыль спасибо :beer: , а вот кнопка удаления если у тебя не пропадает никогда, то у меня она через часок исчезает. Вот такая каверзная ситуация. :dont_know:
Прибор, защищённый предохранителем, сгорает первым, защитив предохранитель. Закон Мерфи.
grinya
Родился
Сообщения: 1
Зарегистрирован: Пн фев 10, 2014 11:32:52

команды assembler

Сообщение grinya »

не могу найти команду xor (исключающее ИЛИ) под ATmega8
Аватара пользователя
unalex
Мучитель микросхем
Сообщения: 424
Зарегистрирован: Сб авг 25, 2007 22:02:05
Откуда: Германия, Viernheim

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение unalex »

grinya писал(а):(исключающее ИЛИ) под ATmega8


EOR
http://www.gaw.ru/html.cgi/txt/doc/micr ... sm/eor.htm
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
vik1977ck
Первый раз сказал Мяу!
Сообщения: 26
Зарегистрирован: Ср дек 09, 2009 15:07:13

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение vik1977ck »

Прошу помощи опытных котов- а то уже сам себя запутал.. :o
Значит пишу программку под МЕГУ8- терморегулятор для электроплитки - и вот засада- температура будет от 0- до 420 градусов.. посоветуйте как лучше обрабатывать числа больше 256.. Старший байт,младший байт и смещение? Данные будут хранится в трех байтных переменных ..
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20091
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Ассемблер (ASM) для AVR в вопросах и ответах

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

vik1977ck писал(а):Старший байт,младший байт и смещение?

Эээ, какое смещение? 9 бит = 512 градусов, 9-й бит в старшем байте, остальные 8 — в младшем.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение pyzhman »

Нужно складывать это значение в переменную, размерность которой превышает байтовую величину. Например integer. На у если на ассемблере (на что очень смахивает запрос), то ручками/лапками.
Docendo discimus
vik1977ck
Первый раз сказал Мяу!
Сообщения: 26
Зарегистрирован: Ср дек 09, 2009 15:07:13

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение vik1977ck »

Gudd-Head писал(а):
vik1977ck писал(а):Старший байт,младший байт и смещение?

Эээ, какое смещение? 9 бит = 512 градусов, 9-й бит в старшем байте, остальные 8 — в младшем.

Да... вот смотрите- измерил я с помощью АЦП температуру - например 2,507 вольт -там термопара через ОУ- и вот теперь мне нужно сделать из этого числа температуру- перевести в градусы - я знаю что при 2,507 -это 366 градусов по Цельсию- сравнить с константой которая внесена в ОЗУ- типа ограничение при котором выключиться симистор и вывести показания на 4-рядный семи сегментный дисплей- вот тут и попал в засаду- умственную.. :)) Как это все организовать- например загоняем показания АЦП в регистры R16 старший байт -R17- младший байт - и начинаем преобразовывать? вот этого я не могу понять.. :cry:
vik1977ck
Первый раз сказал Мяу!
Сообщения: 26
Зарегистрирован: Ср дек 09, 2009 15:07:13

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение vik1977ck »

pyzhman писал(а):Нужно складывать это значение в переменную, размерность которой превышает байтовую величину. Например integer. На у если на ассемблере (на что очень смахивает запрос), то ручками/лапками.

Да на ассемблере пишу- как-то с самого начала у меня с СИ и с PIC не срослось... :) Вот создал я переменную например 3 -байтную.. а как ее сравнивать? вот тут не могу понять- как ее пихать в регистры? Вы уж не пинайте сильно- элементарные вещи спрашиваю- но не могу понять..
Ответить

Вернуться в «AVR»