Jump to content

Recommended Posts

@Alexeyslav , спасибо за Ваш подробный развернутый ответ.

 

Получается, мне нужно взять массив [240х128] битов (т.к. дисплей монохромный), и всё "рисовать" в него. А затем периодически отрисовывать этот массив на дисплей.

240 * 128 = 30 720 бит = 3 840 Байт = 3,8 кБ только на массив. + какое-то место для вспомогательных переменных + много места для собственно полезных действий контроллера.

Дофига... Разве что искусственно занизить разрешение в два раза. Тогда 120*64=1кБ. Тогда на Ардуино с Атмега328 можно попробовать. Вот только кроме дисплея туда уже почти ничего "полезного" не влезет. (

Делать отдельный контроллер для дисплея? Тогда надо научиться как-то "общаться" этому контроллеру дисплея и основному контроллеру с полезной программой.

 

По поводу заполнения строки:

On 19.07.2019 at 23:38, Alexeyslav said:

...регистр строки в который ты побитно через SD1 и SD2 с общим клоком CP заносишь данные на одну строку...

...вот это не очень понятно. Можно поподробнее? Например, работаем мы с верхней половиной. Тогда у нас есть SD1 и CP. Какие сигналы я должен на них подавать, чтобы передать часть строки "00001111"? После каждого нолика или единички на SD1 надо подавать импульс на CP? Или я неправильно уловил суть?

И еще, меандр на входе ME(M) должен быть как-то синхронизирован с вводом строк или синхронизирован с чем-то еще?

Остальное, вроде бы, Вы очень подробно объяснили, всё понятно, спасибо.

Share this post


Link to post
Share on other sites
39 minutes ago, Lerik-Co said:

Тогда на Ардуино с Атмега328 можно попробовать. Вот только кроме дисплея туда уже почти ничего "полезного" не влезет

Есть же прекрасная флеш память тык. Стоит копейки. Скорости SPI для этого объема будет за глаза. Все картинки загоняете во флеш , напрмер с помощью CH341A. и вся память мк только для "полезного". С графическими дисплеями без флэш ни кудаB)

Edited by Demonrostov

Share this post


Link to post
Share on other sites
23.07.2019 в 10:30, Lerik-Co сказал:

После каждого нолика или единички на SD1 надо подавать импульс на CP?

Работает как любой регистр сдвига - устанавливаешь 1/0 на входе и подаёшь импульс на CP чтобы его протолкнуть в регистр.

23.07.2019 в 10:30, Lerik-Co сказал:

меандр на входе ME(M) должен быть как-то синхронизирован с вводом строк или синхронизирован с чем-то еще?

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


Учение - изучение правил. Опыт - изучение исключений.

Share this post


Link to post
Share on other sites

Новые контролллеры VIPerPLUS - практический вебинар 10 июня от ST

В программе вебинара - новые контроллеры VIPerPlus, расширяющие границы применения этих компонентов. Обзор их характеристик и преимуществ. Практика. Демонстрация испытаний из лаборатории ST. Пример моделирования в среде E-DesignSuite.

Зарегистрироваться

Здравствуйте! Нужна помощь начинающим. Пытаюсь изучить uart но ,что то не понимаю . 

Почему при первой отправки на мк любого  символа , один раз он возвращается а потом идут нули.  


#define F_CPU 8000000
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include "pin_macros.h"
unsigned char data;
unsigned long long vrema;
 unsigned char a=1;
#define Pin4 C,4,H
#define Pin5 C,5,H
#define Pin3 C,3,H
#define Pin2 C,2,L
#define Pin1 C,1,H
#define Pin0 C,0,H
unsigned char status, status1;
unsigned char *pstatus;
unsigned char i = 0;


//*** Инициализация UART ***//
void uart_init(void)
    {
        //скорость обмена данными
        UBRRH = 0;  //старший байт
        UBRRL = 51; //младший байт
        //8 бит данных, 1 стоп бит, без контроля четности
        UCSRC = ( 1 << URSEL ) | ( 1 << UCSZ1 ) | ( 1 << UCSZ0 );
        //разрешить прием и передачу данных
        UCSRB = ( 1 <<RXEN )|(1<<RXCIE) |( 1 << TXEN ) |  (1<<TXCIE);//|( 1 << UDRIE )
		//UCSRB |= (1<<RXCIE) | (1<<TXCIE); //Разрешаем прерывание при передаче 
		DRIVER(Pin4,OUT);
		DRIVER(Pin5,OUT);
		DRIVER(Pin3,IN);
		DRIVER(Pin2,IN);
		DRIVER(Pin1,IN);
		DRIVER(Pin0,IN);
		DRIVER(Pin3,PULLUP);
		DRIVER(Pin2,PULLUP);
		DRIVER(Pin1,PULLUP);
		DRIVER(Pin0,PULLUP);

} 
ISR(USART_RXC_vect) 

{ 

	data=UDR;
	 
} 
/*
ISR(USART_TXC_vect){

//UDR = data;

}

		*/
ISR( USART_UDRE_vect )		
		{


				}
		
		
    

//*** Прием данных по UART ***///*
/*unsigned char uart_receive(void)
    {
        while ( ! ( UCSRA & ( 1 << RXC )));
        return UDR;
		a=2;
    }*/

//*** Передача данных по UART ***//
void uart_transmit( uint8_t data)
    {
        while ( ! ( UCSRA & ( 1 << UDRE )));
		
		UDR = data;
	 	a=0; 
    }
//———————————————

void timer_ini(void)

{
		TCCR1B |= (1<<WGM12); // устанавливаем режим СТС (сброс по совпадению) 
		TIMSK |= (1<<OCIE1A); //устанавливаем бит разрешения прерывания 1ого счетчика по совпадению с OCR1A(H и L) 
		OCR1A = 7812;//OCR1AL = 0b00000000;//OCR1AH = 0b10000000; //записываем в регистр число для сравнения 
		TCCR1B = (1<<CS12)|(1<<CS10)|(1<<WGM12);//установим делитель.         // Start Timer1 with prescaler 1024
}

ISR (TIMER1_COMPA_vect) 

{  

}
//*** Главная программа ***//
int main(void)
{    pstatus=&status;
    DDRD = 0x00;    //установим все порты DDRD как входы
    PORTD = 0x00;   //установим логический 0 на все порты DDRD
    
  sei();// разрешаем прерывания
    uart_init();
    timer_ini();
    while(1)
        {
			vrema++;
			if(vrema>=10000){
				a=2;
				//data++;
				vrema=0;}
				
		         
            if(data==0b00110001)
            {
              ON(Pin5); // PORTC |= 1 << 5;    //устанавливаем логическую 1 на порт PC5 регистра DDRC
			  data='8';
            }
            if(data==0b00110010)
            {
               OFF(Pin5); //PORTC &= ~(1 << 5); //устанавливаем логический 0 на порту PC5 регистра DDRC
            }

            if(data==0b00110011)
            {
               ON(Pin4); //PORTC |= 1 << 4;    //устанавливаем логическую 1 на порт PC4 регистра DDRC
            }
            if(data==0b00110100)
            {
                OFF(Pin4);//PORTC &= ~(1 << 4); //устанавливаем логический 0 на порту PC4 регистра DDRC
            }
			
			if(a==2){
		
            uart_transmit(data);
			} 
				
				
			 }										   
}

 

atmega8 уарт.rar

Share this post


Link to post
Share on other sites

Подскажите плиз где я не понимаю )

#define LCD_DATA_PORT GPIOA

#define LCD_DATA_PIN_0 GPIO_Pin_9
#define LCD_DATA_PIN_1 GPIO_Pin_10
#define LCD_DATA_PIN_2 GPIO_Pin_11
#define LCD_DATA_PIN_3 GPIO_Pin_12

#define LCD_DATA_HI(b) (LCD_DATA_PORT->BSRR |= (b & 0b1 ? LCD_DATA_PIN_0 : 0) | (b & 0b10 ? LCD_DATA_PIN_1 : 0) | (b & 0b100 ? LCD_DATA_PIN_2 : 0) | (b & 0b1000 ? LCD_DATA_PIN_3 : 0))
void LCDClear()
{
	LCDSendByte(0x01, 0);
	delay_ms(2);
    LCDSendByte(0x02, 0);
    delay_ms(2);
}

void LCDStrob()
{
    LCD_EN_HI();
    delay_us(40);
    LCD_EN_LOW();
}

