Jump to content

Recommended Posts

А причем тут мои ручки? Имею ввиду, можно ли шить с внешним кварцем, когда используется внутренний генератор. Понял - можно.

Edited by Electr0nics

Share this post


Link to post
Share on other sites

Добрый день или вечер, не знаю у кого как, прошу меня направить на путь истинный. Я тут подумал допустим взять цветной дисплей 240х400 пикселей, это RGB сигнал, 240 умножить на 400 это равно 96000 пикселей общее число, и ещё три цвета, это умножить на три, 288000 учитывая если взять 8 бит цветности (это вполне достаточно) умножаем на 8 = 2304000 (0-ей и 1-иц) нужно передавать за один кадр а кадров то 25, поэтому умножаем еще и на 25 = 57600000 нулей и единиц за секунду. Это умопомрачительное число и логично подумать что не один Микроконтроллер не справится с данной задачей. Вот и думаю чтобы использовать? и как использовать.

Задача - на дисплее должен быть спектр звука от 20 до 20000 герц, отображаться будет это по принципу БПФ далее к мк или другим типом будут подключены 10 кнопок (пять плюсов и пять минусов), к примеру Громкость (плюс и минус), и т.п. а на дисплее ниже спектроанализатора должно выводится число Volume = -10dB к примеру нажимаю на Плюс мгновенно изменяется Volume = -09dB.

Короче вопрос для знающих людей какой МК подойдет для сей задачи?, если МК не подойдет то каким принципом лучше сделать....:?

Спасибо за внимание...

Share this post


Link to post
Share on other sites

Дисплеи бывают разные. Это Вы подсчитали кол-во передаваемых бит, расчитывая на однобитный интерфейс передачи данных. А бывают и 8, 16, 24, - битные.

Share this post


Link to post
Share on other sites

Руководство для разработчика приложений на базе STM32WB55

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

Читать статью

Но вообще да, это правда. Такие дисплеи редко бывают 1-битные(если вообще бывают?) обычно это как минимум 8 бит, и используют их совместно со специализированными микросхемами, но обычно они идут в комплекте с процессорами типа ARM-ов которым быстродействия все же хватает. И тут еще надо учесть один маленький момент... Сам дисплей способен держать картинку 20-30 сек без обновления. Если нет нужды обновлять его часто - делать это не обязательно. Думаю для нужд вывода спектра надо 5..10Гц. Это кстати обусловлено вторым моментом... дисплей не имеет собственной памяти. Все что в нем есть - это память ровно на одну строку. На АРМах (STM32Fxxx в частности) вывод с такими скоростями делается довольно просто - через DMA. Но надо ведь учесть, нужна внутренняя память объемом 320x400x3 байт либо отрисовывать строки на лету, благо в случае вывода спектра это довольно просто - там ведь простые столбики.

Share this post


Link to post
Share on other sites

обычно это как минимум 8 бит, и используют их совместно со специализированными микросхемами, но обычно они идут в комплекте с процессорами типа ARM-ов

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

Сам дисплей способен держать картинку 20-30 сек без обновления.

это утверждение тоже подвергну сомнению. Может держать до "посинения". Внутренний контроллер "решает"

На АРМах (STM32Fxxx в частности) вывод с такими скоростями делается довольно просто - через DMA..

DMA имеется и на МК других фирм хоть 16 хоть 32 разрядных

Но надо ведь учесть, нужна внутренняя память объемом 320x400x3 байт либо отрисовывать строки на лету, благо в случае вывода спектра это довольно просто - там ведь простые столбики.

здесь уже много нюансов типа разрешения спекрта, визуализации и т д.

Share this post


Link to post
Share on other sites
                     

DC/DC-преобразователи: принципы работы и уникальные решения Maxim Integrated

