Почему Cбоит Микроконтроллер При Питании От Кроны?

2-01-2014, 16:40 От: admin Посмотрели: 560
В целом проблема такая, есть простая схема на ATtiny2313(трехциферный семи сегментный дисплей показывает число).

В схеме используется стабилизатор напряжения, но не смотря на это если я подключаю эту схему к питалову больше чем 7В(в моем случае крона), то микроконтроллер сходит с ума. На дисплее выводится всякая хрень.

Если запитать от 6В-7В все работает отлично.

Я измерял напряжение на выходе стабилизатора, оно одинаковое что от 6В, что от12В источника.

Пробовал от блока питания, картина тажа.



В чем может быть проблема? У меня просто нет идей.



Схема вот такая:

Почему Cбоит Микроконтроллер При Питании От Кроны?

Исходник прошивки:

#define F_CPU 1000000UL

#include "avr/io.h"
#include "avr/delay.h"
#include <avr/interrupt.h>

#define LED_EMPTY 0b00000000
#define LED_0 0b00111111
#define LED_1 0b00000110
#define LED_2 0b01011011
#define LED_3 0b01001111
#define LED_4 0b01100110
#define LED_5 0b01101101
#define LED_6 0b01111101
#define LED_7 0b00000111
#define LED_8 0b01111111
#define LED_9 0b01101111
#define LED_DOT 0b10000000
#define LED_MINUS 0b01000000

typedef struct LedPanel {
int seg1;
int seg2;
int seg3;
} LedPanel;

LedPanel led;

void renderSegmentNext() {
static int activeSegment = 0;
activeSegment = (activeSegment + 1) % 3;

switch (activeSegment) {
case 0:
PORTB = led.seg1;
PORTD = 0b0110000;
break;
case 1:
PORTB = led.seg2;
PORTD = 0b1010000;
break;
case 2:
PORTB = led.seg3;
PORTD = 0b1100000;
break;
}
}

void initPorts() {
//init led ports
DDRB = 0xFF;
DDRD |= (0b111 << 4);
//init button ports
DDRD &= ~(1 << PD0);
DDRD &= ~(1 << PD1);
}

int digitToLedValue(int digit) {
switch (digit) {
case 0:
return LED_0;
case 1:
return LED_1;
case 2:
return LED_2;
case 3:
return LED_3;
case 4:
return LED_4;
case 5:
return LED_5;
case 6:
return LED_6;
case 7:
return LED_7;
case 8:
return LED_8;
case 9:
return LED_9;
default:
return LED_MINUS;
}
}

void setLedValue(int value) {
value %= 1000;

led.seg3 = digitToLedValue(value % 10);
if (value >= 10) {
led.seg2 = digitToLedValue((value / 10) % 10);
} else {
led.seg2 = LED_EMPTY;
}
if (value >= 100) {
led.seg1 = digitToLedValue((value / 100) % 10);
} else {
led.seg1 = LED_EMPTY;
}
}

int main() {
initPorts();

setLedValue(123);

while (1) {
renderSegmentNext();
_delay_ms(2);
}
}

Раздел: Разное

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться, либо войти на сайт под своим именем.

Обсудить на форуме


На момент добавления Почему Cбоит Микроконтроллер При Питании От Кроны? все ссылки были рабочие.
Все публикации статей, книг и журналов, представлены на этом сайте, исключительно для ознакомления,
авторские права на эти публикации принадлежат авторам статей, книг и издательствам журналов!
Подробно тут | Жалоба
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.


Опрос

Ваши предпочтения в TRX


Одинарное преобразование
Двойное преобразование
Прямое преобразование
SDR
Другое
Мне всё равно

Популярные новости
Календарь новостей
«    Май 2024    »
ПнВтСрЧтПтСбВс
 12345
6789101112
13141516171819
20212223242526
2728293031