PCCar.ru - Ваш автомобильный компьютер

Вернуться   PCCar.ru - Ваш автомобильный компьютер > MP3Car ТехИнфа > Разработка устройств

Ответ
 
Опции темы Поиск в этой теме
Старый 24.12.2018, 19:40   #11
nikey
Новый Пользователь
 
Регистрация: 28.10.2018
Город: орел
Регион: 57
Машина: пежо 307
Сообщений: 17
nikey is on a distinguished road
По умолчанию

Понял. Я так и думал ))
T_r_D, я кажется нашёл ещё одну хрень... Смотри:

EICRA |= (1 << ISC01);
EIMSK |= (1 << INT0);

Я в прерываниях ещё не совсем шарю... но, вот вторая строка... Я так понимаю в бит под названием INT0 (регистра EIMSK) мы пишем единичку? Так?... чем мне это грозит?... У меня на 32u4 вывод PCINT0 совпадает с выводом SS он же PB0, чего быть не должно. Это опасно или я чото путаю?... В 328p вывод PCINT не совпадает с SS!
PCINT0 и INT0 - это разные вещщи?!...

Напомнило анекдот про чукчу... Карл маркс и фридрих энгельс это не четыре человека, а два! А слава КПСС - вообще не человек ))))))

Последний раз редактировалось nikey; 24.12.2018 в 20:19.
nikey вне форума   Ответить с цитированием
Старый 24.12.2018, 22:46   #12
T_r_D
Старший Пользователь
 
Регистрация: 03.07.2015
Регион: 77, 97, 99, 177
Сообщений: 372
T_r_D is a jewel in the roughT_r_D is a jewel in the roughT_r_D is a jewel in the rough
По умолчанию

Если совпадают выводы, то так нельзя оставлять.
Ведь это внешний вывод при приходе сигнала на который будет срабатывать внешнее прерывание.

Но у тебя есть второе прерывание- INT1.
И оно на другой ноге.
Так что можно поменять.
EICRA |= (1 << ISC11);
EIMSK |= (1 << INT1);

Ну и пару ссылок чтоб было понятнее:
http://mainloop.ru/avr-atmega/avr-ex...interrupt.html
http://arduino.ru/forum/programmirov...preryvaniyam-0

PS. Не забудь разрешить обработку прирывания INT1 вместо INT0 (всё подробно в первой ссылке).
И кстати я этого в коде не вижу?
К этой ноге точно что-то подключено от трансивера?
А то код настройки прирывания есть, а включения его нет!
GICR |= 1<<INT0; должно в коде быть.
Но там только включение глобального прерывания есть sei();

Ещё ссылка на английском, но более наглядная:
http://www.avr-tutorials.com/interru...nal-Interrupts

Ха! Точно!
ISR(INT0_vect)
{
//interr = register_get( INTSTATUS);
//if( interr & ( 1 << ROKR) && interr & ( 1 << RNOKR))
//register_set( INTRESET, 0x83);
//inter |= ( 1 << 1) | (1 << 0);
//register_set( INTRESET, 0x00);
};
Обработчик прерывания пустой!
В общем эта настройка нафиг не нужна.
Не помню sei(); надо оставлять для конвеера SPI или нет, но вроде нет...
Так что настройку внешнего прерывания и включение глобального не имеет смысла оставлять.

Последний раз редактировалось T_r_D; 24.12.2018 в 23:17.
T_r_D вне форума   Ответить с цитированием
Старый 29.12.2018, 11:40   #13
T_r_D
Старший Пользователь
 
Регистрация: 03.07.2015
Регион: 77, 97, 99, 177
Сообщений: 372
T_r_D is a jewel in the roughT_r_D is a jewel in the roughT_r_D is a jewel in the rough
По умолчанию

Видимо всё получилось раз тишина.
Удачи в разработке!
T_r_D вне форума   Ответить с цитированием
Старый 30.12.2018, 00:44   #14
nikey
Новый Пользователь
 
