roboforum.ru

Технический форум по робототехнике.
Текущее время: 17 фев 2025, 07:53

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




Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: Связь mega88 и mega32
СообщениеДобавлено: 11 дек 2009, 23:44 
Не в сети
Аватара пользователя

Зарегистрирован: 29 окт 2007, 18:11
Сообщения: 1866
Откуда: Пермь
прог. языки: Brainfuck/Basic/Delphi/C++/Lisp/x86asm/JavaScript
используя одну линию софварного uart. в баскоме делать так нельзя, поэтому пришлось писать софтварный уарт (использует таймер). примерный вид:
мега32, функция для приема (для передачи аналогично коду на меге88)
Код:
Const Timerload_after_start = 144                        'baudrate = 9600, prescaler = 8
Const Timerload_after_bit = 83
Const Bytes_amount = 3   
....
Sub Input_m88(byref S As String)
   Local Bit_count As Byte , Byte_count As Byte
   Local Buf As Byte

   Config Pinc.0 = Output
   Config Pinc.1 = Input

   Config Timer0 = Timer , Prescale = 8
   Stop Timer0

   Byte_count = 0
   While Byte_count < Bytes_amount
      Incr Byte_count
      Bitwait Pinc.1 , Reset
      Start Timer0
      Timer0 = 0
         While Timer0 < Timerload_after_start
         Wend
      Timer0 = 0
      Portc.0 = 1
      Portc.0 = 0
      Bit_count = 0
      Buf = 0
      While Bit_count < 8
         Portc.0 = 1
         Buf = Buf + Pinc.1
         Rotate Buf , Right , 1
         Incr Bit_count
         Timer0 = 0
         Portc.0 = 0
            While Timer0 < Timerload_after_bit
            Wend
      Wend
      Mid(s , Byte_count , 1) = Buf
      Stop Timer0
   Wend
   Incr Byte_count
   Mid(s , Byte_count , 1) = Chr(0)
End Sub

мега88, функции для приема, передачи
Код:
Const Timerload_after_start = 144                     'baudrate = 9600, prescaler = 8
Const Timerload_after_bit = 83
Const Bytes_amount = 3
...
Sub Input_m32(byref S As String)
   Local Bit_count As Byte , Byte_count As Byte
   Local Buf As Byte

   Config Pinc.0 = Output
   Config Pinc.4 = Input

   Config Timer2 = Timer , Prescale = 8
   Stop Timer2

   Byte_count = 0
   While Byte_count < Bytes_amount
      Incr Byte_count
      Bitwait Pinc.4 , Reset
      Start Timer2
      Timer2 = 0
         While Timer2 < Timerload_after_start
         Wend
      Timer0 = 0
      Portc.0 = 1
      Portc.0 = 0
      Bit_count = 0
      Buf = 0
      While Bit_count < 8
         Portc.0 = 1
         Buf = Buf + Pinc.4
         Rotate Buf , Right , 1
         Incr Bit_count
         Timer2 = 0
         Portc.0 = 0
            While Timer2 < Timerload_after_bit
            Wend
      Wend
      Mid(s , Byte_count , 1) = Buf
      Stop Timer2
   Wend
   Incr Byte_count
   Mid(s , Byte_count , 1) = Chr(0)
End Sub

Sub Print_m32(byref S As String)
   Open "comc.4:9600,8,n,1" For Output As #10
      Disable Timer0
         Print #10 , S ;
      Enable Timer0
   Close #10
End Sub

функции настроены для обмена 3хбайтными пакетами, при этом ни один байт не должен быть равен 0x00 (ф-я отправки, встроенная в баском, работает с нуль-терминированными строками). любой обмен должен быть двунаправленным (т.е. вначале приняли пакет, потом отослали) для проверки безошибочной передачи.
также стоит внимательно отнестись к процессу прошивания: вначале стереть оба чипа, потом залить прошивку в мк, который вначале ожидает входные данные(мега88) и только в последнюю очередь - мегу32. такие предосторожности нужны для избежания конфликта уровней на ножках мк.


Вложения:
Комментарий к файлу: тестировалась в железе, нужен подключенный дисплей
between mc_display_1soft-uart.rar [56.98 КиБ]
Скачиваний: 6
Комментарий к файлу: файлы симуляции, не тестировались в железе
servo_sharp_uart1wire-software_test.rar [71.91 КиБ]
Скачиваний: 6

_________________
Tomorrow will be. Better


Последний раз редактировалось MiBBiM 12 дек 2009, 00:03, всего редактировалось 2 раз(а).
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Связь mega88 и mega32
СообщениеДобавлено: 11 дек 2009, 23:46 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
Это хорошо, но я уверен что и в BASCOM можно писать и читать регистры и менять биты - а значит можно и аппаратный UART с одной линией задействовать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Связь mega88 и mega32
СообщениеДобавлено: 11 дек 2009, 23:51 
Не в сети
Аватара пользователя

Зарегистрирован: 29 окт 2007, 18:11
Сообщения: 1866
Откуда: Пермь
прог. языки: Brainfuck/Basic/Delphi/C++/Lisp/x86asm/JavaScript
к сожалению в миниботе задействованные ножки не поддерживают функциональность хардварного уарта

_________________
Tomorrow will be. Better


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Связь mega88 и mega32
СообщениеДобавлено: 11 дек 2009, 23:53 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
Аааа ... вы то про Баском написали , а не про особенность схемы :)
MiBBiM писал(а):
используя одну линию uart. в баскоме делать так нельзя


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Связь mega88 и mega32
СообщениеДобавлено: 12 дек 2009, 00:07 
Не в сети
Аватара пользователя

Зарегистрирован: 29 окт 2007, 18:11
Сообщения: 1866
Откуда: Пермь
прог. языки: Brainfuck/Basic/Delphi/C++/Lisp/x86asm/JavaScript
прошу прощения за неоднозначность, исправил.
вот как нельзя делать в баскоме:
Код:
Open "comc.0:2400,8,n,1" For Input As #11
Input #11, S
Close #11
..
Open "comc.0:2400,8,n,1" For output As #12
Print #12, S
Close #12

т.е. менять характер направления (вход/выход) одной и той же ножки софт-уарта

_________________
Tomorrow will be. Better


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Связь mega88 и mega32
СообщениеДобавлено: 12 дек 2009, 01:51 
Не в сети
Аватара пользователя

Зарегистрирован: 28 дек 2004, 20:33
Сообщения: 10211
Откуда: Тольятти
Skype: Ed_Gull
прог. языки: Bascom AVR Basic
ФИО: Гуль Эдуард Викторович
а зачем тебе это?
в миниботе м32 и м88 связаны аппаратными уартами


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Связь mega88 и mega32
СообщениеДобавлено: 12 дек 2009, 01:53 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
Вот и я это видел.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Связь mega88 и mega32
СообщениеДобавлено: 13 дек 2009, 01:57 
Не в сети
Аватара пользователя

Зарегистрирован: 04 дек 2008, 22:44
Сообщения: 4363
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: Kotlin, Java, C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович
Тоже не пойму, вроде бы достаточно аппаратного УАРТА, зачем софтовый?

_________________
if(!Operate) Read(pDatasheet);


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Связь mega88 и mega32
СообщениеДобавлено: 13 дек 2009, 19:54 
Не в сети
Аватара пользователя

Зарегистрирован: 29 окт 2007, 18:11
Сообщения: 1866
Откуда: Пермь
прог. языки: Brainfuck/Basic/Delphi/C++/Lisp/x86asm/JavaScript
потому что сторонний наблюдатель, подключенный через ft232 (и cc2500, если не написать фильтр на мегу88), будет видеть мусор обмена.

_________________
Tomorrow will be. Better


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

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


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

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


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

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO