Aktyw Forum

Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.

Sprawdź punkty Zarejestruj się

Durny problem. GetRc przyciski i diody

jacynka84
-
-
Posty:150
Rejestracja:17 maja 2006, o 22:50
Lokalizacja:Sulejówek
Durny problem. GetRc przyciski i diody

Postautor: jacynka84 » 17 paź 2006, o 15:34

Witam.
mam taki durny problem.
przyciski na porcie C diody na Porcie A,
Wiem jak włączyć te diody przez program ,ale w ogóle nie moge ich włączyć za pomocą
przycisków!!
Napisałem podręcznikowy przykład - jak włączysz przycisk1 to dioda sie zapali-
a tu nie działa!!
Mam Atmega32 oraz LCD 2x16, działają- można wyświetlić zmienne.
ponadto nie moge równierz uzyskać GetRC.
Wszystko normalnie podłączone i nic.

mw
-
-
Posty:242
Rejestracja:23 lut 2003, o 23:22
Lokalizacja:Busko Zdrój
Kontaktowanie:

Postautor: mw » 17 paź 2006, o 16:38

Wklej kawalek programu obslugi przyciskow i diod. Moze masz zle skonfigurowane porty. Jesli korzystasz z przyciskow to linie powinny byc wejsciowe z wlaczonymi rezystorami podciagajacymi.

jacynka84
-
-
Posty:150
Rejestracja:17 maja 2006, o 22:50
Lokalizacja:Sulejówek

Postautor: jacynka84 » 17 paź 2006, o 20:21

Kod: Zaznacz cały

Config Portc = &B11111111 'wszystkie końcówki jako wyjścia Portc = &B11111111 'wszędzie wpisz stan spoczynkowy 1 Config Portd= &B1111100 'dwa najmłodsze jako wejścia Portd = &B1110111 'włączony T2, podciągnięte wejścia Do 'pętla nieskończona If PinC.4 = 0 Then Porta.4 = 0 'S1 - zaświeć lampkę If PinC.5 = 0 Then Porta.4 = 1 'S2 - zgaś lampkę Loop End

Piotr
Moderator
Moderator
Posty:468
Rejestracja:14 lut 2003, o 13:53
Lokalizacja:Warszawa
Kontaktowanie:

Postautor: Piotr » 17 paź 2006, o 22:30

Odnosnie stopki Twoich postow: genialne ;-).
Jak zauwazylem, nasze elyty kieruja sie podobna logika, ale - niestety - na serio :(
Pzdr
PZb

jacynka84
-
-
Posty:150
Rejestracja:17 maja 2006, o 22:50
Lokalizacja:Sulejówek

Postautor: jacynka84 » 17 paź 2006, o 22:42

A co jest nie tak w tamtym kodzie ?
Naprawde nie wiem.
Zrobiłem również wyświetlanie stanów portów na Lcd
,i niezależnie od przycisku było "0"
Niech że mnie ktoś poinstruuje , lub linkiem zarzuci.
przepisywałem pare różnych kodów i efekt ciągle ten sam - diody nie "słuchają"
sie przycisków!

radzio
Moderator
Moderator
Posty:967
Rejestracja:13 maja 2003, o 10:33
Lokalizacja:Sosnowiec
Kontaktowanie:

Postautor: radzio » 18 paź 2006, o 06:28

Kod: Zaznacz cały

Config Portc = &B11111111 'wszystkie końcówki jako wyjścia

Kod: Zaznacz cały

If PinC.4 = 0
Nie uważasz, że jest to absurd? Odczytujesz stan pinu skonfigurowanego jako wyjście.

Kod: Zaznacz cały

Porta.4 = 1

a ten port nawet nie jest skonfigurowany więc też nie zadziała.

jacynka84
-
-
Posty:150
Rejestracja:17 maja 2006, o 22:50
Lokalizacja:Sulejówek

Postautor: jacynka84 » 18 paź 2006, o 18:18

Bez konfiguracji portów też wyświetla same zera ,nie zależnie od
przycisków.
Lcd "" ; porta czy c
jest zawsze 0.
Robiłem również kombinacje if-then'ów - to samo. :573:
przyciski mam na porcie PC.4 ,Diody na PA.4
Niech ktoś coś napisze żeby tępa dioda zapaliła sie jak wcisne przycisk.
Atmega32, przyciski do masy.

Awatar użytkownika
Pantera33
-
-
Posty:62
Rejestracja:25 sie 2004, o 15:23
Kontaktowanie:

Postautor: Pantera33 » 18 paź 2006, o 18:56

1. napisz cały program (krótki) bo opisujesz tylko małe fragmenciki i może problem leży w logice programu.
2. odpowiednia konfiguracja portów to podstawa.
3. również w fusach - M32 ma domyślnie włączony jtag na porcie C (chyba)
4. do obsługi przycisków wygodnie jest użyć debounce.

jacynka84
-
-
Posty:150
Rejestracja:17 maja 2006, o 22:50
Lokalizacja:Sulejówek

Postautor: jacynka84 » 18 paź 2006, o 19:11

Nie napisze raczej jakiego próbowałem kodu - bo było ich dość dużo,
różne kobinacje config portów i takich tam.
Jaki LB zaznaczyć i jak w bascom;ie żeby uP nie spartolić i wyłączyć ten JTAG?
Ale np . takiego:

Kod: Zaznacz cały

$regfile = "m32def.dat" $crystal = 1000000 Config Portc = &B11111111 Portc = &B11111111 Config Porta = &B11111111 Porta = &B11111111 Do If Pinc.4 = 0 Then Porta.4 = 0 If Pinc.5 = 1 Then Porta.4 = 1 End If Loop End

mw
-
-
Posty:242
Rejestracja:23 lut 2003, o 23:22
Lokalizacja:Busko Zdrój
Kontaktowanie:

Postautor: mw » 18 paź 2006, o 19:29

Przyklad obslugi portow wejsciowych:

Config pinb.5 = output
Config pina.5 =input

'Do linii wejsciowej pina.5 nalezy dolaczyc wewnetrzny rezystor podciagajace jesli
'przycisk zwiera linie wejsciowa do masy.
Set porta.5

teraz mozna odczytywac stan przycisku

If pina.5=0 then
set port.5
else
reset port.5
end if

'Przepraszam za mala pomylke w programie.
'Jesli nacisnie sie przycisk na na linii b.5 pojawi sie stan wysoki, w przeciwnym razie niski.
Ostatnio zmieniony 21 paź 2006, o 11:00 przez mw, łącznie zmieniany 1 raz.

Awatar użytkownika
Pantera33
-
-
Posty:62
Rejestracja:25 sie 2004, o 15:23
Kontaktowanie:

Postautor: Pantera33 » 18 paź 2006, o 22:16

Pisano tu już o tym, że wejście i wyjście to nie to samo....

FSH:
Załączniki
m32.JPG

jacynka84
-
-
Posty:150
Rejestracja:17 maja 2006, o 22:50
Lokalizacja:Sulejówek

Postautor: jacynka84 » 19 paź 2006, o 20:49

Wpisałem wyżej wymienione JTAG na disabled -wszystko nadal ok z uP -nie
sknociłem go, ale program nie działa. :573:
Po prostu.
Diody na PA, 4i5 - swiche na PC ,4i5
Jescze impulsator z myszy na D ,nie pamiętam które piny.
Jeszcze pokombinuje.
Wbiłem mu taki kod:

Kod: Zaznacz cały

$regfile = "m32def.dat" $crystal = 1000000 Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5 , E = Portb.1 , Rs = Portb.0 Config Lcd = 16 * 2 Config Porta.4 = Input Config Portc.4 = Output Portc = &B11111111 Do Cls Cursor Off Lcd "" ; Portc.4 Waitms 600 Loop End
oczywiście pokazuje "1" na lcd lub "0" jak są zera w Port config.
ale nie reaguje na przyciski.

szymel
-
-
Posty:212
Rejestracja:16 sty 2005, o 16:42
Lokalizacja:Włocławek

Postautor: szymel » 20 paź 2006, o 05:07

...oczywiście pokazuje "1" na lcd lub "0" jak są zera w Port config.
ale nie reaguje na przyciski.
Powtórzę to , o czym wspominał już mw:( Rejestrem , który odzwierciedla stany na końcówkach(pinach) portu , jest rejestr PINx , a nie PORTx.Pozostaw powyższy kod bez zmian , za wyjątkiem:

Kod: Zaznacz cały

LCD "" ; Portc.4
Tę linię zmień na ...

Kod: Zaznacz cały

LCD "" ; Pinc.4
... , a zobaczysz na LCD co się dzieja z PINC.4 , jak wciśniesz lub puścisz przycisk podłączony do tego pinu.
Jeśli zaś chodzi o "nieszczęsnego" JTAG-a , to nie musimy koniecznie wyłączać go za pomocą fusebitu JTAGEN , bo można to zrobic programowo.W Bascomie np.

Kod: Zaznacz cały

$regfile="m32def.dat" '... Set Mcucsr.jtd !out Mcucsr,r24
Jeśli "na JTAG-u" mamy np. LCD , to po wyłączeniu go(JTAG) , trzeba zainicjować ponownie LCD poprzez Initlcd.

Piotrek

Awatar użytkownika
Pantera33
-
-
Posty:62
Rejestracja:25 sie 2004, o 15:23
Kontaktowanie:

Postautor: Pantera33 » 20 paź 2006, o 13:33

1. rezystor podciągający ma być włączony dla wejść
2. LCD pinc.4
3. Nawet gdybyś miał dobrze poprzednie punkty to nie bardzo widzę od czego miałby się zmienić stan wyjść? Chodzi o pętlę do-loop. Tam nic go nie zmienia - logika programu. - przepisz to co napisał MW.
4. No i jeszcze zawartość pętli:
4.1 po co tam jest cursor off
4.2 cls daj też przed pętlą, bo będzie migało, zamiast tego daj np. home

jacynka84
-
-
Posty:150
Rejestracja:17 maja 2006, o 22:50
Lokalizacja:Sulejówek

Postautor: jacynka84 » 20 paź 2006, o 14:11

Zadziałało to co napisał szymel : literówka z Pinx.x a Portx.x :564: :mrgreen:

Czy funkcja wait lub waitms działa precyzyjnie z zewn. kwarcem np. 12Mhz?
Ciekawy jestem czy można jej użyć do odliczenia czasu jako budzik :? ?
Policzyłbym ile jest sekund "do rana" i już.

radzio
Moderator
Moderator
Posty:967
Rejestracja:13 maja 2003, o 10:33
Lokalizacja:Sosnowiec
Kontaktowanie:

Postautor: radzio » 20 paź 2006, o 14:26

Policzyłbym ile jest sekund "do rana" i już.
Jeśli "do rana" to może zadziała - dla niektórych rano to godzina 5 a dla innych 10 ;)

jacynka84
-
-
Posty:150
Rejestracja:17 maja 2006, o 22:50
Lokalizacja:Sulejówek

Postautor: jacynka84 » 20 paź 2006, o 14:53

Czyli mógłby sie tak mocno "rypnąć"? :573:
Np 7.00?

radzio
Moderator
Moderator
Posty:967
Rejestracja:13 maja 2003, o 10:33
Lokalizacja:Sosnowiec
Kontaktowanie:

Postautor: radzio » 20 paź 2006, o 16:35

W dokumentacji instrukcji waitms jest napisane :
No accurate timing is possible with this command.
Zdecydowanie dokładniej będzie odmierzać czas za pomocą któregoś z timerów.

jacynka84
-
-
Posty:150
Rejestracja:17 maja 2006, o 22:50
Lokalizacja:Sulejówek

Postautor: jacynka84 » 20 paź 2006, o 18:50

Ok .pokombinuje z nimi.
Czy jak szeregowo z układem łącze rezystor 1ohm do którego równolegle podłącze woltomierz, otrzymam ampery??
Zanim to sprawdze/spiernicze układ,wole zapytać. :573:
Jeśli nie, to jak sie mierzy te ampery?

radzio
Moderator
Moderator
Posty:967
Rejestracja:13 maja 2003, o 10:33
Lokalizacja:Sosnowiec
Kontaktowanie:

Postautor: radzio » 20 paź 2006, o 18:54

Czy jak szeregowo z układem łącze rezystor 1ohm do którego równolegle podłącze woltomierz, otrzymam ampery??
Otrzymasz napięcie (volty) proporcjonalne do prądu (amperów) ale to ciągle bedzie napięcie.
Zgodnie z prawem Ohma na rezystorze 1Ohm przy prądzie 1A wystąpi spadek napięcia 1V.

Wróć do „Projektowanie PCB, programy EDA, CAD, narzędziowe”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 21 gości