Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 29 mar 2024, o 01:35


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 
Autor Wiadomość
PostNapisane: 15 sie 2017, o 18:58 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 paź 2013
Posty: 485
Lokalizacja: Siedlce
Pomógł: 9

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 ?

_________________
Ucz się ucz ,bo po to tutaj jesteś...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 sie 2017, o 19:21 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sty 2016
Posty: 1146
Lokalizacja: Kraków
Pomógł: 93

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)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 sie 2017, o 19:28 
Offline
Użytkownik

Dołączył(a): 04 cze 2013
Posty: 518
Pomógł: 26

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

_________________
Przewodnik|Sterownik akwariowy



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 sie 2017, o 06:00 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2014
Posty: 1020
Lokalizacja: Trójmiasto
Pomógł: 188

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.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 8 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO