Страница 2 из 2 ПерваяПервая 12
Показано с 11 по 13 из 13
  1. #11
    Продвинутый
    Регистрация
    15.12.2008
    Возраст
    40
    Сообщений
    229
    Вес репутации
    423

    По умолчанию Re: индикатор передачи

    Вольтметр можно прикрутить:
    http://www.compcar.ru/forum/showthread.php?t=4463
    http://www.arduino.cc/cgi-bin/yabb2/...num=1292921201
    Нейтраль пока "H".
    Динамическую индикацию на ардуино не проверял, может быть частоту таймера поменять придется. А код проверенный, должно работать:
    PHP код:
    #include <avr/interrupt.h>
    #include <avr/io.h>
    //connected to ST_CP
    int latchPin = 3;
    //connected to SH_CP
    int clockPin = 4;
    //connected to DS
    int dataPin = 2;
    int gear =0;

    #define digit1 7
    #define digit2 6
    #define digit3 5

    char digit_out[3], cur_dig; 

    int digits[] = 
    {
      
    0b11000000, //0
      
    0b11111001, //1
      
    0b10100100, //2
      
    0b10110000, //3
      
    0b10011001, //4
      
    0b10010010, //5
      
    0b10000010, //6
      
    0b11111000, //7
      
    0b10000000, //8
      
    0b10010000, //9
      
    0b01000000, //0.
      
    0b01111001, //1.
      
    0b00100100, //2.
      
    0b00110000, //3.
      
    0b00011001, //4.
      
    0b00010010, //5.
      
    0b00000010, //6.
      
    0b01111000, //7.
      
    0b00000000, //8.
      
    0b00010000, //9.
      
    0b11111111, //пустота
      
    0b10001001, //H нейтраль
      
    0b10000011  //задний ход как-то надо отобразить b - back
    };

    void display()
    {
      
    digit_out[2]=0;
      
    digit_out[1]=0;
      
    digit_out[0]=gear;  
    }

    ISR(TIMER2_OVF_vect)
    {
      
    digitalWrite(latchPin, LOW);
      
    shiftOut(dataPin, clockPin, MSBFIRST, 0b11111111);  
      
    digitalWrite(latchPin, HIGH);
      switch (
    cur_dig)
      {
        case 
    0:
          
    digitalWrite(digit3, LOW);
          
    digitalWrite(digit1, HIGH);
          break;
        case 
    1:
          
    digitalWrite(digit1, LOW);
          
    digitalWrite(digit2, HIGH); 
          break; 
        case 
    2:
          
    digitalWrite(digit2, LOW);
          
    digitalWrite(digit3, HIGH);
          break;
      } 
      
    digitalWrite(latchPin, LOW);
      
    shiftOut(dataPin, clockPin, MSBFIRST,digits[digit_out[cur_dig]]);  
      
    digitalWrite(latchPin, HIGH);
      
    cur_dig++;
      if(
    cur_dig==3) cur_dig=0;  
    }

    void setup() 
    {
      
    ASSR=0x00;
      
    TCCR2A=0x00;
      
    TCCR2B=0x04;
      
    TCNT2=0x00;
      
    OCR2A=0x00;
      
    OCR2B=0x00;
      
    TIMSK2=0x01;
      
    pinMode(latchPin, OUTPUT);
      
    pinMode(clockPin, OUTPUT);
      
    pinMode(dataPin, OUTPUT);
      
    pinMode(digit1, OUTPUT);
      
    pinMode(digit2, OUTPUT);
      
    pinMode(digit3, OUTPUT);
      
    PORTB = 0xFF;
      
    DDRB = 0x00;
    }

    void loop() 
    {
        
    gear=21;
        if(
    digitalRead(8)==0)gear=1;
        if(
    digitalRead(9)==0)gear=2;
        if(
    digitalRead(10)==0)gear=3;
        if(
    digitalRead(11)==0)gear=4;
        if(
    digitalRead(12)==0)gear=5;
        
    delay(80);
        
    display();
    } 

  2. #12
    Новичок
    Регистрация
    27.10.2010
    Возраст
    45
    Сообщений
    16
    Вес репутации
    200

    По умолчанию Re: индикатор передачи

    Цитата Сообщение от manu_245 Посмотреть сообщение
    Вольтметр можно прикрутить:
    http://www.compcar.ru/forum/showthread.php?t=4463
    http://www.arduino.cc/cgi-bin/yabb2/...num=1292921201
    Нейтраль пока "H".
    Динамическую индикацию на ардуино не проверял, может быть частоту таймера поменять придется. А код проверенный, должно работать:
    PHP код:
    #include <avr/interrupt.h>
    #include <avr/io.h>
    //connected to ST_CP
    int latchPin = 3;
    //connected to SH_CP
    int clockPin = 4;
    //connected to DS
    int dataPin = 2;
    int gear =0;

    #define digit1 7
    #define digit2 6
    #define digit3 5

    char digit_out[3], cur_dig; 

    int digits[] = 
    {
      
    0b11000000, //0
      
    0b11111001, //1
      
    0b10100100, //2
      
    0b10110000, //3
      
    0b10011001, //4
      
    0b10010010, //5
      
    0b10000010, //6
      
    0b11111000, //7
      
    0b10000000, //8
      
    0b10010000, //9
      
    0b01000000, //0.
      
    0b01111001, //1.
      
    0b00100100, //2.
      
    0b00110000, //3.
      
    0b00011001, //4.
      
    0b00010010, //5.
      
    0b00000010, //6.
      
    0b01111000, //7.
      
    0b00000000, //8.
      
    0b00010000, //9.
      
    0b11111111, //пустота
      
    0b10001001, //H нейтраль
      
    0b10000011  //задний ход как-то надо отобразить b - back
    };

    void display()
    {
      
    digit_out[2]=0;
      
    digit_out[1]=0;
      
    digit_out[0]=gear;  
    }

    ISR(TIMER2_OVF_vect)
    {
      
    digitalWrite(latchPin, LOW);
      
    shiftOut(dataPin, clockPin, MSBFIRST, 0b11111111);  
      
    digitalWrite(latchPin, HIGH);
      switch (
    cur_dig)
      {
        case 
    0:
          
    digitalWrite(digit3, LOW);
          
    digitalWrite(digit1, HIGH);
          break;
        case 
    1:
          
    digitalWrite(digit1, LOW);
          
    digitalWrite(digit2, HIGH); 
          break; 
        case 
    2:
          
    digitalWrite(digit2, LOW);
          
    digitalWrite(digit3, HIGH);
          break;
      } 
      
    digitalWrite(latchPin, LOW);
      
    shiftOut(dataPin, clockPin, MSBFIRST,digits[digit_out[cur_dig]]);  
      
    digitalWrite(latchPin, HIGH);
      
    cur_dig++;
      if(
    cur_dig==3) cur_dig=0;  
    }

    void setup() 
    {
      
    ASSR=0x00;
      
    TCCR2A=0x00;
      
    TCCR2B=0x04;
      
    TCNT2=0x00;
      
    OCR2A=0x00;
      
    OCR2B=0x00;
      
    TIMSK2=0x01;
      
    pinMode(latchPin, OUTPUT);
      
    pinMode(clockPin, OUTPUT);
      
    pinMode(dataPin, OUTPUT);
      
    pinMode(digit1, OUTPUT);
      
    pinMode(digit2, OUTPUT);
      
    pinMode(digit3, OUTPUT);
      
    PORTB = 0xFF;
      
    DDRB = 0x00;
    }

    void loop() 
    {
        
    gear=21;
        if(
    digitalRead(8)==0)gear=1;
        if(
    digitalRead(9)==0)gear=2;
        if(
    digitalRead(10)==0)gear=3;
        if(
    digitalRead(11)==0)gear=4;
        if(
    digitalRead(12)==0)gear=5;
        
    delay(80);
        
    display();
    } 

    А как объеденить это в месте ? и вывести на тройной цифровой сегментный индикатор такого типа http://www.chipdip.ru/product/ba56-11srwa.aspx если не затруднит можешь схемку набросать.
    Спасибо.
    Последний раз редактировалось slavauskov; 16.09.2011 в 20:06.

  3. #13
    Местный
    Регистрация
    10.11.2010
    Сообщений
    144
    Вес репутации
    224

    По умолчанию Re: индикатор передачи

    Цитата Сообщение от slavauskov Посмотреть сообщение
    ... на тройной цифровой сегментный индикатор такого типа...
    Слепнут они днём... Ночью наоборот слишком ярко... надо подсветку регулировать помоему...

Страница 2 из 2 ПерваяПервая 12

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

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

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

Ваши права

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