Регистрация: 28.10.2018
Город: орел
Регион: 57
Машина: пежо 307
Сообщений: 17
nikey is on a distinguished road
По умолчанию

Цитата:
Сообщение от T_r_D Посмотреть сообщение
Видимо всё получилось раз тишина.
Удачи в разработке!
Да ну... какой там!
Во-первых работа не даёт нихрена вникнуть толком, что такое прерывание... до койки б доползти...
Событие, событие... какое нахрен событие... восьмую ногу (pcint0) завалили на массу (или на плюс) - это чтоль событие?...
EIMSK |= (1 << INT0)
В схеме вроде как наоборот, ардуино управляет транзюком, а не транзюк ардуиной...
короче в голове пока каша... на новый год вместо того чтоб втыкать в зомбоящщик и смотреть на педиков пенсионеров, буду ставить эксперименты.
Вот эта канитель: EIMSK |= (1 << INT0) что это?..
на вывод инт0 подали 5 вольт? так?
nikey вне форума   Ответить с цитированием
Старый 30.12.2018, 14:07   #15
T_r_D
Старший Пользователь
 
Регистрация: 03.07.2015
Регион: 77, 97, 99, 177
Сообщений: 372
T_r_D is a jewel in the roughT_r_D is a jewel in the roughT_r_D is a jewel in the rough
По умолчанию

Нет.
EIMSK |= (1 << INT0) разрешает обработку прибывания 0.

Я выше затупил.
Так что прирывание включилось.

Тоесть вывод INT0 настроен на реакцию на внешний импульс и срабатывание будет по заднему фронту отрицательного импульса.

Другими словами:
EICRA |= (1 << ISC01);
EIMSK |= (1 << INT0);
sei();
Включит обработку прирывания на выводе INT0 по отрицательному импульсу его спаду.

EICRA |= (1 << ISC11);
EIMSK |= (1 << INT1);
sei();
Включит обработку прирывания на выводе INT1 по отрицательному импульсу его спаду.

А ещё проще- если на выводе INT0 (или INT1) появляется отрицательное напряжение, то после прекращения его подачи обработается код прерывания:
ISR(INT0_vect)
{
//interr = register_get( INTSTATUS);
//if( interr & ( 1 << ROKR) && interr & ( 1 << RNOKR))
//register_set( INTRESET, 0x83);
//inter |= ( 1 << 1) | (1 << 0);
//register_set( INTRESET, 0x00);
};

Но поскольку в теле функции ни чего нету (всё закоменчено), то ни чего и не произойдёт.

А прерывание это аппаратный приоритет кода.
Тоесть как только будет вызвано событие прерывания, основной код остановит своё выполнение и отработается код из функции прерывания.

НО!
Поскольку в коде прерывания пусто, то настраивать и разрешать его не имеет смысла!

И на схеме видно что выводы INT0(4) и INT1(5) ни куда не подключены!
Тоесть не парься по поводу этих строк.
Можешь их из кода вообще выкинуть и функцию тоже.
Ни чего не изменится.

Видимо был рассчёт на то, что контроллер шины или выдаёт импульс на приём пакета или что очевиднее это увод в SLEEP контроллера когда на шине тихо.
Но это ни как не реализовано.
Задействованы ноги PB0-5.
А именно сигналы GPIO (PB0), CS2(PB1), CS1(PB2) это как цифровые выходы.
И PB3-5 - MOSI, MISO, SCK как SPI шина.

Ну и PD0 и PD1 как UART.

Так что забудь о прерывании.
При переделку кода на другой контроллер нужно поменять назначения 8 выводов если они не совпадают (те что написал выше).

Последний раз редактировалось T_r_D; 30.12.2018 в 14:42.
T_r_D вне форума   Ответить с цитированием
Старый 30.12.2018, 16:52   #16
nikey
Новый Пользователь
 
