Russian Crazy Pilot

Dimitrovgrad
Текущее время: 22 ноя 2017 06:46

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
 Заголовок сообщения: как начать программировать ?
СообщениеДобавлено: 08 дек 2012 01:40 
Не в сети

Зарегистрирован: 29 ноя 2012 14:52
Сообщений: 370
Откуда: Димитровград
Благодарил (а): 56 раз.
Поблагодарили: 45 раз.
Имя: Гальцов Константин
Пункты репутации: 6
я не скажу что я большой ас в прогрммировании.. может был бы и большим асом! еслиб у меня были учителя!!! у которых можно было чтото спросить.. но таких не оказалось :(.
поэтому начинать приходилось очень долго и с большим трудом.. изучая чужие исходники.. смотря на каракули и нихрена не понимая..
поэтому и решил создать эту тему!
я начинал с пик контролеров.. потом перешол на авр-ки...и считаю что авр всётаки проще для понимания.
чтобы начать достаточно одного компа.. можно не иметь даже железа!!! хотя в железе.. когда заработало.. гораздо итересней
итак ! нам нужен AVRStudio4.19 Setup. желательно 4.19.. в 5й сильно переделан интерфейс хрен поймёш что где находится!
и Proteus 7.6 SP0 это симулятор электронных схем..там есть и приборы.. такие как осцилограф.. итд.

когдато я у одного знакомого спросил.. что такое програмирование.. как это всё понимать..
он ответил просто :)
это типа генерация нулей и единичек на ножках проца по нужным нам законам!


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: как начать программировать ?
СообщениеДобавлено: 08 дек 2012 02:03 
Не в сети

Зарегистрирован: 29 ноя 2012 14:52
Сообщений: 370
Откуда: Димитровград
Благодарил (а): 56 раз.
Поблагодарили: 45 раз.
Имя: Гальцов Константин
Пункты репутации: 6
даж незнаю с чего начать... совсем с нуля... тоесть как с создать проект...
или уже с разбора програм!

я начинал это всё изучать по теме спутникового тв.. просмотр на левых картах... через сплитеры.. итд
был такой сильнейший прогер SIDD.. и на просторах интернета валялся доковский фаил с названием уроки от сида!
в котором другой прогер Ethereal дезасамблировал сидовскую прошивку и буквально по каждой каманде давал коментарии что там происходит!!
мне понравилось!!! очень познавательно!

начнём наверно с распространёного проца мега-8.... все мы привакли запускать на компе по множеству приложений..
и комп легко с этим легко справляется.. в отличии от компа мелкие проци однозадачные!!!
тоесть он не может делать 10 дел сразу! софтово!
но чтобы это всётаки можно было делать в процесорах есть куча аппаратных устройств.. которые можно сказать живут практически отдельно отпроца!
так вот и получается многозадачность!
например нам надо принять с ком порта компа байт.. конфигурируем в проце уарт... и дальше выполняем основной цикл проги...
как только уарт примет байт.. он об этом сообщит.. процу.. это можно сделать несколькими вариантами!
либо произойдёт прерывание.. это остонов основной проги в обсолютно любом месте... выполнение кода.. который предусмотрен прерыванием... и после его выполнения возврат выполнения основной проги.. с того места на котором остановились! или уарт просто как примет байт выставит еденичку (флаг) в соответствующем регистре! и когда проге понадобится этот принятый байт.. она проверит бит.. и если байт принят.. что считает его с буфера уарта..


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: как начать программировать ?
СообщениеДобавлено: 08 дек 2012 02:16 
Не в сети

Зарегистрирован: 29 ноя 2012 14:52
Сообщений: 370
Откуда: Димитровград
Благодарил (а): 56 раз.
Поблагодарили: 45 раз.
Имя: Гальцов Константин
Пункты репутации: 6
аппаратный уарт хорошо!! но тут есть несколько моментов!! тоесть стандарты!! а конкретней скоростя! тоесть по ком порту все видели.. такие цифарки .. 2400..4800..9600......115200..
так вот.. чтобы аппаратный уарт поподал в эти скоростя нужно подбирать соответствующий кварц (по частоте).. но как всегда его не оказывается под рукой :)
или какое нибуть переферийное устройство требует тоже какойто определённой частоты... ну или просто ставим максимальный кварц чтобы получить наибольшее быстродействие... ну или просто есть мишок кварцев какойто одной определ1ной частоты.. 16мгц например :)
то используется софтовый уарт.. который можно настроить на обсолютно любую НЕ САНДАРТНУЮ скорость!
вылятит это ввиде двух подпрограм (далее ПП).. одна передаёт байт.. другая принимает!
плюс тут есть один момент... если аппаратный уарт жостко привязан к какойто определёной ноге проца!!! а иногда это ну просто не удобно при монтаже..
то софтовый уарт можно назначить на обсолютно любую ногу проца!!!!!!!!!


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: как начать программировать ?
СообщениеДобавлено: 08 дек 2012 02:32 
Не в сети

