Помогите запихнуть скетч
- Войдите на сайт для отправки комментариев
Пт, 30/05/2014 - 01:46
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
Читаем http://arduino.ru/Tutorial/Upravlenie_portami_cherez_registry и делаем...
Как раз с этим и не могу разобраться
ну зачем одну и туже тему 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 пин не указали на выход
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); }Так ?
Схема :
На схеме подписаны порты относительно кода
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);
http://avr-start.ru/?p=435
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 порт сегменты загораются на мгновение и гаснут , почему не горят ?