Dobry wieczór,
napotkałem na swojej drodze pewien problem, z którym chyba nie jestem w stanie sobie poradzić.
Zacznę od początku:
Chciałem stworzyć takie sobie fikuśne urządzenie, które po naciśnięciu danego przełącznika podłączonego do pinu mikrokontrolera, prześle poprzez FT232 na port COM, jakiś pożądany przeze mnie ciąg znaków. Okej, nawet to się udało. Po zmarnowaniu jakiegoś 1m^2 laminatu powstał w końcu prototyp. O dziwo, w przeciwieństwie do innych prototypów ten działał. Tzn. tak mi się wydawało. Ale do sedna.
Do PIN'u podpina przycisk. Przycisk zwiera do masy. Pin podciągam do Vcc. Chcę, aby po zmianie stanu na pinie, kontroler wysyłał dany ciąg znaków ale tylko raz przez okres wciśnięcia przełącznika. Użyłem do tego celu pomocniczej zmiennej zwanej w dalszej części "state_change1". Ma ona na celu ograniczenie transmisji do jednokrotnego przesyłu. Oto kod:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Okej, w czym tkwi sekret szczęścia ? Otóż, popełniony przeze mnie kod działa, ale tylko dla pinów o numerze 0. Tzn PA0, PB0 etc. Kiedy chce zmienić pin na inny (np. zaprezentowany PA1) to całość się sypie, następuje tylko transmisja pierwszej części gdy przycisk jest wciśnięty (zero na pinie) ale tylko raz. Dalsze wciskanie nie przynosi żadnego rezultatu.
Ponadto po usunięciu dodatkowego warunku tj. "(state_change1 == 1/0)" program zachowuje się tak jak tego oczekuję.
Może to jakaś drobna głupota, ale to samo dzieje się na dwóch różnych, niezależnych Atmegach16.
USART działa bez problemu.
Jakiekolwiek wskazówki mile widziane
