Witam,
bardzo Was proszę drodzy koledzy o pomoc w ustaleniu przyczyny dziwnego działania programu na procesorze ATmega, bo już zaczynam dostawać białej gorączki od tego. Bardzo mi zależy na szybkim ukończeniu projektu, a tu co chwilę jakieś problemy i zmarnowane dni na szukanie przyczyn niepowodzeń.
Problem polega na tym iż procesor co jakiś czas wykonuje instrukcje w sposób w jaki teoretycznie nie powinien. Nie mogąc zlokalizować wyraźnego błędu w programie zacząłem go stopniowo upraszczać, aż w końcu tak mocno go okroiłem, że już wszystko wydaje się jasne i oczywiste, a teoretycznie procesor nie powinien zrobić nic nieprzewidzianego, ale to nie rozwiązało problemu.
W załączniku w formie obrazka (żeby było łatwiej się rozeznać- kolorki) przedstawiam już tą najprostszą formę programu, który w tej wersji ma w zasadzie przetestować przerwania od trzech przycisków. Przerwanie od nich jest na INT2 (zboczem opadającym) a rozróżnienie na porcie C (PC4=0 i PC5=1 => przycisk 1, PC4=1 i PC5=0 => przycisk2, PC4=1 i PC5=1 => przycisk3). W zależności od tego który został wciśnięty to na wyświetlaczu wyświetla odpowiedni symbol.
Działa to nie najgorzej, czasem zdarza się że błędnie rozpozna przycisk (być może nie udało mi się całkowicie wyeliminować drgań styków), ale nie to jest problemem tylko to, że co jakiś czas (co kilkanaście naciśnięć- liczba nie jest stała) udaje się programowi wejść do trybu SPECIAL. Jest to dla mnie bardzo dziwne bo w tak napisanym programie wydaje się, że nie ma w ogóle takiej możliwości.
Tu wielka prośba do Was. Może ktoś wie o jakiejś właściwości tych procesorów o której nie wiem i na którą to nie zabezpieczyłem się w kodzie, a może coś przeoczyłem. Bo już zaczynam podejrzewać uszkodzenie procesora. Procesor programuje się prawidłowo (nie wyrzuca błędów i program odczytany jest zgodny z tym co było do zaprogramowania). Dodam, że jest to procesor ATmega32 jest on taktowany kwarcem 16MHz, porty są ustawione prawidłowo (choć to nie powinno mieć na to zachowanie wpływu- bardziej na prawidłowe działanie przerwania) w AVR studio jest dobrze zadeklarowany typ procesora. W obrazkach kodu nie pokazałem ustawień portów i trybu SPECIAL, ale to nie ma wpływu na pierwszą część programu.
Bardzo proszę Was o szybką pomoc w ustaleniu przyczyny bo już zaczynam się załamywać.
Dziękuję za zainteresowanie i pozdrawiam

bardzo Was proszę drodzy koledzy o pomoc w ustaleniu przyczyny dziwnego działania programu na procesorze ATmega, bo już zaczynam dostawać białej gorączki od tego. Bardzo mi zależy na szybkim ukończeniu projektu, a tu co chwilę jakieś problemy i zmarnowane dni na szukanie przyczyn niepowodzeń.
Problem polega na tym iż procesor co jakiś czas wykonuje instrukcje w sposób w jaki teoretycznie nie powinien. Nie mogąc zlokalizować wyraźnego błędu w programie zacząłem go stopniowo upraszczać, aż w końcu tak mocno go okroiłem, że już wszystko wydaje się jasne i oczywiste, a teoretycznie procesor nie powinien zrobić nic nieprzewidzianego, ale to nie rozwiązało problemu.
W załączniku w formie obrazka (żeby było łatwiej się rozeznać- kolorki) przedstawiam już tą najprostszą formę programu, który w tej wersji ma w zasadzie przetestować przerwania od trzech przycisków. Przerwanie od nich jest na INT2 (zboczem opadającym) a rozróżnienie na porcie C (PC4=0 i PC5=1 => przycisk 1, PC4=1 i PC5=0 => przycisk2, PC4=1 i PC5=1 => przycisk3). W zależności od tego który został wciśnięty to na wyświetlaczu wyświetla odpowiedni symbol.
Działa to nie najgorzej, czasem zdarza się że błędnie rozpozna przycisk (być może nie udało mi się całkowicie wyeliminować drgań styków), ale nie to jest problemem tylko to, że co jakiś czas (co kilkanaście naciśnięć- liczba nie jest stała) udaje się programowi wejść do trybu SPECIAL. Jest to dla mnie bardzo dziwne bo w tak napisanym programie wydaje się, że nie ma w ogóle takiej możliwości.
Tu wielka prośba do Was. Może ktoś wie o jakiejś właściwości tych procesorów o której nie wiem i na którą to nie zabezpieczyłem się w kodzie, a może coś przeoczyłem. Bo już zaczynam podejrzewać uszkodzenie procesora. Procesor programuje się prawidłowo (nie wyrzuca błędów i program odczytany jest zgodny z tym co było do zaprogramowania). Dodam, że jest to procesor ATmega32 jest on taktowany kwarcem 16MHz, porty są ustawione prawidłowo (choć to nie powinno mieć na to zachowanie wpływu- bardziej na prawidłowe działanie przerwania) w AVR studio jest dobrze zadeklarowany typ procesora. W obrazkach kodu nie pokazałem ustawień portów i trybu SPECIAL, ale to nie ma wpływu na pierwszą część programu.
Bardzo proszę Was o szybką pomoc w ustaleniu przyczyny bo już zaczynam się załamywać.
Dziękuję za zainteresowanie i pozdrawiam