Например TDA7294

Форум РадиоКот • Просмотр темы - Простейший код HID. Везде только слова, мыши и джойстики...
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Пн июл 28, 2025 04:10:32

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


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 209 ]    , , , 4, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Ср май 06, 2009 22:02:29 
Вымогатель припоя
Аватар пользователя

Карма: 4
Рейтинг сообщений: 16
Зарегистрирован: Пн мар 23, 2009 09:25:58
Сообщений: 651
Откуда: Самара
Рейтинг сообщения: 0
Изображение

Изображение

Я тогда вообще ничего не понимаю... :shock:

_________________
Нельзя всё знать, достаточно понимать.


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Ср май 06, 2009 22:08:49 
Вымогатель припоя
Аватар пользователя

Карма: 4
Рейтинг сообщений: 16
Зарегистрирован: Пн мар 23, 2009 09:25:58
Сообщений: 651
Откуда: Самара
Рейтинг сообщения: 0
А так компилируется:

Код:
uchar   usbFunctionWrite(uchar *data, uchar len)
{
    uchar    number_;
    uchar    on_off;

    number_ = data[0];
    on_off = data[1];
    if (number_ == 1) {
      if (on_off==1)  PORTB = 0x80;
      else   PORTB = 0x00;       
    }
    return 1; /* return 1 if this was the last chunk */
}


С кварцем ничего не случится (при PB 1000000)? Он на PB6 и PB7

_________________
Нельзя всё знать, достаточно понимать.


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Ср май 06, 2009 23:22:51 
Грызет канифоль
Аватар пользователя

Зарегистрирован: Пн дек 24, 2007 07:09:09
Сообщений: 293
Рейтинг сообщения: 0
Просто у тебя в первом варианте был синтаксис из CodeVisionAVR как я понял, а на сколько мне известно GCC его не понимает, вот и вся трабла.

И делай проще что бы с кварцем там или с чем нить еще не случилось каких вещей нежелательных

PORTx |= (1<<BIT)|(1<<BIT)...(); установить бит в 1

PORTx &=~ (1<<BIT)|(1<<BIT)...(); установить бит в 0

_________________
Даташит - библия моя...
Изображение


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Чт май 07, 2009 06:57:37 
Вымогатель припоя
Аватар пользователя

Карма: 4
Рейтинг сообщений: 16
Зарегистрирован: Пн мар 23, 2009 09:25:58
Сообщений: 651
Откуда: Самара
Рейтинг сообщения: 0
Я вот сколько не читал пояснения - бесполезно. Не укладываются у меня в голове конструкции типа PORTx |= (1<<BIT)|(1<<BIT)...(); установить бит в 1. Не понимаю.
Цитата:
выполнить "поразрядное (побитное) логическое "ИЛИ" между прочитанным значением PORTx и числом


Ну ладно число какое то (типа 0хff), а это что такое (1<<BIT)|(1<<BIT) ? Сдвиг какой то...

_________________
Нельзя всё знать, достаточно понимать.


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Чт май 07, 2009 09:33:30 
Грызет канифоль
Аватар пользователя

Зарегистрирован: Пн дек 24, 2007 07:09:09
Сообщений: 293
Рейтинг сообщения: 0
Допустим тебе надо записать в порт D значение 0x0F то есть это в двоичной системе будет равно 0b00001111 ну и начинаем со старших разрядов по порядку записывать данные

PORTD |= (1<<0)|(1<<1)|(1<<2)|(1<<3);

или так

PORTD |= (1<<PD0)|(1<<PD1)|(1<<PD2)|(1<<PD3);

То есть получается что на ногах PD0, PD1, PD2 и PD3 появится логическая "1" что соответсвует записанному в порт значению 0x0F в шестнадцатеричной системе или 0b00001111 в двоичной или 15 в десятичной. То же самое с PORTx &=~()|()|()...(); только сдесь устанавливаются логические "0".

Так же с помощью них можно записывать значения в регистры, к примеру устанавливать предделители таймера.

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

_________________
Даташит - библия моя...
Изображение


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Чт май 07, 2009 11:43:07 
Потрогал лапой паяльник
Аватар пользователя

