logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Program działa w symulatorze, w realu nie

carter 14 Cze 2011 09:37 3323 10
  • #1 9609806
    carter
    Poziom 12  
    Witam.
    Wykonuję aplikację na procesor Motorola MC68HC908QT2
    Używam środowisca Code Warrior 6.3
    Napisałem program który zasymulowałem i działa on w symulatorze bezbłędnie. niestety po wgraniu do procesora nie.
    Zastanawiam się że może jest jakiś błąd natury technicznej tj. :

    1. W programie używam 2 linii portu jako wejścia i 2 linni portu jako wyjścia.
    Jako wejścia podłączyłem przyciski "reseciki" bezpośrednio do zasilania aby po naciśnięciu mieć stan wysoki, czy jest to poprawne?? Czy gdy przyciski są zwolnione, układ zawsze traktuje to jako "0" czy mogą gdzieś tu występować jakieś pojemności?

    2. Mikrokontroler steruje rejestrami przesuwnymi HD74LS164P, czy na pewno te układy są ze sobą kompatybilne?? Jedno wyjście MCU symuluje zegar, drugie wyjście dane.

    3. za stabilizatorem napięcia mam okolo 4.5V . Czy może być to przyczyną złej pracy rejestrów które potrzbują 5V+-5% ??

    4. Poza tym mam problemy z samym zaprogramowaniem MCU. Rzadko się udaje, często wyskakuje: "Un-secured: No" oraz jest problem z Security-Code.

    Jakieś sugestie i pomysły?
  • #2 9673228
    maciej_333
    Poziom 38  
    carter napisał:
    Witam.
    Wykonuję aplikację na procesor Motorola MC68HC908QT2
    Używam środowisca Code Warrior 6.3
    Napisałem program który zasymulowałem i działa on w symulatorze bezbłędnie. niestety po wgraniu do procesora nie.
    Zastanawiam się że może jest jakiś błąd natury technicznej tj. :

    1. W programie używam 2 linii portu jako wejścia i 2 linni portu jako wyjścia.
    Jako wejścia podłączyłem przyciski "reseciki" bezpośrednio do zasilania aby po naciśnięciu mieć stan wysoki, czy jest to poprawne?? Czy gdy przyciski są zwolnione, układ zawsze traktuje to jako "0" czy mogą gdzieś tu występować jakieś pojemności?

    2. Mikrokontroler steruje rejestrami przesuwnymi HD74LS164P, czy na pewno te układy są ze sobą kompatybilne?? Jedno wyjście MCU symuluje zegar, drugie wyjście dane.

    3. za stabilizatorem napięcia mam okolo 4.5V . Czy może być to przyczyną złej pracy rejestrów które potrzbują 5V+-5% ??

    4. Poza tym mam problemy z samym zaprogramowaniem MCU. Rzadko się udaje, często wyskakuje: "Un-secured: No" oraz jest problem z Security-Code.

    Jakieś sugestie i pomysły?


    Nie znam tej rodziny mikrokontrolerów.
    1. Jeśli dobrze zrozumiałem, to przycisk dołączyłeś pomiędzy linię portu a +Ucc ? Jak tak, to jest to bardzo błędne. Ustaw linię portu na poziom wysoki (z poziomu softu), a przycisk dołącz typowo - pomiędzy linię portu, a masę. Program przerabiasz, tak by wykrywał wciśnięcie przycisku - poziom niski. Musisz też odtłumić drgania styków.
    W takiej sytuacji, jak masz teraz linia będzie stale odczytywana jako 1 - przynajmniej w AVR, 8051. Nie analizowałem budowy portu 68HC.

    2. Układy te są zgodne.

    3. Trochę niskie napięcie występuje na wyjściu Twojego stabilizatora (zakładam, że to 7805). Zmierz napięcie przed nim potem, wyjmij wszystkie układy z podstawek i zmierz napięcie na wyjściu stabilizatora bez obciążenia. Prawdopodobnie masz za niskie napięcie na wejściu 7805, albo jest on przeciążony. Przy napięciu zasilania 4,5V układy 74LS powinny pracować poprawnie.

    4. Wina programatora, oprogramowania, konfiguracji portów w PC. Może być też tak, że ten mikrokontroler był już programowany ogromną ilość razy i to właśnie powoduje problem.

    Pokaż schemat układu, bo widzę tu chyba brak doświadczenia, ale mogę się mylić.
  • #3 9673246
    Konto nie istnieje
    Konto nie istnieje  
  • #4 9673274
    gaskoin
    Poziom 38  
    carter napisał:
    Czy gdy przyciski są zwolnione, układ zawsze traktuje to jako "0" czy mogą gdzieś tu występować jakieś pojemności?


    Musiałbyś w nocie zobaczyć jaki masz stan na pinie, czy jest to wysoka impedancja czy coś innego :) Da się to skonfigurować
  • #5 9673275
    maciej_333
    Poziom 38  
    albertb napisał:
    maciej_333 napisał:
    1. Jeśli dobrze zrozumiałem, to przycisk dołączyłeś pomiędzy linię portu a +Ucc ? Jak tak, to jest to bardzo błędne.


    A możesz podać choć jeden argument merytoryczny popierający tak radykalne stwierdzenie?

    Albert


    Wszystko zależy od budowy portu i jego konfiguracji. Prosty argument, o który kolega prosi: jeżeli przez pomyłkę programowo ustawimy linię na 0, to po wciśnięciu przycisku (zakładam brak rezystora, bo autor o nim nie pisze) możemy uszkodzić daną linię portu, lub nawet cały mikrokontroler. Ponadto jeżeli ustawimy linię na 1, to zwarcie jej do +Ucc nic nie zmienia. Zostanie ona odczytana dalej jako 1. Nawet, jak w 68HC można przestawić linię, na zwykłe wejście (podobne do wejść zwykłych nMOS, CMOS) to i tak jest to błędne. Bez wciśnięcia przycisku linia "wisi".
  • #6 9673376
    Konto nie istnieje
    Konto nie istnieje  
  • #7 9673401
    carter
    Poziom 12  
    Nie mogłem się doczekać długo odpowiedzi więc wszystko już rozwiązałem...:
    1.Przyciski jako że rzeczywiście "wisiały" dlatego podłączyłem na stałe linie do Ucc, zaś przyciskiem umożliwiłem zerowanie, i zadziałało.

    Natomiast wszelkie inne problemy których się doszukiwałem rozwiązały się jak sobie wreszcie uświadomiłem że po resecie WatchDog jest automatycznie uruchamiany, dlatego nic nie działało, ponieważ układ ciągle się sam resetował.

    Jednak co do samego programowania, nie mam pojęcia dlaczego ale uruchmianie Trybu programowania w CodeWarriorze z róznych projektów daje różne efekty, na jednym jest Security, na drugim nie, ważne że można uruchomić na jednym a wczytać drugi i wtedy też jest dobrze.

    Temat do zamknięcia.
  • #8 9673427
    maciej_333
    Poziom 38  
    albertb napisał:
    Kłopot w tym, że jeśli w Twoim poście zamienię o na 1 a Vcc na GND będzie to argumentacja równie prawdziwa, aby nie podłączać odwrotnie ;-)

    Albert


    Wyjścia mikrokontrolerów są w końcu dwukierunkowe. Końcowy tranzystor danej linii portu ma w drenie rezystor podciągający - wewnętrzny. Np. w AVR można podciąganie wyłączyć, ale to nie ma tu związku. Wartość tego rezystora jest rzędu KΩ więc zwarcie linii portu z masą nic nie uszkodzi. Odczyt stanu takiej linii nadal jest poprawny. W sumie nigdy nie widziałem rozwiązanie z przyciskiem dołączonym pomiędzy +Ucc a linię portu.

    carter napisał:
    Nie mogłem się doczekać długo odpowiedzi więc wszystko już rozwiązałem...:
    1.Przyciski jako że rzeczywiście "wisiały" dlatego podłączyłem na stałe linie do Ucc, zaś przyciskiem umożliwiłem zerowanie, i zadziałało.


    To żart ? Dołączyłeś linie portu do +Ucc ??? Przycisk dołączony pomiędzy linię portu, a masę ??? Reset poprzez zwierania zasilania - śmieszne
    :D. Chyba, że źle kolegę zrozumiałem.
  • #9 9673466
    carter
    Poziom 12  
    Sorka, źle napisałem, nie bezpośrenio pod Ucc. Między linię portu a Ucc dałem opornik 3k. Natomiast w wypadku naciśnięcia przycisku zasilanie zwieram przez opornik, a linie portu wprost do masy. Działa jak należy. Chociaż to i tak niepotrzebnie, bo okazuje sie że można programowo włączyć rezystory podciągające na portach...
  • #10 9673513
    maciej_333
    Poziom 38  
    carter napisał:
    Sorka, źle napisałem, nie bezpośrenio pod Ucc. Między linię portu a Ucc dałem opornik 3k. Natomiast w wypadku naciśnięcia przycisku zasilanie zwieram przez opornik, a linie portu wprost do masy. Działa jak należy. Chociaż to i tak niepotrzebnie, bo okazuje sie że można programowo włączyć rezystory podciągające na portach...


    Ale do czego Ci ten rezystor ? Włączasz podciąganie, przycisk dołączasz pomiędzy masę, a linię portu.
  • #11 9673627
    carter
    Poziom 12  
    No właśnie na tym polega nauka że nie wszystko się wie od razu. Nie myślałem że jest możliwość włączenia podciągania, dlatego zrobiłem to sprzętowo, następnym razem będe wiedział...
REKLAMA