Регистрация: 28.10.2018
Город: орел
Регион: 57
Машина: пежо 307
Сообщений: 17
nikey is on a distinguished road
По умолчанию

Цитата:
И на схеме видно что выводы INT0(4) и INT1(5) ни куда не подключены!
епжтв@южм@ть!!!! оказывается PCINT0 и INT0 это разные вещщи!!!... Твоюжмать!!!... вернее, разные ноги... А чтож тогда такое это самое PCINT0...12? Ладно хрен с ними... с ними вроде разобрались

Цитата:
Так что забудь о прерывании.
При переделке кода на другой контроллер нужно поменять назначения 8 выводов если они не совпадают (те что написал выше).
это какие?... вот эти чтоль:
Цитата:
GPIO (PB0), CS2(PB1), CS1(PB2) это как цифровые выходы.
И PB3-5 - MOSI, MISO, SCK как SPI шина.
Ну и PD0 и PD1 как UART.
Так-с... начнём по-порядку:
PB0...
Этот вывод подсоединён к базе транзистора и он мне не нужен. Соответственно, там где в коде есть - "PINB0", удаляем её (вернее комментим на всякий случай).


PB1... он же SS2, управляет электронным потенциометром. Я управлять им не собираюсь. Соответственно там где в коде содержится надпись "PB1", вернее PINB1, смело удаляем эти строки. Так?...

void execCmd( const byte cmd)
{
// PORTB &= ~( 1 << PINB1); // заземляем вывод SS это точно!!!)))
// spi_transfer( 0x11); //передаём по spi
// spi_transfer( cmd); //передаём по spi
// PORTB |= ( 1 << PINB1); // отпускаем SS
// delay( CMD_WAIT_MS); //задержечка 50 милисек
// PORTB &= ~( 1 << PINB1); // опять заземляем SS это точно!!
//spi_transfer( 0x11); //передаём по spi
//spi_transfer( nocmd); //передаём по spi
// PORTB |= ( 1 << PINB1); // и отпускаем SS
};
Иначе, если этого не сделать, то в моём контроллере 32U4 эти 4 строчки будут валить вывод SCLK он же PB1 на массу. Так?...
Я их тоже закомментил чтобы не удалять совсем.

Далее идёт PB2... он же контакт SS для TSS463C
Соответственно, мне надо строчки PINB2 заменить на PINB0, потому что на моей атмеге 32U4 вывод SS - это PB0. Так же думаю что не обязательно заменять на PINB0... Можно, пожалуй и на PINB6, чтоб рядышком было

PB3-5 - MOSI, MISO, SCK как SPI шина
Вот тут затык!... нету таких строчек где было б указано PINB3, PINB4, PINB5, видимо тут как-то все назначается автомасиськи

PD0 и PD1... Опять затык!... где это в коде прописано? Нет такого!...
У меня в 32U4 юарт находится на ногах:
TXD1 - PD3 (PD1 атмега 328)
RXD1 - PD2 (PD0 атмега328)
Надеюсь я правильно понимаю что юарт это RX и TX... И в 32U4 там какаято хрень с этим юартом... толком не пойму какая там два юарта чтоли...
И, кстати!!! причём тут этот самый юарт?... разве в коде он гдето есть?

execCmd - это юарт?...

помоему вот эта строка:
execCmd( source); отправляет по SPI команду на цифровой потенциометр, чтоб он выставил определённое сопротивление, в данном случае source у нас равна 0xfd т.е - 1.20 kom
разве нет?

Последний раз редактировалось nikey; 30.12.2018 в 18:15.
nikey вне форума   Ответить с цитированием
Старый 30.12.2018, 21:59   #17
T_r_D
Старший Пользователь
 
Регистрация: 03.07.2015
Регион: 77, 97, 99, 177
Сообщений: 372
T_r_D is a jewel in the roughT_r_D is a jewel in the roughT_r_D is a jewel in the rough
По умолчанию

