logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Attiny2313, AVRStudio6 - Zmiana kodu obsługi wyświetlacza LED.

Bobo[PL] 10 Lut 2013 18:56 1728 4
REKLAMA
  • #1 11915949
    Bobo[PL]
    Poziom 14  
    Witam wszystkich.
    Na stronie www.JumperOne.com jest projekt termostatu, który wykonałem. W projekcie wykorzystano wyświetlacze LED ze wspólną katodą, a ja chciałem użyć wyświetlaczy ze wspólną anodą, lecz zmiany które wprowadziłem nie dały zamierzonego efektu (świeciły się wszystkie segmenty, ale z różną intensywnością).
    Kod oryginalny:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Rozpisałem sobie binarnie obsługę wyświetlacza:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    i pozamieniałem 0 na 1 i 1 na 0 (oczywiście podmieniając wartości hex) - bez efektu. Dodam też, że do sterowania anod użyłem tranzystorów PNP.
    Gdzie robię błąd? Proszę o pomoc.
  • REKLAMA
  • #2 11916451
    BlueDraco
    Specjalista - Mikrokontrolery
    Rozpisałeś i zmieniłeś obsługę wspólnych elektrod, a co z segmentami, które tworzą obrazy cyfr? Też trzeba wszystko zanegować.

    Gołym okiem widać, że obsługa wyświetlacza jest napisana fatalnie i z błędami - bardzo długi i nieczytelny kod, odświeżanie na opóźnieniach, zamiast w przerwaniu timera. Jak masz podłączony ten wyświetlacz? Które linie portów sterują którymi segmentami?
  • REKLAMA
  • #3 11916680
    Bobo[PL]
    Poziom 14  
    PB4 > SEG A
    PB3 > SEG F
    PB1 > SEG D
    PB0 > SEG C
    PA1 > SEG B
    PA0 > SEG E
    PD2 > SEG DP
    PD3 > SEG G

    Uczę się programować (w wolnych chwilach :/ ). Czy negacja ma tak wyglądać jak poniżej?

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • Pomocny post
    #4 11916929
    BlueDraco
    Specjalista - Mikrokontrolery
    Proponowałbym zapisać matryce cyfr na dwóch bajtach - w pierwszym bity portu B, w drugim - bity portów A i D razem, bity nieużywane w stanie 1, czyli coś takiego:

    const cyfry[10][2] = {
    {0b111xx1xx, 0b1111xxxx},
    ...
    };

    x - to wyrtości sterowania segmentów dla poszczególnych cyfr.

    Wtedy zapalenie cyfry c wyglądałoby tak:

    PORTB |= 0b11011;
    PORTB &= cyfry[c][0];
    PORTA |= 0b11;
    PORTA &= cyfry[c][1] | 0b1100;
    PORTD |= 0b1100;
    PORTD &= cyfry[c][1] | 0b11;
  • #5 11917398
    Bobo[PL]
    Poziom 14  
    Szczerze powiedziawszy nie jest to dla mnie proste co napisałeś w ostatnim poście :), ale będę kombinował żeby coś z tego wyszło. I tak dziękuję Ci za odpowiedź.

    Pozdrawiam.
REKLAMA