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



Teraz jest 30 lip 2026, o 13:52


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 
Autor Wiadomość
PostNapisane: 27 sty 2014, o 14:34 
Offline
Nowy

Dołączył(a): 27 sty 2014
Posty: 4
Pomógł: 0

Cześć wszystkim. Mam mały problem z pewnym programem w C (niestety, problem muszę rozwiązać w tym tygodniu) na Atmega16. Program korzysta z ADC do generowania cyfry pseudolosowej (LSB z pomiaru) i wyświetla 4 losowe cyfry na czterech multipleksowanych wyświetlaczach 7 segmentowych. Poniżej znajduje się kod:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Program docelowo pisany do uruchomienia na zestawie ZL10AVR (którego ja niestety nie posiadam, więc nie mogę na bieżąco testować), jednak program nie działa tak jak powinien. Naciskając przycisk praktycznie wszystkie diody na segmentach się świecą, niektóre słabiej, niektóre mocniej (zdarza się czasem że jakaś całkowicie zgaśnie) i wyświetlanych cyfr po prostu nie można rozpoznać. Mógłby ktoś pomóc?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 sty 2014, o 15:29 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

musisz chyba uyważać na kilka rzeczy:
1. z przerwań nie wywołujemy funkcji.
2. jeżeli zmiennych używasz w przerwaniu a potem gdzieś indziej poza tym przrwaniem to
pownienieneś zastosować volatile.
3. a dla lepszej czytelności kodu - funkcje i przerawnia pisz POD funkcją main

To tak na szybko na pierwszy rzut oka choć to pewnie jeszcze nie rozwiązuje Twojego problemu ;-)

Oooo... sorki volatile jest :-)

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 sty 2014, o 18:06 
Offline
Nowy

Dołączył(a): 27 sty 2014
Posty: 4
Pomógł: 0

Niestety, raczej nie rozwiązuje to problemu :(. W pracowni z układami do testowania programów na bieżąca edytowałem program na różne sposoby, a mimo to nie działało tak jak powinno.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 sty 2014, o 18:41 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 kwi 2013
Posty: 65
Pomógł: 0

Brakuje nawiasu; }

to może mieć duże znaczenie



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 sty 2014, o 19:50 
Offline
Nowy

Dołączył(a): 21 sty 2014
Posty: 1
Pomógł: 0

W funkcji select_digit w momencie wyboru segmentu są ustawione linie poszczególnych diód, więc przez chwilę na nowym segmencie palą się tak jak w poprzednim. Dopiero następna instrukcja zmienia stan linii diód, i prawdopodobnie stąd "duszek". Najlepiej przed zmianą segmentu wygaś diody, potem zmień segment i zapal ponownie.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 sty 2014, o 21:34 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

A może podziel program na części? ;-)
Najpierw uruchom multipleksowanie.
Jak to Ci ruszy (opanujesz) to dołożysz następny kawałek kodu.
Łatwiej będzie Ci zapanować nad tym co nie działa i gdzie szukać błędu.

BTW w BB masz działający kod do multipleksowania - może zacznij od tego co tam jest.

_________________
Jestem początkujący i moje porady mogą być błędne



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: 6 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

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


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:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO