Отговори на тема  [ 10 мнения ] 
Лъжливият контролер 
Автор Съобщение
Ранг: Популярен
Ранг: Популярен

Регистриран на: Съб Ное 28, 2009 5:50 am
Мнения: 391
Местоположение: Варна
Мнение Лъжливият контролер
Здравейте,
от доста време се мъча с изработката на едно елементарно у-во..
То трябва да се намеси в обикновенна сериина 232 комуникация между 2 други у-ва.
Например: 2 лаптопа и помежду им моята платчица.
Целта е когато например единия лаптоп каже на другия дай си серийния номер, у-вото да хваща командата и да лъже първия лаптоп с друг сериен номер, а през останалото време да си тече комуникацията през него.
Особенностите са, че лаптопите пращат различен брой байтове и че уартовете на микроконтролера трябва да са софтуерни (9600 even parity 2 stop bits)..
Един вид трябва да се укасява шината между двата лаптопа и когато се получат дадени байтове да се изпращат на 2рия лаптоп ама да се спре отговора му и да се даде друг на неговото място.
За момента съм сложил цял компютър да върши цялата философия, но целта е да стане малко компактно у-во което да се храни с малък ток.
Написах 2та софтуерни уарта, работят, но незнам доколко стабилно защото закъснението след всеки бит е реализирано с delay_ms(); .....
Освен това написах мултитаскинг, който мисля че работи според светодиод който мига..
Направих 3 "task"-а. За приемане от лаптоп1 и предаване към лаптоп2. За обратното и за мигането на светодиода.
Попринцип невиждам пречина да не работи кода, който изписах ама знам ли къде съм объркал.. 5 часа е и вече едвам виждам...
Засега искам само да тече комуникацията, апък проверката и лъженето лесна работа.
Бях измислил и друг вариант:
в таск0 и таск1 да пише: Краче TX2 = Краче RX1 и Краче TX1 = Краче RX2
вместо: приеми от КОМ1 и изпрати към КОМ2 (и обратното) ..

Надявам се да ми предложите решения :)


Прикачени файлове:
PIKSAT.rar [37.92 KiB]
111 пъти

_________________
Ангел Димитров 95
Вто Юли 19, 2011 5:07 am
Профил WWW
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Чет Сеп 30, 2010 2:37 pm
Мнения: 21
Местоположение: Варна
Мнение 
Ако поне единият лаптоп е на Windows - тегли по-долния софтуер , правиш двойка виртуални серийни портове, пускаш програмата която искаш да залъжеш през единия, за другата страна на виртуалния порт на същия лаптоп си напишсваш програмка която да прави връзката със хардуерния сериен порт и да прави нужните модификации на данните и смятам ,че това е достатъчно , а всичко друго ще изисква повечко занимаване. Сигурно и за друг ОС има подобни решения.
(програмата за виртуалните портове е някакво демо, но години вече работи при мен, май само менажера на портове не можеше да се пуска след триал периода, но след като си създадеш нужните портове не е нужно той да се пипа повече)
http://www.eltima.com/products/vspdxp/


Вто Юли 19, 2011 10:32 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Фев 03, 2005 2:21 am
Мнения: 12765
Местоположение: София
Мнение 
Купете си легален софтуер за управление на касовите апарати и не се занимавайте с глупости... :D


Вто Юли 19, 2011 12:29 pm
Профил
Ранг: Популярен
Ранг: Популярен

Регистриран на: Съб Ное 28, 2009 5:50 am
Мнения: 391
Местоположение: Варна
Мнение 
не е за лаптопи, нито за касови апарати. просто незнаех как да го обесня и беше 5 часа..

_________________
Ангел Димитров 95


Вто Юли 19, 2011 3:23 pm
Профил WWW
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Съб Сеп 24, 2005 2:00 pm
Мнения: 787
Мнение 
Ако те спипа баща ти как си играеш с поялника и си му разхвърлял частите... :D
Та на въпроса ти, не съм ти гледал кода но ще ти кажа как е най-лесно да го направиш. Вземи един PIC10F200, дръпни си от oshonsoft.com PIC10F Simulator. Той всъщност е и бейсик компилатор. Разгледай на сайта хелпа на бейсика и по-специално частта за софтуерен UART. Значи инициализираш два софтуерни UART-а (не забравяй, че единия от пиновете на пика е само вход!) и после правиш един безкраен цикъл { SERIN IF .... ELSE SEROUT }. Разгледай примерите. Цялата работа е 10-ина реда на бейсик.


Сря Юли 20, 2011 6:19 am
Профил
Ранг: Популярен
Ранг: Популярен

Регистриран на: Съб Ное 28, 2009 5:50 am
Мнения: 391
Местоположение: Варна
Мнение 
Ахм, мерси, но измислих друг вариант който няма да натоварва контролера и ще използва само две крачета.
например информацията в едната посока трябва винаги да върви, а в другата изпращането да бъде или от контролера или от слейва. Първата посока я свързвам директно и пускам 1 вход на контролера да чете от нея. Втората която трябва да бъде контролирана я свързвам с 220 ома резистор и пускам 1 изход на контролера директно към получателя (мастъра).
В нормално състояние изхода ще е float. Контролера ще чете всеки 5 байта защото е толкова командата от мастъра. От там има два варианта:
- тези 5 байта да съвпаднат с тези на командата => на изхода се изпраща лъжливият сериен номер и така като има резистор инф от слейва няма да стигне до мастъра.
- ако не съвпаднат байтовете отначало и така.. (изхода - float)

Мисля, че ще стане.. Само нз това за висящото ниво на изхода защото за да стане флоат, компилатора го прави вход и нз дали това не става твърде бавно..
Освен това как да си направя серийния делей от 104us на CCS? Бях вмъкнал разни асемблерски кодове, компилирваше се ама нз защо неставаше. Сега става с delay_us(96); .. Като между 96 и 104 има гоооляма разлика особенно за асинхронна комуникация..
Съмнявам се в кварца. извадих го от някава платка която намерих на улицата :D . 12Мхз е някакъв обикновен ама може вече да не е 12 :D

_________________
Ангел Димитров 95


Сря Юли 20, 2011 7:20 pm
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 12:02 pm
Мнения: 9119
Местоположение: Разград
Мнение 
Че кой ти каза, че този дилей ще ти даде точно време? Ако искаш да е точно си го правиш с таймер - колкото и да ебъгнат кварца пак ще е значително по точно. Пък колко бързо става вход - ами виж компилатора какво изплюва - това BSF TRISx.x е най-бързото възможно на 12 MHz отнема 333 нано секунди. Всъщност толкова ти е времето за изпълнение на една инструкция. Три инструкции са ти 1 uS, 104us можеш да получиш със 312 nop -а :)

Това на майтап. Да не взмеш да напишеш 312 нопа че да си направиш дилея :)

Направи си един цикъл дето не прави нищо, разгледай асемблера колко инструкции ще отнема едно завъртане и си сметни колко цикъла да бъде.


Сря Юли 20, 2011 9:27 pm
Профил ICQ
Ранг: Популярен
Ранг: Популярен

Регистриран на: Съб Ное 28, 2009 5:50 am
Мнения: 391
Местоположение: Варна
Мнение 
ахм мерси, това със ноповете съм го правил ама никога не съм се сетил да видя колко инструкции прави при празен цикъл :)
иначе как се смяташе това колко време отнема 1 инструкция че съм забравил апък ми трябва от време на време и не мога да се сетя откъде го четах.. :)

_________________
Ангел Димитров 95


Сря Юли 20, 2011 10:50 pm
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 12:02 pm
Мнения: 9119
Местоположение: Разград
Мнение 
8O 8O 8O 8O 8O 8O 8O 8O 8O 8O 8O 8O 8O

1/(Q/4) sec. С изключение на няколко инструкции дето ги пише кои са в даташийта, всички се изпъляват за 1 цикъл. Примерно Call, Goto. BTFSS(и подобните) са за един или два цикъла.

Примерно така ще генерира приблизително 104us :

MOVLW 0х66
MOVWF counter
loop
DECFSZ counter,1
GOTO loop

code...

Тука имаш 3 инструкции за loop-а, и 2 за сетване на брояча, 312-2=308/3=102,6. Тази сметка е за 12MHz кварц. Тука напрактика цикъла се изпълнява за 1us - съвпадение :)

Едит :всъщност с 0х67 ще е точно за 104us (ако кварца е точен естествено) - 0,66 за първите две, 103 за цикъла + 0,33за ноп-а мнакрая дето се генерира автоматично от DECFSZ когато резултата е 0 ...


Сря Юли 20, 2011 11:13 pm
Профил ICQ
Ранг: Популярен
Ранг: Популярен

Регистриран на: Съб Ное 28, 2009 5:50 am
Мнения: 391
Местоположение: Варна
Мнение 
аа да сетих се.. то вярно че честотата се дел на 4 в контролера. бях забравил и делях 1/чест..
страшно мерси :) имаш виртуална почерпка :)
ще пробвам това с асемблера и ако нестане купувам направо един нов кварц на 20мхз :)

_________________
Ангел Димитров 95


Чет Юли 21, 2011 1:55 am
Профил WWW
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 10 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 3 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни