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

[ATmeg32][C] Dodawanie i odejmowanie ZL10AVR licznik

Therotos 05 Cze 2011 20:30 1779 10
REKLAMA
  • #1 9580036
    Therotos
    Poziom 10  
    Posty: 7
    Ocena: 2
    Witam,
    Moim zadaniem jest napisanie programu w c dla płytki ZL10AVR, który pokazujące na wskaźnikach LED stan licznika. Wartość licznika powinna być zwiększana za pomocą jednego klawisza, a zmniejszana za pomocą drugiego klawisza (maksymalna zliczana wartość 99), a za pomocą trzeciego klawisza wartość licznika resetowana. Oprócz tego ma się wydobywać jakiś dźwięk w czasie wciskania klawisza.

    Póki co udało się napisać coś takiego. Prosiłbym bym Was forumowiczów abyście sprawdzili czy ten kod jest poprawnie napisany oraz o pomoc przy wyświetlaniu stanu licznika. Może objąłem złą koncepcję. Stworzyłem tablicę znaków od 0 do 9 i nie mam pomysłu na to jak zrobić to dodawanie i odejmowanie za pomocą klawiszy, żeby odpowiednią wartość wyświetlało na wskaźnikach LED siedmiosegmentowych.

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
    [/code]
  • REKLAMA
  • #2 9580080
    GSM
    Poziom 25  
    Posty: 543
    Pomógł: 72
    Ocena: 16
    Witam,

    kod najpiękniejszy nie jest (sposób pobierania wartości z tablicy), ale przynajmniej jest :roll:
    Pytanie brzmi: "Na czym polega twój problem?", bo jak na razie nam tego nie wyjawiłeś.

    Pozdrawiam,
    GSM
  • #3 9580110
    Therotos
    Poziom 10  
    Posty: 7
    Ocena: 2
    Moim problemem jest zrobienie tego wyświetlania aktualnego stanu licznika. Stan początkowy wiadomo 0. Naciskam klawisz pierwszy i dodaje 1 do licznika itd. Nie wiem jak oprogramować wyświetlania gdy stan licznika będzie przyjmował 10 i wyższe wartości.
  • REKLAMA
  • #4 9580152
    GSM
    Poziom 25  
    Posty: 543
    Pomógł: 72
    Ocena: 16
    Jak rozumiem to masz tam 2 wyświetlacze siedmiosegmentowe, tak?
    Poszukaj o czymś co nazywa się multipleksowanie.
    Podpowiem, że do obsługi wyświetlacza przyda się TIMER.

    Pozdrawiam,
    GSM
  • #5 9580565
    Therotos
    Poziom 10  
    Posty: 7
    Ocena: 2
    Ta płytka wygląda dokładnie tak:
    ZL10AVR
    Także nie wiem jak to interpretować :) także nie wiem czy to są 4 wyświetlacze LED czy jeden :P Noga jestem z tego :) no ale ja mam wykorzystać dwa takie, żeby móc wyświetlić liczby dwucyfrowe.]Link[/url]
  • REKLAMA
  • #6 9580657
    GSM
    Poziom 25  
    Posty: 543
    Pomógł: 72
    Ocena: 16
    Widzę, że kolega się do nauki nie bardzo przykłada :!:
    Proszę "pogooglować" o zagadnienie które wymieniłem.

    Nikt tu za ciebie nie będzie studiował.

    Pozdrawiam,
    GSM
  • #7 9581249
    Therotos
    Poziom 10  
    Posty: 7
    Ocena: 2
    Ok, coś pokombinowałem. Teraz proszę o sprawdzenie czy to dobrze zrobiłem :)
    Kod trochę poprawiłem.
    [Edit] Jeśli chodzi o kod to na pewno jest on napisany bezbłędnie. Tylko teraz pytanie jest takie czy spełnia on założenia tego co miałem zrobić? Niestety nie posiadam płytki, żeby to przetestować, ale ktoś bardziej doświadczony ode mnie może będzie wiedział czy ten kod będzie wykonywał to co ma.
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #8 9589130
    GSM
    Poziom 25  
    Posty: 543
    Pomógł: 72
    Ocena: 16
    Witam,

    nie zagłębiam się teraz zbytnio w ten kod ale 3 rzeczy mi się rzuciły w oczy:
    1. 1Hz to za mało, wyświetlacze muszą się tak szybko "podmieniać", ażeby oko tego nie zauważyło - o to właśnie w tym chodzi.
    2.
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Gubisz się w zeznaniach to preskaler chcesz mieć 64 czy 256?
    3. Nazywanie wielu zmiennych tą samą nazwą szczególnie gdy mamy jeszcze taką samą globalną nie jest dobrym pomysłem, program zadziała ale łatwo się jest pogubić, poza tym co robi volatile przez zmienną w funkcji Sound? - Bez sensu.

    Pozdrawiam,
    GSM
  • #9 9589269
    dondu
    VIP Zasłużony dla elektroda
    Posty: 13906
    Pomógł: 1292
    Ocena: 809
  • REKLAMA
  • #10 9589305
    Therotos
    Poziom 10  
    Posty: 7
    Ocena: 2
    No niestety :) przez praktyki zagraniczne nie mogłem uczęszczać na zajęcia z tego, a przedmiot trzeba jakoś zaliczyć.

    Wracając do tematu:
    to co warto wybrać: preskaler 64 czy 256?
    i ile Hz ustawić, żeby to "podmienianie" nie było widoczne dla ludzkiego oka?
    Niestety nie mam do tego płytki i nie mogę robić metodą prób i błędów. Liczę na Wasze doświadczenie w tej dziedzinie :)

Podsumowanie tematu

✨ W dyskusji poruszono problem napisania programu w języku C dla płytki ZL10AVR, który miałby obsługiwać licznik wyświetlany na diodach LED. Użytkownik chciał, aby licznik był zwiększany i zmniejszany za pomocą przycisków oraz resetowany innym przyciskiem, z dźwiękiem generowanym podczas naciśnięcia. Forumowicze zasugerowali użycie multipleksowania do wyświetlania wartości na dwóch wyświetlaczach siedmiosegmentowych oraz zwrócili uwagę na konieczność odpowiedniego ustawienia timera dla płynnego wyświetlania. Użytkownik miał trudności z implementacją wyświetlania liczb dwucyfrowych oraz z wyborem odpowiedniego preskalera dla timera, aby uzyskać niewidoczne dla oka "podmienianie" segmentów.
REKLAMA