Что нового можно сказать про DC/DC? Написаны десятки статей, а самостоятельное изготовление преобразователя мощностью от единиц Вт до нескольких кВт даже в домашних условиях не составляет большого труда. Тем не менее, когда речь идет о микро-, или даже нано-ваттах, проектировщик может столкнуться с рядом трудностей. Разработка устройства с батарейным питанием весьма малой мощности – одна из наиболее актуальных и интересных задач во время всепроникающего интернета вещей. А грамотная схемотехника системы питания не возможна без знания основ работы DC/DC преобразователей. Освежить базовые знания и узнать об особенностях проектирования узлов питания мобильного устройства с оптимальным энергопотреблением можно из следующей статьи

Подробнее

Реальность такова что 1-битную шину имеет смысл применять для ч/б дисплеев малого разрешения, иначе сложно будет добится приемлемой скорости обновления картинки без повышения тактовой частоты. На 50Мгц и выше рассчитывать шлейф к индикатору то еще удовольствие. Почему-то матрицы от ноутбуков все поголовно 24-битные не меньше интересно с чего бы это вдруг?

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

Share this post


Link to post
Share on other sites

Для самых больших и самых маленьких дисплеев (ЖК мониторы и 7-сегментные индикаторы) контроллер обычно не используется, но для средних (HD44780 или телефонные) - наоборот. Возможно, предельных скоростей обновления так достичь и невозможно, зато не требуется проводить регенерацию изображения и хранения его в памяти. Если речь идет о 240х400 (непривычное разрешение но чего не бывает) это больше похоже на второй случай. С другой стороны не обязательно же обновлять информацию в реальном времени, в конце концов преобразование Фурье - штука сама по себе небыстрая, тем более учитывая что данные придется получать с АЦП.

Share this post


Link to post
Share on other sites

да, до 320х240 выбор большой (со встроенными контроллерами и шинами от spi до паралельки 24).

дисплеи с разрешениями 640, 800, 1024 и т д , требуют уже внешней синхронизации. хотя раз вставала у меня такая задача и нашел пару приемлимых вариантов с шиной 24 бит, 16бит цвет, 8 дюймов, разрешением 1024, плюс нашел отдельно и прикрутил к ниму тач.

люди и на восьмибитных МК творят чудеса, но я бы воспользовался 16 битным с "возможностями" DMA, PMP,PLL и т д. в общем вопрос цены)

дисплейчик что-то типа 3,2" с 320х240 и 256к цветов, естесственно со встроенным контроллером ,в самый раз. такая игрушка в районе 400 р думаю стоит. обратите внимание на дисплеи с ssd контроллерами)

Edited by fuckir

Share this post


Link to post
Share on other sites

с диспами от мобил приятно работать в плане: доступности инфы на их контроллеры, качество\цена. Но разъемы шлейфа часто отбивают желание работы с такими диспами.

Share this post


Link to post
Share on other sites

НАРОД СПАСИТЕ! НУЖНО ОРГАНИЗОВАТЬ ЗАДЕРЖКУ НЕ НА ВРЕМЯ А НАПРИМЕР ПОКА НЕ ИЗМЕНИТСЯ ЛОГИЧЕСКИЙ УРОВЕНЬ НОЖКИ 1 ПОРТА Б?

#include <mega8515.h>

#include <delay.h>

void main (void)

{

DDRA = 0b11111111;

DDRB = 0b00000000;

PORTB = 0b11111111;

while(1)

{

if(PINB.0 == 0)

{

PORTA = 0b00000001;

delay_ms(PINB.1 =~ PINB.1); // КАК УСТРОИТЬ ЗАДЕРЖКУ НЕ НА ВРЕМЯ А НА КАКОЕТО СОБЫТИЕ

}

else

{

PORTA = 0b00000000;

}

}

}

Share this post


Link to post
Share on other sites

while(!PINB.1){
  PORTA = 0b00000001;
}
PORTA = 0b00000000;

точнее, событий может быть туча

Edited by crazzian

Share this post


Link to post
Share on other sites

