Elektroda.pl
Elektroda.pl
X
Elektroda.pl
Relpol przekaźniki
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[tiny2313] Komparator

07 Gru 2008 20:15 1962 9
  • Poziom 25  
    Witam.

    Szukam i szukam ale nie znalazłem rozwiązania problemu komparatora a dokładniej jego obsługiwania pod Bascoma.

    Mam płytkę w której zastosowano AT90S1200 na dodatek zabezpieczony przed odczytem wydaje się być uszkodzony komparator.
    Układ połączony jest dość dziwnie jak na obrazku:

    [tiny2313] Komparator

    Napięcie na nodze 12 jest zależne od napięcia mierzonego ok.1v a na nodze 13 i 14 skacze ciągle w granicy 0,4 0,7 V.
    Jak dla mnie napięcie na nodze 13 powinno być stałe i wynosić powiedzmy 1,1V a jeśli napięcie na nodze 12 przekroczy ten próg to powinno dać przerwanie. Czy może się mylę?
    Jak jest tu rozwiązane ustalanie progu skoro noga 13 jest połączona z 14 i brak punktu stałego odniesienia.

    "The Analog Comparator compares the input values on the positive pin AIN0 and negative
    pin AIN1. When the voltage on the positive pin AIN0 is higher than the voltage on
    the negative pin AIN1, the Analog Comparator output, ACO, is set.

    Comparator porównuje wprowadzone wartości na dodatnim wejściu AIN0 i ujemnym wejściu AIN1.
    Kiedy napięcie na dodatniej stronie AIN0 jest wyższe niż napięcie na ujemna AIN1, wtedy wyjście ACO, jest w stanie wysokim. "

    Pytanie mam takie jak skonfigurować i użyć komparatora w Tiny2313
    bo nie mogę znaleźć nic pod bascoma co by miało jakiś sens.
    Proszę o jakieś wstawki ewentualnie.

    Chce zrobić by program działał sobie do momentu aż napięcie nie przekroczy progu a jak to uczyni by zmieniło stan wyjścia z 0 na 1 na dowolnym porcie np.pd.0.

    Jak dla mnie powinno wyglądać to tak:

    p.s diody to moga być zenery ale nic na nich nie ma wc pewności nie mam.

    [tiny2313] Komparator
  • Relpol przekaźniki
  • VIP Zasłużony dla elektroda
    W AT90S1200 i Attiny2313 nie ma przetwornika ADC. Układ który pokazałeś to dzielnik napięcia R2/R3 + jakieś zabezpieczenie wejścia za pomocą diod. Za jego pomocą można wykonać pomiar napięcia.

    Procesor rozładowuje kondensator C2 ustawiając PB1 = 0. Następnie rozpoczyna pomiar: zeruje timer, ustawia PB1 jako wejście komparatora, a PB2 jako cyfrowe wyjście w stanie wysokim. Kondensator C2 jest ładowany przez rezystor R1 - w momencie gdy napięcia się zrównają, następuje przerwanie od komparatora. Znając R1, C2 oraz czas ładowania można wyznaczyć mierzone napięcie.

    Pozdrawiam,
    Dr.Vee
  • Relpol przekaźniki
  • Poziom 25  
    Wiem że nie ma pomiaru napięcia przez adc i tego nie napisałem tylko porównanie jest:)

    R-47K c-100n.

    Ale to też nie za bardzo bo napięcie pomiarowe wejściowe się zmienia w miarę ładowania akumulatora więc to napięcie teoretycznie się nie wyrówna i właśnie tak się dzieje.

    Działa to tak jak rozumie:

    Wejściowe napięcie jakie jest z ładowanej baterii nie ma stanu więc trzyma diodę czerwoną. Następnie po osiągnięciu progu ( 80% naładowania) komparator daje przerwanie i uruchamia się zegar i zmienia się dioda czerwona na żółtą.
    Jak czas ładowania przekroczy ustawiony czyli jakieś 3 godziny następuje wyłączenie ładowania i zapala się zielona dioda.
    Porównanie jest tylko potrzebne by włączyć zegar na progu 80%.


    Chce przerobić to w taki sposób jak na załączniku 2 czyli ustawić stałą np. 1,2v( Pb.1) i jeśli napięcie wejściowe (pb.0) osiągnie taki stan to ma nastąpić zmiana na wyjściu jakiegoś tam portu.
    Chce to zrealizować na attiny2313 bo to w sumie ten sam procesor a orginał ma uszkodzone wyjście sterowania przekaźnikiem a że bedzie problem z kupieniem go ......

    I właśnie prosiłem o taki przykłąd jak skonfigurować komparator i jak się to obsługuje bo nigdzie nie ma tego.
  • VIP Zasłużony dla elektroda
    nouki napisał:
    R-47K c-100n.

    Ale to też nie za bardzo bo napięcie pomiarowe wejściowe się zmienia w miarę ładowania akumulatora więc to napięcie teoretycznie się nie wyrówna i właśnie tak się dzieje.


    Przy takich R i C kondensator ładuje się do 67% napięcia zasilania w ciągu 4,7 milisekund. Chyba aż tak szybko napięcie na akumulatorze się nie będzie zmieniać? :)

    nouki napisał:
    Chce przerobić to w taki sposób jak na załączniku 2 czyli ustawić stałą np. 1,2v...


    A jak zechcesz zmienić napięcie, to co? :)
    Attiny ma wewnętrzne źródło napięcia odniesienia = 1.1V +/- 0.1V.

    A co do bascoma to zobacz tutaj: http://avrhelp.mcselec.com/config_aci.htm

    Pozdrawiam,
    Dr.Vee
  • Poziom 25  
    Chyba nadal się nie rozumiemy.


    "...Przy takich R i C kondensator ładuje się do 67% napięcia zasilania w ciągu 4,7 milisekund. Chyba aż tak szybko napięcie na akumulatorze się nie będzie zmieniać? .."


    Kondensator się nie doładowuje do takiego stanu bo skoro zasilanie jest 5V to powinno być....a jest max.1v :) częstotliwość narastania to 1Hz.
    Stan wyrównania jest po ok 5h.
    Jeśli by było jak piszesz to przełączenie było by kwestią przypadku Czyż nie??czyli po .... 1min ..1h.. ect.

    zakładamy że napięcie ma 20v na baterii więc podczas ładowania zaczyna rosnąć do 28,8V ( to trwa jakieś 4-5H zależnie od stanu baterii) gdzie ma nastąpić przełączenie. Przerwanie uruchamia zegar tylko przy takim stanie na baterii nie wcześniej i nie później.

    Ale napięcie na pb.0 nie uzyskuje tego stanu tzn na nodze pb.1 jest wtedy 1,3v a na pb.0 jest max. 0,9v.
    Więc akumulator zaczyna przyjmować więcej i więcej ( pb.1 ..1,6..1,8v..) a zegar nie włączy się nim nie będzie osiągnięty stan wyrównania więc po 8 godzinach jak powinna się wyłączyć nie wyłączy się .....


    chodzi o to że nie wiem co wpisać w warunku.

    chce by było tak jeśli pb.0 =pb.1 wtedy zmień stan pd.x i start timerx
    nie wiem jak wpisać właśnie to. Komparator jest domyślnie włączony, nie chce wykrywać zboczy czy opadają czy narastają, chce wykorzystać stan wyrównania .



    p.s w linku który przysłałeś brak jest przykładu o który proszę
  • VIP Zasłużony dla elektroda
    nouki napisał:
    Chyba nadal się nie rozumiemy.

    Możliwe. Przecież ani ja ani Ty nie wiemy, jak oryginalny program działa - można się tylko domyślać :)

    nouki napisał:
    Kondensator się nie doładowuje do takiego stanu bo skoro zasilanie jest 5V to powinno być....a jest max.1v :) częstotliwość narastania to 1Hz.

    A sprawdzałeś oscyloskopem? Po co napięcie ma rosnąć do 5V - zapewne w momencie gdy następuje przerwanie od komparatora program rozładowuje kondensator przygotowując się do następnego pomiaru. Jeśli 1Hz to znaczy, że pomiar napięcia jest wykonywany raz na sekundę.

    Dopóki nie podasz wartości R2 i R3, to nie ma sensu mówić o wartości napięcia baterii. Dioda D2 ogranicza napięcie na nóżce PB0 do max. 5,7V, ale dioda D1 jest jakoś dziwnie włączona - w takiej konfiguracji napięcie na PB0 nie może przekroczyć 0,7V - pewien jesteś, że nie narysowałeś D1 odwrotnie?

    nouki napisał:
    chce by było tak jeśli pb.0 =pb.1 wtedy zmień stan pd.x i start timerx
    nie wiem jak wpisać właśnie to. Komparator jest domyślnie włączony, nie chce wykrywać zboczy czy opadają czy narastają, chce wykorzystać stan wyrównania.


    Sprawdź datasheet, konkretnie chodzi Ci o bit ACO w rejestrze ACSR.

    Pozdrawiam,
    Dr.Vee
  • Poziom 25  
    Sprawdź datasheet, konkretnie chodzi Ci o bit ACO w rejestrze ACSR.

    Ale jak on się nazywa pod Bascomem :) Jak go użyć?

    bardziej by mi chodziło o przerwanie komparatora.
    [tiny2313] Komparator

    Bo chyba to nie wystarczy raczej :)
    if pb.0=pb.1 then
    ...
    ..
    end if


    r3 3,9k r2 100k czyli przy 28v zasilania powinien dać 1,05V i tyle jest.
    Natomiast napięcie max wartość zapisana z miernika dla nogi pb.1 to 654mV na oscyloskopie widać narastanie liniowe i gwałtowny spadek :)

    p.s dioda ma pasek inaczej niż wskazuje miernik czyli jest odwrotnie:)
    Chińska robota :)

    Wyczytałem w wielkiej księdze od ładowarki że zasada jest taka :

    Układ nie uruchamia się jeśli napięcie nie przekracza 16v na baterii.
    Po przekroczeniu progu 16v załączony zostaje przekaźnik i ładowarka startuje. Jeśli stan 80% nie zostanie osiągnięty w czasie 6-8h (zależnie od modelu) następuje przerwanie procesu ładowania. Jeśli stan zostanie osiągnięty zmienia sie kolor diody z czerwonego na żółty i ładuje dalej po czasie 4-6h (zależnie od modelu) następuje odłączenie i zapalenie zielonej diody.

    Bardzo skomplikowane nie ma nawet pomiaru prądu ani napięcia jest tylko czas stan 80% i czas i koniec :) zaawansowana konstrukcja:)
  • Poziom 35  
    Cytat:

    Na przyklad generowac Interrupt

    Config ACI = On|Off, Compare = On|Off, Trigger = Rising|Falling|Toggle

    Enable Interrupts
    Enable IntACI

    On Int ACI akcja
    Do

    Loop
    akcja:

    ................ ' tu wpisz twoj program, obsluga timera lub/oraz kontrola
    ............... ' odpowiedniego wyjscia

    Return
  • Poziom 25  
    Więc rozumie to tak:
    Nie wiem czy "Config ACI ..... "
    powinno być skoro komparator jest włączony i nie będę przechwytywał zawartości timera ani nie wykrywam zboczy.
    Chce tylko określić stan zrównania bądź większej wartości.

    p.s wyświetla błąd "Enable IntACI" twierdząc że nie ma takiego czegoś

    nie czasem tak??

    Enable Interrupts
    Enable Aci
    On Aci Akcja
  • Poziom 35  
    [quote="nouki"]Więc rozumie to tak:
    Nie wiem czy "Config ACI ..... "
    powinno być skoro komparator jest włączony i nie będę przechwytywał zawartości timera ani nie wykrywam zboczy.
    Chce tylko określić stan zrównania bądź większej wartości.

    p.s wyświetla błąd "Enable IntACI" twierdząc że nie ma takiego czegoś

    nie czasem tak??

    Enable Interrupts
    Enable Aci
    On Aci Akcja[/quote]

    Tak, masz absolutna racje. "ACI" jest juz interruptem a nie IntACI - moj blad. (syntax)
    Oczywiscie nie musisz tu stosowac interruptu, ale wtedy musialbys observowac bit piaty (ACO) w ACSR - (Analog Comparator Control
    and Status Register), ktory zmienia sie na "1" w momencie przekroczenia napiecia na pin AIN0 w odniesieniiu do progu zadanego do AIN1.
    Wydaje mi sie ze poslugiwanie sie interruptem jest bardziej przejzyste i zrozumiale.

    e marcus