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

    По умолчанию 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(latchPinLOW);
      
    shiftOut(dataPinclockPinMSBFIRST0b11111111);  
      
    digitalWrite(latchPinHIGH);
      switch (
    cur_dig)
      {
        case 
    0:
          
    digitalWrite(digit3LOW);
          
    digitalWrite(digit1HIGH);
          break;
        case 
    1:
          
    digitalWrite(digit1LOW);
          
    digitalWrite(digit2HIGH); 
          break; 
        case 
    2:
          
    digitalWrite(digit2LOW);
          
    digitalWrite(digit3HIGH);
          break;
      } 
      
    digitalWrite(latchPinLOW);
      
    shiftOut(dataPinclockPinMSBFIRST,digits[digit_out[cur_dig]]);  
      
    digitalWrite(latchPinHIGH);
      
    cur_dig++;
      if(
    cur_dig==3cur_dig=0;  
    }

    void setup() 
    {
      
    ASSR=0x00;
      
    TCCR2A=0x00;
      
    TCCR2B=0x04;
      
    TCNT2=0x00;
      
    OCR2A=0x00;
      
    OCR2B=0x00;
      
    TIMSK2=0x01;
      
    pinMode(latchPinOUTPUT);
      
    pinMode(clockPinOUTPUT);
      
    pinMode(dataPinOUTPUT);
      
    pinMode(digit1OUTPUT);
      
    pinMode(digit2OUTPUT);
      
    pinMode(digit3OUTPUT);
      
    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
    Возраст
    42
    Сообщений
    16
    Вес репутации
    170

    По умолчанию 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(latchPinLOW);
      
    shiftOut(dataPinclockPinMSBFIRST0b11111111);  
      
    digitalWrite(latchPinHIGH);
      switch (
    cur_dig)
      {
        case 
    0:
          
    digitalWrite(digit3LOW);
          
    digitalWrite(digit1HIGH);
          break;
        case 
    1:
          
    digitalWrite(digit1LOW);
          
    digitalWrite(digit2HIGH); 
          break; 
        case 
    2:
          
    digitalWrite(digit2LOW);
          
    digitalWrite(digit3HIGH);
          break;
      } 
      
    digitalWrite(latchPinLOW);
      
    shiftOut(dataPinclockPinMSBFIRST,digits[digit_out[cur_dig]]);  
      
    digitalWrite(latchPinHIGH);
      
    cur_dig++;
      if(
    cur_dig==3cur_dig=0;  
    }

    void setup() 
    {
      
    ASSR=0x00;
      
    TCCR2A=0x00;
      
    TCCR2B=0x04;
      
    TCNT2=0x00;
      
    OCR2A=0x00;
      
    OCR2B=0x00;
      
    TIMSK2=0x01;
      
    pinMode(latchPinOUTPUT);
      
    pinMode(clockPinOUTPUT);
      
    pinMode(dataPinOUTPUT);
      
    pinMode(digit1OUTPUT);
      
    pinMode(digit2OUTPUT);
      
    pinMode(digit3OUTPUT);
      
    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
    Вес репутации
    194

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

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

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

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

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

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

Ваши права

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