PINB ATtiny85 случайно мигаетC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 PINB ATtiny85 случайно мигает

Сообщение Anonymous »

Я пытаюсь понять, как работать с ATtiny85, и столкнулся с проблемой.
Я использую светодиодную ленту RGB для обозначения битов (я обнаружил, что 1 пиксель — 1 бит). это очень удобно).
Весь код:

Код: Выделить всё

#define F_CPU 8388608UL // 8MH

#include 
#include 

#define LED PB4

void setBitHigh(short int pin) {
PORTB |= _BV(pin); // 1 tactDuration = 125*10-9sec
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");

PORTB &= ~_BV(pin); // 1 tactDuration
asm("nop");
asm("nop");
}

void setBitLow(short int pin) {
PORTB |= _BV(pin); // 1 tactDuration
asm("nop");
asm("nop");

PORTB &= ~_BV(pin); // 1 tactDuration
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
}

void trueByte(short int pin, short int intensity) {
for (int i = 7; i >= 0; i--) {
intensity & _BV(i) ? setBitHigh(pin) : setBitLow(pin);
}
}
void falseByte(short int pin) {
for (int i = 0; i < 8; i++) {
setBitLow(pin);
}
}

void setPixel(short int pin, short int r, short int g, short int b) {
g > 0 ? trueByte(pin, g) : falseByte(pin);
r > 0 ? trueByte(pin, r) : falseByte(pin);
b > 0 ? trueByte(pin, b) : falseByte(pin);
}

void indicate(int data) {
int tmp = data;
for (int i = 0; i < 8; i++) {
int intensity = (tmp & _BV(i)) > 0 ? 10 : 0;

setPixel(LED, intensity, 0, 0);
}
}

void blink(short int times) {
for (short int i = 0; i < times; i++) {
indicate(255);
_delay_ms(200);
indicate(0);
_delay_ms(200);
}
}

int main() {
DDRB = 0x00 | _BV(LED);
PORTB = 0x00;

_delay_ms(1000);
blink(3);
_delay_ms(1000);

while(true) {
indicate(PINB);
_delay_ms(50);
}

return 0;
}

Я ожидал, что индикатор PINB будет 0(на полоске нет света), но он мигает каким-то незнакомым мне узором, но я вижу его циклическим. Только первые 4 бита периодически становились 1.
Как видите, я использую PB4 только для светодиодов... PB0-3 свободны (не подключены вообще)
Буду рад любым идеям и советам, ти.

Подробнее здесь: https://stackoverflow.com/questions/777 ... y-blinking
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

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

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Digispark ATtiny85 внезапно перестает отправлять данные
    Anonymous » » в форуме C++
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous
  • Attiny85 Software Latch с Buttonhold для запуска / сон.
    Anonymous » » в форуме C++
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Attiny85 программное обеспечение с помощью кнопки удержание для запуска / смены спящего состояния
    Anonymous » » в форуме C++
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Страница мигает при съемке снимка экрана с кукловодом
    Anonymous » » в форуме Javascript
    0 Ответы
    74 Просмотры
    Последнее сообщение Anonymous
  • Пустое окно мигает перед отображением главного окна [закрыто]
    Гость » » в форуме Python
    0 Ответы
    22 Просмотры
    Последнее сообщение Гость

Вернуться в «C++»