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

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Друг Кота
Аватара пользователя
Сообщения: 25447
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

А с чего им стоить дешевле, если это абсолютно идентичные микросхемы?
С одинаковой исходной ценой и идентичным происхождением.
Весь профит возникает у производителя за счет получения новых ниш на рынке, а не за счет демпинга.
С другой стороны совершенно непонятно маниакальное стремление некоторых радиолюбителей сэкономить две копейки на хобби, чтобы потом выкинуть кучу элементной базы на помойку из-за неопытности и незнания.
К тому же за этими гонками за дешевизной они лишают себя удовольствия от работы с иными платформами, которые совсем неспроста успешно конкурируют с морем дешевки... :) :tea:
Реклама
Chettuser

Сообщение Chettuser »

КРАМ писал(а): от работы с иными платформами, которые совсем неспроста успешно конкурируют с морем дешевки... :) :tea:
Эээ.. Я что то пропустил? Про какие платформы идёт речь?
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 606
Зарегистрирован: Чт окт 06, 2016 21:12:07
Откуда: Южное Бутово

Сообщение ptr128 »

КРАМ писал(а): лишают себя удовольствия от работы с иными платформами
"Если звезды зажигают, значит это кому-то нужно" (с)

Рынок жесток. Продукцию, не пользующуюся спросом (никому не нужную) никто выпускать себе не позволит. И, с точки зрения производителя IC, радиолюбительский спрос есть слишком узкая ниша рынка, чтобы ориентироваться только на него.
Конечно, рано или поздно устареет любой МК. Как почил в истории 8048, а за ним и 8051. Как исчез с рынка столь популярный в свое время Z80. Так же уйдут и AVR, и STM32, и ESP8266, и даже ARM с RISC.
Если уж пытаться быть впереди планеты всей, то Вам стоит больше обратить внимание на MIMD архитектуру для построения нейронных сетей или на D-Wave Systems для квантовых вычислений.
А любителям оставьте любительское, пожалуйста )
Не ошибается только то, кто ничего не делает.
Тот, кто признает свои ошибки, на них учится.
Глупец же, упорствуя в своих заблуждениях, остается глупцом.
Вымогатель припоя
Аватара пользователя
Сообщения: 616
Зарегистрирован: Вс ноя 01, 2015 13:13:49

Сообщение scorpi_0n »

Chettuser писал(а):Про какие платформы идёт речь?
Про экзотические. Типа ПИК24 или ХМега. А смысла в применении GD32F103 действительно никакого нет.
Реклама
Эиком - электронные компоненты и радиодетали
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18682
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

ptr128 писал(а):Как почил в истории ... и 8051
дык вроде нет? и сейчас живее многих...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 606
Зарегистрирован: Чт окт 06, 2016 21:12:07
Откуда: Южное Бутово

Сообщение ptr128 »

Так же как и Z80, примерно того же года разработки. Между ними разницы 4 года. 8051 1980-го, а Z80 - 1976-го.
Из-за популярности в 80-е и 90-е годы выпускаются и ныне, так как промышленные изделия на них эксплуатируются до сих пор. Но о том, чтобы за последние лет 5 хотя бы один производитель взял его за основу в своей новой продукции я не слышал. Устарела все же за 35 лет и архитектура, и технология.
Не ошибается только то, кто ничего не делает.
Тот, кто признает свои ошибки, на них учится.
Глупец же, упорствуя в своих заблуждениях, остается глупцом.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 25447
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

scorpi_0n писал(а):А смысла в применении GD32F103 действительно никакого нет.
Смысл в применении GD32 ровно такой же как и STM32. Ни больше. ни меньше.
Я что то не встречал радиолюбителей, которые бы предпочитали определенного производителя дискретной логики 74НС. А их как блох на дикой собаке.
С другой стороны, есть свои платформы у AD и TI, есть PSoC и подобные ему с ядром ARM. Есть и упомянутые тут PIC24/dsPIC33. Много чего есть, что по идее должно вызывать любопытство для пытливого любителя...
Встал на лапы
Аватара пользователя
Сообщения: 101
Зарегистрирован: Пт окт 03, 2014 14:50:06

Сообщение Jeka_M »

ptr128 писал(а):стоит больше обратить внимание на MIMD архитектуру для построения нейронных сетей или на D-Wave Systems для квантовых вычислений
А оно в Arduino IDE поддерживается? :)))
P.S. Простите, не удержался.
Вымогатель припоя
Аватара пользователя
Сообщения: 606
Зарегистрирован: Чт окт 06, 2016 21:12:07
Откуда: Южное Бутово

