Мелкие вопросы по МК и ПЛИС.

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
Олегыч1
Поставщик валерьянки для Кота
Сообщения: 1941
Зарегистрирован: Пт фев 27, 2015 20:57:08
Откуда: Курск

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Олегыч1 »

ARV, Прошу прощения. :oops: Последние вопросы к данному разделу действительно не относятся...

Добавлено after 9 minutes 28 seconds:
Увлекся...
Кстати, действительно помехи могут мешать. Не подумал... На собственном опыте убедился. приемник радиолюстры вдруг начал переставать принимать сигнал от пульта после первой успешной команды от пульта (включение первой половины люстры). Оказалось косяк шел от 12 вольтовых светодиодных лампочек (аналог галогенных). Внутри каждой лампочки был ШИМ и дроссель помимо прочих компонентов. И видимо его частота как-то конфликтовала с несущей частотой от пульта. Проблему решить увы так и не удалось, кроме как поставить назад галогенки.
Аватара пользователя
Эйлер Леонард
Встал на лапы
Сообщения: 104
Зарегистрирован: Пн ноя 04, 2019 09:58:29
Откуда: г. Нижний Тагил Свердл. обл.

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Эйлер Леонард »

Добрый вечер. У меня не большой вопросик.
Вот классический код начинающего микроконтроллерщика
Спойлер// ATtiny85 test
#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>

int main(void){

PORTB |= (1 << PB2);
DDRB |= ( 1 << PB2 );// output

while(1){
PORTB |= (1<<PB2);
_delay_ms(500);
PORTB &= ~(1<<PB2);
_delay_ms(500);
}

}

/*
0x18 PORTB – – PORTB5 PORTB4 PORTB3 PORTB2 PORTB1 PORTB0
0x17 DDRB – – DDB5 DDB4 DDB3 DDB2 DDB1 DDB0
0x16 PINB – – PINB5 PINB4 PINB3 PINB2 PINB1 PINB0
*/
Необходимо переписать тот же код без использования имен регистров, используя исключительно их адреса (0x18, 0x17, 0x16) согласно ДШ.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение ARV »

а слабО проследить по цепочке инклюдников, начиная с avr/io.h, как там все эти PORTB и прочее описаны? вряд ли что-то иное придумать выйдет...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Эйлер Леонард
Встал на лапы
Сообщения: 104
Зарегистрирован: Пн ноя 04, 2019 09:58:29
Откуда: г. Нижний Тагил Свердл. обл.

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Эйлер Леонард »

Нет. Чем сейчас я и занимаюсь. Разбираю по запчастям вот это. Очень интересные файлики Board.h GPIO.h. Скачал, установил. Немного подкорректировал, что бы отвязаться от Ардуины. Перевожу комментарии. Устал просто.

Добавлено after 4 minutes 48 seconds:
Особенно записывать биты столбиком на листочке и смотреть, что получится после << >> | & :))

Добавлено after 4 hours 32 minutes 2 seconds:
Решено. Выпотрошил из файла GPIO.h. всё то без чего класс может работать. Пусть не по фэн-шую. Зато теперь всё понятно и работает. А теперь меня заинтересовала идея напр. реализовать таким методом аппаратный SPI интерфейс (да мало ли чего).
Спойлер/* ATiny85
регистр специального назначения
регистры SFR
*/
#define F_CPU 8000000UL //
#include <avr/io.h>
#include <util/delay.h>

#define GPIO_PIN(port,pin) (((port) << 4) | (pin))
#define GPIO_REG(pin) ((pin) >> 4)
#define GPIO_MASK(pin) _BV((pin) & 0xF)

class BOARD {
public: enum pin_t {
D0 = GPIO_PIN(0x36,0), // PINB:0
D1 = GPIO_PIN(0x36,1), // PINB:1
D2 = GPIO_PIN(0x36,2), // PINB:2
D3 = GPIO_PIN(0x36,3), // PINB:3
D4 = GPIO_PIN(0x36,4), // PINB:4
D5 = GPIO_PIN(0x36,5), // PINB:5
};
};

template<BOARD::pin_t PIN>
class GPIO {
public:

GPIO<PIN>& input() {
SFR()->ddr &= ~MASK;
return (*this);
}

void output(){ SFR()->ddr |= MASK;}

void low(){ SFR()->port &= ~MASK; }

void high(){ SFR()->port |= MASK; }

void write(int value){
if(value){ high(); } else { low(); }
}

bool read(){ return ((SFR()->pin & MASK) != 0); }

void operator=(int value) {
write(value);
}

protected:
struct gpio_reg_t {
volatile uint8_t pin; //!< Port Input Pins.
volatile uint8_t ddr; //!< Data Direction Register.
volatile uint8_t port; //!< Data Register.
};

gpio_reg_t* SFR(){ return ((gpio_reg_t*) GPIO_REG(PIN)); }

static const uint8_t MASK = GPIO_MASK(PIN);
};


GPIO<BOARD::D3> led;

int main(void){

led.output();// пин на выход

while (1) {// мигание светодиодом

led = 1; // зажечь
_delay_ms(500);
led = 0; // погасить
_delay_ms(500);

}
}
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Reflector »

[uquote="Эйлер Леонард",url="/forum/viewtopic.php?p=4142042#p4142042"]Пусть не по фэн-шую.[/uquote]
С появлением constexpr перечисления для констант не используют:

Код: Выделить всё

struct BOARD 
{
    static constexpr auto D0 = GPIO_PIN(0x36,0);
.....
};
И макросы тут лучше заменить constexpr/consteval функциями.
Аватара пользователя
Эйлер Леонард
Встал на лапы
Сообщения: 104
Зарегистрирован: Пн ноя 04, 2019 09:58:29
Откуда: г. Нижний Тагил Свердл. обл.

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Эйлер Леонард »

Если внутри main() доступ к полям структуры такой: uint8_t MASK2 = GPIO_MASK(BOARDn::D3); Но вот как структуру сделать параметром шаблона с возможностью доступа к полям, пока затрудняюсь. Голый(не class) enum pin_t в шаблоне такой <pin_t PIN> :dont_know:

Добавлено after 2 minutes 3 seconds:
Код:
Спойлер/* ATiny85 -std=c++11
регистр специального назначения SFR
*/

#define F_CPU 8000000UL //
#include <avr/io.h>
#include <util/delay.h>

#define GPIO_PIN(port, pin) ( ((port) << 4) | (pin) )
#define GPIO_REG(pin) ((pin ) >> 4)
#define GPIO_MASK(pin) _BV( (pin) & 0xF )

class BOARD {
public:
enum pin_t {
D0 = GPIO_PIN(0x36,0), // PINB:0
D1 = GPIO_PIN(0x36,1), // PINB:1
D2 = GPIO_PIN(0x36,2), // PINB:2
D3 = GPIO_PIN(0x36,3), // PINB:3
D4 = GPIO_PIN(0x36,4), // PINB:4
D5 = GPIO_PIN(0x36,5), // PINB:5
};
};
/*
enum pin_t {
D0 = GPIO_PIN(0x36,0), // PINB:0
D1 = GPIO_PIN(0x36,1), // PINB:1
D2 = GPIO_PIN(0x36,2), // PINB:2
D3 = GPIO_PIN(0x36,3), // PINB:3
D4 = GPIO_PIN(0x36,4), // PINB:4
D5 = GPIO_PIN(0x36,5), // PINB:5
};
*/
/**/
struct BOARDn {
static constexpr auto D0 = GPIO_PIN(0x36,0); // PINB:0
static constexpr auto D1 = GPIO_PIN(0x36,1); // PINB:1
static constexpr auto D2 = GPIO_PIN(0x36,2); // PINB:2
static constexpr auto D3 = GPIO_PIN(0x36,3); // PINB:3
static constexpr auto D4 = GPIO_PIN(0x36,4); // PINB:4
static constexpr auto D5 = GPIO_PIN(0x36,5); // PINB:5
};