void LCDSendByte(char ByteToSend, int IsData)
{
    LCD_DATA_CLEAR();
    LCD_DATA_HI((ByteToSend & 0xF0) >> 4);

    if (IsData == 1)
        LCD_RS_HI();
    else
        LCD_RS_LOW();
    LCDStrob();

    delay_us(40);

    LCD_DATA_CLEAR();
    LCD_DATA_HI(((ByteToSend & 0x0F)));

    if (IsData == 1)
        LCD_RS_HI();
    else
        LCD_RS_LOW();

    LCDStrob();

    delay_us(40);

    LCD_DATA_CLEAR();
}

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

Скрытый текст


file-1569825152767-1.jpg

Pic2.jpg

Pic1.jpg

gDmNOiDL3jg.jpg

 

 

LCD_DATA_PORT->BSRR |= (b & 0b1 ? LCD_DATA_PIN_0 : 0) | (b & 0b10 ? LCD_DATA_PIN_1 : 0) | (b & 0b100 ? LCD_DATA_PIN_2 : 0) | (b & 0b1000 ? LCD_DATA_PIN_3 : 0)

так делал потому что ноги не подряд шли на другой платке)

Вынес в заголовочный файл для более удобного переноса.

Этот код прекрасно работал. Но вот сейчас не работает) То есть при отправке 0x01 должно выполнится условие b & 0b1 и в регистр записаться значение из GPIO_Pin_9

Но пишет GPIO_Pin_12 то есть выполняется b & 0b1000 ? LCD_DATA_PIN_3

Edited by DrobyshevAlex

Share this post


Link to post
Share on other sites
                     

Технология SOI против паразитных эффектов в драйверах затвора

Микросхемы драйверов затвора силовых транзисторов, изготавливаемые по технологии монолитного кремния, подвержены негативному влиянию отрицательных напряжений, возникающих на опорном выводе для верхнего плеча. Технология «Кремний-на-изоляторе» (Silicon-on-insulator, SOI) является надежным решением этой проблемы, о чем свидетельствуют результаты испытаний трех микросхем драйверов затвора полумостовой схемы, в том числе – SOI-драйвера производства Infineon.

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

Простите) вопрос снят)) я не верно график смотрел)) конец графика это и есть начало)

 

Просто вывод сделал в цикле без пауз между отправкой, и выходит что начало новой команды это конец старой.

Share this post


Link to post
Share on other sites

Товарищи, такой вопрос :

насколько я понял , приставка 0х   означает что далее следует 16-ричное число. ( например 0х1F , где 1F и есть данное число.), но например в скетче модуля NRF24 есть строка  : "radio.openWritingPipe(0x0123456789LL);     // Задаем идентификатором 0x0123456789LL для передачи данных"

вопрос в том почему там есть буква "L", если максимально допустимая F, и на каком основании ( из каких соображений) вообще задается этот идентификатор ?

 

ps- скетч передачи данных для ARDUINO 

Edited by zoom-0

好奇心不是缺点,而是一个知识的来源。

Share this post


Link to post
Share on other sites

То есть если число в десятичной ( например больше 32000) мы приписываем L
а вторая L зачем ? long long ( long2 ).

И как образуется само число ? в разных скетчах оно разное.
например const uint64_t pipes[6] = { 0xF0F0F0F0D2LL, 0xF0F0F0F0E1LL, 0xF0F0F0F0E2LL, 0xF0F0F0F0E3LL, 0xF0F0F0F0E4LL, 0xF0F0F0F0E5LL };

на основе чего оно образуется ? Посмотрел внутри библиотеку, но  не увидел там например "min  max".

Где-нибудь есть полное описание библиотеки rf24  /  nrf24l01  ?  все что есть в интернете, это просто примеры , а описания нифига нет :(


好奇心不是缺点,而是一个知识的来源。

Share this post


Link to post
Share on other sites
19 минут назад, zoom-0 сказал:

а вторая L зачем ? long long ( long2 ).

так определяется число этого:

uint64_t

типа. Это НЕ библиотека это основы языка С. long -это 4 байта на число,

long long -это 8 байт на число (это не в квадрате, это умножить на 2 :)


Можно сделать все! Но чем больше можно, тем больше нельзя!

Share this post


Link to post
Share on other sites
1 час назад, zoom-0 сказал:

все что есть в интернете, это просто примеры , а описания нифига нет :(

учебник по языку Си религия запрещает читать? гугл - > Полный справочник по C -  Глава 02 -> Базовые типы данных , Константы

Share this post


Link to post
Share on other sites

Спасибо, пошел в гугловский читальный зал :)

пс/ а как в "репу" плюсануть ? 

только не отправляйте в гугл и в правила форума :)


好奇心不是缺点,而是一个知识的来源。

Share this post


Link to post
Share on other sites

Подскажите, на такой вопрос. Есть некая линия, пусть будет 1-4, в ней выводы с делителей назовем 2 и 3. Если на мк задействовать 4 контакта под ацп не привязанный к земле. Показания нужно снимать с 1-2 и 3-4. Какое ограничение по напряжению между 1-4 есть в мк, если они как бы не взаимодействуют между собой,  и как это называется в документации, и что если 4 является землёй?

Share this post


Link to post
Share on other sites
3 часа назад, Анатолий Андронович сказал:

ацп ... Какое ограничение по напряжению

Диапазон измерения у АЦП микроконтроллера - от верхнего опорного напряжения до нижнего опорного напряжения. Опорными напряжениями могут быть питание и земля, могут быть и внешние. В любом случае, на вход АЦП можно подавать напряжение только в пределах от нуля до напряжения питания. Внешние опорные напряжения тоже могут быть только в этом диапазоне.  В даташите на каждый конкретный контроллер про использование его АЦП всё подробно написано.

Share this post


Link to post
Share on other sites

Не совсем понимаю. Получается на любой ноге мк напряжение не должно превышать напряжение питания мк относительно земли мк?
 А если используется дифференциальный ацп и линия с которой нужно снимать данные имеет отдельную землю? 
Для наглядности картинка, показания нужны между 1и2, и 3и4. 
Или есть ограничение по напряжению между любыми входами мк, даже если они, как бы не взаимодействуют между собой?
 

IMG_20191124_121247.jpg

Share this post


Link to post
Share on other sites
16 минут назад, Анатолий Андронович сказал:

 А если используется дифференциальный ацп и линия с которой нужно снимать данные имеет отдельную землю? 

да пофиг, напряжение на входах АЦП не может превышать напряжение питания МК относительно аналоговой земли МК.

Share this post


Link to post
Share on other sites

С учетом нарисованной схемы - разница напряжений на ногах МК составит 160 вольт. Умрет.
Если нужно менять именно разницу напряжения на верхнем и нижнем резисторе - проще поставить делители и мерять данные уже после них.

Share this post


Link to post
Share on other sites
11 часов назад, IMXO сказал:

относительно аналоговой земли МК

Теперь более менее дошло.
Начал читать по мк, и получил непонятку.
Сложилось впечатление, что если входы мк переключаются мультиплексором, и будучи дифференциальными, не связываются с землей мк. А линия с которой нужны показания тоже не завязана с землёй мк.  То при подключении этих входов мультиплексором по отдельности в разные такты делает их как бы не связанных между собой. И имея опорное напряжение тоже отдельно от земли мк, разница потенциалов между входами мк, которые как бы одновременно не задействованы могла быть достаточно большой.
Вопрос был гипотетический, для примера.
Читаю дальше. Благодарю за пояснение.
 

Share this post


Link to post
Share on other sites

внутренние схемы МК имеют связь с "землей".

как только ты подключил измеряемую цепь ко входам, сразу же эта измеряемая цепь становится связанной с "землей" МК.

поэтому на любом входе напряжение не может быть больше напряжения питания.


Мудрость приходит вместе с импотенцией...

Share this post


Link to post
Share on other sites

Пару дней назад решил начать изучать ардуино, ибо всю свою сознательную жизнь я собирал устройства на мелкой логике. Но тут вот приспичило. А именно мне нужно как то осуществить такой проект. Есть для начала 2 сдвиговых регистра 74НС595 и есть ардуино уно р3

Собрал схему на рисунке

Shift-Register-74HC595_bb.png.5cab5720e2d07f1e01deb26a9b4c87f3.png

Вот скетч к ней

int dataPin  = 9;   //Пин подключен к DS входу 74HC595
int latchPin = 10;  //Пин подключен к ST_CP входу 74HC595
int clockPin = 11;  //Пин подключен к SH_CP входу 74HC595

void setup() {
  //устанавливаем режим OUTPUT
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);

  digitalWrite(latchPin, LOW);                        // устанавливаем синхронизацию "защелки" на LOW
  shiftOut(dataPin, clockPin, LSBFIRST, B01001100);   // передаем последовательно на dataPin
  digitalWrite(latchPin, HIGH);                       //"защелкиваем" регистр, тем самым устанавливая значения на выходах
}
 
void loop() {

}

На светодиодах высветилась комбинация 01001100. Ура, моя первая схема на микроконтроллере работает.
Далее дополнил схему ещё одним регистром сдвига, и добавил ещё 8 светодиодов.

Shift-Register-74HC595_02_bb.jpg.cda5d505e4a509e7b58c36a94fb9cc3b.jpg

 

И его скетч

int dataPin  = 9;   //Пин подключен к DS входу 74HC595
int latchPin = 10;  //Пин подключен к ST_CP входу 74HC595
int clockPin = 11;  //Пин подключен к SH_CP входу 74HC595

void setup() {
  //устанавливаем режим OUTPUT
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);


  digitalWrite(latchPin, LOW);                        // устанавливаем синхронизацию "защелки" на LOW
  // начинаем "продавливать" данные по цепочке регистров, начиная с последнего
  shiftOut(dataPin, clockPin, LSBFIRST, B01001100);   // передаем последовательно на dataPin - в первом регистре значение B01001100
  shiftOut(dataPin, clockPin, LSBFIRST, B10000111);   // "продавливаем" данные в следующий регистр - в первом регистре B10000111, во втором - B01001100
  // и т.д. по количеству регистров
  digitalWrite(latchPin, HIGH);                       //"защелкиваем" регистр, тем самым устанавливая значения на выходах
}
 
void loop() {
}


Теперь на 16 светодиодах 01001100 10000111
Но мне надо чтоб был массив из десятка или двух вот таких двух байтовых комбинаций, и чтоб можно было каждую комбинацию выводить на светодиоды нажатием кнопки. То есть нажал кнопку, высветилась первая двухбайтовая комбинация на этих 16 светодиодах, нажал ещё раз, высветилась следующая , и так далее по порядку. Скетч подключения кнопки тоже нашёл интернете

// пины подключенных устройств
int switchPin = 8;
int ledPin = 11;

// переменные для хранения состояния кнопки и светодиода
boolean lastButton = LOW;
boolean currentButton = LOW;
boolean ledOn = false;

void setup() {
   pinMode(switchPin, INPUT);
   pinMode(ledPin, OUTPUT);
}

// функция для подавления дребезга
boolean debounse(boolean last) {
   boolean current = digitalRead(switchPin);
   if(last != current) {
      delay(5);
      current = digitalRead(switchPin);
   }
   return current;
}

void loop() {
   currentButton = debounse(lastButton);
   if(lastButton == LOW && currentButton == HIGH) {
      ledOn = !ledOn;
   }
   lastButton = currentButton;
   digitalWrite(ledPin, ledOn);
}

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Привет знатоки) Есть китайский показометр VC-288 на контроллере NUVOTON N76E003AT20 и он жутко тормознутый, тоесть показания меняються очень медленно. Можно ли его подключить к компу и подправить прошу? Походу и программатор надо, которого нету. Или выкинуть его? :D

Share this post


Link to post
Share on other sites
56 минут назад, Дмитрий Вас сказал:

измеряю напряжение через ацп мк. почему показания прыгают?

Потому что даже идеальный АЦП шумит в младшем бите, а с учётом не идеальности как источника измеряемого сигнала, так и АЦП, наволок и помех, и подавно...

Перед выводом на индикатор надо обязательно фильтровать значения.


Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

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 MirVsem
      Добрый день.
      Есть интересные модули ибп для слаботочки до 1А.
      m.aliexpress.ru/item/4000109380893.html
       По цене идеально подходит для зоопарка роутеров, IoT устройств... Переключение на резерв (туда-обратно) без просадки. Зарядка литиевой банки как положено, всякие защиты от перегрузки и прочее. Казалось бы все замечательно. 
      НО как всегда не без ложки дёгтя.
       Защита от переразрядки работает неадекватно. Хотя возможно это не сама защита, а повышающий модуль. На пороге ~3в у него срабатывает циклический перезапуск и так пока банка не просядет ниже 3в. Точно померять нечем.
      Из наблюдений. Проверил напряжение переключается с 12в на 9в и щелчки. Естественно нагрузка в это время дико насилуется (роутер свистит минут 5 пока полностю не отключится)
      Вопрос к гуру. Возможно ли что-то доработать в даном модуле чтобы исправить этот досадный баг?
    • By Юлия Михайлова
      Требуються люди умеющие работать с микроконтролерами esp 32 и stm32 , так же будет плюсом опыт работы с raspberry , требования опыт работы не мение 1,5 года , возраст не старше 35 лет , готовы взять на удаленную работу просьба отправлять резюме , и звонить по номеру +380 (68) 227 82 52
    • Guest Роман
      By Guest Роман
      Добрый день, форумчане. Такая задача. Хочу создать несколько устройств на светодиодах. Задача каждого в том, чтобы от движения (датчик вибрации, наклона) светодиод начинал моргать, переливаться и т.д. Подпитывается всё от батарейки, конечно же как можно меньших размеров (таблетка).
      Собственно я уже реализовал такое пробное устройство на ATtiny13, вибродатчике 18015 и батарейке CR1220. Всё работает, но хотелось бы это дело и удешевить и уменьшить в размерах, если это конечно же возможно. Особо в параметрах МК я не разбираюсь, но могу сказать что мне от неё точно нужно:
      1) Маленький размер
      2) Как минимум 1 канал ШИМ (а лучше 3, для переливания трёх светодиодов RGB)
      3) Память на 1Кб (программу для одного такого устройства приложу ниже, может её можно и сократить, но не факт что такую же, но на три диода получится ужать)
      4) Низкое потребление или возможность подключения режимов с низким потреблением.
      5) Работа от 3В. (от таблетки)
      6) Возможность программирования через Arduino UNO (но другие варианты тоже рассматриваю, просто Arduino уже есть)

      Повторюсь пока что нашел и использовал только ATtiny13, который меня вполне устроил, но он достаточно дорогой и в корпусе SOIC его найти достаточно проблематично. К тому же как мне показалось, он слишком хорош для такого проекта. Повторюсь, я чайник, и может есть какие-то более дешевые аналоги.

      Очень надеюсь на Вашу помощь. Заранее большое Вам спасибо!
      Прикладываю обещанный мною код:
      int vib = 4; int led = 0; long loopTime = 5000; void setup() { pinMode(led, OUTPUT); pinMode(vib, INPUT); } void loop() { if (digitalRead(vib)){ unsigned long currentMillis = millis(); while(millis()-currentMillis<=loopTime) { for(int fadeValue = 0; fadeValue <=255; fadeValue+=5){ analogWrite(led,fadeValue); delay(2); } for(int fadeValue = 255; fadeValue >=0; fadeValue-=5){ analogWrite(led,fadeValue); delay(2); } for(int fadeValue = 0; fadeValue <=255; fadeValue+=5){ analogWrite(led,fadeValue); delay(2); } for(int fadeValue = 255; fadeValue >=0; fadeValue-=5){ analogWrite(led,fadeValue); delay(2); } digitalWrite(led, LOW); delay(600); } } }  
    • By Sambler
      У меня была похожая тема,  я решил проблему установив в include util/delay.h
      Но возникла еще одна ошибка, не могу понять, что оно хочет


      p.s. Я обещал, что предыдущая - последняя тема, но я ошибся, не думал, что тут 2 разные программы будут. В этот раз 100 процентов последняя тема и пойду сдавать работы Ы)

       

    • By LemonTV
      Есть картинка из сайта с фьюзами, есть программа avrdude_prog3.3 Как выставить правильно фьюзы чтобы не испортить мк? Незнаю как это сделать есть прямые и инверсные фьюзы, ГДЕ СТАВИТЬ ГАЛОЧКИ И КРУЖОЧЕК НА ПРЯМЫХ ИЛИ ИНВЕРСНЫХ?


×
×
  • Create New...