Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

ATmega8 - Wylacznik schodowy jezyk C

lordwest1989 31 Lip 2013 18:47 951 3
  • #1 31 Lip 2013 18:47
    lordwest1989
    Poziom 2  

    Witam.

    Jestem nowym użytkownikiem tego forum. Z mikrokontrolerami dopiero zaczynam swoja przygodę.

    Piszę ponieważ napisałem program wyłącznika schodowego z regulowanym czasem działania i gdy programuje mikrokontroler to nie wykazuje on zadnych oznak zycia.
    Mikrokontroler ma być sterowany czterema przyciskami. Dwoma przyciskami niestabilnymi typu microswitch oraz dwoma łącznikami stabilnymi.

    Siedze juz nad tym 3dni kombinuje na rózne sposoby zmieniajac operatory logiczne na bitowe na odwrot itd doszukujac sie głownie problemu w instrukcji warunkowej if lecz juz mi rece opadają.

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Będę wdzięczny o napisanie co jest nie tak w programie dodam że napisałem program w języku Bascom i program działa więc układ elektronicznie jest prawidłowo zmontowany.

    Dziękuję za każdą pomoc i radę :|

    PS: Czy jest możliwość złego programowania? Mam programator USBasp i programuje za pomoca avrdude ale z nakladka Mkvcalculator. Przy ustawianiu fusebitow stosuje w nim szybkie ustawianie. Rezonator kwarcowy 7,367mhz wiec ustawilem przedzial f>3Mhz ^ f<8Mhz. Poziom odczytania zmiany stanu jest 2,7V czy cos może jeszcze pokombinować z ustawieniami? programowania bo może problem właśnie leży w tym.
    Program napisalem w programie AVRstudio 4 a przy kompilacji program nie zglasza zadnych warningow ani bledow :cry:

    0 3
  • #2 31 Lip 2013 20:24
    BlueDraco
    Specjalista - Mikrokontrolery

    Zacznij od napisania, jak są podłączone przyciski.

    Zupełnie nie rozumiem czemu w celu zapisu bajtu do rejestru DDR używasz pięciu operacji logicznych na tym rejestrze zamiast napisać po prostu:
    DDRC = Wyjscie;

    To samo z PORTC.

    Dalej . sprawdzasz, czy przyciski są zwolnione, ale nie sprawdzasz, cza są wciśnięte.

    Przy takiej realizacji - pętla i delay - to nie będziei działało dobrze. Przerwanie timera się kłania.

    Niezależnei od tego, co chcesz z tym zrobić - zacznij od uruchomienie prostszej wersji z jednym przyciskiem.

    0
  • #3 31 Lip 2013 21:52
    lordwest1989
    Poziom 2  

    czy chodzi Ci o napisanie w ten sposób konfiguracji portow?

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Obsluge przyciskow wlasnie zrealizowalem w taki

    Kod: c
    Zaloguj się, aby zobaczyć kod

    Wiem ze mozna to zrealizowac za pomoca XOR lecz nie wiem czy tak też może być :|

    Jeśli użyje _delay_ to czemu bedzie zle?
    Nie chcialem używać przerwań właśnie bo slyszalem ze delay mozna stosowac jesli dokladnosc pomiaru czasu nie jest priorytetem.

    Jutro sproboje z wersja xor i z przerwaniami dzieki za rade może się uda ;-)

    Dodano po 1 [godziny] 8 [minuty]:

    Przyciski sa podlaczone tak:
    PC0 - łącznik stabilny
    PC1 - łącznik stabilny

    PC2 - przycisk microswth do ustawiania czasu
    PC3 - --||---

    Piny wejsc sa ustawione w stan wysoki
    Porty sa zwierane do masy poprzez wcisniecie przyciskow.

    0
  • #4 31 Lip 2013 23:02
    BlueDraco
    Specjalista - Mikrokontrolery

    Chodzi mi o napisanie:
    DDRC = Wyjscie;
    PORTC = Micro_2 | Micro_1 | Przycisk_0 | Przycisk_1;

    Mam nadzieję, że przyciski są włączone pomiędzy wejścia uC i masę - nie napisałeś tego.

    Komentarz niezgodny z działaniem kodu. Ten if() wykona się, jeśli oba są zwolnione lub oba wciśnięte.

    Z delay() nie chodzi o dokładność pomiaru, a o brak reakcji na zdarzenie w czasie wykonywania delay(), czyli np. układ nie reaguje na naciśnięcia przycisku kiedy świeci światło.

    Najłatwiej i najwygodniej takie rzeczy robić w przerwaniu timera.

    0