Помогите запихнуть скетч

Loginkr
Offline
Зарегистрирован: 23.06.2013

void setup() {                
 
  
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);

  pinMode(16, OUTPUT);
  pinMode(13, OUTPUT);
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
Serial.begin(9600);
}

void loop() {
 unsigned short value,digit[3];

 value=Serial.read();
    digit[1]=value%10;
    digit[2]=value/10%10;
    digit[0]= value/10/10%10;
 for(unsigned short i=0;i<3;i++)clock_show_digit(digit[i], i);

}

void clock_all_off(void) {
   digitalWrite(11, LOW);
    digitalWrite(10, LOW);
     digitalWrite(9, LOW);
     digitalWrite(7, LOW);
   digitalWrite(16, LOW);
  digitalWrite(13, LOW);
  digitalWrite(2, LOW);
  digitalWrite(3, LOW);
  digitalWrite(4, LOW);
  digitalWrite(5, LOW);
  digitalWrite(6, LOW);}
  
  void clock_show_digit(unsigned short value,unsigned short i) {
    clock_all_off();
  if (i==0)digitalWrite(9, HIGH);
   if (i==1){digitalWrite(10, HIGH); digitalWrite(7, HIGH);}
    if (i==2)digitalWrite(11, HIGH);
    if (value == 0 || value == 2 || value == 3 || value == 5 || value == 6 || value == 7 || value == 8 || value == 9) digitalWrite(16, HIGH);
  if (value == 1 || value == 2 || value == 3 || value == 4 || value == 7 || value == 8 || value == 9 || value == 0) digitalWrite(13, HIGH);
  if (value == 0 || value == 1 || value == 3 || value == 4 || value == 7 || value == 6 || value == 5 || value == 8 || value == 9) digitalWrite(2, HIGH);
  if (value == 2 || value == 3 || value == 5 || value == 6 || value == 0 || value == 8 || value == 9) digitalWrite(3, HIGH);
  if (value == 0 || value == 2 || value == 8 || value == 6) digitalWrite(4, HIGH);
  if (value == 0 || value == 4 || value == 5 || value == 6 || value == 8 || value == 9) digitalWrite(5, HIGH);
  if (value == 2 || value == 3 || value == 4 || value == 5 || value == 6 || value == 8 || value == 9) digitalWrite(6, HIGH);

  }

Собственно имеется attiny 2313

 

MaksMS
Offline
Зарегистрирован: 11.03.2013
Loginkr
Offline
Зарегистрирован: 23.06.2013

Как раз с этим и не могу разобраться

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

ну зачем одну и туже тему 2 раза создавать

если в этой картинке соответствует вашему коду

https://lh4.googleusercontent.com/-v6ygYxQxYDc/TsjnkOjDh8I/AAAAAAAAAnc/0...

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

http://arduino.ru/forum/programmirovanie/attiny13a-101-primenenie?page=6...

например 13 пин соответствует PORTB 4, или сокращенно PB4

настраиваем на выход

DDRB |= (1<<4);  // DDRB потому что PORTB, для порта А было бы DDRA. сдвигаем 4 раза потому что у нас PB4

управляем пином

PORTB |= (1<<4);  //так пишем на PB4 HIGH она же 1

PORTB &= ~(1<<4); //так пишем на PB4 LOW она же 0

кстати у вас ошибка в коде. вы 7 пин не указали на выход

 

Loginkr
Offline
Зарегистрирован: 23.06.2013
void setup() {                
 
  
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);

  pinMode(16, OUTPUT);
  pinMode(13, OUTPUT);
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
Serial.begin(9600);
}

void loop() {
 unsigned short digit[3];
 char value;
 value=Serial.read()-48;
    digit[1]=value%10;
    digit[2]=value/10%10;
    digit[0]= value/10/10%10;
 for(unsigned short i=0;i<3;i++)clock_show_digit(digit[i], i);

}

void clock_all_off(void) {
   PORTB &= ~(1<<2); 
   PORTB &= ~(1<<1); 
   PORTB &= ~(1<<0); 
     
  PORTB &= ~(1<<7); 
  PORTB &= ~(1<<4); 
  PORTA &= ~(1<<1); 
  PORTA &= ~(1<<0); 
  PORTD &= ~(1<<2); 
  PORTD &= ~(1<<3); 
  PORTD &= ~(1<<4); 
  PORTD &= ~(1<<5); }
  
  void clock_show_digit(unsigned short value,unsigned short i) {
    clock_all_off();
  if (i==0)PORTB |= (1<<0);  
   if (i==1){PORTB |= (1<<1);   PORTD |= (1<<5);  }
    if (i==2)PORTB |= (1<<2);  
    if (value == 0 || value == 2 || value == 3 || value == 5 || value == 6 || value == 7 || value == 8 || value == 9) PORTB |= (1<<7);  
  if (value == 1 || value == 2 || value == 3 || value == 4 || value == 7 || value == 8 || value == 9 || value == 0) PORTB |= (1<<4);  
  if (value == 0 || value == 1 || value == 3 || value == 4 || value == 7 || value == 6 || value == 5 || value == 8 || value == 9) PORTA |= (1<<1);  
  if (value == 2 || value == 3 || value == 5 || value == 6 || value == 0 || value == 8 || value == 9) PORTA |= (1<<0);  
  if (value == 0 || value == 2 || value == 8 || value == 6) PORTD |= (1<<2);  
  if (value == 0 || value == 4 || value == 5 || value == 6 || value == 8 || value == 9) PORTD |= (1<<3);  
  if (value == 2 || value == 3 || value == 4 || value == 5 || value == 6 || value == 8 || value == 9) PORTD |= (1<<4);  

  }

Так ?

Схема :

44bb8a252506.gif

На схеме подписаны порты относительно кода

pinMode(9, OUTPUT);

pinMode(10, OUTPUT);

pinMode(11, OUTPUT);

pinMode(16, OUTPUT);

pinMode(13, OUTPUT);

pinMode(2, OUTPUT);

pinMode(3, OUTPUT);

pinMode(4, OUTPUT);

pinMode(5, OUTPUT);

pinMode(6, OUTPUT);

pinMode(7, OUTPUT);

 

 

 

ZagZag
Offline
Зарегистрирован: 08.05.2014
Loginkr
Offline
Зарегистрирован: 23.06.2013

void setup() {                
 
  
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);

  pinMode(16, OUTPUT);
  pinMode(13, OUTPUT);
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
Serial.begin(9600);
 clock_all_off();
}

void loop() {
 unsigned short digit[3];
 int value;
 if (Serial.available()>0) 
{ value=Serial.read();
    digit[1]=value%10;
    digit[2]=value/10%10;
    digit[0]= value/10/10%10;}
 for(unsigned short i=0;i<3;i++)clock_show_digit(digit[i], i);

}

void clock_all_off(void) {
   PORTA &= ~(1 << PA0);  
   PORTA &= ~(1 << PA1);  
   PORTD &= ~(1 << PD2); 
   PORTD &= ~(1 << PD3); 
   PORTD &= ~(1 << PD4); 
   PORTD &= ~(1 << PD5); 
   PORTB &= ~(1 << PB7); 
   PORTB &= ~(1 << PB4); 
   
   PORTB &= ~(1 << PB0);
   PORTB &= ~(1 << PB1);  
   PORTB &= ~(1 << PB2); 
}
  
  void clock_show_digit(unsigned short value,unsigned short i) {
   
  if (i==0) PORTB |=  (1 << PB0); 
  if (i==1){PORTB |=  (1 << PB1);  PORTD |=  (1 << PD5);}
  if (i==2)PORTB |=  (1 << PB2); 
    
    if (value == 0 || value == 2 || value == 3 || value == 5 || value == 6 || value == 7 || value == 8 || value == 9) PORTB |=  (1 << PB7);  
  if (value == 1 || value == 2 || value == 3 || value == 4 || value == 7 || value == 8 || value == 9 || value == 0) PORTB |=  (1 << PB4); 
  if (value == 0 || value == 1 || value == 3 || value == 4 || value == 7 || value == 6 || value == 5 || value == 8 || value == 9) PORTA |=  (1 << PA1); 
  if (value == 2 || value == 3 || value == 5 || value == 6 || value == 0 || value == 8 || value == 9) PORTA |=  (1 << PA0); 
  if (value == 0 || value == 2 || value == 8 || value == 6) PORTD |=  (1 << PD2);
  if (value == 0 || value == 4 || value == 5 || value == 6 || value == 8 || value == 9) PORTD |=  (1 << PD3);
  if (value == 2 || value == 3 || value == 4 || value == 5 || value == 6 || value == 8 || value == 9) PORTD |=  (1 << PD4);
  clock_all_off();
  }

Всем спасибо ,скетч влез.

Теперь другая проблема я пишу в COM порт сегменты загораются на мгновение и гаснут , почему не горят ?