Перейти к содержанию

den2313

Members
  • Постов

    199
  • Зарегистрирован

  • Посещение

  • Победитель дней

    1

Сообщения, опубликованные den2313

  1. Подскажите: плата stm32f103c8, дисплей ili9481, 16 бит. Кубом сгенерировал проект (72 Мгц), подключил к дисплею,и скорость заливки целого экрана около 12 секунд, что-то многовато. Тактовая частота 72 Мгц, в описании команд только "подать 0" или "1" на выход (wr, dc,...). В описании передачи команд (или данных) на выход только обнуление битов и сравнение с 0 ( тогда или 0 или 1 на выход). Паузы перед командами (wr,dc) убрал, немного лучше, но не то. Дма хочу использовать для других целей. Заранее спасибо

  2. Здравствуйте. Подскажите статьи по файловой системе fat32. Те ,что находил в инете как то размыто объясняют вычисление адреса таблицы ( вторую не буду использовать). С вычислением из корневого каталога разобрался ( вычисляю адрес ,размер файла, имя, вообщем всё). Подключаю avr к ММС.

    PS. В " живую" подключаю карту, указываю сектор корневого каталога и работает

  3. Я тоже так думал- мотор " инертный", ШИМ увеличивается из-за сигнала датчика, а пока мотор наберет обороты ШИМ уже слишком велика и начинается обратный отсчет, в таком случае попробую время записи в ШИМ немного увеличить

    Или перевести скорость изменения датчика в ЦАП и подать на вход ШИМ, но получится аналоговая схема

  4. 1 оборот -24 сигнала с датчика, 1/24 секунды, 10 оборотов -1/240 секунды, не думаю что дискретность большая, скорее контроллер не успевает рассчитать значение. Схемы что я видел в интернете обычно на операционниках, и обратная связь- конденсатор с сопротивлением (коррекция) ,причем в одной из них ( промышленная) время реакции на увеличение оборотов одно а на снижение другое (видимо чтоб не "раскачивался"). Теории мне не хватает, придется изучать :( 

  5. Нагрузка меняется, ПИД регуляция просто не успеет отследить ( или делать на stm- но я их не знаю). Поэтому хотелось жестко привязать обороты к времени импульса.

    Буду читать

  6. Прошу помощь (теория) по стабилизации оборотов коллекторного двигателя с помощью оптопары. Есть двигатель 100 в,400 ватт ,на валу диск с оптопарой, 24 отверстия, хочу регулировать обороты ШИМом ,но чтоб обороты более менее были стабильны. Подключил двигатель через мост ,транзистор к avr, регулировка "просто" ШИМ- регулируется но момент на низких оборотах зависит от нагрузки, на средних нормально. Задействовал диск- ждем 0, как только 1 то делаю подсчет таймером ,0 стоп и после высчитываю число в таймере, в зависимости от эталона делаю или меньше  OCR или больше. Если двигатель не раскрутился (таймер переполнился) то добавляю Х число -"небольшой рывок" . В теории вроде нормально, но в реале- двигатель стартует и потом как бы "качается" плавно растут и падают обороты. Кто может подсказать что делаю неправильно? Подозрение- что мало время обработки. Или подсчитывать каждый импульс. Мк работает на 8 МГц.

    PS. Хочу стабилизировать от 10 оборотов. Пробовал- если разница эталона и числа таймера большая- добавлял (убавлял) OCR немного больше, но только хуже

  7.  

    Цитата

    В дальнейшем в системе будет еще несколько устройств: 3 пульта, блок управления приточной вентиляцией, блок управления вытяжкой, управление кондиционером, аквастоп. В дальнейшем они будут управляться с пультов, а так же связаны с управлением кондиционера.

    Тогда можно сделать: главный мк- подчиненный (несколько),как автор писал выше,связь по uart (можно по rs232 ,можно и rs485 ). Плюсы- 4 провода подключения, легко настроить, возможно подключение к ПК (даже через labview), готовые модули ардуино (самые дешевые, без usb на м328, а прошивку через isp). Минусы- на каждые жалюзи мк и переходник ( хотя можно и сгруппировать некоторые жалюзи).

  8. Сразу большое спасибо автору за статью,откуда взята теория http://avrdevices.ru...irkuly-k-kompu/ . Задача- подключить электронный микрометр к микроконтроллеру для обработки параметров. Был взят китайский шнурок (опция подключения к ПК) .На выходе имеем обычный COM порт, измерения в формате "знак"-0000,000 0x0D (хотя сам микрометр меряет только до ~13 мм). Изготовил макетку ,сделал пересчет и вывод на лсд значения ,выход на тиристоры и небольшое меню для ввода параметров. Схема работала но выяснил- параметры по COM порту приходят с большим опаздыванием, плюс еще и не стабильно,может прийти раз в секунду а может и в 2-3, хотя в среднем 1 раз в секунду (проверял и ПК через переходник). Устройство на который хотел поставить микрометр имеет кривошатунный механизм и вариант один- уменьшать скорость (ну или останавливать и ждать измерения-звонковый режим мотора).

    Итог: подключил микрометр к мк ATMEGA162 напрямую, без конвертеров, как у автора только сигнал не инверсный, подтяжка к питанию -резисторы 1МОм (4,5-5 выборок за 1 сек) . Сначала был вывод на лсд,но потом переделал на семисегментные, нашел плату с кнопками и индикаторами, лучше читаемость. По поводу прошивки- есть .asm, есть .c codevision. Codevision- использую прерывание Т2 для изменения разряда, Т1 для подсчета паузы перед первым битом. Т3 был задействован если нет долго сигнала-авария но потом отключил. Также отключил прерывание и разряды при приеме (думаю чтоб не потерять 0 или1 в бите, пробовал без отключения -работает но все же,для лсд еще проще). На .asm прерывание не отключал . Если поднять тактовую частоту (до 16) думаю не нужно отключать разряды, но не имею кварца проверить.Есть заметное мерцание индикаторов при измерении -это большой минус. Знак за ненадобностью не читаю, (в коде написано как прочитать). Простое меню, подсчет изделий вперед-назад с выключением, можно легко изменить. Программы писать красиво не умею но машина работает и сбоев не наблюдаю. Выложил только .с ибо в .asm долго разбираться. ( Может кто-то и допилит под свои нужды). Тот контроллер что дип корпусе - на .asm ,мерцания при измерении нет,прерывания не отключал . :)

    izmeritel.zip

  9. На cube 21 у меня так,когда батарея в ноль,а заряжаю без подключения к зарядному (режим заряда с ПК). Планшет не видит зарядки ,не подключен 5 провод либо к плюс у либо к минусу.В одном случае ток зарядки мал (когда от ПК),в другом велик (только зарядка,блок питания 2А грелся достаточно.).А вот к какому надо подключить-не знаю,ищите док.Планшет пытается стартануть а тока мало,и заряжается малым током. Точно как у меня,когда сядет полнностью

  10. Интересно. Был случай _стиралка (промышленная ) такой точно дисплей разбили, купили ( с завода 3 ! штуки) ,ни один не работал .Что я сделал- переставил ЖК с нового на старую плату (где разбит дисплей) и все заработало. На родной плате мс toshiba а на тех что прислали с завода (немцы прислали) стояли китайские (не помню но что то вроде ch..). Подозреваю что дело в прошивке .Не подходит к китайским. PS я и кварцы разные ставил на китайца (думал проблема с таймингами,увеличу частоту,родной на 6Мгц) -не помагало :yes:

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

  11. /*******************************************************
    Chip type			   : ATmega8535
    Program type		    : Application
    AVR Core Clock frequency: 4,000000 MHz
    Memory model		    : Small
    External RAM size	   : 0
    Data Stack size		 : 128
    *******************************************************/
    #include <mega8535.h>
    #include <delay.h>
    bit	  data_bit1=0;
    bit	  data_bit2=0;
    bit	  data_bit3=0;
    bit	  data_bit4=0;
    //-------------------------------------------
    					  void scan_data(){data_bit4=data_bit3;
    									   data_bit3=data_bit2;
    									   data_bit2=data_bit1;
    									   data_bit1=PINA.1;}
    					  void out_port() {PORTB.4=data_bit1;
    									   PORTB.5=data_bit2;
    									   PORTB.6=data_bit3;
    									   PORTB.7=data_bit4;}
    					 void out_port_2(){PORTB.4=PINA.4;
    									   PORTB.5=PINA.5;
    									   PORTB.6=PINA.6;
    									   PORTB.7=PINA.7;}
    //-----------------------------------------
    void main(void)
    {
    DDRA=0;
    PORTA=0;
    DDRB=0xF0;
    PORTB=0xF;
    DDRC=0;
    PORTC=0xFF;
    DDRD=0;
    PORTD=0xFF;
    //-----------------------------------------------------------------------------------------------
    ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0);
    //------------------------------------
    while (1)
      {    delay_ms(50); // дребезг
    	   if (PINA.2==0){
    					  out_port();
    					  delay_ms(50); //дребезг
    					  while (PINA.0==0);
    					  scan_data();
    					  delay_ms(50); // дребезг
    					  while (PINA.0==1);}
    	   //---------------------------
    	   else {		 out_port_2();
    					  delay_ms(50);   // дребезг
    					  while (PINA.0==0);
    					  delay_ms(50);   // дребезг
    					  while (PINA.0==1);}
      }
    }
    

    Новый точечный рисунок.zip

  12. Там вверху в codevision #9

    резисторы на корпус есть?

    ps/ Не разрешает добавлять картинки...(только архив).Точно-моя ошибка ,не видно файла,исправляю

    /*******************************************************
    Chip type			 : ATmega8535
    Program type		 : Application
    AVR Core Clock frequency: 4,000000 MHz
    Memory model		 : Small
    External RAM size	 : 0
    Data Stack size		 : 128
    *******************************************************/
    #include <mega8535.h>
    #include <delay.h>
    // Declare your global variables here
    unsigned char temp=0;
    			 void key_0()
    					 {
    						 // 0 на входе,защелкнулись
    						 while (PINA.0==0){delay_ms(50);};// сидим пока 0
    						 //стала 1 на выход
    						 PORTB.7=temp;
    						 while (PINA.0==1){delay_ms(50);};//сидим пока 1
    						 // стало 0,защелка
    						 temp=PINA.5;	 //второе число
    						 while (PINA.0==0){delay_ms(50);};//сидим пока 0
    						 // стала 1
    					 PORTB.7=temp;
    					 while (PINA.0==1){delay_ms(50);};//сидим пока 1
    						 // стало 0,защелка
    						 temp=PINA.6;	 //третье число
    						 while (PINA.0==0){delay_ms(50);};// сидим пока 0
    						 //стала 1 на выход
    						 PORTB.7=temp;
    						 while (PINA.0==1){delay_ms(50);};//сидим пока 1
    						 // стало 0,защелка
    						 temp=PINA.7;	 //четвертое число
    						 while (PINA.0==0){delay_ms(50);};// сидим пока 0
    						 //стала 1 на выход
    						 PORTB.7=temp;
    						 while (PINA.0==1){delay_ms(50);};//сидим пока 1
    						 // стало 0,защелка
    						 temp=PINA.4;
    					 }
    void main(void)
    {
    // Declare your local variables here
    DDRA=(0<<DDA7) | (0<<DDA6) | (0<<DDA5) | (0<<DDA4) | (0<<DDA3) | (0<<DDA2) | (0<<DDA1) | (0<<DDA0);
    PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) | (0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0);
    DDRB=(1<<DDB7) | (1<<DDB6) | (1<<DDB5) | (1<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0);
    PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (1<<PORTB3) | (1<<PORTB2) | (1<<PORTB1) | (1<<PORTB0);
    DDRC=(0<<DDC7) | (0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0);
    PORTC=(1<<PORTC7) | (1<<PORTC6) | (1<<PORTC5) | (1<<PORTC4) | (1<<PORTC3) | (1<<PORTC2) | (1<<PORTC1) | (1<<PORTC0);
    DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0);
    PORTD=(1<<PORTD7) | (1<<PORTD6) | (1<<PORTD5) | (1<<PORTD4) | (1<<PORTD3) | (1<<PORTD2) | (1<<PORTD1) | (1<<PORTD0);
    //------------------------
    TCCR0=(0<<WGM00) | (0<<COM01) | (0<<COM00) | (0<<WGM01) | (0<<CS02) | (0<<CS01) | (0<<CS00);
    TCNT0=0x00;
    OCR0=0x00;
    TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10);
    TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (0<<CS11) | (0<<CS10);
    TCNT1H=0x00;
    TCNT1L=0x00;
    ICR1H=0x00;
    ICR1L=0x00;
    OCR1AH=0x00;
    OCR1AL=0x00;
    OCR1BH=0x00;
    OCR1BL=0x00;
    ASSR=0<<AS2;
    TCCR2=(0<<WGM20) | (0<<COM21) | (0<<COM20) | (0<<WGM21) | (0<<CS22) | (0<<CS21) | (0<<CS20);
    TCNT2=0x00;
    OCR2=0x00;
    TIMSK=(0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (0<<TOIE1) | (0<<OCIE0) | (0<<TOIE0);
    MCUCR=(0<<ISC11) | (0<<ISC10) | (0<<ISC01) | (0<<ISC00);
    MCUCSR=(0<<ISC2);
    UCSRB=(0<<RXCIE) | (0<<TXCIE) | (0<<UDRIE) | (0<<RXEN) | (0<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8);
    ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0);
    SFIOR=(0<<ACME);
    ADCSRA=(0<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (0<<ADPS1) | (0<<ADPS0);
    SPCR=(0<<SPIE) | (0<<SPE) | (0<<DORD) | (0<<MSTR) | (0<<CPOL) | (0<<CPHA) | (0<<SPR1) | (0<<SPR0);
    TWCR=(0<<TWEA) | (0<<TWSTA) | (0<<TWSTO) | (0<<TWEN) | (0<<TWIE);
    //------------------------------------
    	 temp=PINA.4;
    while (1)
     {	 key_0();
     // Place your code here
     }
    }
    

    Новый точечный рисунок.zip

    ir2.zip

  13. как свайп может перехлестываться с убунту? Если есть бэды то (я бы так сделал) -взять загрузочную флеш с линукс ,загрузиться ,а на вторую записать данные а потом переустановить винду а после линукс ( пользуюсь linux12 kde)

  14. тот что я скинул (.hex) попробуйте в своей(!) модели протеус (укажите ему файл),частота 4 мгц.В реале -после светодиода ставьте резистор ( если для теста то 1к а по правилам высчитывать по формуле

    хотя частота будет влиять на дребезг кнопок (чем меньше-тем больше пауза)

×
×
  • Создать...