В целом проблема такая, есть простая схема на ATtiny2313(трехциферный семи сегментный дисплей показывает число).
В схеме используется стабилизатор напряжения, но не смотря на это если я подключаю эту схему к питалову больше чем 7В(в моем случае крона), то микроконтроллер сходит с ума. На дисплее выводится всякая хрень.
Если запитать от 6В-7В все работает отлично.
Я измерял напряжение на выходе стабилизатора, оно одинаковое что от 6В, что от12В источника.
Пробовал от блока питания, картина тажа.
В чем может быть проблема? У меня просто нет идей.
Схема вот такая:
Исходник прошивки:
Раздел: Разное
В схеме используется стабилизатор напряжения, но не смотря на это если я подключаю эту схему к питалову больше чем 7В(в моем случае крона), то микроконтроллер сходит с ума. На дисплее выводится всякая хрень.
Если запитать от 6В-7В все работает отлично.
Я измерял напряжение на выходе стабилизатора, оно одинаковое что от 6В, что от12В источника.
Пробовал от блока питания, картина тажа.
В чем может быть проблема? У меня просто нет идей.
Схема вот такая:
Исходник прошивки:
#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);
}
}
Раздел: Разное