Показано с 1 по 10 из 26

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Продвинутый
    Регистрация
    28.11.2010
    Возраст
    62
    Сообщений
    241
    Вес репутации
    244

    По умолчанию Генератор работы форсунок инжекторного двигателя

    Создал - работает, но появилось несколько вопросов в программировании.

    1. Есть ли вариант работать по ком-порту в фоновом режиме?
    2. Аналогичный вопрос по работе с WH1602C?
    3. Или как более лучший вариант - генерировать подобные импульсы в фоне?

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

    Пожалуйста, ткните носом где почитать или лучше где есть примеры. И еще, если не тяжело поправьте/укажите - где у меня в коде ошибки?

    Вот рабочий вариант и видео с осциллографа. Типа параллельный впрыск.
    PHP код:
     #include <LiquidCrystal.h> 
     
    LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2);
     
     
    unsigned int pauza0,   // Длительность паузы перед первым впрыском ( мкс )
                  
    vprysk1,  // Длительность импульса первого впрыска ( мкс )
                  
    pauza1,   // Длительность паузы перед вторым впрыском ( мкс )
                  
    vprysk2 ; // Длительность импульса второго впрыска ( мкс )
    unsigned long pauza2,   // Длительность паузы после второго впрыска ( мкс )
                  
    period ;  // Период работы форсунки ( мкс )
      
    void setup()
    {
        
    pinMode(49, OUTPUT); // Строб 
        
    pinMode(50, OUTPUT); // Форсунка № 1
        
    pinMode(51, OUTPUT); // Форсунка № 2
        
    pinMode(52, OUTPUT); // Форсунка № 3
        
    pinMode(53, OUTPUT); // Форсунка № 4
      //Serial.begin(115200);
      //lcd.begin(16, 2);
    }

    void loop()
    {
         
    AnalogIn() ;
              
    pauza2 = period - ( pauza0 + vprysk1 + pauza1 + vprysk2 + 1040 ) ;// Вычисление последней паузы
              
    if ( pauza2 < 2 ) pauza2 = 2 ;                                    // Не допускаем перекрытия
              
    unsigned int pauzaMs = pauza2 / 1000 ;                            // Длительности последней паузы ( милисекунды )
              
    unsigned int pauzaMk = pauza2 - ( pauzaMs * 1000 ) ;              // Длительности последней паузы ( микросекунды )
         
    Metka() ;
              
    delayMicroseconds(pauza0);       
         
    ForsOpen() ;         
              
    delayMicroseconds(vprysk1);
         
    ForsClose() ;
              
    delayMicroseconds(pauza1);
         
    ForsOpen() ;
              
    delayMicroseconds(vprysk2);
         
    ForsClose() ;
              
    delay(pauzaMs);
              
    delayMicroseconds(pauzaMk);
       
    //LcdOut() ;
       //SerialOut() ;
    }

    void ForsClose() // Закрытие форсунок
    {
              for (
    int i=50; i < 54; i++){
              
    digitalWrite(i, LOW);
              } 
    }
    void ForsOpen() // Открытие форсунок
    {
              for (
    int i=50; i < 54; i++){
              
    digitalWrite(i, HIGH);
              }
    }
    void SerialOut() // Вывод данных по ком-порту
    {
      
    Serial.print("pauza0="); 
      
    Serial.print(pauza0); 
      
    Serial.print(" vprysk1="); 
      
    Serial.print(vprysk1);
      
    Serial.print(" pauza1="); 
      
    Serial.print(pauza1);
      
    Serial.print(" vprysk2="); 
      
    Serial.print(vprysk2);
      
    Serial.print(" pauza2="); 
      
    Serial.print(pauza2);
      
    Serial.print(" period="); 
      
    Serial.println(period); 
    }
    void LcdOut() // Вывод данных на ЖКИ
    {
        
    lcd.clear();
        
    lcd.setCursor(0, 0);
        
    lcd.print(pauza0);
        
    lcd.setCursor(6, 0); 
        
    lcd.print(vprysk1);
        
    lcd.setCursor(11, 0);
        
    lcd.print(pauza1);
        
    lcd.setCursor(0, 1); 
        
    lcd.print(vprysk2);
        
    lcd.setCursor(8, 1); 
        
    lcd.print(pauza2);
    }
    void AnalogIn() // Чтение задающих параметров с потенциометров
    {
        
    period = map (analogRead(0), 0, 1023, 250000, 10000) ;      
        
    pauza0 = map (analogRead(1), 0, 1023, 1, 16200) ;
        
    vprysk1 = map (analogRead(2), 0, 1023, 1, 16200) ;          
        
    pauza1 = map (analogRead(3), 0, 1023, 1, 5000) ;
        
    vprysk2 = map (analogRead(4), 0, 1023, 1, 16200) ;
    }
    void Metka() //Стробирующий импульс ( 1 ms )
    {
        
    digitalWrite(49, HIGH);
        
    delay(1);            
        
    digitalWrite(49, LOW);   
    } 
    Если бы еще для каждой форсунки отдельными циклами в фоне, то вообще получил бы наслаждение от изделия.
    Вложения Вложения

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •