Страница 40 из 132

Добавлено: Пт сен 25, 2009 12:25:32
ibiza11
3 реостата куда будешь подключать?

Добавлено: Пт сен 25, 2009 12:50:50
allergen
девайс этот мой - 3-х координатный станочек с ЧПУ для перемещения карандаша. Хочется наверняка знать текущие координаты острия карандаша. Собираюсь сделать скользящие контакты вдоль каждой оси, и в МК анализировать эту изменяющуюся нагрузку. Как это сделать и можно ли это сделать - я пока не знаю :)))

Добавлено: Пт сен 25, 2009 16:20:18
ibiza11
нет, я имел в виду, что реостаты обычно подключаются к АЦП, которого в тини2313 нет. думаю такое решение врядли подойдет для станка с ЧПУ

Добавлено: Пт сен 25, 2009 22:36:41
vovo4ka
осмелюсь порекомендовать книжечку "Программируемые роботы" Дж. Вильямс там описывается сборка с нуля станка с чпу!

Добавлено: Ср сен 30, 2009 16:10:18
Михаил
Господа, нужна помощь. собираю схему из обучалки бегущего огня
http://radiokot.ru/start/mcu_fpga/avr/13/ вот. но 8 каналов мне мало и я решил задействовать порт D
добавил строки

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

 inc ResCnt            ;инкремент счетчика сбросов

          ldi Temp,0b11111111   ;настройка портa
          out DDRB,Temp
          
          ldi Temp,0b11111111   ;настройка портa
          out DDRD,Temp

          ldi Temp,0b01000000   ;разрешить прерывание компаратора
          out TIMSK,Temp
типа включил порт D
и на вывод

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

Init:    ldi Temp1,0           ;загрузить нач. значение
         rjmp SelectArray

Output:  out PortB,Temp        ;вывод в порт
         out PortD,Temp

         reti     
получилось что порты работают одинаково, что D что B один в один. но я хотел вовсе не это. я хочу чтобы огонек не повторялся а бежал циклически. мне нужно наверное что то с массивом сделать...что думаете?

Добавлено: Сб окт 03, 2009 13:29:55
Димитар
Тоесть имеещь в виду чтобы "огонек" проходил порт В - переходил на D и снова возвращался на B - думаю надо использовать признак переноса С при достижении старшего пина порта B скажем PB.7 - b автоматически при установке PB.7 в 1 включать порт D и так по кругу....думаю так.

Добавлено: Сб окт 03, 2009 13:34:40
Михаил
да я именно это и имел в виду
но там массив и прерывания....

Добавлено: Сб окт 03, 2009 13:38:42
Димитар
Кинь всю прогу, полный листинг!

Добавлено: Сб окт 03, 2009 13:46:41
Михаил
вот

Добавлено: Сб окт 03, 2009 13:55:51
Димитар
честно говоря - сразу думается что косяк в этом -
Output: out PortB,Temp ;вывод в порт
out PortD,Temp
- сходу сказать сложно, но думаю надо поработать с битами портов и признаком переноса не смотря на прерывания.

Добавлено: Сб окт 03, 2009 15:10:54
Pooher

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

Init:    ldi Temp1,0           ;загрузить нач. значение 
         rjmp SelectArray 

Output:  out PortB,Temp        ;вывод в порт 
         out PortD,Temp 

         reti     
получаем вот что:

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


Init:    ldi Temp1,0           ;загрузить нач. значение 
         rjmp SelectArray 

Output:  out PortB,Temp        ;вывод в порт В регистр Temp
         out PortD,Temp            ;вывод в порт D регистр Temp

         reti     
Вам надо чтото вроде:

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


Output:  out PortB,Temp        ;вывод в порт В регистр Temp
         out PortD,Temp1            ;вывод в порт D регистр Temp1

         reti     
Самое простое - загружать из массива два значения т.е. Temp и Temp1

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

 ldi ZL, Low(Array*2)
 ldi ZH, HIGH(Array*2)
 add ZL, "сдвиг"
lpm temp, Z+
lpm temp1, Z
ret

ARRAY:
.db 0b10000000, 0
.db 0b01000000, 0
;...........
;...........
;...........
;...........
.db 0b00000001, 0
.db 0, 0b10000000 

Добавлено: Сб окт 03, 2009 15:13:39
Михаил
спасибо, сейчас попробую...мысль понял

Добавлено: Сб окт 03, 2009 15:44:21
Михаил
компилятор ругается на строчку

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

 add ZL, "сдвиг" 
Pooher, скажите, почему в массиве 8 чисел, а не 15? мы же используем 15 портов...

Добавлено: Сб окт 03, 2009 16:12:51
Pooher
:)) "сдвиг" - это регистр(РОН), в котором хранится число, на которое надо сдвинуть.

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

Добавлено: Сб окт 03, 2009 16:23:29
Михаил
хорошо, вместо слова сдвиг надо писать число? я недавно начал программировать, не смейтесь
про восемь чисел я имел ввиду что .db 0b10000000, 0 это восемь
а к примеру .db 0b100000000000000, 0 это пятнадцать. или неверно? у нас же будет задействовано все 15 портов?

Добавлено: Сб окт 03, 2009 17:23:00
Pooher
0b10000000, 0 - это 0b10000000, 0b00000000, т. е. 2 байта. 1-й байт пишется в один порт, второй-во второй.
вместо слова сдвиг надо писать число?
надо писать так

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

ldi tmp, 2 ; ваше число(здесь 2) заисать в РОН tmp
затем вызываем подпрограмму чтения массива, затем подпрограмму вывода в проты, после чего идёт задержка (если не заморачиваться с прерываниями) и запись другово числа в tmp.
А вообще, срочно в обучалку, и методично, по пунктам...

Добавлено: Пн окт 05, 2009 13:09:20
Михаил
короче не получается, задача стоит заставить два порта D и B работать одновременно, причем информацию о работе брать из разных массивов

Добавлено: Пн окт 05, 2009 17:03:10
ibiza11
товарищ Pooher уже все объяснил, что непонятного в его коде или словах? довольно простой алгоритм. как вариант, без массивов, завести два регистра, которые будут постоянно выводиться в порты, а через определенные промежутки времени в этих двух регистрах циклично сдвигается логическая единичка. как вам?

Добавлено: Пн окт 05, 2009 17:13:03
Михаил
без массивов понятно, но я хочу еще кнопкой переключать программы
надо попробовать так наверное
выполняется программа 1 выводится на порт б и порт д...при нажатии кнопки выполняется программа 2....

плохая сигнатура

Добавлено: Пт окт 09, 2009 23:15:34
ewgen.88
Найдена плохая сигнатура ! (Unknown FF-FF-FF),подскажите что делать,куда глядеть!