Jak przełączyć funkcje atmega16

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
henryxxl
-
Posty: 7
Rejestracja: 30 paź 2010, 17:39
Lokalizacja: Dobryń duży

Jak przełączyć funkcje atmega16

Post autor: henryxxl » 30 paź 2010, 17:44

Witam.
Napisałem taki program

Kod: Zaznacz cały

$regfile = "m16def.dat" 
$crystal = 1000000 



Config Portd = Output 
       Portd = &B0000000 


Do 

    Waitms 2000 
    Toggle Portd.5 
    Waitms 2000 
    Toggle Portd.5 

    Waitms 1500 
    Toggle Portd.5 
    Waitms 1500 
    Toggle Portd.5 


    Waitms 1000 
    Toggle Portd.5 
    Waitms 1000 
    Toggle Portd.5 


    Waitms 0 
    Toggle Portd.5 
    Waitms 0 
    Toggle Portd.5 






 Loop 

End
W moim programie po kolei załączają się rożne tryby migania diody a ja chciałbym żeby wciskając raz switcha załączał się pierwszy tryb później po wciśnięciu załączał się drugi tryb i aż tak do czwartego trybu.
Pozdrawiam.

Awatar użytkownika
Ertew
Użytkownik
Posty: 1414
Rejestracja: 03 lip 2005, 10:36
Lokalizacja: Leszno
Kontakt:

Re: Jak przełączyć funkcje atmega16

Post autor: Ertew » 30 paź 2010, 18:05

Może coś takiego:

Kod: Zaznacz cały

$regfile = "m16def.dat" 
$crystal = 1000000 

Dim tryb as Byte


Config Portd = Output 
       Portd = &B0000000 


Do 

If Pind.4 = 1 then incr tryb

If tryb = 5 then tryb = 0

    If tryb = 0 then
    Waitms 2000 
    Portd.5 = 0
    Waitms 2000 
    End If



    If tryb = 1 then
    Waitms 2000 
    Toggle Portd.5 
    Waitms 2000 
    Toggle Portd.5 
    End If


    If tryb = 2 then 
    Waitms 1500 
    Toggle Portd.5 
    Waitms 1500 
    Toggle Portd.5 
    End If


    If tryb = 3 then 
    Waitms 1000 
    Toggle Portd.5 
    Waitms 1000 
    Toggle Portd.5 
    End If


 Loop 

End

henryxxl
-
Posty: 7
Rejestracja: 30 paź 2010, 17:39
Lokalizacja: Dobryń duży

Post autor: henryxxl » 30 paź 2010, 18:26

U mnie nie działa.

keruseykaryu

Post autor: keruseykaryu » 30 paź 2010, 19:13

A gdzie przerwania? Przecież masz tam takie łejty, że głowa boli.

Awatar użytkownika
kris74
Użytkownik
Posty: 270
Rejestracja: 16 sie 2006, 17:36
Lokalizacja: Gorzów Wielkopolski

Post autor: kris74 » 30 paź 2010, 19:13

Bo port wejścia nie został skonfigurowany, masz tylko konfigurację portów wyjścia.

henryxxl
-
Posty: 7
Rejestracja: 30 paź 2010, 17:39
Lokalizacja: Dobryń duży

Post autor: henryxxl » 30 paź 2010, 19:57

Kod: Zaznacz cały

$regfile = "m16def.dat"
$crystal = 1000000

Dim tryb as Byte


Config Portd = Output
       Portd = &B0000000
Config Portd.4 = Input

Do

If Pind.4 = 1 then incr tryb

If tryb = 5 then tryb = 0

    If tryb = 0 then
    Waitms 2000
    Portd.5 = 0
    Waitms 2000
    End If



    If tryb = 1 then
    Waitms 2000
    Toggle Portd.5
    Waitms 2000
    Toggle Portd.5
    End If


    If tryb = 2 then
    Waitms 1500
    Toggle Portd.5
    Waitms 1500
    Toggle Portd.5
    End If


    If tryb = 3 then
    Waitms 1000
    Toggle Portd.5
    Waitms 1000
    Toggle Portd.5
    End If


 Loop

End
tak też nie działa

Awatar użytkownika
kris74
Użytkownik
Posty: 270
Rejestracja: 16 sie 2006, 17:36
Lokalizacja: Gorzów Wielkopolski

Post autor: kris74 » 30 paź 2010, 20:26

Nie działa, bo jest konfiguracja jest zła. Najpierw ustawiasz globalnie cały port d jako wyjście a potem próbujesz ustawić jedno wyjście portu jako wejście, tak się nie da.

henryxxl
-
Posty: 7
Rejestracja: 30 paź 2010, 17:39
Lokalizacja: Dobryń duży

Post autor: henryxxl » 30 paź 2010, 20:28

Może Pan poprawić program aby działał, jestem początkującym w avr i nie wiem jak.

Awatar użytkownika
matrix
Użytkownik
Posty: 1796
Rejestracja: 15 mar 2006, 5:21
Lokalizacja: Sochaczew
Kontakt:

Post autor: matrix » 30 paź 2010, 20:50

ja bym poprosił wszystkich chętnych pomocy forumowiczów o zastosowanie metody kolegi keruseykaryu czyli tylko naprowadzić, bo jak podamy na tacy to nici z tego będą.
niech młody otworzy jakiś przykładowy program i zobaczy jak konfiguruje się porty.

wszak to są podstawy.

henryxxl
-
Posty: 7
Rejestracja: 30 paź 2010, 17:39
Lokalizacja: Dobryń duży

Post autor: henryxxl » 30 paź 2010, 22:31

nie wystarczy dodać

Kod: Zaznacz cały

Config Portd.4 = Input

keruseykaryu

Post autor: keruseykaryu » 30 paź 2010, 22:36

nie wystarczy dodać
Pytasz czy stwierdzasz fakt?

henryxxl
-
Posty: 7
Rejestracja: 30 paź 2010, 17:39
Lokalizacja: Dobryń duży

Post autor: henryxxl » 30 paź 2010, 22:46

Pytam.

keruseykaryu

Post autor: keruseykaryu » 30 paź 2010, 22:58

Pytam.
Odpowiedź brzmi: Nie.

henryxxl
-
Posty: 7
Rejestracja: 30 paź 2010, 17:39
Lokalizacja: Dobryń duży

Post autor: henryxxl » 30 paź 2010, 23:00

Proszę mi pomóc siedzę nad Tym już pare godzin i nie wiem jak to zrobić.

keruseykaryu

Post autor: keruseykaryu » 30 paź 2010, 23:06

Zatem poświęć jeszcze z 10 minut na przeczytanie o DDRD, PORTD i PIND. Co każdy z nich robi przy wejściach a co przy wyjściach. Elementarne podstawy są napisane w multum miejsc w przepastnej pajęczynce www.

ODPOWIEDZ