Jump to content

    

Димон Безпарольный

Участник
  • Content Count

    822
  • Joined

  • Last visited

Community Reputation

0 Обычный

About Димон Безпарольный

  • Rank
    Знающий

Recent Profile Visitors

3377 profile views
  1. 2018 Вопросы начинающих

    Не нашел пункта Place » Additional Views » Component View или команды Component View! Altium 17.1. Он вообще есть?
  2. 2018 Вопросы начинающих

    Спасибо. Пока курю здесь: https://www.altium.com/documentation/ru/18.1/display/ADES/((Draftsman))_AD
  3. 2018 Вопросы начинающих

    Упс. Я думал это: https://draftsman.pro/ru/ Где почитать как работать в рамках Альтиума? Как через OutJob вывести в PDF трехмерку я знаю. А как с размерами?
  4. 2018 Вопросы начинающих

    Draftsman это понятно. В рамках Альтиума это делается?
  5. 2018 Вопросы начинающих

    Да. Как наносятся размеры? Можно ли вывести в PDF то, что на картинке?
  6. 2018 Вопросы начинающих

    Спасибо. Теперь понятно. Заказчик хотел именно переноса. Я уточнял. А сгенерить трехмерку с размерами как на картинке выше Альтиум умеет? Подозреваю что тоже нет.
  7. 2018 Вопросы начинающих

    Как в Альтиуме делается такое: Т.е. Заказчик называет это сборочным чертежом. На сгенериррованном PDF трехмерные виды платы с размерами. Кроме того - отдельные виды TOP и BOTTOM с номерами элементов. Номера элементов я выполнял всегда на оверлейных слоях и она была видна на 3D по умолчанию. Теперь по требованию Заказчика я перенес их на Mechanical 13. И номера элементов исчезли на трехмерных видах. Возможно ли вывести слой Mechanical 13 на трехмерный вид? Спасибо.
  8. Кажется все старые счетчики считают U * I - это полная мощность. Для подсчета активной мощности нужно вычислить угол сдвига между напряжением и током. Кажется так. Не думаю что простые счетчики это делают. PS. Может я и не прав - на шунте выделяется только активная часть? А в случае с трансформатором тока также?
  9. Резистор есть. 360 Ом. Я для упрощения про него не писал. Спасибо, прояснили.
  10. Подскажите - активной мощности здесь получается меньше ватта? Остальная мощность ведь счетчик не крутит? Так?
  11. Речь пойдет об исполнительном модуле MRS516. Модуль питается от сети через конденсатор 0.47мкФ. После конденсатора идет диодный мост и шунтовой стабилизатор 24В. Замеренный мной ток составляет 0.034А. В паспорте на прибор указано меньше одного Ватта. Так и есть если считать 24В * 0.034А. Но если считать 220В * 0.034А, то получается примерно 6Вт. Подозреваю что часть мощности является реактивной и счетчик не крутит. Как считать правильно активную часть мощности?
  12. Подскажите по буферу LCD. Закипел.

    Еще круче. Но этот вариант не работает - часть пикселей другого цвета и сдвинуто по оси Х. void drawPixel(unsigned char x, unsigned char y, unsigned char color) { // #define N 2 //N = 0, 1, 2, 3 => 1, 2, 4, 8 bpp unsigned int idx = (x + y * width); unsigned char mask = (1 << (1 << N)) - 1; unsigned int shift = (idx & ((1 << (3-N))-1)); LCDBUF[idx >> (3-N)] = (LCDBUF[idx >> (3-N)] & (mask << shift)) | ((color & mask) << shift); } Для 4-х битового режима. Чтение буфера не менял. Только запись. Строка LCDBUF[(x+y*160)/2] = (LCDBUF[(x+y*160)/2] & (0xF0 >> (4*(x&1)))) | ((color & 0x0F) << (4*(x&1))); исправно работает. Понять в чем причина не смог пока.
  13. Подскажите по буферу LCD. Закипел.

    Два бита цвета тоже получилось, но коряво. void drawPixel(unsigned char x, unsigned char y, unsigned char color) { // if((x&3) == 0) { LCDBUF[(x+y*160)/4] = ((LCDBUF[(x+y*160)/4] & 0xfc) | (color & 0x03)); } if((x&3) == 1) { LCDBUF[(x+y*160)/4] = ((LCDBUF[(x+y*160)/4] & 0xf3) | ((color & 0x03) << 2)); } if((x&3) == 2) { LCDBUF[(x+y*160)/4] = ((LCDBUF[(x+y*160)/4] & 0xcf) | ((color & 0x03) << 4)); } if((x&3) == 3) { LCDBUF[(x+y*160)/4] = ((LCDBUF[(x+y*160)/4] & 0x3f) | ((color & 0x03) << 6)); } } // Передача в буфер еще хуже void Display(void) //Функция передает содержимое буферов цветов в дисплей LCD { // setAddrWindow(0, 0, width, height);//Диаппазон, в котором действует автоинкремент Set_Pin_DC; // int h = width * height/4; //Число точек int ADR = 0, i; //Индекс массива while (h--) //Цикл передачи массивов цветов в дисплей { // unsigned char LCDByte; LCDByte = LCDBUF[ADR]; if(LCDByte & 0x03) //Foreground { // unsigned int short color = Colors[LCDByte & 0x03]; ST7735_write(color >> 8); //Старший байт цвета ST7735_write(color);//Младший байт цвет } // else //BackGround { // ST7735_write(0); //Старший байт цвета ST7735_write(0); //Младший байт цвета } // LCDByte = LCDByte >> 2; // if(LCDByte & 0x03) //Foreground { // unsigned int short color = Colors[LCDByte & 0x03]; ST7735_write(color >> 8); //Старший байт цвета ST7735_write(color);//Младший байт цвет } // else //BackGround { // ST7735_write(0); //Старший байт цвета ST7735_write(0); //Младший байт цвета } // LCDByte = LCDByte >> 2; // if(LCDByte & 0x03) //Foreground { // unsigned int short color = Colors[LCDByte & 0x03]; ST7735_write(color >> 8); //Старший байт цвета ST7735_write(color);//Младший байт цвет } // else //BackGround { // ST7735_write(0); //Старший байт цвета ST7735_write(0); //Младший байт цвета } // LCDByte = LCDByte >> 2; // if(LCDByte) //Foreground { // unsigned int short color = Colors[LCDByte & 0x03]; ST7735_write(color >> 8); //Старший байт цвета ST7735_write(color);//Младший байт цвет } // else //BackGround { // ST7735_write(0); //Старший байт цвета ST7735_write(0); //Младший байт цвета } // ADR++; // } // for(int i=0; i < width * height/2; i++) { //Очистка видеобуфера LCDBUF[i] = 0; // } // } // Почему - то не получилось запихнуть в цикл. Так не работает: for(i = 0; i > 4; i++) { if(LCDByte & 0x03) //Foreground { // unsigned int short color = Colors[LCDByte & 0x03]; ST7735_write(color >> 8); //Старший байт цвета ST7735_write(color);//Младший байт цвет } // else //BackGround { // ST7735_write(0);//Старший байт цвета ST7735_write(0);//Младший байт цвета } // LCDByte = LCDByte >> 2; // }
  14. Подскажите по буферу LCD. Закипел.

    Монохром получился. void drawPixel(unsigned char x, unsigned char y, unsigned char color) { // if (color) LCDBUF[(x+y*160)/8] |= (1 << (x & 7)); else LCDBUF[(x+y*160)/8] &= ~(1 << (x & 7)); } // Вывод в дисплей: void Display(void) //Функция передает содержимое буферов цветов в дисплей LCD { // setAddrWindow(0, 0, width, height);//Диаппазон, в котором действует автоинкремент Set_Pin_DC; // int h = width * height / 8; //Число точек int ADR = 0, i; //Индекс массива while (h--) //Цикл передачи массивов цветов в дисплей { // unsigned char LCDByte; // LCDByte = LCDBUF[ADR]; // for(i = 0; i < 8; i++) // { // if(LCDByte & (1 << i))//Foreground { // ST7735_write(Colors[PixelColor] >> 8); //Старший байт цвета ST7735_write(Colors[PixelColor]); //Младший байт цвет } // else //BackGround { // ST7735_write(0);//Старший байт цвета ST7735_write(0);//Младший байт цвета } // } // ADR++; // } // for(int i=0; i < width * height / 8; i++) { //Очистка видеобуфера LCDBUF[i] = 0; // } // } //
  15. Подскажите по буферу LCD. Закипел.

    Круто. Спасибо. Вот что получилось: void drawPixel(unsigned char x, unsigned char y, unsigned char color) { // LCDBUF[(x+y*160)/2] = (LCDBUF[(x+y*160)/2] & (0xF0 >> (4*(x&1)))) | ((color & 0x0F) << (4*(x&1))); } // И отправляем в дисплей: void Display(void) //Функция передает содержимое буферов цветов в дисплей LCD { // setAddrWindow(0, 0, width, height);//Диаппазон, в котором действует автоинкремент Set_Pin_DC; // int h = width * height/2; //Число точек int ADR = 0; //Индекс массива while (h--) //Цикл передачи массивов цветов в дисплей { // unsigned char LCDByte; LCDByte = LCDBUF[ADR]; if(LCDByte & 0x0F) //Foreground { // unsigned int short color = Colors[LCDByte & 0x0F]; ST7735_write(color >> 8); //Старший байт цвета ST7735_write(color);//Младший байт цвет } // else //BackGround { // ST7735_write(0); //Старший байт цвета ST7735_write(0); //Младший байт цвета } // LCDByte = LCDByte >> 4; // if(LCDByte) //Foreground { // unsigned int short color = Colors[LCDByte]; ST7735_write(color >> 8); //Старший байт цвета ST7735_write(color);//Младший байт цвет } // else //BackGround { // ST7735_write(0); //Старший байт цвета ST7735_write(0); //Младший байт цвета } // ADR++; // } // for(int i=0; i < width * height/2; i++) { //Очистка видеобуфера LCDBUF[i] = 0; // } // } // Теперь проще. Попробую еще монохром сделать.