Карма: -1
Рейтинг сообщений: 4
Зарегистрирован: Пт апр 17, 2009 22:45:42
Сообщений: 316
Откуда: Minsk
Рейтинг сообщения: 0
mr_smit писал(а):
Конденсатор керамический. На нем написано 124. Я так и не понял как это расшифровать.

124 это 12 и четыре нуля. В пикофарадах всё. 120нФ.

mr_smit писал(а):
На конденсаторе на 27 пФ написано 270. Тогда получается что этот на 12,4 пФ что ли?

Нет, это 27 и ноль нулей после, т.е. 27пФ.

Просто всё, нет? Две цифры номинал, третья - количество нулей после. Резисторы обозначаются так-же, кроме точных - там номинал 3 знака, четвертый - множитель. Странно электронщику этого не знать.


Вернуться наверх
 
Распродажа паяльного оборудования ATTEN!
Паяльные станции, паяльники и аксессуары по самой выгодной цене.

По промокоду radiokot скидка 10%
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Чт май 07, 2009 17:13:54 
Вымогатель припоя
Аватар пользователя

Карма: 4
Рейтинг сообщений: 16
Зарегистрирован: Пн мар 23, 2009 09:25:58
Сообщений: 651
Откуда: Самара
Рейтинг сообщения: 0
maglev спасибо!
VenomXP спасибо!
А всё таки есть разница! При 120нФ не работало. На 100нФ поставил конденсатор - всё работает.


Цитата:
Это сделано ... для того что бы записывать значения в регистр не целиком весь его перезаписывая а лишь побитно менять его значения.


Это я понял. Но что всё таки произойдет (теоретически) если перезаписать регистр PORTB = 0x80? Мне так проще понять. Этот СИшный синтаксис после Delphi просто жуть.

_________________
Нельзя всё знать, достаточно понимать.


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Чт май 07, 2009 18:27:58 
Прорезались зубы

Зарегистрирован: Пт ноя 16, 2007 13:52:44
Сообщений: 231
Откуда: Рига, Латвия
Рейтинг сообщения: 0
Разница между :
PORTB = 0x80
и
PORTB |= 0x80
В первом случае , ты меняешь все биты - старший ставишь в 1, остальные в 0...
Во втором случае - ты меняешь только один бит в 1(старший) остальные остаются такие как были, т.е. операция PORTB = PORTB | 0x80 ...
Т.е. xxxx xxxx | 1000 0000 = 1xxx xxxx;
также можно обнулять биты только операцией & :
PORTB &= ~ ( 0x80 ) - ты меняешь только один бит в 0,
т.е. PORTB = PORTB & ~(0x80) = PORTB & 0x7F ;
т.е. xxxx xxxx & 0111 1111 = 0xxx xxxx;
А операция 1<<x = бит на позицию X..
т.е. 1 << 8 = 1000 0000 = 0х80;
А по поводу 0x80 - помоему ничего не произойдет, под что используются пины определяется при выходе из ресета по фьюзам...
(по краиней мере так должно быть, если нет надо читать мануал )
:shock:


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Чт май 07, 2009 19:59:35 
Вымогатель припоя
Аватар пользователя

Карма: 4
Рейтинг сообщений: 16
Зарегистрирован: Пн мар 23, 2009 09:25:58
Сообщений: 651
Откуда: Самара
Рейтинг сообщения: 0
Pe3ucTop спасибо за объяснение! PORTB |= 0x80 - это меня устраивает.

Итак у меня всё заработало. Но как то криво.
Давайте по порядку.

1. Вот что получилось:

Код:
uchar   usbFunctionWrite(uchar *data, uchar len)
{
    uchar    on_off;
    on_off = data[0];
   
    if (on_off==1) {
      PORTB |= (1<<PB0);
      }
    else if (on_off==0) {
      PORTB &=~ (1<<PB0);
      }
    return 1; /* return 1 if this was the last chunk */
}


2. Прошил контроллер.
3. Для Delphi скачал компонент HID component, установил.
4. Простенькая программа:

Код:
...

var
  Form1: TForm1;
  FeatureReportLen: integer = 0;
  MyReport: array[0..8] of byte;
  on_off:integer=0;

implementation

{$R *.dfm}

function TForm1.JvHidDeviceController1Enumerate(HidDev: TJvHidDevice;
  const Idx: Integer): Boolean;
begin
  Result := true;
  FeatureReportLen := HidDev.Caps.FeatureReportByteLength;
  fillchar(MyReport, 8, 0);
 
  if on_off=0 then
    begin
    MyReport[1] := 1;
    on_off:=1;
    end
  else begin
    MyReport[1] := 0;
    on_off:=0;
  end;

  Result := HidDev.SetFeature(MyReport, FeatureReportLen);
  Result := false;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
JvHidDeviceController1.Enumerate;
end;

...


Изображение

Т.е. нажал кнопку - светодиод зажегся, нажал ещё раз - погас.

Но вот проблема: светодиод загорается, но очень тускло, почти не видно. Замерил напряжение 1.7 В. Странно. Уже и резистор убрал. Сам светодиод на 2,2 В. Ерунда какая то. На контроллер 5 В приходит (замерил).

_________________
Нельзя всё знать, достаточно понимать.


Последний раз редактировалось mr_smit Чт май 07, 2009 20:11:11, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Чт май 07, 2009 20:01:35 
Грызет канифоль
Аватар пользователя

Зарегистрирован: Пн дек 24, 2007 07:09:09
Сообщений: 293
Рейтинг сообщения: 0
На какой ноге у тебя СД весит и на какой кнопка?

_________________
Даташит - библия моя...
Изображение


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Чт май 07, 2009 20:13:52 
Вымогатель припоя
Аватар пользователя

Карма: 4
Рейтинг сообщений: 16
Зарегистрирован: Пн мар 23, 2009 09:25:58
Сообщений: 651
Откуда: Самара
Рейтинг сообщения: 0
Светодиод на PB0, а кнопки никакой нет. Управление с компа идет через USB.

_________________
Нельзя всё знать, достаточно понимать.


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Чт май 07, 2009 20:27:48 
Грызет канифоль
Аватар пользователя

Зарегистрирован: Пн дек 24, 2007 07:09:09
Сообщений: 293
Рейтинг сообщения: 0
Попробуй вместо
Код:
if (on_off==1) {
      PORTB |= (1<<PB0);
      }
    else if (on_off==0) {
      PORTB &=~ (1<<PB0);
      }
Сделать Так
Код:
if (on_off==1) {
      PORTB |= (1<<0);
      }
    else if (on_off==0) {
      PORTB &=~ (1<<0);
      }

_________________
Даташит - библия моя...
Изображение


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Пт май 08, 2009 06:59:32 
Вымогатель припоя
Аватар пользователя

Карма: 4
Рейтинг сообщений: 16
Зарегистрирован: Пн мар 23, 2009 09:25:58
Сообщений: 651
Откуда: Самара
Рейтинг сообщения: 0
Сделал
Код:
PORTB |= (1<<0)


То же самое. Главное интересно: Если отключить светодиод от контроллера и замерить напряжение на PB0 - там 5 В (когда включаешь с пом. программы). Подключаешь светодиод - 1,7 В. Что за ерунда?

_________________
Нельзя всё знать, достаточно понимать.


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Пт май 08, 2009 09:54:03 
Открыл глаза

Зарегистрирован: Чт дек 20, 2007 14:47:31
Сообщений: 70
Откуда: Челябинск
Рейтинг сообщения: 0
попробуй другой СИД, или резистор поменьше (но ток не больше 20 мА)


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Пт май 08, 2009 11:32:03 
Вымогатель припоя
Аватар пользователя

Карма: 4
Рейтинг сообщений: 16
Зарегистрирован: Пн мар 23, 2009 09:25:58
Сообщений: 651
Откуда: Самара
Рейтинг сообщения: 0
Другой светодиод пробовал, то же самое. Резистор вообще убрал.

_________________
Нельзя всё знать, достаточно понимать.


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Пт май 08, 2009 13:26:16 
Открыл глаза

Зарегистрирован: Чт дек 20, 2007 14:47:31
Сообщений: 70
Откуда: Челябинск
Рейтинг сообщения: 0
Цитата:
function TForm1.JvHidDeviceController1Enumerate(HidDev: TJvHidDevice;
const Idx: Integer): Boolean;
begin
Result := true;
FeatureReportLen := HidDev.Caps.FeatureReportByteLength;
fillchar(MyReport, 8, 0);

if on_off=0 then
begin
MyReport[1] := 1;
on_off:=1;
end
else begin
MyReport[1] := 0;
on_off:=0;
end;

Result := HidDev.SetFeature(MyReport, FeatureReportLen);
Result := false;
end;


а где же идентификация девайса???!
возможно вам повезло, и у вас подключено только 1 HID совместимое устройство, но это не значит, что можно отказаться от идентификации своего устройства. проверкку следует сделать по Vendor Name и Device Name.


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Пт май 08, 2009 15:51:18 
Вымогатель припоя
Аватар пользователя

Карма: 4
Рейтинг сообщений: 16
Зарегистрирован: Пн мар 23, 2009 09:25:58
Сообщений: 651
Откуда: Самара
Рейтинг сообщения: 0
У меня подключено только 1 HID устройство. Я специально проверку не стал делать чтобы упростить код. Я думаю не в этом дело. Светодиод то реагирует. Может что в контроллере включить надо? Может фьюз какой? Или резистор внутренний? Главное без светодиода на ножке 5 вольт.

_________________
Нельзя всё знать, достаточно понимать.


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Пт май 08, 2009 16:42:32 
Прорезались зубы

Зарегистрирован: Пт ноя 16, 2007 13:52:44
Сообщений: 231
Откуда: Рига, Латвия
Рейтинг сообщения: 0
Не в софте тут дело! :)
Дело в том как подключен светодиод !?! (удивлён, постов ~5 а такого вопроса нигде небыло).
Как он у вас подключен ??
Тема про зажигание светиков - http://radiokot.ru/articles/15/
Желательно подключить анод св.диода(+) через резистор ~510 ОМ на +5в, а катод(-) на ногу контроллера. Пояснение:
В контроллере - логический уровень 1 идёт через подтягиваюсхий на питание резистор (на практике часто это источник тока, т.е. больше определённого значения не выжмешь- ~5мА, если резистор - то обычно говорят ~10к-100кОм).
Понятное дело - с такого источника св.диод светится будет слабо..
А логический уровень 0 - обычно идет через заземляющий транзистор (может быть как биполярник, так и полевик), иногда конечно бывает и там источник тока.. Тоесть при лог.0 - у нас можно сказать и на практике земля - с довольнотаки маленьким сопротивлением... т.е. если подключить анод св.диода на +5В, а катод на ногу - поидёт максимальный ток при лог.0 - и что-то может сгореть - поэтому в цепь резистор по желанию и расчету для яркого свечения :)
В остальных случаях - зажигаем светодиод как в статье с внешним дополнительным транзистором..


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Пт май 08, 2009 19:40:12 
Нашел транзистор. Понюхал.

Зарегистрирован: Ср апр 22, 2009 11:07:00
Сообщений: 161
Рейтинг сообщения: 0
Подтверждаю предыдущего оратора. Комутируйте на лог 0. Гореть будет так что мало не покажется. Резистор не забудьте. Если же комутируете на лог 1 - многого не ждите. Это все таки логический выход а не силовой.

РеЗисТор правильно говорит. :lol:


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Сб май 09, 2009 13:38:52 
Вымогатель припоя
Аватар пользователя

Карма: 4
Рейтинг сообщений: 16
Зарегистрирован: Пн мар 23, 2009 09:25:58
Сообщений: 651
Откуда: Самара
Рейтинг сообщения: 0
Я когда тренировался и делал "бегущие огни", я зажигал светодиоды "1". Всё работало.

Сейчас подключил анод к +5 В (через резистор 300 Ом), а катод к PB0. Пробую - вообще не загорается. Напряжение замеряю - 0 В. Отпаял от PB0, дотронулся но "минуса" - горит. Не пойму в чем проблема???

_________________
Нельзя всё знать, достаточно понимать.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 209 ]    , , , 4, , , ...  

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


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

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


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

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y