Сообщение ptr128 »

ptr128 писал(а):
КРАМ писал(а): лишают себя удовольствия от работы с иными платформами
Если уж пытаться быть впереди планеты всей
Как можно быть впереди планеты всей, используя Arduino IDE? )))
Не ошибается только то, кто ничего не делает.
Тот, кто признает свои ошибки, на них учится.
Глупец же, упорствуя в своих заблуждениях, остается глупцом.
Вымогатель припоя
Аватара пользователя
Сообщения: 616
Зарегистрирован: Вс ноя 01, 2015 13:13:49

Сообщение scorpi_0n »

КРАМ писал(а): Смысл в применении GD32 ровно такой же как и STM32. Ни больше. ни меньше.
Следуя вашей логике уже в самом смысле отсутствует смысл.
Я что то не встречал радиолюбителей, которые бы предпочитали определенного производителя дискретной логики 74НС. А их как блох на дикой собаке.
Да ладно! Есть два фактора, которые не чужды любителю - цена и доставаемость или наличие в местном ларьке.
С другой стороны, есть свои платформы у AD и TI, есть PSoC и подобные ему с ядром ARM. Есть и упомянутые тут PIC24/dsPIC33. Много чего есть, что по идее должно вызывать любопытство для пытливого любителя...
Как видим - не очень. Да и не только у любителей.
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 354
Зарегистрирован: Чт июл 24, 2014 23:09:23
Откуда: Киев

Сообщение hosturik »

Разбираюсь в исходниках одного проекта(C знаю очень плохо)
Никак не могу догнать что делает эта функция.
файл отвечает за вывод с дисплея, называется lcd_lib.c
Я понял что считываются данные с дисплея, а потом идет ихняя проверка, а вот что проверяется и зачем никак не пойму.
Спойлер

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

 
#define FLAG_BF 7
void LCD_Wait(void)
{
#ifdef CHECK_FLAG_BF
  #ifdef BUS_4BIT
  
  unsigned char data;
  DDRX_DATA &= 0x0f;            //конфигурируем порт на вход
  PORT_DATA |= 0xf0;	        //включаем pull-up резисторы
  SetBit(PORT_SIG, RW);         //RW в 1 чтение из lcd
  ClearBit(PORT_SIG, RS);	//RS в 0 команды
  do{
    SetBit(PORT_SIG, EN);	
    _delay_us(2);
    data = PIN_DATA & 0xf0;      //чтение данных с порта
    ClearBit(PORT_SIG, EN);
    data = __swap_nibbles(data);
    SetBit(PORT_SIG, EN);	
    _delay_us(2);
    data |= PIN_DATA & 0xf0;      //чтение данных с порта
    ClearBit(PORT_SIG, EN);
    data = __swap_nibbles(data);
  }while((data & (1<<FLAG_BF))!= 0 );
  ClearBit(PORT_SIG, RW);
  DDRX_DATA |= 0xf0; 
  
  #else
  unsigned char data;
  DDRX_DATA = 0;                //конфигурируем порт на вход
  PORT_DATA = 0xff;	        //включаем pull-up резисторы
  SetBit(PORT_SIG, RW);         //RW в 1 чтение из lcd
  ClearBit(PORT_SIG, RS);	//RS в 0 команды
  do{
    SetBit(PORT_SIG, EN);	
    _delay_us(2);
    data = PIN_DATA;            //чтение данных с порта
    ClearBit(PORT_SIG, EN);	
  }while((data & (1<<FLAG_BF))!= 0 );
  ClearBit(PORT_SIG, RW);
  DDRX_DATA = 0xff; 
  #endif    
#else
  _delay_us(40);
#endif  
}

//функция записи команды 
void LCD_WriteCom(unsigned char data)
{
  LCD_Wait();
  ClearBit(PORT_SIG, RS);	//установка RS в 0 - команды
  LCD_CommonFunc(data);
}

//функция записи данных
void LCD_WriteData(unsigned char data)
{
  LCD_Wait();
  SetBit(PORT_SIG, RS);	        //установка RS в 1 - данные  
  LCD_CommonFunc(data);
}
Последний раз редактировалось hosturik Ср ноя 09, 2016 18:48:51, всего редактировалось 4 раза.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18682
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

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

Мой уютный бложик... заходите!
Контактная информация:
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 354
Зарегистрирован: Чт июл 24, 2014 23:09:23
Откуда: Киев

Сообщение hosturik »

Да, код не совсем полный был, думал этого хватит. Дополнил.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18682
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

