Доброго времени суток. Мне потребовалось сделать пульт для управления шаговым двигателем. Шаговый двигатель а также драйвер к ниму купили. Задча такая надо с клавиатуры вводить количество шагов и чтоб он их сделал. А также пару кнопок для того чтоп запомнить даные. Вобщем я не силён в програмировании только начал изучать. На сегодня до мк атмега8 прикрутил клавиатуру 4х4 а также дисплей 16х2. Всё собрал на макетке. В протеусе испытал немного работает. Код чтобы формировать количество шагов и направления немогу понять как написать. Помогите пожалуста. Завтра выкладу то что у меня получилось.
Понимаю чтоили в подпрограме надо както дергать одну ногу мк заданое количество раз, а на вторую ногу подавать или 1 или 0 зависимо от направления. Как дёргать не могу придумать. Также пытался переделать код из сайта где управление из компа и на шаговик. Ничего не получилось. Немогу понять как из дисплея взять цифру и отправит её в переменную. Извините за не очень грамотноё написание я самоучка, и електронике нигде не учился. Моя специализация биология и ландшафтный дизайн.
Пульт управление драйвером шагового двигателя
Сообщений 1 страница 10 из 10
Поделиться12015-01-08 02:32:43
Поделиться22015-01-08 11:31:20
За основу я взял проект из сайтаМатрична клавиатура до него пробою прикрутить код из другого проекта даного автора Управление шаговім по уарту а также немного код брал и просматривал из Stepper motor Control with Atbanned6. Сегодня к вечеру код уставлю.
Поделиться32015-01-08 11:41:58
схему то конечную выложите, никто по кускам: ссылок, слов - собирать информацию не будет (да и нюансы все неизвестны)
Поделиться42015-01-08 15:42:12
выкладывайте схему, алгоритм и код
Поделиться52015-01-08 17:24:42
Спасиба что отозвались. С празниками вас.
планирую по такой схеме подклюсить. На клавитуру повесить ещё резисторы. И обвьязать. Источник питания 5 вольт китайский стабилизированый на дх брал. У меня основная проблема не могу понять как выводить на ногу заданое количество импульсов. Понимаю что както надо дергать ногой и и щетать количество ипульсов и сравнивать их но как сделать не могу понять вобще. Извините за ламерские вопросы Баском изучаю гдето с неделю. Ранше готовые конструкции с нета собирал шил. Радиоелектроникой занимаюсь не долго всего пару лет и то как хоби. Я по специализации ландшафтник. И ботаник.
Вопрос к знающим баском под линукс есть а то под вине только у меня он работает.
$regfile = "m8def.dat"
$crystal = 1000000
'конф дисплея
Config Lcdpin = Pin , Rs = Portc.0 , E = Portc.1 , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5
Config Lcd = 16 * 2
Cursor Off
Cls
'настройка клавиатуры
Config Kbd = Portd , Debounce = 20 , Delay = 100
'переменные
Dim A As Byte , B As Byte , Key As Byte , C As Byte , D As Byte , E As Byte
Dim S As Byte '
Dim G As Word
Dim N As Word '
Dim Char As String * 5 '
S = 1
Cls
Cursor Off
B = 0
D = 1
'рабоота приривания
Config Int0 = Low Level
Config Int1 = Low Level
'порт на приревание
Config Portd.2 = Output 'порт на кнопку
Config Portd.6 = Output
Config Portd.7 = Output
'розрешение преривания
Enable Interrupts
Enable Int0
'назначение преривания
On Int0 Knopka1
Q:
Locate 1 , 1
Lcd "Direction:"
Locate 2 , 1
Lcd "Dir:"
Do
'************Read Keyboard
A = Getkbd()
If A > 15 Then
Goto Q
Else
Key = Lookup(a , Dta)
If Key <= 9 Then
B = B * 10
B = B + Key
'*************Direction
If D = 0 Then Lcd B
Waitms 270
Elseif Key = 10 Then
Locate 1 , 11
Lcd "Left"
C = 1
D = 0
B = 0
Elseif Key = 11 Then
Locate 1 , 11
Lcd "Right"
C = 2
D = 0
B = 0
'****************reset
Elseif Key = 13 Then
Cls
D = 1
B = 0
Portd.0 = 0
Portd.1 = 0
Waitms 50
Goto Q
'****************Enter key
Elseif Key = 14 Then
If D = 0 Then
Select Case S
Case 1 : Gosub R
Case 2 : Gosub T
End Select
End If
End If
End If
Wait 1
Loop
End
Dta:
Data 7 , 8 , 9 , 10 , 4 , 5 , 6 , 11 , 1 , 2 , 3 , 12 , 13 , 0 , 14 , 15
R:
Do
N = 20
Incr S '
If S = 3 Then
S = 0
End If
Select Case S '
Case 1 : Portd = &B01000000
Case 2 : Portd = &B00100000
End Select
Waitus 1000 '
Incr G '
Loop Until G = N '
'
A = 0
N = 0
Return
T:
Do
Portd = &B00001001 : Waitms B
Portd = &B00001000 : Waitms B
Portd = &B00001100 : Waitms B
Portd = &B00000100 : Waitms B
Portd = &B00000110 : Waitms B
Portd = &B00000010 : Waitms B
Portd = &B00000011 : Waitms B
Portd = &B00000001 : Waitms B
Loop
Knopka1:
Goto Q
ReturnОтредактировано gyra83 (2015-01-08 19:46:57)
Поделиться62015-01-08 19:04:41
схема и алгоритм где?... 
без оных желающих телепатически определись что конкретно вы хотели - нет
Поделиться72015-01-08 19:50:28
Спасиба за то что пытаетесь помочь. Я понимаю что не телепаты. Потому поправил сообщения. На планшете не было их.
Поделиться82015-01-12 16:32:17
Доюрого времени суток. В общем частично розобрался как выдать сигналы но теперь другая проблема. Не могу понять как цифры которые вывел на дисплей передать в подпрограму. Извините за ламерский вопрос только учю Баском.
Поделиться92015-01-13 23:46:17
Может взглянуть под другим углом и количество шагов (введенное число) не искать на дисплее, а считывать с клавиатуры? Создать массив, например, из 3 байтов (или скольки-значное количество шагов вам требуется?). Опросить клавиатуру, определить нажатую цифру, занести её в первый индекс массива. При следующем опросе клавиатуры нажатую цифру (если нажата) занести во второй индекс и т.д. до нажатия Enter. По нажатию Enter посчитать набранное число, передать в подпрограмму, выполнить её. Далее обнулить массив и всё заново.
Кстати, протеусовская клавиатура у меня почему-то не хотела нормально опрашиваться, пока не заменил модель на кнопки.
Ну и нехорошо давать схему, которая не сходится с кодом. Порты клавиатуры разные. Сигналы на ШД выдаете в том числе и на пин, который и как INT0 используете.
Поделиться102015-01-14 02:31:07
Спасиба. буду смотреть в этом направлении. Код новый выложу и схему. Сичас проверяю всё в апаратном варианте так как Протеус под Линуксом не смог сдружить с атмегой 8, с 16 нормально работает. С празниками.