Ой как ты далеко от этого!
Смотри!
Открываем даташит на 328:

Видишь что внутри корпуса написано?
Это физические контакты.
А снаружи что они делают.
Соответственно Ищем даташит на 32U4


И если в коде ни чего менять не хочешь то ищешь какой вывод какому соответствует и просто меняем их физически.
Если хочешь сделать удобнее их расположение, то придётся в прошивке менять выводы и порты.
Но есть выводы которые ты не сможешь поменять!
SPI и UART будут именно на тех выводах, что написаны на контроллере.
А вот цифровые входы-выходы можно менять на любые.
Тоесть выводы PB0-2 можешь назначить любые удобные поменяв их в коде,
А выводы MOSI, MISO, SCK, RX, TX будут только те, что написаны в даташите.

Смотрим на 32U4 и понимаем что выводы SPI занимают те же выводы что и нужные нам цифровые входы-выходы.
Тоесть придётся менять на другие.
Тоесть скажем PORTB |= ( 1 << PINB1);
это вывод PB1 можно сделать любым, только помни что с номером вывода меняется и порт.
PORTА |= ( 1 << PINА1);
T_r_D вне форума   Ответить с цитированием
Старый 30.12.2018, 22:13   #18
T_r_D
Старший Пользователь
 
Регистрация: 03.07.2015
Регион: 77, 97, 99, 177
Сообщений: 372
T_r_D is a jewel in the roughT_r_D is a jewel in the roughT_r_D is a jewel in the rough
По умолчанию

Тоесть шины данных ищем по даташиту, если у нового контроллера они совпадают с задействоваными нами цифровыми входами-выходами, то переназначаем цифровые порты, а не шины.
у 32U4
SCK равен PB0 который у нас занят в исходнике.
Так что PB0 придётся переносить на любой удобный нам вывод.
И так далее.

Сначала подключи все шины, потом смотри какие выводы удобно использовать чтоб дорожки не перекручивать особо.
можно их двинуть на PB4-6... Меньше циферок в коде менять.
PB0 > PB4
PB1 > PB5
PB2 > PB6
В коде соответственно
PINB0 > PINB4
PINB1 > PINB5
PINB2 > PINB6
Всё, дальше подключаешься в соответствии с ремапом и вперёд.
Даже порт не менять если тяжело по началу.

PS!
Чуть не забыл!
Если плата спаяна уже или купил готовую, то просто используй переходник UART<>USB.
Всё равно софтину свою писать для планшета, так что не важно HID это будет устройство или конвертер уровня.
Тем более что если думаешь что будет просто завести HID с одновременной эмуляцией клавы и порта воода-вывода, то сильно заблуждаешься.
T_r_D вне форума   Ответить с цитированием
Старый 31.12.2018, 00:05   #19
nikey
Новый Пользователь
 
Регистрация: 28.10.2018
Город: орел
Регион: 57
Машина: пежо 307
Сообщений: 17
nikey is on a distinguished road
По умолчанию

Блин... у меня такое чувство что ты меня держишь за полного идиота, но это не совсем так! ))) С даташитами обоих контроллеров я разве что не сплю. Я пробовал переназначать выводы (щас уже не вспомню с каких на какие, ибо пробовал по-разному), но толку - НОЛЬ!!! Видимо где-то в какой-то строчке закралась ошибочка и... в монитор порта выводятся не те команды
Короче... Я б тебе показал бы свой модифицированный код, и прокомментировал бы как он работает, но здесь на форуме его хрен вставишь... На почту могу скинуть

Цитата:
Тем более что если думаешь что будет просто завести HID с одновременной эмуляцией клавы и порта воода-вывода, то сильно заблуждаешься.
не совсем понимаю что такое завести хид, но на сайте DIXOM есть готовая библиотека с помощью которой можно управлять громкостью планшета или ноутбука... Только команды вставить где нужно. Я уже пробовал это делать. Громкостью ноутбука управляю, но т.к. код не допилен, то соответственно получается полная ерунда. Т.е. я кнопки на руле не нажимаю, а команды нажатия всёравно лезут в ноутбук... абы какие...
Хрен его знает что в коде не так... Что там с ЮАРТом? Так и не ответил...

Цитата:
В коде соответственно
PINB0 > PINB4
PINB1 > PINB5
PINB2 > PINB6
PINB0 PINB1 мне не нужны!!!! Я эти строчки тупо сотру и всё...
А вот там где в коде будет - PINB2, я напишу - PINB0! Но этого недостаточно! Чтото где-то ещё клинит... Юарт?...

Цитата:
И если в коде ни чего менять не хочешь то ищешь какой вывод какому соответствует и просто меняем их физически.
Даже если не хочу, то всёравно это сделать придётся, ибо накладки... от них придётся избавляться

Цитата:
Если хочешь сделать удобнее их расположение, то придётся в прошивке менять выводы и порты.
))) без фанатизма! )))))
nikey вне форума   Ответить с цитированием
Старый 31.12.2018, 07:47   #20
T_r_D
Старший Пользователь
 
Регистрация: 03.07.2015
Регион: 77, 97, 99, 177
Сообщений: 372
T_r_D is a jewel in the roughT_r_D is a jewel in the roughT_r_D is a jewel in the rough
По умолчанию

Выводы PB0-2 на промикре это SPI.
Так что цифровые выводы придётся сдвинуть как не крути. И сдвинуть их проще на PB4-6.
При этом в коде менять минимум.

А что с УАРТом не так?
В коде про него ни слова нет.
И о порте D тоже.

Если хочешь с UART работать не средствами arduino ide, точнее библиотеки оттуда, то вот это почитай:
https://alex-exe.ru/radio/avr/avr-uart/

Но зачем он тебе?
Включи порт на котором диод на микре и мигай им как принят пакет. Ну чтоб видеть что происходит по началу.
Потом прикручивай уже usb.

В принципе тебе надо всего 3 ноги изменить для промикры. Или одну если обвес ещё из двух микрух не нужен.

И посмотри скорость кварца, а то в коде стоит 16 мегагерц.
При прошивке ардуино иде вообще можно это из кода убрать.

PS. Вот нормальный пример работы с uart.
Стоит заметить что скорость зависит от частоты тактирования проца
Цитата:
define F_CPU 8000000 // Рабочая частота контроллера
#define BAUD 9600L // Скорость обмена данными
#define UBRRL_value (F_CPU/(BAUD*16))-1 //Согластно заданной скорости подсчитываем значение для регистра UBRR

#include <avr/io.h>
#include <util/delay.h>

void init_USART() {
UBRRL = UBRRL_value; //Младшие 8 бит UBRRL_value
UBRRH = UBRRL_value >> 8; //Старшие 8 бит UBRRL_value
UCSRB |=(1<<TXEN); //Бит разрешения передачи
UCSRC |=(1<< URSEL)|(1<< UCSZ0)|(1<< UCSZ1); //Устанавливем формат 8 бит данных
}

void send_UART(char value) {
while(!( UCSRA & (1 << UDRE))); // Ожидаем когда очистится буфер передачи
UDR = value; // Помещаем данные в буфер, начинаем передачу
}

int main(void)
{
init_USART(); //инициализация USART в режиме 9600/8-N-1
send_UART(0x53); //посылаем ASCII код знака 'S'
send_UART(0x2D); //посылаем ASCII код знака '-'
send_UART(0x45); //посылаем ASCII код знака 'E'
while(1)
{
_delay_ms(1000);
}
}

Последний раз редактировалось T_r_D; 31.12.2018 в 08:57.
T_r_D вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.



Часовой пояс GMT +4, время: 12:28.


Работает на vBulletin® версия 3.8.4.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot