ATNEL tech-forum
https://forum.atnel.pl/

Dziwne ??? zachowanie pinu PD2
https://forum.atnel.pl/topic22709.html
Strona 1 z 1

Autor:  jaca [ 7 gru 2019, o 15:31 ]
Tytuł:  Dziwne ??? zachowanie pinu PD2

Witam.
Panowie i Panie, no nie mogę zrozumieć co się dzieje. Proszę o jakąś wskazówkę bo już dwa dni nad tym siedzę.
Próbując napisać program do obsługi anemometru chciałem wykorzystać przerwanie INT0 do którego był by podłączony
wiatraczek z kontaktronem. W czasie obrotu łączy i rozłącza masę na pin PD2 na ATmegę 32 a program ma zliczać ile razy w czasie sekundy wystąpiło przerwanie i na tej podstawie obliczać jaka jest prędkość wiatru.
I tu zaczęły się cuda. Zorientowałem się że przerwanie działa w dziwny sposób, więc drogą stopniowej eliminacji zacząłem upraszczać
program. (czytaj - cofać się do tyłu). Wywaliłem dosłownie wszystko, włącznie z timerami, lcd i INT0.
Wstawiłem prostą obsługę klawisza i podłączyłem jako debuger diodę, która ma zmieniać stan na przeciwny po każdym zadziałaniu klawisza. Rolę klawisza wcześniej pełnił wspomniany wiatraczek z kontaktronem.
I co się dzieje.
Jeśli do PD1 lub PD0 lub PDx podłączam masę to dioda zmienia stan na przeciwny i go zachowuje. Jeśli wykorzystuję pin PD2 też tak działa ale pod warunkiem że masa jest podłączona do pinu. Jeśli odczepię masę od pinu PD2 to dioda zaczyna mrugać i tu uwaga tak jak by była napędzana timerem. Mniej więcej sekunda przerwy sekunda świecenia.

Oczywiście wykorzystywany pin jest zawsze podciągnięty do VCC. Taktowanie jest 11059200,ale jego zmiana nic nie zmienia. Wymieniłem mk podejrzewając że coś jest nie tak z tym którego używam. Wszystko robię na płycie Mirka ATB 1.05a.

Pomocy bo oczadzieję ze złości.

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

Autor:  Szofer [ 7 gru 2019, o 15:38 ]
Tytuł:  Re: Dziwne ??? zachowanie pinu PD2

A JTAG wyłączony?

Autor:  jaca [ 7 gru 2019, o 15:38 ]
Tytuł:  Re: Dziwne ??? zachowanie pinu PD2

OCZYWIŚCIE.

Zresztą JTAG jest podłączony do portu C o ile dobrze pamiętam.

Autor:  Harry [ 7 gru 2019, o 16:13 ]
Tytuł:  Re: Dziwne ??? zachowanie pinu PD2

klik zerujesz gdziekolwiek?

Autor:  jaca [ 7 gru 2019, o 16:17 ]
Tytuł:  Re: Dziwne ??? zachowanie pinu PD2

Nie bardzo rozumiem.
A ok.
Nie no nie zeruję bo on sam się zeruje po przepełnieniu. To zmienna uint8.

Autor:  kazekat [ 7 gru 2019, o 16:22 ]
Tytuł:  Re: Dziwne ??? zachowanie pinu PD2

A gdzie masz DDRD |= sensor lub DDRD &= ~senor?

Autor:  jaca [ 7 gru 2019, o 16:28 ]
Tytuł:  Re: Dziwne ??? zachowanie pinu PD2

A po co DDRD |= sensor. Przecież w ten sposób ustawie pin sensora na wyjście a on ma być na wejście.
Zresztą zastanówcie się. Nic nie zmieniając w kodzie, poza tylko zmianą pinu na PD2 powoduje nieprawidłowe działanie. Na innych pinach np. na PD0,1,4,7 jest ok.

Autor:  kazekat [ 7 gru 2019, o 16:52 ]
Tytuł:  Re: Dziwne ??? zachowanie pinu PD2

A nie masz zworki między INT a PD2 pod wyświetlaczem numerycznym?

------------------------ [ Dodano po: 6 minutach ]

Taktuje Ci RTC co sekundę.

Autor:  miki53 [ 7 gru 2019, o 17:03 ]
Tytuł:  Re: Dziwne ??? zachowanie pinu PD2

Witaj jaca

Nie jestem ekspertem ale wydaje mi się że w tym fragmencie kodu coś nie gra

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


w DDRC |= (1<<PC7); ustawiasz kierunek dla pinu PC7 jako wyjście ale nie ustawiasz czy na tym wyjściu ma być stan
niski -0 czy wysoki - 1

a dla PORTD masz ustawiony stan wysoki - 1 ale nie masz ustawionego rejestru kierunku czy to ma być wejście czy wyjście

------------------------ [ Dodano po: 38 minutach ]

Ja za czujnik zastosowałbym fotooptor szczelinowy (nie wiem czy to fachowo tak się to nazywa
ale mam nadzieję że wiesz o co mi chodzi ) niema drgań styków które mogły by zakłócać pomiar

Autor:  xentis [ 7 gru 2019, o 17:45 ]
Tytuł:  Re: Dziwne ??? zachowanie pinu PD2

Układem na zestawie ATB_1.05A który generuje przerwanie co 1s jest układ RTC PCF8583. Tak jak juz wyżej to sugerował kolega kazekat.
Pod wyświetlaczem 4x7 segm masz zespół zworek które są podzielone na grupy. Grupa opisane jako RTC ma 3 piny z czego środkowy z numerkiem 2 jest podłączony do pinu przerwania układu RTC. W tym przypadku masz zapewne założoną zworkę na piny 1-2 która podaje to przerwanie na pin PD2. Najprawdopodobniej zdjęcie tej zworki załatwi sprawę.
Obrazek

Autor:  miki53 [ 7 gru 2019, o 18:03 ]
Tytuł:  Re: Dziwne ??? zachowanie pinu PD2

W tym fragmencie też mi coś nie gra

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


w tym kawałku kodu if(!klik && !(PIND & sensor) ){
powinno być tak if(!klik && !(PINC & sensor) ){

------------------------ [ Dodano po: 6 minutach ]

oraz tutaj else if(klik && (PIND & sensor))klik++;
powinno być else if(klik && (PINC & sensor))klik++;

A nie troszkę z tego portu i troszkę z tamtego
albo robisz to na PINC albo na PIND

Autor:  jaca [ 7 gru 2019, o 18:30 ]
Tytuł:  Re: Dziwne ??? zachowanie pinu PD2

xentis napisał(a):
Układem na zestawie ATB_1.05A który generuje przerwanie co 1s jest układ RTC PCF8583. Tak jak juz wyżej to sugerował kolega kazekat.
Pod wyświetlaczem 4x7 segm masz zespół zworek które są podzielone na grupy. Grupa opisane jako RTC ma 3 piny z czego środkowy z numerkiem 2 jest podłączony do pinu przerwania układu RTC. W tym przypadku masz zapewne założoną zworkę na piny 1-2 która podaje to przerwanie na pin PD2. Najprawdopodobniej zdjęcie tej zworki załatwi sprawę.
Obrazek

Wielkie dzięki!!
Oczywiście że tu był problem. A zastanawiałem się czy coś na zestawie nie jest ekstra z komunikowane z PD2, zajrzałem nawet w schemat i tego nie znalazłem. No cóż starość. Człowiek ślepy nawet w okularach.

------------------------ [ Dodano po: 10 minutach ]

miki53 napisał(a):
Witaj jaca

Nie jestem ekspertem ale wydaje mi się że w tym fragmencie kodu coś nie gra

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


w DDRC |= (1<<PC7); ustawiasz kierunek dla pinu PC7 jako wyjście ale nie ustawiasz czy na tym wyjściu ma być stan
niski -0 czy wysoki - 1

a dla PORTD masz ustawiony stan wysoki - 1 ale nie masz ustawionego rejestru kierunku czy to ma być wejście czy wyjście


PC7 ma być wyjściem bo obsługuje diodę świecącą, jaki ma być stan nie ustawiam bo bym na stałe zapalał diodę albo ją gasił w zależności od tego co bym ustawił. To robi program rozkazem PORTC ^= (1<<PC7);
A PD2 ma być wejściem. Wejść nie trzeba ustawiać bo to ustawienie domyślne mikrokontrolera, więc instrukcja DDRD &=~(1<<PD2) nie jest potrzebna. Natomiast rozkaz PORTD |= (1<<PD2); podciąga ten pin do VCC by pozbyć się stanów nieustalonych.

------------------------ [ Dodano po: 15 minutach ]

miki53 napisał(a):
W tym fragmencie też mi coś nie gra

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


w tym kawałku kodu if(!klik && !(PIND & sensor) ){
powinno być tak if(!klik && !(PINC & sensor) ){

------------------------ [ Dodano po: 6 minutach ]

oraz tutaj else if(klik && (PIND & sensor))klik++;
powinno być else if(klik && (PINC & sensor))klik++;

A nie troszkę z tego portu i troszkę z tamtego
albo robisz to na PINC albo na PIND


Kawałki kodu, które opisałeś obsługują klawisz, inaczej podawanie masy na PD2 i eliminację drgań styków.
Zapoznaj się z poradnikiem Mirka "Drgania styków to bajki".
PORT C obsługuje diodę i z klawiszem nie ma nic wspólnego.

Autor:  kazekat [ 8 gru 2019, o 13:54 ]
Tytuł:  Re: Dziwne ??? zachowanie pinu PD2

jaca napisał(a):
No cóż starość. Człowiek ślepy nawet w okularach.

Podałeś temat na forum, było więcej okularów więcej można zauważyć.
Powodzenia.

Autor:  mirekk36 [ 8 gru 2019, o 17:42 ]
Tytuł:  Re: Dziwne ??? zachowanie pinu PD2

kazekat napisał(a):
Podałeś temat na forum, było więcej okularów więcej można zauważyć.

Krótko mówiąc - forum to takie większe okulary ;)

Strona 1 z 1 Strefa czasowa: UTC + 1
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/