Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 12 sie 2020, o 04:10


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 14 ] 
Autor Wiadomość
PostNapisane: 7 gru 2019, o 15:31 
Offline
Użytkownik

Dołączył(a): 25 cze 2015
Posty: 65
Lokalizacja: Gdańsk
Pomógł: 1

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.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 gru 2019, o 15:38 
Offline
Użytkownik

Dołączył(a): 05 sty 2015
Posty: 309
Lokalizacja: Mielec
Pomógł: 13

A JTAG wyłączony?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 gru 2019, o 15:38 
Offline
Użytkownik

Dołączył(a): 25 cze 2015
Posty: 65
Lokalizacja: Gdańsk
Pomógł: 1

OCZYWIŚCIE.

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 gru 2019, o 16:13 
Offline
Użytkownik

Dołączył(a): 14 sie 2016
Posty: 907
Pomógł: 39

klik zerujesz gdziekolwiek?

_________________
Moje porady są błędne,nie czytać,zbanować od razu.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 gru 2019, o 16:17 
Offline
Użytkownik

Dołączył(a): 25 cze 2015
Posty: 65
Lokalizacja: Gdańsk
Pomógł: 1

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 gru 2019, o 16:22 
Offline
Użytkownik

Dołączył(a): 22 kwi 2017
Posty: 94
Lokalizacja: Piła
Pomógł: 4

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 gru 2019, o 16:28 
Offline
Użytkownik

Dołączył(a): 25 cze 2015
Posty: 65
Lokalizacja: Gdańsk
Pomógł: 1

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.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 gru 2019, o 16:52 
Offline
Użytkownik

Dołączył(a): 22 kwi 2017
Posty: 94
Lokalizacja: Piła
Pomógł: 4

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

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

Taktuje Ci RTC co sekundę.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 gru 2019, o 17:03 
Offline
Użytkownik

Dołączył(a): 05 gru 2017
Posty: 301
Lokalizacja: Puck
Pomógł: 7

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 gru 2019, o 17:45 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2014
Posty: 899
Lokalizacja: Trójmiasto
Pomógł: 167

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 postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 gru 2019, o 18:03 
Offline
Użytkownik

Dołączył(a): 05 gru 2017
Posty: 301
Lokalizacja: Puck
Pomógł: 7

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 gru 2019, o 18:30 
Offline
Użytkownik

Dołączył(a): 25 cze 2015
Posty: 65
Lokalizacja: Gdańsk
Pomógł: 1

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.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 gru 2019, o 13:54 
Offline
Użytkownik

Dołączył(a): 22 kwi 2017
Posty: 94
Lokalizacja: Piła
Pomógł: 4

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.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 gru 2019, o 17:42 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 25773
Lokalizacja: Szczecin
Pomógł: 974

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 ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 14 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO