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

xopkep

Members
  • Постов

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

  • Посещение

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

  1. Блок на 50В который - старый (годов 70-80х) ТЕС какой-то. Грехов не замечено за ним. Второй самоделка ПиДБП - тоже вроде достаточно стабилен. У обоих индикаторы В\А есть. Но контролировал на разъеме хдд - нормально. Просадки больше 0.3В замечено небыло. Причем и с преобразователем и от двух бп. Т.е. это вполне может быть погрешность моего тестера.

  2. Прощу прощения за ввод в заблуждение :)

    50В/7A и 24В/3А - это регулируемые БП. Я лишь хотел сказать, что мощщей для раскрутки было с запасом. Земли БП, разумеется объеденял. Диск будет работать не в компе, а отдельном девайсе - там будет только 5В/5А БП и степ-ап.

  3. Здравствуйте,

    Имею старый SATA HDD. На корпусе - 12/5V 0.7/0.5A. На другом новом 0.5А по 12 и 5в. Собрал питание с 5В БП (на 5А, импульсный) и преобразователя step-up на LM2587 на 12В - не заводится. Потребление прыгает до 0.8А, диск щелкает, но не раскручивается.

    Попробовал запитать напрямую от двух БП (50В/7A и 24В/3А оба трансформаторные) - не заводится. Ситуация такая же - диск щелкает, потребление по 5В до 600-800мА при щелчке (по 12В до 100мА), шпиндель не раскручивается.

    От компа оба диска заводятся без проблем.

    Что я делаю не так, подскажите пожалуйста.

    С Уважением,

  4. Подскажите пожалуйста, по такому вопросу:

    Собираю драйвера на pt4115 по типовой схеме из даташита. Даже дроссели - рекомендуемые коилкрафтовские по даташиту. На выходе 10Вт светодиоды 10В 1А. В итоге имеем очень неслабый нагрев дросселя при выходном токе 0.6-0.7А и напряжении на входе не более 11В. Если повышать напряжение (требуемое на входе - 13В) - происходит срыв генерации - дроссель пищит и выходной ток падает до ~0.3А.

    В чем проблема?

  5. Не угадали :)

    Про ШИМ слышал и лампу настроения делал. Но там просто. Управлять-то одним-тремя. А тут 4-24. И зажечь на интервале в примере - это получается...

    в первую секунду включаем порт первого общего и порты сегментов BrCr и одновременно ШИМ\БАМ BgCg скважностью 50%. Так чтоли?. чейт тяжко идет...

  6. Здравия желаю, дамы и господа. Прошу внимания ;)

    Динамическая индикация для не профи выглядит так:

    A B C D E F G H

    1 0 1 1 0 0 0 0 0

    2 1 1 0 1 1 0 1 1

    3 1 0 1 1 0 1 1 0

    4 0 1 1 0 0 1 1 0

    (пример на пальцах) На проход 4секунды.

    Т.е. в первую секунду включаем порт первого общего и порты сегментов BC.

    Во вторую секунду выключаем порт первого общего, включаем порт второго общего и порты ABDEGH

    Итпитд.

    Для видимых одновременно всех четырех цифр, частота включения/выключения одного разряда не должна быть менее 50раз/секунду.

    Лучше больше.

    Имеем 12.54

    Теперь вопрос\просьба: расскажите\покажите пожалуйста таким же образом (на пальцах) динамическую индикацию на RGB светодиодах со смешиванием цветов.

    Если зажечь один\два\три цвета одновременно не представляется проблемой (на каждый цвет - свой порт МК = 8 сегментов * 3 цвета = 24 порта сегментов цветов и 4 общих для разрядов), то вот с переменной яркостью - ну вообще нифига неясно.

    Ну не могу я даже представить, как в таком случае зажечь например одновременно три цвета RGB но яркостью 100%,50%,25% или 25%,100%,25% или 25%,25%,25%

    Прошу разжевать :)

    С Уважением,

    p.s. и хватит ли скоростей простых мк типа stm8 или avr для этого? а скорости включения\выключения самих диодов?

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

       #include <Wire.h>              // Common library
       #include "DHT.h"                // DHT11 & DHT22 Library
       #include "af_BMP085.h"          // Simple library for BMP085
       #include <EtherCard.h>          // ENC28J60 Library
       #include <LiquidCrystal_I2C.h>  // Display with PFC8574
    
       // BMP085: SDA->A4 / SCL->A5
       // DHT11: DATA->A0
       // DHT22: DATA->A1
       // JACK: DATA->D4
       // DISPLAY-I2C: SDA->A4 SCL->A5 BACKLIGHT->D5
       // ENC28J60: SCK->D13 MOSI->D12 MISO->D11 INT->D2 RST->RST CS->D10
       // ISP: SCK->D13 MOSI->D12 MISO->D11 RST->RST
       // DIODE GREEN: + -> D8
       // DIODE ORANGE: + -> D7
       // BUZZER: SIGNAL -> D9
       // ANEMOMETER -> D3 (INT1)
    
       // Setting vars
       //#define BACKLIGHT_PIN 5 // Display backlight with npn-transistor
       #define DHT_S1_PIN A1 // DHT22 / AM2302
       #define DHT_S2_PIN A0 // DHT11
       //#define D_ORANGE_PIN 7 // Diode orange
       //#define D_GREEN_PIN 8 // Diode green
       //#define BUZZER_PIN 9 // Buzzer
       //#define WIND_PIN 3 // Anemometer
    
       //uint8_t wind[8] = {B11000,B00011,B00100,B11000,B00011,B00100,B11000}; //ветер
       uint8_t home[8] = {B00100,B01010,B11111,B10001,B10101,B10001,B11111}; //домик
       uint8_t sun[8] = {B00100,B10101,B01110,B11011,B01110,B10101,B00100}; //солнышко
       uint8_t mmhg[8] = {B01110,B01110,B01110,B01110,B11111,B01110,B00100}; //давление
       uint8_t temp_w_cel[8] = {B00011,B00011,B01100,B10010,B10000,B10010,B01100}; //ц с градусом
       uint8_t hum[8] = {B00000,B00100,B01010,B01010,B10001,B11111,B01110}; //влажность
       short int humidity = 0, temp_dht = 0, humidity2 = 0, temp_dht2 = 0, temp = 0;//temp_bmp = 0,
       static uint8_t mymac[6] = { ххх };
       LiquidCrystal_I2C lcd(0x20,4,5,6,0,1,2,3,7, POSITIVE);
       const char website[12] = "narodmon.ru";
       static byte hisip[] = { 94, 19, 113, 221 };
       static byte dnsip[] = {8, 8, 8, 8};
       int32_t pressure_pa = 0, pressure_mm = 0;
       volatile byte half_revolutions = 0;
       byte Ethernet::buffer[500];
       float tavgwspeed = 0;
       float avgwspeed = 0;
       //unsigned int avgrpm=0;
       float wspeed=0;
       short int taws = 0;
    
       Adafruit_BMP085 bmp;
       dht dht_s1, dht_s2;
    
       Stash stash;
    
       unsigned long DisplayTime;
       unsigned long lDisplayTime;
       unsigned long NMTime;
       unsigned long lNMTime;
       unsigned long AnemoTime;
       unsigned long lAnemoTime;
       unsigned long ResetTime;
       unsigned long lResetTime;
    
       void(* resetFunc) (void) = 0;
    
       void setup()
       {
           // LCD
         pinMode(5, INPUT);          // set pin to input
         digitalWrite(5, HIGH);      // turn on pullup resistors
         lcd.home();
         lcd.begin(24,2);
       //  lcd.createChar(0, wind);
         lcd.createChar(1, home);
         lcd.createChar(2, sun);
         lcd.createChar(3, mmhg);
         lcd.createChar(4, temp_w_cel);
         lcd.createChar(5, hum);
         lcd.setCursor(0,0);
         lcd.print("[Online Meteostation v3]");
         delay(3000);
         lcd.clear();
         // ETHERNET
         if (ether.begin(sizeof Ethernet::buffer, mymac, 10) == 0) {
           lcd.setCursor(0,0);
           lcd.print("ETH ERR");
         } else {
           lcd.setCursor(0,0);
           lcd.print("ETH OK");
         }
    
         if (!ether.dhcpSetup()) {
           lcd.setCursor(8,0);
           lcd.print("DHCP ERR");
         } else {
           lcd.setCursor(8,0);
           lcd.print("DHCP OK");
         }
    
         ether.copyIp(ether.dnsip, dnsip);
         ether.copyIp(ether.hisip, hisip);
    
       /*  if (!ether.dnsLookup(website)){
           lcd.setCursor(17,0);
           lcd.print("DNS ERR");
         } else {
           lcd.setCursor(17,0);
           lcd.print("DNS OK");
         }*/
    
         while (ether.clientWaitingGw()) {
           ether.packetLoop(ether.packetReceive());
           lcd.setCursor(0,1);
           lcd.print("GW OK");
         }
    
           delay(4000);
         lcd.clear();
         // BMP085
         bmp.begin();
         // Narodmon.ru Update
         nm_upd();
         // Display Update
         DisplayTotal();
         // 600000 - 10 min // 60000 - min // 1000 - sec // 100 - millisec // 10 - microsec // 1 sec = 1000ms = 1000000uS
         attachInterrupt(1, rpm_fun, FALLING);
    
         DisplayTime = millis();      // считываем время, прошедшее с момента запуска программы
         NMTime = millis();
         AnemoTime = millis();
         ResetTime = millis();
    
         lDisplayTime = DisplayTime;
         lNMTime = NMTime;
         lAnemoTime = AnemoTime;
         lResetTime = ResetTime;
       }
       void loop()
       {
         DisplayTime = millis();                          // считываем время, прошедшее с момента запуска программы
         if(DisplayTime >= (lDisplayTime + 60000)){        // сравниваем текущий таймер с переменной lDisplayTime + 60 секунд
           DisplayTotal();                                  // включаем/выключаем LED
           lDisplayTime = DisplayTime;                    // в loopTime записываем новое значение
         }
    
         NMTime = millis();                                // считываем время, прошедшее с момента запуска программы
         if(NMTime >= (lNMTime + 300000)){                // сравниваем текущий таймер с переменной lDisplayTime + 300 секунд
           nm_upd();                                      // включаем/выключаем LED
           lNMTime = NMTime;                              // в loopTime записываем новое значение
         }
    
         AnemoTime = millis();                            // считываем время, прошедшее с момента запуска программы
         if(AnemoTime >= (lAnemoTime + 60000)){            // сравниваем текущий таймер с переменной lDisplayTime + 60 секунд
           anemometer();                                  // включаем/выключаем LED
           lAnemoTime = AnemoTime;                        // в loopTime записываем новое значение
         }
    
         ResetTime = millis();                            // считываем время, прошедшее с момента запуска программы
         if(ResetTime >= (lResetTime + 86400000)){            // сравниваем текущий таймер с переменной lDisplayTime + 60 секунд
           resetFunc();
           lResetTime = ResetTime;                        // в loopTime записываем новое значение
         }
    
           // Ethernet ping answer
         ether.packetLoop(ether.packetReceive());
       }
    
       // Narodmon.ru Update
       void nm_upd(){
         lcd.clear();
         lcd.setCursor(0,0);
         lcd.print("Now updating narodmon.ru");
         MS_BMP085();
         MS_DHT11();
       // MS_DHT22();
         byte sd = stash.create();
         stash.println("ID=ххх");
         stash.println("&ххх=");
         stash.println(temp_dht);
         stash.println("&ххх=");
         stash.println(humidity);
         stash.println("&ххх=");
         stash.println(pressure_mm);
         stash.save();
         Stash::prepare(PSTR("POST http://narodmon.ru/post.php HTTP/1.0" "\r\n"
                             "Host: narodmon.ru" "\r\n"
                             "Content-Length: $D" "\r\n"
                             "\r\n"
                             "$H"),
                             stash.size(), sd);
         ether.tcpSend();
         stash.cleanup();
         delay(3000);
         lcd.clear();
         DisplayTotal();
       }
    
       // Main display view
       void DisplayTotal() {
         MS_SensUpdate();
         lcd.clear();
         lcd.setCursor(0,0);
         lcd.write(byte(2));//sun
         lcd.setCursor(3,0);
         lcd.write(byte(3));//mmhg
         lcd.print(pressure_mm);
         lcd.setCursor(9,0);
         lcd.write(byte(5));//hum
         if ( humidity == 0 ) {
           lcd.print(" ");
         }
         lcd.print(humidity);
         if (temp_dht == 0) {
           lcd.print("  ");
         } else if (temp_dht <= 9) {
           lcd.print("  +");
         } else if (temp_dht >= 10) {
           lcd.print("  +");
         };
         lcd.print(temp_dht);
         lcd.write(byte(4));//cel
         lcd.print("  ");
         lcd.setCursor(20,0);
       //  lcd.write(byte(0));//wind
         lcd.print("W");
         lcd.print(wspeed);
    
         lcd.setCursor(0,1);
         lcd.write(byte(1));//home
         lcd.print("  ");
         lcd.write(byte(3));//mmhg
         lcd.print(pressure_mm);
         lcd.print("  ");
         lcd.write(byte(5));//hum
         lcd.print(humidity2);
         if ( temp_dht2 >= 1 ) {
           lcd.print("  +");
         } else if (temp_dht2 == 0) {
           lcd.print("  ");
         } else if (temp_dht2 >= 10) {
           lcd.print("  +");
         };
         lcd.print(temp_dht2);
         lcd.write(byte(4));//cel
    
         lcd.setCursor(20,1);
         lcd.print("W");
       //  lcd.write(byte(0));//wind
         lcd.print(avgwspeed);
         /*
         [s][ ][-][>][ ][p][7][4][5][ ][ ][h][6][0][ ][+][2][5][c*][ ][ ][ w][2][6]
         [H][ ][-][>][ ][p][7][4][5][ ][ ][h][4][5][ ][+][2][3][c*][ ][+][2][3][c*]
         Total: 24x02
         */
       }
    
       // Sensors
       // Update all sensors one time
       void MS_SensUpdate() {
         MS_BMP085();
         MS_DHT22();
         MS_DHT11();
       }
    
       // Update only BMP085
       void MS_BMP085() {
       //  temp_bmp = bmp.readTemperature();
         pressure_pa = bmp.readPressure();
         pressure_mm = pressure_pa/133.3;
       }
    
       // Update only DHT22
       void MS_DHT22() {
         if (dht_s1.read22(DHT_S1_PIN) == DHTLIB_OK) {
           humidity = dht_s1.humidity;
           temp_dht = dht_s1.temperature;
           temp = temp_dht;
         } else {
           temp = temp_dht;
         }
       }
    
       // Update only DHT11
       void MS_DHT11() {
         if (dht_s2.read11(DHT_S2_PIN) == DHTLIB_OK) {
           humidity2 = dht_s2.humidity;
           temp_dht2 = dht_s2.temperature;
           temp = temp_dht2;
         } else {
           temp = temp_dht2;
         }
       }
    
       void rpm_fun() {
         half_revolutions++;
       }
    
       void anemometer(){
         wspeed = half_revolutions * 0.60288; // метров в минуту
         wspeed = wspeed / 60; // метров в секунду
         if (taws == 10){
           avgwspeed = tavgwspeed / 10; // средняя скорость
           tavgwspeed = 0;
           taws = 0;
         } else if (taws <= 9) {
           tavgwspeed = tavgwspeed + wspeed; // накапливание
           taws++;
         } else if (taws >= 11) {
           taws = 0;
         }
         half_revolutions = 0;
       }
    

    Оно все работает, при условии, что подключен USBasp и он (USBasp) воткнут в усб компьютера. При отсутствии программатора происходит следующее: Запуск - Езернет инит - отправка данных на народмон - вывод на дисплей - всё, тут всё виснет. Т.е. отображаются данные на момент вывода и не происходит более ни отправки ни обновления на дисплее.

    Что делать, чтобы не зависало без программатора?

    Добавлю. Если убрать код анемометра целиком (прерывания и обсчет и вывод) - зависает реже (а может и не зависнуть). В чем ошибка?

  8. Давай-те для начала сузим круг поиска проблемы. У Вас не получается принять данные с датчика по Уарт или выплюнуть принятые данные в юсб ?

    А говорите что поняли.

    Мне же надо отправить данные в USB->Virtual COM и это не работает.

    я пробовал так

    ptr = (PSTR("%d"), temperature);

    и вот так

    out_char( temperature )

    В первом случае имеем просто пробел, во втором вообще ничего.

    Вы хотите что-бы кто-то из форумчан скачал ваш код, переписал и отдал вам готовое.

    Это было бы идеально. Например если в моих силах сделать такое - я сделаю. Но почему-то на форумах все жмутся и пытаются "заставить думать". Учителя блин ;)

  9. Это вы не поняли :)

    CDC-IO - подключается к ПК посредством USB и представляется на компе в виде виртуального COM-порта. С железным UART мк никак не связан.

    Код датчика, представленный на немецком сайте, отсылает данные в железный UART (serial) - и это работает. Мне же надо отправить данные в USB->Virtual COM и это не работает.

  10. Использую AVR Studio 4. В качестве подопытного - Arduino Pro Mini 5V/16MHz и BMP085. Пытаюсь отправить данные - не получается.

    Отдельно CDC-IO шлет данные. Отдельно код датчика BMP085 шлет данные в UART. А вместе - не получается никак.

    "Основано" на оригинальном CDC-IO

    Код для датчика взят здесь

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

    Код в прилагаемом архиве

    С Уважением.

    CDC.zip

  11. Там только разводка и небольшие пояснения по сему девайсу. В моем случае проблема в плохом знании языка программирования.

    Пробовал сам сделать то, о чем написал - но никак. Никак не могу понять что и как в коде :(

  12. Здравия желаю,

    Вот тут есть проект CDC-232 для Atmega8/48/88.

    Прошу небольшой помощи-подсказки. Приведите пожалуйста пример, как в этом коде, сделать нечто типа

    adc=readadc1;
    sendport("ADC: ");
    sendport(adc); 

    Чтобы подключившись на компе к ком-порту, я мог прочитать в терминале ADC: 1234

    С Уважением,

  13. Здравия желаю,

    Нашел такие, где атмега в качестве преобразователя аки FT232/CP210x, но надо другое.

    Необходимо, чтобы при включении в USB, система видела устройство как простой COM-порт и обходилась _стандартными_ драйверами. Оно для метеостанции надо. Беру данные и посылаю в -куда-то-, а в комп подключаю через USB, а в системе забираю данные с COM-порта.

    Если есть что-нибудь подходящее на примете, подскажите пожалуйста.

    С Уважением,

  14. HAKAS

    Простые ЛБП с электронным управлением и возможностью подключения к компу (и управлять с него же) далеко не каждый купит.

    А делать универсальную приблуду ко всем БП - затем, чтобы всякий кто собрал простой ЛБП мог сделать его более крутым :) И представляю именно так, как написал.

    StrDm

    Одно дело просто стабилизированный, другое дело высокостабилизированный типа ТЕС. Все равно не думаю, что ШИМ внесет настолько страшные помехи, что ЛБП будет невозможно юзать.

    Да и потом, вопрос примерно в том и состоит - как сделать лучше. Разве ШИМ - единственный вариант?

    Под источниками софта подразумеваются программисты которым нечем заняться ;)

  15. HAKAS

    А что за источники такие?

    Hambaker

    О помехах не подумал. Но с другой стороны не настолько высокостабилизированные ЛБП собирают для дома, чтобы ШИМ вносил какие-либо значительные искажения.

    StrDm

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

    А во-вторых, просто померить достаточно и показометра на ЛБП. А построить график потребления на протяжении Н-ного времени, простым амперметром\показометром тяжело

  16. И почему никого не интересует сей девайс? Это ведь простая приставка, которая превратит БП в мощную штуку. Если на атмеге8, то можно с дисплеем сделать. Если на тиньке2313, то без. При копеечной стоимости девайса, мы получим логи потребления энергии устройством, графики, если угодно, тестер аккумуляторов, удаленое управление и прикольные энкодеры вместо резисторов :)

  17. Что-то не нашел я там подходящего...

    Но вот что подумал: переменный резистор, это же всего лишь резистивный делитель. Следовательно мы можем на порт атмеги повесить транзистор и ШИМом выдавать нужное напряжение. Верно? Или я чего-то не знаю?

    В этом случае получается все как-то уж подозрительно элементарно...

    UPD: Вот так

    https://www.dropbox.com/s/u5078h2hd1auecy/%D0%A1%D0%BA%D1%80%D0%B8%D0%BD%D1%88%D0%BE%D1%82%202014-02-21%2008.18.56.png

  18. Здравия желаю, уважаемые.

    Собственно вопрос в названии темы - есть ли какие-нибудь схемы готовых устройств делающих подобное?

    В мечтах имеет место такая задумка: делается плата управления (на тех же атмегах), на вход которой подаем 3 провода резистора регулирующего ток и три провода резистора регулирующего напряжение (ну и разумеется измерение вольт\ампер), а на выходе ПУ имеем два энкодера и USB\COM через который также можно управлять напряжением и током с ПК.

    Сия плата должна будет уметь цепляться в любой аналоговый БП с минимальными изменениями.

    Ищу именно входную часть - МК с энкодером (или кнопками) вместо резистора. Не подскажите ли чего?

    С Уважением,

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