while(!PINB.1){
PORTA = 0b00000001;
}
PORTA = 0b00000000;

точнее, событий может быть туча

Не катит! с нулевой ножкой порта а ничего не происходит! Пишу в CV avr

как написать чтобы при нажатии кнопки диод включался а при повторном нажатии выключался? Вопрос поконкретнее!

Share this post


Link to post
Share on other sites

А ты его перевел в режим вывода? а порт B в режим ввода?

перевел

#include <mega8515.h>

#include <delay.h>

void main (void)

{

DDRB = 0b00000000;

PORTB = 0b00000001;

DDRA = 0b11111111;

while(!PINB.0)

{

PORTA = 0b00000001;

}

PORTA = 0b00000000;

}

Share this post


Link to post
Share on other sites
#include <mega8515.h>
#include <delay.h>
void main (void)
{
DDRB = 0b00000000;
PORTB = 0b00000001;
DDRA = 0b11111111;

while(1)
{
if(PINB.0==0)
{
PORTA.0=!PINA.0;
delay_ms(300);
}
}
}

Edited by XeoN

Share this post


Link to post
Share on other sites

Оужас, что это?

Начните для начала с блок-схемы алгоритма... раз в трех соснах путаетесь.

Share this post


Link to post
Share on other sites

Спасибо ребята за подсказки! Разобрался!

Есть еще один вопросик!

#include <mega8515.h>
#include <delay.h>
void main (void)
{
DDRB = 0b00000000;
PORTB = 0b00000011;
DDRA = 0b11111111;
while(1)
{
if(PINB.0==0)
{
PORTA.0=!PINA.0;
delay_ms(300);
}
if(PINB.1==0) // как сделать так чтобы этот иф не выполнялся пока  предыдущий иф не выполнится (тоесть порт А ножка ноль включится а потом выключится а потом только в дело пойдет второе условие)
{
PORTA.1=!PINA.1;
delay_ms(300);
}
}
}

Share this post


Link to post
Share on other sites

Не как не могу вывести время на первую строчку, а дату на вторую. У меня все на одной первой строчки

В чем мая ошибка?

while (1)

{

lcd_clear(); //очистим экран

rtc_get_time(&hour,&min,&sek); //загружаем данные времени

sprintf(buffer,"%02i %02i:%02i",hour,min,sek); // перенесем значение переменных в буфер

lcd_gotoxy(0,0);

lcd_puts(buffer);// выведем на экран первую строчку

delay_ms(450); // немного подождем

rtc_get_date(&dow,&day,&month,&year); // для даты

sprintf(buffer,"%02i.%02i.%02i",day,month,year,dow); // перенесем значение переменных в буфер

lcd_gotoxy(0,1);

lcd_puts(buffer);// выведем на экран

delay_ms(450); // немного подождем

}

2.zip

Edited by Смит

Share this post


Link to post
Share on other sites

да фиг знает. смотрю в 3-ем кодвижине как-то подругому.

rtc_get_time действительно имеет 4-е аргумента?

тогда почему "sprintf(buffer,"%02i.%02i.%02i",day,month,year,dow);" форматирование только для трех?

может быть и функции для работы с дисплеем другие.

инициализация у вас для 8/2 дисплея а используется в протеусе 16/2.

Share this post


Link to post
Share on other sites
форматирование только для трех?
Ну очевидно же, что формат задан только для трех первых аргументов...
как сделать так чтобы этот иф не выполнялся пока предыдущий иф не выполнится

Возьми за правило в таких сложных условиях сначала нарисовать блок-схему алгоритма, потом его воплощать. С опытом, блок-схему будешь строить в уме а не на бумаге, но без нее - просто НИКАК.

Edited by Alexeyslav

Share this post


Link to post
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Similar Content

    • By Jesterary
      Здравствуйте. Подскажите, был ли у кого-то опыт отправки изображений с камеры (подключенной через UART или bluetooth-камеры) через GPRS (у меня модуль SIM800L, но в целом это не принципиально) на удаленный сервер? Средствами управляющего микроконтроллера, пусть даже ардуины какой-нибудь, но не малины. Возможно ли это вообще? Хотелось бы, конечно, использовать в проекте беспроводную камеру и общаться с ней, ибо камеры, подключаемые напрямую так себе качество дают. 
      Сразу скажу, что важна именно такая связь. Микроконтроллер + модуль связи + камера находятся в коробке и путешествуют по городу, в это время человек сидя дома на диване может смотреть фото с этой камеры. Смартфон для моих целей не подойдет, суть именно в микроконтроллере с модулями.
      Если у кого-то такое получалось - поделитесь, пожалуйста :)
      А то нахожусь в некоторой прострации и даже не знаю, в какую сторону думать.
    • By Максим123456789
      делаю диплом, в схеме у меня микроконтроллер PIC16F688 и мне нужно его заменить на ATmega. Не могу найти похожий
    • By Anton Bondarenko
      Всем привет
      Прошу не ругать, впервые подобный вопрос задаю.
      Хочу сделать прибор, который будет посылать сигнал, когда возле прибора будет проходить металлический предмет. 
      — угол отслеживания до 30° а лучше прямая линия, траектория
      — время реакции очень высокое до 100 мс
      — ширина проема в котором нужно сканировать от 10 до 20метров,
      — передача сигнала через вифи
      Может есть готовые решения, или отдельные компоненты.
      Подскажите пжл в каком направлении искать.
      Смотрел датчики движения, но главная проблема — время реакции.
      Спасибо
       
    • By Sofia Vin
      Предлагаем проектную работу в Москве:
      Микроконтроллер STM32F103.
        
      Есть встроенный код с использованием функций библиотеки FreeRTOS, код имеет описанный протокол для связи с внешним миром.
        
      Необходимо проводить доработку кода под задачи программиста верхнего уровня и его тестирование в составе оборудования. 
      Работа в лаборатории (м.Университет) и удаленно. 
      Оплата по договоренности.
      Если Вы обладаете опытом схемотехнического проектирования и программирования микроконтроллеров, и Вас заинтересовала данная возможность, ждем Ваши отклики по контактным данным:
      8 (925) 023-60-02   Алексей
      E-mail: nassa@marathon.ru
       
    • By Антон Плюшкин
      В общем есть небольшая тривиальная задача - сделать свитюльку. Контроллер управляет светодиодиками, цвета меняются, людишки довольны.
      Схема проста: Attiny44a -> 2n3904 x3 -> RGB-светодиод.
      Собрал, протестил, всё норм, но!
      Как только в коде я использую функцию задержки - _delay_ms (util/delay.h) - контроллер повисает!
      #define F_CPU 16000000UL #include <avr/io.h> #include <util/delay.h> int main(void) { // Input/Output Ports initialization // Port A initialization // Function: Bit7=Out Bit6=Out Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In DDRA=(1<<DDA7) | (1<<DDA6) | (0<<DDA5) | (0<<DDA4) | (0<<DDA3) | (0<<DDA2) | (0<<DDA1) | (0<<DDA0); // State: Bit7=0 Bit6=0 Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) | (0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0); // Port B initialization // Function: Bit3=In Bit2=Out Bit1=In Bit0=In DDRB=(0<<DDB3) | (1<<DDB2) | (0<<DDB1) | (0<<DDB0); // State: Bit3=T Bit2=0 Bit1=T Bit0=T PORTB=(0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0); // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: 16000,000 kHz // Mode: Phase correct PWM top=0xFF // OC0A output: Non-Inverted PWM // OC0B output: Non-Inverted PWM // Timer Period: 0,031875 ms // Output Pulse(s): // OC0A Period: 0,031875 ms Width: 0 us // OC0B Period: 0,031875 ms Width: 0 us TCCR0A=(1<<COM0A1) | (0<<COM0A0) | (1<<COM0B1) | (0<<COM0B0) | (0<<WGM01) | (1<<WGM00); TCCR0B=(0<<WGM02) | (0<<CS02) | (0<<CS01) | (1<<CS00); TCNT0=0x00; OCR0A=0x00; OCR0B=0x00; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: 16000,000 kHz // Mode: Ph. correct PWM top=0x00FF // OC1A output: Non-Inverted PWM // OC1B output: Disconnected // Noise Canceler: Off // Input Capture on Falling Edge // Timer Period: 0,031875 ms // Output Pulse(s): // OC1A Period: 0,031875 ms Width: 0 us // Timer1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=(1<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (1<<WGM10); TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (0<<CS11) | (1<<CS10); TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; // Timer/Counter 0 Interrupt(s) initialization TIMSK0=(0<<OCIE0B) | (0<<OCIE0A) | (0<<TOIE0); // Timer/Counter 1 Interrupt(s) initialization TIMSK1=(0<<ICIE1) | (0<<OCIE1B) | (0<<OCIE1A) | (0<<TOIE1); // External Interrupt(s) initialization // INT0: Off // Interrupt on any change on pins PCINT0-7: Off // Interrupt on any change on pins PCINT8-11: Off MCUCR=(0<<ISC01) | (0<<ISC00); GIMSK=(0<<INT0) | (0<<PCIE1) | (0<<PCIE0); // USI initialization // Mode: Disabled // Clock source: Register & Counter=no clk. // USI Counter Overflow Interrupt: Off USICR=(0<<USISIE) | (0<<USIOIE) | (0<<USIWM1) | (0<<USIWM0) | (0<<USICS1) | (0<<USICS0) | (0<<USICLK) | (0<<USITC); // Analog Comparator initialization // Analog Comparator: Off // The Analog Comparator's positive input is // connected to the AIN0 pin // The Analog Comparator's negative input is // connected to the AIN1 pin ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0); ADCSRB=(0<<ACME); // Digital input buffer on AIN0: On // Digital input buffer on AIN1: On DIDR0=(0<<ADC1D) | (0<<ADC2D); // ADC initialization // ADC disabled ADCSRA=(0<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (0<<ADPS1) | (0<<ADPS0); unsigned char VL_OCR0A = 0, VL_OCR0B = 0, VL_OCR1A = 0; OCR0A = 0; OCR0B = 0; OCR1A = 0; while(1) { _delay_ms( 100 ); VL_OCR0A = VL_OCR0A + 1; VL_OCR0B = VL_OCR0B + 1; VL_OCR1A = VL_OCR1A + 1; if( VL_OCR0A >= 250 ){ VL_OCR0A = 0; } if( VL_OCR0B >= 250 ){ VL_OCR0B = 0; } if( VL_OCR1A >= 250 ){ VL_OCR1A = 0; } OCR0A = VL_OCR0A; OCR0B = VL_OCR0B; OCR1A = VL_OCR1A; } } Т.е. если указать задержку в начале цикла, то светодиод не светится вообще.
      Если задержку убрать - светодиод немного подсвечивает всеми цветами.
      while(1) { _delay_ms( 100 ); // <--- ЗАДЕРЖКА --- VL_OCR0A = VL_OCR0A + 1; VL_OCR0B = VL_OCR0B + 1; VL_OCR1A = VL_OCR1A + 1; if( VL_OCR0A >= 250 ){ VL_OCR0A = 0; } if( VL_OCR0B >= 250 ){ VL_OCR0B = 0; } if( VL_OCR1A >= 250 ){ VL_OCR1A = 0; } OCR0A = VL_OCR0A; OCR0B = VL_OCR0B; OCR1A = VL_OCR1A; } Где я накосячил?
      З.Ы.: Замечаний по поводу оптимизации кода, излишних переменных и п.р. прошу не писать - изощряюсь как могу ибо не пойму почему не работает
×
×
  • Create New...