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

Niestabilność AT90S2313 przy 10 MHz - fałszywe sygnały z mikrostyków

Yoshi_80 11 Cze 2003 18:22 1509 4
REKLAMA
  • #1 245714
    Yoshi_80
    Poziom 21  
    Posty: 536
    Pomógł: 4
    Ocena: 9
    Sytuacja wygląda tak : robię przetwornicę sterowaną przebiegiem pwm z mikrokotrolera 90s2313 . Przeszedłem własnie do fizycznej realizacji projektu i jak to bywa nic nie działa. Procesorek puściłem na 10 MHz i zauważyłem ,ze działa on dosyć dziwnie (nie normalnie). Na płytce tuż przy procesorze znajdują się dwa mikrostyki to obsługi urządzenia (podłaczone do masy i procesora). Po wciśnięciu przycisku i zadaniu stanu niskiego na wejściu procesora wykonywane są tam jakieś operacje w programie. Tymczasem procesor wykonuje je pomimo ,że przycisk nie został wciśnięty ,wystarczyło zbliżyć ręke :!: 8O . Procesor jest wersją 10PI ,więc powinien wytrzymać 10 MHz.Jak się tego pozbyć ?? Nie wiem czy wymienić kwarc na inny i zobaczyć ,czy może zmniejszyć kondesatorki przy kwarcu (bo mam 33p). Procesor jest w sumie niezłym weteranem bo był chyba z 500 razy programowany (służy mi do różnych prób) ale to chyba nie ma większego znaczenia. Zależy mi na 10 MHz bo już mam zrobine cewki itd. i nie mogę sobie zmniejszyć częstotliwośći na tranzystorze.

    Druga sprawa to ,że nie jestem pewnien czy procesor poprawnie realizuje program. Do pomiaru napięcia mam zrobiony prościutki przetwornik AD z rezystora i kondensatora wg. noty aplikacyjnej atmela. Oczywiście pomiar mi kompletnie nie działa. Idea jest taka ,że ładuję ten kondensator przez opornik i czekam aż mi sie napięcia na komparatorze zrównaja. Tymczaem nie udało mi się ani razu zrobić pomiaru ,zawsze przepełniał mi się licznik timera. Nie wiem czy dobrze napisałem program ale w skrócie wyglada to mniej więcej tak :

    'konfiguracja komparatora :

    Acsr.0 = 0
    Acsr.0 = 1 'interrupt mode (toggle)
    Acsr.7 = 1 'zasilanie komparatora na off

    On Aci Kon_pomiaru

    'timer :

    Config Timer0 = Timer , Prescale = 1
    On Timer0 Kon_czasu
    .
    .
    .
    dalsza cześć programu z wywołaniem procedury pomiar tym nadpobudliwym przyciskiem przyciskiem :D
    .
    .
    .
    Sub Pomiar
    Acsr.7 = 0 'uruchamia komparator
    Acsr.3 = 1 'uruchamia przerwanie
    Load Timer0 , 64
    Set Portb.2 'ladowanie kondensatora
    Enable Timer0
    End Sub Pomiar

    Kon_pomiaru:
    Czas = Timer0
    Disable Timer0
    Acsr.3 = 0
    Acsr.7 = 1
    Reset Portb.2
    Call Pok_wynik
    Return

    Kon_czasu:
    Disable Timer0
    Acsr.3 = 0
    Acsr.7 = 0
    Reset Portb.2
    Call Poza_zakresem
    Return

    Byłbym bardzo zobowiazny jakby ktoś się przyjżał temu programowi. Nie jestem pewien co do konfiguracji komparatora , ustawiłem bity ACSR.0 i ACSR.1 na 0 co teoretycznie powinno dawać przerwanie w momencie zmiany stanu komparatora.

    Proszę o jakieś sugestie co mam zrocić ,zeby to w końcu zaczęło jakoś działać :) .

    Pozdrawiam.
  • REKLAMA
  • #2 245792
    simon71

    Poziom 20  
    Posty: 272
    Pomógł: 37
    Ocena: 32
    Yoshi_80 napisał:
    Na płytce tuż przy procesorze znajdują się dwa mikrostyki to obsługi urządzenia (podłaczone do masy i procesora). Po wciśnięciu przycisku i zadaniu stanu niskiego na wejściu procesora wykonywane są tam jakieś operacje w programie. Tymczasem procesor wykonuje je pomimo ,że przycisk nie został wciśnięty ,wystarczyło zbliżyć ręke :!: 8O . Procesor jest wersją 10PI ,więc powinien wytrzymać 10 MHz.Jak się tego pozbyć ?? Nie wiem czy wymienić kwarc na inny i zobaczyć ,czy może zmniejszyć kondesatorki przy kwarcu (bo mam 33p). Procesor jest w sumie niezłym weteranem bo był chyba z 500 razy programowany (służy mi do różnych prób) ale to chyba nie ma większego znaczenia. Zależy mi na 10 MHz bo już mam zrobine cewki itd. i nie mogę sobie zmniejszyć częstotliwośći na tranzystorze.



    Sprawdź czy masz na tych wejściach włączony pullup, bo jeśli nie to takie zachowanie procesora jest bardzo prawdopodobne. O kwarc bym się raczej nie martwił, nie sądzę aby on tu był winny.
    Konto firmowe:
    SENSIM
    610A, Skrzyszów, 33-156 | Strona WWW: https://sensim.pl
  • REKLAMA
  • #3 250282
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • #4 250411
    Marek81
    Poziom 19  
    Posty: 367
    Pomógł: 6
    Ocena: 8
    Po pierwsze - przycisk, oczywiście jeśli jest do masy, to konieczny jest pull-up. Ustaw DDR na wejście a PORT na pull-up.

    Po drugie - program, (zaznaczam, że nie jestem ekspertem z Bascoma) moim zdaniem niepotrzebnie załączasz i wyłączasz komparator. Oszczędzanie energii zostaw sobie na później. To może powodować nieustalone przerwania. Najlepiej załącz go na stałe.
    Podobnie z bitem 3, dotyczącym przerwania. Ustaw go na stałe, na "1".

    Po trzecie - napisałeś:
    Cytat:
    Acsr.0 = 0
    Acsr.0 = 1 'interrupt mode (toggle)

    czyli ustawiasz ACIS0 na "1", a ACIS1 na "0"(wartość inicjalizacyjna), a jest to akurat stan zabroniony dla komparatora. Zobacz tabelę 16 na stronie 51 noty katalogowej 90S2313.

    Poza tym mam dla Ciebie radę praktyczną: staraj się pisać program metodą "małych kroczków". Tzn. pisz go etapami, za każdym razem sprawdzając, czy na danym etapie program działa poprawnie. W ten sposób łatwo wyeliminujesz błędy ze swojego programu.

    Pozdrawiam.
  • #5 250923
    serafo
    Poziom 13  
    Posty: 56
    Ocena: 1
    Cytat:

    Sprawdź czy masz na tych wejściach włączony pullup, bo jeśli nie to takie zachowanie procesora jest bardzo prawdopodobne. O kwarc bym się raczej nie martwił, nie sądzę aby on tu był winny.


    a jesli spodziewasz sie zaklocen to nawet zastosuj zewnetrzny rezystor podciagajacy 1k
REKLAMA