//template<pin_t PIN>
template<BOARD::pin_t PIN>
class GPIO {
public:
void output(){ SFR()->ddr |= MASK;}
void low(){ SFR()->port &= ~MASK; }
void high(){ SFR()->port |= MASK; }
void write(int value){
if(value){ high(); } else { low(); }
}
void operator=(int value){ write(value); }

protected:
struct gpio_reg_t {
volatile uint8_t pin; //!< Port Input Pins.
volatile uint8_t ddr; //!< Data Direction Register.
volatile uint8_t port; //!< Data Register.
};

gpio_reg_t* SFR(){ return ( (gpio_reg_t*)GPIO_REG(PIN) ); }

static const uint8_t MASK = GPIO_MASK(PIN);
};
/**/

GPIO<BOARD::D3> led;
//GPIO<pin_t::D3> led;

int main(void){

uint8_t TestMASK = GPIO_MASK(BOARDn::D3);// test

led.output();// пин на выход

while (1) {// мигание светодиодом

led=1; // зажечь
_delay_ms(500);
led=0; // погасить
_delay_ms(500);

}
}
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение VladislavS »

[uquote="Эйлер Леонард",url="/forum/viewtopic.php?p=4143525#p4143525"]Но вот как структуру сделать параметром шаблона с возможностью доступа к полям, пока затрудняюсь.[/uquote]

Лучше передавать адрес структуры. Так как порты это volatile сущности, которые из constexpr "вышибают".
Спойлер

Код: Выделить всё

struct PIN
{
  volatile int x;
  volatile int y;
};

#define PIN_A_BASE (0x1234)
#define PIN_A ((PIN*)PIN_A_BASE)

template <uint32_t PIN_BASE>
class TEST
{
public:
  TEST() = default;
 
  static inline void WriteX(int x) { base()->x = x; }
 
private:
  static constexpr auto base() { return (PIN *)PIN_BASE; }
};

using TEST_PA = TEST<PIN_A_BASE>;

TEST_PA pa;

int main()
{
  PIN_A->x=0;
  TEST_PA::WriteX(1);
  pa.WriteX(2);
}
Compiler Exploer
Последний раз редактировалось VladislavS Сб дек 18, 2021 11:34:25, всего редактировалось 6 раз.
Аватара пользователя
O5SCP14
Электрический кот
Сообщения: 1022
Зарегистрирован: Вт июн 16, 2020 22:43:47

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение O5SCP14 »

вместо attiny2313 можно поставить attiny2313a, или не прошьётся ?
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение akl »

Можно без исключений.
Аватара пользователя
АлександрЛ
Друг Кота
Сообщения: 43793
Зарегистрирован: Пн ноя 30, 2009 03:00:01
Откуда: Нерезиновая

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение АлександрЛ »

[uquote="O5SCP14",url="/forum/viewtopic.php?p=4143538#p4143538"]вместо attiny2313 можно поставить attiny2313a,[/uquote] :facepalm:
Хотя, вообще- то, с точки зрения некоторых программаторов разница между ними есть, а для других программаторов- нет.. :dont_know:
Например, у TL866 они указаны отдельно:
2313.png
(36.47 КБ) 130 скачиваний
А у AVRDUDESHELL - одной строкой:
2313-Д.png
(11.72 КБ) 127 скачиваний
Аватара пользователя
O5SCP14
Электрический кот
Сообщения: 1022
Зарегистрирован: Вт июн 16, 2020 22:43:47

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение O5SCP14 »

АлександрЛ писал(а): точки зрения некоторых программаторов разница между ними есть
С точки зрения моего Изображение
хочу lgbtrgb контроллер с ду собрать https://radioparty.ru/device/avr/390-rg ... attiny2313
но просто 2313 битым оказался, хотя не использовал ни разу, в 2313a зашил так красный светит и 0 реакции. Этот вариант единственный с тв пультом нашёл, потому что все эти специальные пульты это дядя Ляо и ожидание в месяц.
Аватара пользователя
den2
Сверлит текстолит когтями
Сообщения: 1145
Зарегистрирован: Вт авг 17, 2010 11:58:06
Откуда: Казань

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение den2 »

Ребят подскажите если можно как быть и что делать.
МК СТМ32 на некоторых из МК отваливается СДВ интерфейс и программа его не видит.Приходится прошивать по УАРТ.
Пины Дата и Клок не подтянуты к плюсу питания.Может в этом проблема?Или всёж сам интерфейс в МК мрет?
И если проблема в этом то стоит ли подтягивать и порт УАРТ к плюсу?Для надежности.
Аватара пользователя
Roman Solovey
Прорезались зубы
Сообщения: 232
Зарегистрирован: Вт фев 05, 2019 17:20:08
Откуда: Днепр, Украина
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Roman Solovey »

Поделитесь ссылкой если есть, на терминал у которого есть 9битный режим.. столько их скачал, а такого не нашел((
Одержать сто побед в ста битвах — это не вершина воинского искусства. Повергнуть врага без сражения — вот вершина.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение ARV »

Roman Solovey, ну, чисто теоретически мой терминал может включать 9-битный режим... вот ссылка: https://cloud.mail.ru/public/Audn/95Vd3Xz1j
только по-моему, драйверы портов этот режим не поддерживают, во всяком случае, мои попытки включить 9 бит дают ошибку
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Roman Solovey
Прорезались зубы
Сообщения: 232
Зарегистрирован: Вт фев 05, 2019 17:20:08
Откуда: Днепр, Украина
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Roman Solovey »

ARV, а как же тогда люди проверяют 9 битный режим? тупо два мк соеденяют?
Одержать сто побед в ста битвах — это не вершина воинского искусства. Повергнуть врага без сражения — вот вершина.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение ARV »

Roman Solovey, понятия не имею, кому он нафиг нужен, этот режим. подозреваю, что никто его и не проверяет и не применяет
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Roman Solovey
Прорезались зубы
Сообщения: 232
Зарегистрирован: Вт фев 05, 2019 17:20:08
Откуда: Днепр, Украина
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Roman Solovey »

Есть тензодатчики которые общаются с прибором, и вот у них как раз 9 битный протокол..
нужно скопировать протокол обмена но без терминала сложно отлаживать.
Одержать сто побед в ста битвах — это не вершина воинского искусства. Повергнуть врага без сражения — вот вершина.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение ARV »

ну, еще раз: в моём терминале такой режим предусмотрен, но на виртуальном СОМ-порту моего ноутбука он не включается. если вы найдете такой порт с такими дровами, чтобы он включался, можете попробовать. функцию я ввел, но по вышеописанной причине протестировать не смог. 5, 6 и 7 бит вроде как работают, думаю, и 9 тоже сработает, если включить сумеете :)))
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Roman Solovey
Прорезались зубы
Сообщения: 232
Зарегистрирован: Вт фев 05, 2019 17:20:08
Откуда: Днепр, Украина
Контактная информация:

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Roman Solovey »

та я понял. вроде пишут что не поддерживается такой режим. Нужно прям в железе делать терминал)
почему до меня его никто не сделал...
Одержать сто побед в ста битвах — это не вершина воинского искусства. Повергнуть врага без сражения — вот вершина.
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Мелкие вопросы по МК и ПЛИС.

Сообщение Gudd-Head »

[uquote="Roman Solovey",url="/forum/viewtopic.php?p=4239055#p4239055"]почему до меня его никто не сделал...[/uquote]
Потому что только мсье знает толк в извращениях))
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Ответить

Вернуться в «Разные вопросы по МК»