еще больше убедился, что это ожидание готовности ЖКИ
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 354
Зарегистрирован: Чт июл 24, 2014 23:09:23
Откуда: Киев

Сообщение hosturik »

Спасибо. А можно чуть более подробно написать что там происходит в коде. Читаются данные с дисплея потом эти данные проверяются на соответствие, только вот с чем?
Какая то цифра "7" (#define FLAG_BF 7)
и что эта строчка делает (data & (1<<FLAG_BF))?
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18682
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

считывается регистр состояния ЖКИ и проверяется наличие в нем 7-го бита, который есть флаг занятости. пока он есть - крутится цикл опроса этого флага.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 354
Зарегистрирован: Чт июл 24, 2014 23:09:23
Откуда: Киев

Сообщение hosturik »

Уже второй день борюсь с ошибкой компилятора, несколько раз переписывал код для дисплея, думал в этом ошибка. Но ошибка каждый раз одна и та же - multiple definition в файле lcd_main.h
интернет говорит что что-то не так с подключаемыми файлами.
Мне кажется решение где-то на поверхности, но я уже все варианты перепробовал, которые знал.

есть три файла, которые менял - lcd_lib.c, lcd_lib.h и main.c, приведу только начало, а то много кода. Файл lcd_lib.h весь, на него ругается.
Помогите советом, как это исправить.

Лог
Спойлер

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

Compiling C: lcd_lib.c
avr-gcc -c -mmcu=atmega168p -I. -gdwarf-2 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=./lcd_lib.lst  -std=gnu99 -Wundef -MMD -MP -MF .dep/lcd_lib.o.d lcd_lib.c -o lcd_lib.o 

Linking: main.elf
avr-gcc -mmcu=atmega168p -I. -gdwarf-2 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=main.o  -std=gnu99 -Wundef -MMD -MP -MF .dep/main.elf.d main.o lcd_lib.o --output main.elf -Wl,-Map=main.map,--cref     -lm
lcd_lib.o: In function `I2C_StartCondition':
E:\1\mod_168/lcd_lib.h:25: multiple definition of `I2C_StartCondition'
main.o:E:\1\mod_168/lcd_lib.h:25: first defined here
lcd_lib.o: In function `I2C_StopCondition':
E:\1\mod_168/lcd_lib.h:32: multiple definition of `I2C_StopCondition'
main.o:E:\1\mod_168/lcd_lib.h:32: first defined here
lcd_lib.o: In function `I2C_SendByte':
E:\1\mod_168/lcd_lib.h:38: multiple definition of `I2C_SendByte'
main.o:E:\1\mod_168/lcd_lib.h:38: first defined here
lcd_lib.o: In function `I2C_Init':
E:\1\mod_168/lcd_lib.h:46: multiple definition of `I2C_Init'
main.o:E:\1\mod_168/lcd_lib.h:46: first defined here
lcd_lib.o: In function `I2C_SendPocket':
E:\1\mod_168/lcd_lib.h:51: multiple definition of `I2C_SendPocket'
main.o:E:\1\mod_168/lcd_lib.h:51: first defined here
lcd_lib.o: In function `I2C_RecieveByte':
E:\1\mod_168/lcd_lib.h:63: multiple definition of `I2C_RecieveByte'
main.o:E:\1\mod_168/lcd_lib.h:63: first defined here
lcd_lib.o: In function `I2C_RecieveLastByte':
E:\1\mod_168/lcd_lib.h:73: multiple definition of `I2C_RecieveLastByte'
main.o:E:\1\mod_168/lcd_lib.h:73: first defined here
make.exe: *** [main.elf] Error 1

> Process Exit Code: 2
> Time Taken: 00:01
lcd_lib.h
Спойлер

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

#ifndef LCD_LIB_H
#define LCD_LIB_H

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

// отправка команды СТАРТ
void I2C_StartCondition(void)
{
TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
while (!(TWCR & (1<<TWINT)));//ожидание установки бита TWIN
}

// отправка СТОП
void I2C_StopCondition(void)
{
TWCR = (1<<TWINT)|(1<<TWSTO)|(1<<TWEN);
}

//отправка байта
void I2C_SendByte(unsigned char c)
{
TWDR = c;//загрузка значения в регистр данных
TWCR = (1<<TWINT)|(1<<TWEN);//начаало передачи байта данных
while (!(TWCR & (1<<TWINT)));//ожидание установки бита TWIN
}

//инициализация I2C как передатчика
void I2C_Init (void)
{
TWBR=0xFF;//скорость передачи
}

//отправка SLA_W + байт данных
void I2C_SendPocket (unsigned char value,unsigned char adres_rw)
{
I2C_StartCondition(); // генерируем условие СТАРТ
I2C_SendByte(adres_rw); //оправляем адрес устройства+бит запись
I2C_SendByte(value);//отправляем байт данных
I2C_StopCondition();//генерируем условие СТОП
}

//добавляем функции чтения по I2C
//чтение байта
unsigned char I2C_RecieveByte(void)
{
unsigned char dat;//переменная хранения значения
TWCR |= (1<<TWINT)|(1<<TWEN)|(1<<TWEA);
while (!(TWCR & (1<<TWINT)));//ожидание установки бита TWIN
dat = TWDR;//читаем регистр данных
return dat;
}

//чтение последнего байта
unsigned char I2C_RecieveLastByte(void)
{
unsigned char dat;//переменная хранения значения	
TWCR |= (1<<TWINT)|(1<<TWEN)|(0<<TWEA);//чтение последнего байта
while (!(TWCR & (1<<TWINT)));//ожидание установки бита TWIN
dat = TWDR;//читаем регистр данных	
return dat;
}
lcd_lib.c
Спойлер

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

#include "lcd_lib.h"
#include "codetable.h"

//адрес LCD переходника
#define LCD_ADDR 0b00100111
//макрос адреса + бит записи
#define SLA_W   LCD_ADDR<<1

//создаем переменную Эквивалент регистра порта
unsigned char Led_port=0;

//макрос отправки пакетов LCD
#define I2C_SendPocketLCD(x) I2C_SendPocket (x,SLA_W)

/*
таблица соответствия
Po - RS
P1 - R/W
P2 - E
P3 - подсветка
P4 - D4
P5 - D5
P6 - D6
P7 - D7
 */

/* установка лог. "1" на линии RS */
#define LCD_RS_SET  I2C_SendPocketLCD (Led_port|=0x01)
/* установка лог. "0" на линии RS */
#define LCD_RS_CLR  I2C_SendPocketLCD (Led_port&=~0x01)
/* установка лог. "1"(запись) R/W*/
#define LCD_RW_SET  I2C_SendPocketLCD (Led_port|=0x02)
/* установка лог. "0"(Чтение) R/W */
#define LCD_RW_CLR  I2C_SendPocketLCD (Led_port&=~0x02)
/* установка лог. "1" на линии E */
#define LCD_E_SET   I2C_SendPocketLCD (Led_port |=0x04)
/* установка лог. "0" на линии E */
#define LCD_E_CLR   I2C_SendPocketLCD (Led_port &=~0x04)
/* установка лог. "1" на линии подсветки */
#define LCD_BT_SET  I2C_SendPocketLCD (Led_port|=0x08)
/* установка лог. "0" на линии подсветки */
#define LCD_BT_CLR  I2C_SendPocketLCD (Led_port&=~0x08)

/* функция передачи тетрады в жки */
inline static void LCD_CommonFunc(unsigned char t)
{
t<<=4;
    LCD_E_SET;
    _delay_us(50);
    I2C_SendPocketLCD (Led_port|t);
    LCD_E_CLR;
    _delay_us(50);
}
main.c
Спойлер

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

#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <avr/eeprom.h>
#include "lcd_lib.h"

#include "main.h"
#include <avr/wdt.h>
ISR (__vector_default) 	
{
return;					
}

//unsigned char cc=5;
ISR (TIMER0_OVF_vect)	
{
		
	static char delenie_in_two = 0;
	if(++delenie_in_two == 2)
	{
		delenie_in_two = 0;
Друг Кота
Аватара пользователя
Сообщения: 8007
Зарегистрирован: Вс ноя 14, 2010 19:24:26
Откуда: Лукалэнд

Сообщение hybroid »

Все с ног на голову. В заголовке объявить прототипы функций, а тело в .c файле. Инлайн-функцию вынести наоборот в заголовок.
Друг Кота
Аватара пользователя
Сообщения: 25447
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

scorpi_0n писал(а): Следуя вашей логике уже в самом смысле отсутствует смысл.
Следуя моей логике, можно применять ровно те микросхемы, которые имеются в наличии (либо доступны) и позволяют достичь поставленной цели. Обозначение производителя не имеет вообще никакого значения.
Что до ларька с комплектацией, то покупка на али делает обозначение производителя смешным фейком. Но али, тем не менее, остается самым популярным ларьком.
Именно потому, что "даром за амбаром" стало самоцелью. И хобби на этом фоне идет лесом (см. комментарий об АД, ТИ и прочих).
Ответить

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