Зарегистрирован: 29 ноя 2012 14:52
Сообщений: 370
Откуда: Димитровград
Благодарил (а): 56 раз.
Поблагодарили: 45 раз.
Имя: Гальцов Константин
Пункты репутации: 6
и так..первая задача! принять и передать байт .. между компом и процом!
чтобы это сделать нам надо разобраться как там устроен протокол обмена..

(само написание прошивки это одна десятая доля работы при создании устройства с процом!!!
так как гораздо больше уходит времени на изучение работы переферийных устройств.. протоколов обмена.. итд)

итак.. ком порт.. рс-232...

Изображение

расматривать будем уже ТТЛ уровне а не те что на выходе преобразователей уровня! (мах232)

сам байт передаётся в 8 бит!!! перед которыми всегда присутствует старт бит.. равний по времени дному биту данных.
после данных может быть 1 бит чотности.. после него всегда идёт стоп бит!!! по длительности он может быть 1.. 1.5.. или 2 бита

когда на шине ничего не происходит то стоит 1!!!как только 1 меняется на 0!!! это и есть "стартовый фронт" от которого и начинаются все танци с бубном :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: как начать программировать ?
СообщениеДобавлено: 08 дек 2012 02:43 
Не в сети

Зарегистрирован: 29 ноя 2012 14:52
Сообщений: 370
Откуда: Димитровград
Благодарил (а): 56 раз.
Поблагодарили: 45 раз.
Имя: Гальцов Константин
Пункты репутации: 6
расмотрим приём... смысл.. после старт фронта делаем паузу по времени равную 1.5 длительности бита..считываем ..пауза 1 бит..считываем.. и так 8 раз..
если передача ведётся старшим битом вперёд.. то приняв первый бит.. грузим в регистр..в маладший бит! и сдвигаем в лево!!и так как уже сказали 8 раз! :)
теперь по времени мы находимся на середине поледнего бита!..тут уже смотрим.. есть бит чотности или нет..делаем паузу.. приблезительно середины последнего стоп бита.. и выходим из ПП! всё :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: как начать программировать ?
СообщениеДобавлено: 08 дек 2012 02:51 
Не в сети

Зарегистрирован: 29 ноя 2012 14:52
Сообщений: 370
Откуда: Димитровград
Благодарил (а): 56 раз.
Поблагодарили: 45 раз.
Имя: Гальцов Константин
Пункты репутации: 6
вот код приёма байта
--------------------------
RX_BAIT:
;--------------------------------------------------
sbis RD_PIN ; ловим перепад с 1 в 0
rjmp RX_BAIT ;
sbis RD_PIN ; ловим перепад с 1 в 0
rjmp RX_BAIT ;
sbis RD_PIN ; ловим перепад с 1 в 0
rjmp RX_BAIT ;
;---------------------------------------------------
clr BUF
;------------------
ldi Timer,20 ; корекция старт бита
p_st_bit:
dec Timer
brne p_st_bit
;------------------
ldi CNT,0x08 ; заносим 08H длинна в битах в счетчик бит CNT_BIT
Loop_RX:
;------------------
ldi Timer,40 ; корекция скорости приёма 42
p_bit:
dec Timer
brne p_bit
;------------------
lsr BUF ; сдвигаем вправо
sbis RD_PIN ;считываем ногу проца
sbr BUF,(1<<7) ; выстовить старший бит в 1
dec CNT ; уменьшаем колличество бит
brne Loop_RX
;------------------
ldi Timer,120 ; корекция скорости стоп бита
stop_bit:
dec Timer
brne stop_bit
;------------------
ret


Последний раз редактировалось Борисыч 08 дек 2012 03:34, всего редактировалось 1 раз.

Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: как начать программировать ?
СообщениеДобавлено: 08 дек 2012 03:24 
Не в сети

Зарегистрирован: 29 ноя 2012 14:52
Сообщений: 370
Откуда: Димитровград
Благодарил (а): 56 раз.
Поблагодарили: 45 раз.
Имя: Гальцов Константин
Пункты репутации: 6
прежде чем разбирать это по командно.. хорошобы выучить библию наизусть!!!!
http://www.gaw.ru/html.cgi/txt/doc/micr ... /start.htm
и знать что какая команда делает!
(буду сразу исправлять код конкретно под рс232)

RX_BAIT: <- это название ПП
;---------------------------------------------------
ТУТ ЛОВИМ СТАРТ ФРОНТ!!! ПОЧЕМУ 3 РАЗА!! ЭТО ТАК НАЗЫВАЕМАЯ ЗАЩИТА ОТ ДРЕБЕЗГА!

sbic RD_PIN ; ловим перепад с 1 в 0
- если на ноге проца 0 то пропустить следущую команду
в покое унас на входе 1.. значит не пропускае следущую команду :)

rjmp RX_BAIT ;
если на входе 1 то эта команда не будет пропущена и мы вернёмся на RX_BAIT
так и будем топтаться на месте пока не придёт 0
(это не совсем правельно..вдруг у нас кабель отвалился!!
и 0 никогда не придёт!!! то работа проца тут и зависнет! это зависит уже от конкретного устройства...
иногда делаю выход по таймеру... тоесть подождал какоето время и вышел из ПП
выйти можно например с числом фф по которуму узнаём что приёма небыло :) )


sbic RD_PIN ; ловим перепад с 1 в 0
rjmp RX_BAIT ;
sbic RD_PIN ; ловим перепад с 1 в 0
rjmp RX_BAIT ;

и так делаем несколько раз если нужно проверить на дребегз контактов..
;---------------------------------------------------

clr BUF
отчищаем регистр в котором будет находится результат!
;------------------
старт фронт приняли... делаем паузу в 0.5 длительности бита
ldi Timer,20 ; корекция старт бита
загружаем число в регистр таймер

p_st_bit:
dec Timer
уменьшаем его на 1

brne p_st_bit
если регистр таймер не = 0 то переходим на p_st_bit..и так покругу пока не дощитаем до нуля..
;------------------

приём байта сделан в цикле.. поэтому присутствует регистр с числом бит CNT

ldi CNT,0x08 ; заносим 08H длинна в битах в счетчик бит CNT_BIT
загружаем количество бит...=8и.. тоесть 8 раз будем идти по кругу!!

Loop_RX:
;------------------
тут делаем паузу равную длительности одного бита..
первый бит будет приниматься как раз с задержкой от старт фронта в 1.5 бита

ldi Timer,40 ; корекция скорости приёма 42
p_bit:
dec Timer
brne p_bit

;------------------
lsr BUF ; сдвигаем вправо


sbic RD_PIN ;считываем ногу проца
в буфере у нас нули.. мыж его отчистили раньше!!!
поэтому создание байта сводится к выставлению единиц... когда надо..
тоесть если у нас на порту 0 то мы пропустим следущую команду.. и не выставим в регистре 1.. оставим там 0

sbr BUF,(1<<7) ; выстовить старший бит в 1
выставить 7й.. старший бит в регистре в 1

dec CNT ; уменьшаем колличество бит
уменьшаем количество бит на 1

brne Loop_RX
идём по кругу пока не дощитаем до 0
;------------------
дощитали до 0... делаем паузу на время стоп бита..

ldi Timer,120 ; корекция скорости стоп бита
stop_bit:
dec Timer
brne stop_bit
;------------------

и выходим из ПП
ret

имея в регистре BUF результат... считаное число!
:)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: как начать программировать ?
СообщениеДобавлено: 08 дек 2012 03:39 
Не в сети

Зарегистрирован: 29 ноя 2012 14:52
Сообщений: 370
Откуда: Димитровград
Благодарил (а): 56 раз.
Поблагодарили: 45 раз.
Имя: Гальцов Константин
Пункты репутации: 6
иногда.. в передаче данных встечается такая хрень.. приходится смотреть по месту..
предача вперёд старшим битом или младшим и инверсия
тоесть постоянная 1 но входе это информационный 0..
а кода шина падает в 0.. то это единица

поэтому первый пример отличается от второго... чтобы пока не сбивать с толку :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: как начать программировать ?
СообщениеДобавлено: 08 дек 2012 10:02 
Не в сети

Зарегистрирован: 30 ноя 2012 00:23
Сообщений: 25
Откуда: Ижевск
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.
Имя: Кирилл
Пункты репутации: 2
Все очень понятно и позновательно!!!!!
Продолжайте, месье :!:
А я попробую отладить на 168меге возможно, лежит ардунка где-то, как раз для таких дел припас.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: как начать программировать ?
СообщениеДобавлено: 08 дек 2012 13:22 
Не в сети

Зарегистрирован: 29 ноя 2012 14:52
Сообщений: 370
Откуда: Димитровград
Благодарил (а): 56 раз.
Поблагодарили: 45 раз.
Имя: Гальцов Константин
Пункты репутации: 6
Kirill писал(а):
Все очень понятно

ну раз понятно тогда есть такой вопрос!
вот у нас с компа передаётся байт... а проц его принимает... с какойто скоростью!!!
как узнать что у нас скоростя совпадают????
тоесть как нам отследить момент считывания процом бита !! ????


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: как начать программировать ?
СообщениеДобавлено: 10 дек 2012 00:39 
Не в сети

Зарегистрирован: 29 ноя 2012 14:52
Сообщений: 370
Откуда: Димитровград
Благодарил (а): 56 раз.
Поблагодарили: 45 раз.
Имя: Гальцов Константин
Пункты репутации: 6
ладно .. не буду мучить...
так как проц СЧИТЫВАЕТ!!! ... тоесть наружу ничего не выдаёт!! то моменты считывания отследить нельзя!!!
так надо сделать так чтоб момент приёма с проца выводился наружу!!! всё очень просто до безобразия!!!

смотрим код

Loop_RX:
;------------------
ldi Timer,41 ; корекция скорости приёма 42
p_bit:
dec Timer
brne p_bit
; nop

;------------------
lsr BUF ; сдвигаем вправо
; итого считывание 1го происходит на 1.5бит от старт перепада
nop ; устанавливаем флаг переноса в 0

sbi PORTB,0
cbi PORTB,0

sbis RD_PIN ;
sbr BUF,(1<<7) ;
dec CNT ; уменьшаем колличество бит
brne Loop_RX
-----------------------------------
это участок кода приёма 8и бит самой информации..

в таймере лежит число 42... пауза по кругу .(самт аймерный цикл.. без лишнего) 3 такта
врисав в код лишнее мы убеличим сам период... тоесть если 42 изменить на 42 то мы должны возместить это вписав 3 команды (одноциловые!!!)
что мы и делаем!!!!

сам момент считывания у нас определяет строка sbis RD_PIN

вот этот момент нам и надо вывести наружу!!! исполюзуя свободную ногу проца.. перед считыванием выведим на эту ногу импульс!!! :)
вписав код..
sbi PORTB,0 - выставить единицу!!!
cbi PORTB,0 - выставить ноль!!!

но это всего 2 цикла а надо 3.. поэтому выше впишем пустой цикл nop

и получим..

nop ; устанавливаем флаг переноса в 0
sbi PORTB,0
cbi PORTB,0
sbis RD_PIN
тоесть сразу за импульсом у нас будет происходить считывание!!!


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: как начать программировать ?
СообщениеДобавлено: 10 дек 2012 00:46 
Не в сети

Зарегистрирован: 29 ноя 2012 14:52
Сообщений: 370
Откуда: Димитровград
Благодарил (а): 56 раз.
Поблагодарили: 45 раз.
Имя: Гальцов Константин
Пункты репутации: 6
вок как выглядит считывание процом шины сбус!!!!
жолтые штырьки снизу это и есть момент считывания

первые 2 байта там видно что идёт 8 штырьков.. потом пауза и есть 9!!!
пауза это мы пропускаем не нужный нам бит чотности.. а сам штырёк это момент выхода из ПП.. на стоп бите!


Вложения:
zzz.GIF
zzz.GIF [ 13.66 KiB | Просмотров: 5531 ]
Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: как начать программировать ?
СообщениеДобавлено: 10 дек 2012 00:57 
Не в сети

Зарегистрирован: 29 ноя 2012 14:52
Сообщений: 370
Откуда: Димитровград
Благодарил (а): 56 раз.
Поблагодарили: 45 раз.
Имя: Гальцов Константин
Пункты репутации: 6
вот!!! а котонить заметил что один байт с жолтой стрелкой.. хрень принимает!!!?
эти осцилограмы сняты при отстройке приёма.
тут касяк в том что сделана была маленнькая пауза на стоп бит!.. тоесть последущий байт начинает пиниматься раньше!!!


Вложения:
zzz1.GIF
zzz1.GIF [ 14.54 KiB | Просмотров: 5531 ]
Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 13 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB