Wpis z mikrobloga

Cześć, mam problem z funkcją do obsługi klawiatury matrycowej - kod. Działa do momentu wykrycia wciśnięcia klawisza, potem nie chce sprawdzać warunków ustalających z którego rzędu to klawisz. Klawiaturę podpinam do Atmegi 328p do portu D, piny od PD0 do PD4 są wyjściami i obsługują kolumny, przy czym PD4 nie wykorzystuję i cały czas jest w stanie wysokim, a PD5 do PD7 są przypisane do wierszy. Funkcja cały czas przechodzi do ostatniego else i wyświetla to, co wyliczy z wartości j, którą stamtąd pobierze. Elektronicznie raczej wszystko jest ok, sprawdzałem analizatorem. Kombinowałem z tymi warunkami i nic ( ͡° ʖ̯ ͡°), może wy coś wymyślicie.
#avr #atmega #elektronikadiy
  • 8
  • Odpowiedz
Czy PIND nie powinien tu mieć 1 na wejściach?


@Pan_Sarna: przecież sam napisałeś

piny od PD0 do PD4 są wyjściami i obsługują kolumny


Więc PD0 do PD4 będą pokazywały faktyczny stan pinów wyjściowych.
  • Odpowiedz
@zetisdead: Widzę, że źle tu napisałem i chodzi o piny od PD0 do PD3. W każdym razie na, nich pokazuje ustalone stany w PIND. Ale PINy odpowiadające za wejścia (PD4 - PD7) mają włączone pull upy co widać na PORTD, a na PIND jest tam 0.
Pierwszy raz bawię się debuggerem i nie wiem czy to tak powinno wyglądać, czy coś poszło nie tak w kodzie?
  • Odpowiedz
Ale PINy odpowiadające za wejścia (PD4 - PD7) mają włączone pull upy co widać na PORTD, a na PIND jest tam 0.

Pierwszy raz bawię się debuggerem i nie wiem czy to tak powinno wyglądać, czy coś poszło nie tak w kodzie?


@Pan_Sarna: możliwości są dwie:
1. używasz symulatora a nie rzeczywistego układu do debugowania i stan PIND musisz sam sobie zasymulować klikając w checkboxy
2. używasz debugowania w docelowym układzie
  • Odpowiedz
@zetisdead: Debugowałem w symulatorze, nie mam JTAGa, żeby debugować sprzętowo. Sprawdziłem znowu analizatorem i coś nie tak jest z przebiegami. Z kolei w symulatorze poustawiałem tak jak pisałeś i wszystko wyglądało ok. Trzeba do tego usiąść na spokojnie jak to mówią i przejrzę jeszcze raz kod i ustawienia portów.
  • Odpowiedz
@zetisdead: Udało mi się w końcu to rozgryźć. Po przejrzeniu przebiegów na analizatorze okazało się, że źle zachowywały się wyjścia, przez breaka w złym miejscu. To nie rozwiązało sprawy do końca, bo musiałem zmienić trochę zmienić maski rejestru PIND. Trochę się tu inspirowałem kodem znalezionym w książce i czemu to działa, a poprzednie nie działało to już nie wiem. xD Następne biorę się za ogarnięcie podpinania wyświetlaczy LCD, żeby mieć podgląd
  • Odpowiedz
@Pan_Sarna: pamiętaj, że nie możesz czytać stanu wierszy zaraz po wymuszeniu stanu kolumn (jeden NOP to może być zbyt mało), bo napięcia muszą się ustalić, zwłaszcza, ze nie masz porządnych podciągów, tylko słabe pull-upy.
  • Odpowiedz