roboforum.ru

Технический форум по робототехнике.


Форт-система

Готовая электроника для самодельного робота. Уровень от начинающих до опытных конструкторов.

Re: Форт-система

Сообщение chu » 08 июн 2012, 06:26

какие сенсоры применяются? какое питание? если питание паразитное - на время преобразования надо его подключать, и ожидать завершения преобразования. не помню сколько миллисекунд - надо штудировать даташтиты...

вот, нашел в разделе POWERING...:
..., it is necessary to provide a strong pullup on the 1-wire bus whenever temperature conversions are taking place or data is being copied from the scratchpad to EEPROM. This can be accomplished by using a MOSFET to pull the bus directly to the rail as shown in Figure 4. The 1-wire bus must be switched to the strong pullup within 10 µs (max) after a Convert T [44h] or Copy Scratchpad [48h] command is issued, and the bus must be held high by the pullup for the duration of the conversion (tconv) or data transfer (twr = 10 ms).


и еще (CONVERT T[0x44]):
If the DS18S20 is powered by an external supply, the master can issue read time slots after the Convert T command and the DS18S20 will respond by transmitting 0 while the temperature conversion is in progress and 1 when the conversion is done.
- так сделано у меня

In parasite power mode this notification technique cannot be used since the bus is pulled high by the strong pullup during the conversion.
- а в этом случае смотрим параметры по переменному току:Temperature Conversion Time (tCONV)=750ms
и тогда 1w_convert будет выглядеть как-то так:
Код: Выделить всёРазвернуть
\ запуск преобразования,
  : 1w_convert ( i-- )
        1w_select
        CONVERT_T
        1w-c!
        strong-pullup high
        750 ms pause
        strong-pullup low
        ;

соответственно надо будет определиться с пином strong-pullup и не забыть настроить его на вывод.
and so forth.
Аватара пользователя
chu
 
Сообщения: 77
Зарегистрирован: 23 сен 2010, 09:16
прог. языки: Forth

Re: Форт-система

Сообщение ilya73 » 08 июн 2012, 19:59

chu писал(а):какие сенсоры применяются? какое питание? если питание паразитное - на время преобразования надо его подключать, и ожидать завершения преобразования. не помню сколько миллисекунд - надо штудировать даташтиты...
......

Йес! Заработало!!! :Yahoo!:
Дал питание и уря!
Сорри, за тупость. :oops:
Скоро (надеюсь) мне пришлют ещё пару-тройку железяк (кста, из Новосиба ;) ). В составе GSM/GPRS, Micro SD, RFID считыватель карт (125 КГц), ...
Будет чем заняться. :)
ЗЫ
СПАСИБО!!!
ilya73
 
Сообщения: 35
Зарегистрирован: 26 дек 2011, 23:04

Re: Форт-система

Сообщение chu » 08 июн 2012, 21:02

ilya73 писал(а):Йес! Заработало!!! :Yahoo!:
Дал питание и уря!
:beer:
ilya73 писал(а): ещё пару-тройку железяк ... GSM/GPRS, Micro SD, RFID считыватель карт (125 КГц), ...
я бы тожа хотел поиграть :roll:
go forth
Аватара пользователя
chu
 
Сообщения: 77
Зарегистрирован: 23 сен 2010, 09:16
прог. языки: Forth

Re: Форт-система

Сообщение ilya73 » 08 июн 2012, 21:49

chu писал(а): я бы тожа хотел поиграть :roll:
go forth

Дистанционно поиграемся!? ;)
Потребуется обмен между двумя *дуинами (мастер-слаэйв), есть идеи?
ilya73
 
Сообщения: 35
Зарегистрирован: 26 дек 2011, 23:04

Re: Форт-система

Сообщение chu » 16 июн 2012, 06:28

ilya73 писал(а):Потребуется обмен между двумя *дуинами (мастер-слаэйв), есть идеи?

Навыки телепатии у меня отсутствуют напрочь, поэтому с обменом полная неясность.
Для обмена на "рабочем столе" подойдут любые штатные проводные интерфейсы: i2c, spi, usart , да хоть тот же 1-проводной можно приспособить для прикола (ну или ножки сэкономить), только ведомого дописать...Для обмена "в комнате" - можно делать беспроводные IR инфракрасный или какой RF радиочастотный. Для обмена "в поле" - RF или проводной RS-485... а можно и с оптоволокном чего нибудь изобрести, из плюсов - высокая скорость и помехозащищенность, из минусов - дорагааа...и не мобильно.
and so forth
вот, погуглил, симпатичная фигулька Perfect High Quality New NRF24L01 2.4GHz Wireless Transceiver Module Arduino
http://www1.buyincoins.com/details/perf ... -9036.html
и по цене...и на форумах обсуждается...
Аватара пользователя
chu
 
Сообщения: 77
Зарегистрирован: 23 сен 2010, 09:16
прог. языки: Forth

Re: Форт-система

Сообщение ilya73 » 17 июн 2012, 22:13

Получил посылку из Новосиба! :Yahoo!:
Первым делом принялся (попытался) за датчик http://www.seeedstudio.com/wiki/Grove_- ... Sensor_Pro или я где согрешил или железяка мёртвая. Курю мануалы, но пока "0" результата.
Может глянешь на "тестовый" код!?
Код: Выделить всёРазвернуть

\ pb0 - data
marker =dht=
PORTC 0  portpin: dht1

variable _result
create dht11_dat 5 allot


: read_dht11_dat ( -- n )
8 0 do
begin dht1 pin_high? [ 30 us/ ] literal ?delay until
dht1 pin_high?
   if 1 7 i - lshift _result dup @ or ! then
begin dht1 pin_low?  until
loop
_result @
;



: test
cr ." Start!"
dht1 pin_output
dht1 high
\ dht1 pin_pullup_on
2500 ms
dht1 low
23 ms
dht1 high
[ 40 us/ ] literal ?delay
dht1 pin_input
[ 40 us/ ] literal ?delay
   begin ." dht11 start condition 1 not met!" cr  dht1 pin_low? 1000 ms until
   [ 80 us/ ] literal ?delay
   begin ." dht11 start condition 2 not met!" cr  dht1 pin_high? until
   [ 80 us/ ] literal ?delay
cr ." Start recive data!"
5 0 do read_dht11_dat dup  cr ." dat=" . dht11_dat i + c! loop
dht1 pin_output
dht1 high
cr ." The end!"
;

Ну не вижу я реакции от датчика. :(
ilya73
 
Сообщения: 35
Зарегистрирован: 26 дек 2011, 23:04

Re: Форт-система

Сообщение chu » 20 июн 2012, 05:23

Посмотрел на тестовый код, да. Ты его аккуратно переписал с Сишного, вижу.
Ну и даташит на DHT11 скачал - тоже глянул. Первый вопрос - подтягивающий резистор есть?
When the connecting cable is shorter than 20 metres, a 5K pull-up resistor is recommended; when the connecting cable is longer than 20 metres, choose a appropriate pull-up resistor as needed.

у меги конечно же есть pullap резисторы но они порядка 20К-100К, и могут не обеспечивать необходимой крутизны фронтов сигналов.

Ну и тоже код набросал
Код: Выделить всёРазвернуть

: dht11_pin_init \ пин - в состоянии высокого импеданса ( отключен)
        dht11_pin over over pin_input low ;

: dht11_start
       
        dht11_pin pin_output  \ подаем сигнал старта
        20 ms pause           \ не менее 18 миллисекунд,
        dht11_pin pin_input   \ чтобы DHT11 распознал сигнал

      \ проверяем - точно высокий? ( на всякий случай )
        begin
            dht11_pin pin_high?
        until

      \ теперь ждем ответа
        begin
            dht11_pin pin_low?   \ около 80us
        until
       
        begin
            dht11_pin pin_high?  \ около 80us
        until
        ;

\ прочитать один бит
: dht@bit ( c -- c' )

        begin
             dht11_pin pin_low?
        until
      \ start to transmit 1 bit data (50us)
        begin
             dht11_pin pin_high?
        until

\ длительность нуля - 26-28 мкс
\ длительность единицы - 70 мкс

        [ 40 us/ ] literal ?delay
        dht11_pin  pin_high? if 1 or then 1 lshift \ старшим битом вперед
        ;

\ принять последовательность бит
\ n1 - сколько бит принять, n2 - принятые биты
: dht>bits ( n1 -- n2 )
        0 swap
        0 ?do  dht@bit loop
        ;

\ проверка контрольной суммы ( все данные на стеке )
\ при успехе ?=-1 (true)
: dht?chksum ( n1 n2 c -- n1 n2 ? )

        >r over over
        dup $ff and swap >< $ff and + $ff and
        swap
        dup $ff and swap >< $ff and + $ff and
        +   $ff and r>  xor 0=
        ;

\
: dht11@ dht11_start   ( -- n1 n2 ? )
         $10 dht>bits  \ 16 bit humidity data
         $10 dht>bits  \ 16 bit temperature data
         $8  dht>bits  \  8 bit checksum
         dht?chksum
         ;
\
\ dht11_pin_init dht11@
\


я не стал класть данные в память, как в примерах на си, изза этого пришлось пожонглировать данными на стеке при проверке контрольной суммы - но для фортеров это дажа по кайфу.
код не проверял, вроде должен работать...
да, и принятые данные не обрабатывал...
не забудь про pullup resistor
go forth
Последний раз редактировалось chu 25 июн 2012, 22:22, всего редактировалось 2 раз(а).
Аватара пользователя
chu
 
Сообщения: 77
Зарегистрирован: 23 сен 2010, 09:16
прог. языки: Forth

Re: Форт-система

Сообщение chu » 21 июн 2012, 05:28

Погорячился я вчера с проверкой контрольной суммы - слишком много телодвижения на стеке - паранойя, аднака...
сегодня исправился:
Код: Выделить всёРазвернуть
: dht?chksum   ( n1 n2 c -- n1 n2 ? )
            >r  over over
            dup >< + swap
            dup >< + +
            $ff and
            r>  xor  0=
           ;

на примере, приведенном по твоей ссылке, проверил в SPF4 оба варианта проверки - работают адназначна.
go forth
Аватара пользователя
chu
 
Сообщения: 77
Зарегистрирован: 23 сен 2010, 09:16
прог. языки: Forth

Re: Форт-система

Сообщение chu » 21 июн 2012, 18:47

ilya73 писал(а):... пришлют ещё пару-тройку железяк (кста, из Новосиба ;) ).

кста, не отсюда ли http://devicter.ru/ ?
Аватара пользователя
chu
 
Сообщения: 77
Зарегистрирован: 23 сен 2010, 09:16
прог. языки: Forth

Re: Форт-система

Сообщение ilya73 » 21 июн 2012, 22:32

chu писал(а):Посмотрел на тестовый код, да. Ты его аккуратно переписал с Сишного, вижу.
Ну и даташит на DHT11 скачал - тоже глянул. Первый вопрос - подтягивающий резистор есть?
...
кста, не отсюда ли http://devicter.ru/ ?

go forth


Пошёл по "проторенной" дорожке. :roll:
Резистор имеется - ибо мой девайс идёт с "обвязкой" и заказывал именно там.
Спасибо за отклик!
Думал дачик дохлый и переключился на другой интересный модуль RFID считыватель карт.
В результате "халатности" убил amforth, завтра повезу домой перепрошивать.
Кста, "убил" переполнением стека!?
ilya73
 
Сообщения: 35
Зарегистрирован: 26 дек 2011, 23:04

Re: Форт-система

Сообщение chu » 25 июн 2012, 20:06

упсс...
накосячил в коде слова чтения одного бита от DHT11. :oops:
прошу простить :sorry:
исправляюсь:
Код: Выделить всёРазвернуть
\ прочитать один бит
: dht@bit ( c -- c' )

        1 lshift \ старшим битом вперед
        begin
             dht11_pin pin_low?
        until
      \ start to transmit 1 bit data (50us)
        begin
             dht11_pin pin_high?
        until

\ длительность нуля - 26-28 мкс
\ длительность единицы - 70 мкс

        [ 40 /us ] literal ?delay
        dht11_pin  pin_high? if 1 or then
        ;

невнимательность, да. к сожалению - обычное дело. :pardon:
и потестить сразу же, как это предполагает практика форта, не на чем ( нет такой железки) хорошо хоть так заметил, не прошло и пол-года...
а ведь я предлагался (фрилансером) в эту контору с предложением сотрудничества ( тем более у них на сайтике пригласительная объява есть)
предлагал им свои услуги по:
- сборка прошивок amforth'а для различных мег по ихней номенклатуре;
- написание либ (драйверов) для всех ихних "шильдов";
- техподдержка по amforth'у;
- etc.
вышел какой-то тип, даже не представился ( видима менеджер, ага), минут через десять моих пояснений у него произошло переполнение буфера, в глазах появилась глубина(пустота) ( ну точно - менеджер, нифига не технарь. программисты , те хоть иногда говорят: "форт? нахер он кому нужен, фортран этот!") так и расстались... недельки через три я позвонил - хотя бы внятное "нет" услышать - результат тот же самый: "му-хрю". пнятно, недосуг ему, занимается развитием бизнеса и продвижением рынка, не иначе, ну и ладно...
moving forth
PS. еще раз прошу пардону за косяк
Аватара пользователя
chu
 
Сообщения: 77
Зарегистрирован: 23 сен 2010, 09:16
прог. языки: Forth

Re: Форт-система

Сообщение ilya73 » 26 июн 2012, 23:26

off
Да, манагеры - они такие!
В пред-предыдущей конторе, эти му..чудаки умудрялись впарить то, чего ещё не было в прототипе :o !!!

Скорее всего мой DHT11 - дохлый! :( Нет ответа - хоть ты тресни. На днях попробую расковырять его и прозвонить.
Хрен с ним.

Тут есть другая тема - софтверный USART.
Попробовал считыватель RFID карт - работает, но он вешается на аппаратный USART.
А вот у "нормальных" людей :D , есть такая штука http://arduiniana.org/libraries/newsoftserial/
Пытаюсь поковырять. Подключайся! :wink:
ilya73
 
Сообщения: 35
Зарегистрирован: 26 дек 2011, 23:04

Re: Форт-система

Сообщение chu » 27 июн 2012, 17:57

ilya73 писал(а):off
Скорее всего мой DHT11 - дохлый! :( Нет ответа - хоть ты тресни. На днях попробую расковырять его и прозвонить.

не нада пока ковырять датчик.настройки пина (dht11_pin_init) проверял? чего говорит dht11_start? если система не зависает - отклик от датчика есть. попробуй на другом пине - мог спалить буфер меги. еще можно в dht11_start воткнуть включение/выключение светодиодов.

Добавлено спустя 53 минуты 1 секунду:
ilya73 писал(а):off
Тут есть другая тема - софтверный USART.
Попробовал считыватель RFID карт - работает, но он вешается на аппаратный USART.

твою ссылку посмотрел, особо вникать не стал - хрен с ними.
тут инфа полезнее http://www.seeedstudio.com/wiki/Grove_- ... FID_Reader
и её вполне достаточно, единственное, чего я не понял - сколько информационных байт передает считываетль - пять или десять?
и еще раз - 10 ASCII Data Characters – Card number info
Note: The 10 ASCII characters grouped as 5 hex data needs to be further processed as you may find that the 5 hex data is not equal to the number marked on the tags in Decimal. Actually the tag number is equal to the later 4 bytes in decimal. For example, the card number is 62E3086CED, the corresponding number marked on the tag should be 3808980205 which is the Decimal format of E3086CED
- нихрена не понятный формат, нид хелп.

смотрим далее:
1. работает в двух режимах, нам интересен usart;
2. достаточно одной линии - Tx(это от ридера, соответственны мы принимаем);
3. оч. полезная картинка - Output Time sequence .

предварительный вывод - удобно использовать прерывания, видимо по изменению уровня ( к сожалению, в моей меге32 такой режим отсутствует, впрочем, считывателя у меня тоже нет), но можно использовать и выделенные пины int0/int1

далее, возникают два варианта:
1. прерывание только по старт-биту, затем прием информационных битов
с использованием ?delay;
2. прерывание (старт-бит) по изменению уровня, прием информационных битов
по прерываниям от таймера

нада определяться...
and so forth
Аватара пользователя
chu
 
Сообщения: 77
Зарегистрирован: 23 сен 2010, 09:16
прог. языки: Forth

Re: Форт-система

Сообщение ilya73 » 28 июн 2012, 00:35

chu писал(а):настройки пина (dht11_pin_init) проверял? чего говорит dht11_start? если система не зависает - отклик от датчика есть. попробуй на другом пине - мог спалить буфер меги. еще можно в dht11_start воткнуть включение/выключение светодиодов.
......

и её вполне достаточно, единственное, чего я не понял - сколько информационных байт передает считываетль - пять или десять?

предварительный вывод - удобно использовать прерывания, видимо по изменению уровня ( к сожалению, в моей меге32 такой режим отсутствует, впрочем, считывателя у меня тоже нет), но можно использовать и выделенные пины int0/int1

далее, возникают два варианта:
1. прерывание только по старт-биту, затем прием информационных битов
с использованием ?delay;
2. прерывание (старт-бит) по изменению уровня, прием информационных битов
по прерываниям от таймера

нада определяться...
and so forth


Порт проверял (менял), но увы - нет отклика.
Нет низкого уровня от датчика, впадаем в бесконечный цикл.
Код: Выделить всёРазвернуть
\ теперь ждем ответа
        begin
            dht11_pin pin_low?   \ около 80us
        until

Выберу время и распотрошу его.


RFID
Передаёт 10-ть + сумма + старт+стоп.
Кста, с внешними прерываниями уже побаловался - прикольно!
В принципе склоняюсь к первому варианту, а там посмотрим.
ilya73
 
Сообщения: 35
Зарегистрирован: 26 дек 2011, 23:04

Re: Форт-система

Сообщение ilya73 » 30 июн 2012, 00:27

Вчера проверил ds307.frt - работает!!!
Но, есть предложение (для стандартизации) вынести слова: rstr>lcd и time? в отдельную либу!?
ilya73
 
Сообщения: 35
Зарегистрирован: 26 дек 2011, 23:04

Пред.След.

Вернуться в МиниБот — национальный класс роботов

Кто сейчас на конференции

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

cron