ATNEL tech-forum
https://forum.atnel.pl/

Problem z duszkami na LED atmega8 i kompilator głupieje ?
https://forum.atnel.pl/topic19002.html
Strona 1 z 1

Autor:  RadekB86 [ 15 sie 2017, o 18:58 ]
Tytuł:  Problem z duszkami na LED atmega8 i kompilator głupieje ?

A wiec przerabiam bibliotekę z BB do wyświetlacza LED chcę zrobić termometr na wyświetlaczu RED-GREEN
Obrazek

/atmega8
Pytanie nr.1
Moim zamysłem jest aby wyświetlacz świecił na czerwono gdy jest temperatura dodatnia i zielono gdy jest ujemna.
Oczywiście ćwiczę na ATB więc pomyślałem że po prostu 2wie pierwsze cyferki będą jako czerwony ,a 2wie drugie jako "zielony" 8-)
Zmieniłem nieco funkcję w obsłudze przerwania która jest załączana po przez warunek w IFIe (zmienną subzero2 sprawdzam czy temperatura jest ujemna) funkcja wygląda tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Niby wszytko fajnie ale tak sobie myślę czy nie można by to zrobić lepiej bo na wyświetlaczu nr.3 jest widoczna lekka poświata tak jakby cyfry 2 Bo ja to zrobiłem przypisując zgaszony wyświetlacz indeksem tablicy nr.16

Moim zdaniem lepiej by było po prostu wyłączyć te anody(zielonego wyświetlacza) a włączyć te czerwonego gdy jest temperatura dodatnia i odwrotnie gdy będzie temperatura ujemna włączyć anody zielonego ,a wyłączyć czerwonego -tylko nie mam pomysłu jak to zmienić w kodzie. :mrgreen:

2.A drugie pytanie dotyczy bardziej kompilatora
a więc tworzę zmienną volatile aby móc ją obsługiwać w przerwaniu
Kod:
volatile uint8_t subzero2//zmienna oznaczająca temperaturę ujemną

i kompilator mi krzyczy że jej nie zadeklarowałem mimo że to zrobiłem w pliku main.c :ugeek:
(lub tylko w pliku d_led.c)
a jak dodam ją też w pliki d_led.c i w pliku main.c (czyli w 2 plikach jednocześnie) wtedy się kompiluje
jednym słowem muszę zadeklarować tą samą zmienną w 2 plikach źródłowych bo pliki z rozszerzeniem *.c to przecież są pliki źródłowe prawda ? więc co za różnica czy jest w main.c czy d_led.c ?
Dlaczego tak się dzieje ?

Autor:  Marhef [ 15 sie 2017, o 19:21 ]
Tytuł:  Re: Problem z duszkami na LED atmega8 i kompilator głupieje

RadekB86 napisał(a):
A drugie pytanie dotyczy bardziej kompilatora
a więc tworzę zmienną volatile aby móc ją obsługiwać w przerwaniu
Kod:
volatile uint8_t subzero2//zmienna oznaczająca temperaturę ujemną

i kompilator mi krzyczy że jej nie zadeklarowałem mimo że to zrobiłem w pliku main.c :ugeek:
(lub tylko w pliku d_led.c)
a jak dodam ją też w pliki d_led.c i w pliku main.c (czyli w 2 plikach jednocześnie) wtedy się kompiluje
jednym słowem muszę zadeklarować tą samą zmienną w 2 plikach źródłowych bo pliki z rozszerzeniem *.c to przecież są pliki źródłowe prawda ? więc co za różnica czy jest w main.c czy d_led.c ?
Dlaczego tak się dzieje ?
Jeżeli deklarujesz zmienną subzero w main.c oraz w d_led.c, to tak naprawdę tworzysz dwie różne zmienne. Nie wiem, w którym pliku (nie pamiętam), ale musisz jedną z tych deklaracji dodać ze słówkiem extern (w bluebooku to jest, poszukaj)

Autor:  matekogon [ 15 sie 2017, o 19:28 ]
Tytuł:  Re: Problem z duszkami na LED atmega8 i kompilator głupieje

Kolego jak wykorzystujesz zmienną w różnych plikach to wystarczy ze w pliku wspolny.h zapiszesz ją extern volatile uint8_t subzero2 a następnie plik wspolny.h dołączysz poprzez include w plikach których ma być uzywana ta zmienna

Autor:  xentis [ 16 sie 2017, o 06:00 ]
Tytuł:  Re: Problem z duszkami na LED atmega8 i kompilator głupieje

RadekB86 napisał(a):
Niby wszytko fajnie ale tak sobie myślę czy nie można by to zrobić lepiej bo na wyświetlaczu nr.3 jest widoczna lekka poświata tak jakby cyfry 2 Bo ja to zrobiłem przypisując zgaszony wyświetlacz indeksem tablicy nr.16
Porównaj swoją bibliotekę z książki z tą zamieszczoną w uaktualnieniach na stronie autora książki http://www.atnel.pl/uaktualnienia-programow-do-dvd.html w kodzie od multi_LED był mały babol (nie wiem na jakim etapie został poprawiony i czy "twardy" BB miał już poprawioną)
W każdym bądź razie w przerwaniu od licznika gdzie odbywa się multipleksowanie prawie na samym początku jest linijka odpowiadająca za wygaszenie wszystkich wyświetlaczy przed zaświeceniem kolejnego i tu był błąd który powodował wyświetlenie "duszków". Sprawdź może akurat u Ciebie to jest problemem.

Strona 1 z 1 Strefa czasowa: UTC + 1
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/