Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Bascom- znowu warunek IF-ELSE.

inspector_electro 18 Apr 2017 22:41 1563 23
Tespol
  • #1
    inspector_electro
    Level 22  
    Witam wszystkich.

    Borykam sie od paru godzin z funkcją ELSE.
    Otóż w programie, gdy ADC wykryje napięcie mniejsze od 3.35V, wtedy ma pojawić się tekst "naladuj" i ikonka pustej baterii. Po wykryciu podpiętej ładowarki ma się wyświetlać tekst
    "laduje" i ikonka baterii z piorunem. Próbuję na różne sposoby z funkcją ELSE i prawie jest ok. Prawie dla tego,
    że napis szybko się zmienia z "naladuj" na "laduje". (drży). Próbowałem z flagą, ale
    nie idzie. Dodam że jeśli napiszę źle składnię, procesor mi sie nie chce wybudzić po naciśnięciu przycisku, a jest ustawiony INT0 powerdown.

    Oto kawałek programu:

    Code: vbnet
    Log in, to see the code


    W takiej konfiguracji jest ok, poza zmieniającym się szybko tekstem.
    Pomóżcie.
  • Tespol
  • #2
    User removed account
    User removed account  
  • Tespol
  • #3
    inspector_electro
    Level 22  
    Nie nie to nie tak.
    To jest zegarek z oledem i atmega328. Po podłaczeniu ładowarki czyli "charge_detect alias pind.1" ten pin wykrywa stan wysoki z podpiętej ładowarki, ma się wyświetlić "laduje". Natomiast jeśli napięcie akumulatorka spadnie poniżej 3.35v(mierzy ADC) wtedy ma się wyświetlić "naładuj". W tej składni co podałem to działa ale zmieniają mi się szybko te napisy.

    Drugi przykład podałeś lepszy :). Tylko że przy naładowaniu akumulatora do 4,18v
    bo tak ładuje układ SMD MIcrochipa napis "naładowany" pozostanie na wyświetlaczu. Chyba żeby napisać obsługę wykrycia niskiego stanu i wtedy zresetować oleda?
  • #4
    User removed account
    User removed account  
  • #6
    User removed account
    User removed account  
  • Helpful post
    #8
    User removed account
    User removed account  
  • #9
    inspector_electro
    Level 22  
    Przy kodzie który podałeś :

    Code: vbnet
    Log in, to see the code


    Jest idealnie.

    Dodano po 3 [minuty]:

    Tak pamiętam jak mówiłeś. Ale ja nie uczyłem się BAscoma od podstaw. Znam go co nieco, i zazwyczaj zlepiam program z kilku kawałków. Aczkolwiek robię sam coraz więcej. Do AVR siadam jak mam czas, bo pracuję za granicą i tam nie mam jak.
    Póki co, bardzo ci dziękuję ZNOWU :) za pomoc" - napisanie.

    Apropos tego kodu, to czemu jest zły?
  • #10
    JacekCz
    Level 39  
    inspector_electro wrote:

    Jest idealnie.
    Dodano po 3 [minuty]:
    Tak pamiętam jak mówiłeś. Ale ja nie uczyłem się BAscoma od podstaw. Znam go co nieco, i zazwyczaj zlepiam program z kilku kawałków. Aczkolwiek robię sam coraz więcej. Do AVR siadam jak mam czas, bo pracuję za granicą i tam nie mam jak.
    Póki co, bardzo ci dziękuję ZNOWU :) za pomoc" - napisanie.

    Apropos tego kodu, to czemu jest zły?


    tak a propos uczenia się, ELSE nie jest funkcją
  • #11
    inspector_electro
    Level 22  
    Tak wiem. Tak tylko napisałem.
    Ogólnie to za wcześnie się ucieszyłem. Na czas testów kodu od Niveasoft, miałem wyłączony ADC i wyświetlanie było ok. Po włączeniu z powrotem ADC, procesor nie chce się wybudzić. Znowu jestem w kropce. Siedzę nad tym i kombinuję.

    Tytuł już zmieniłem na DYREKTYWA :)
  • #12
    User removed account
    User removed account  
  • #13
    inspector_electro
    Level 22  
    Temat ostatecznie zmieniłem.

    Program działa, jeśli wywalę / "zaremuję" obsługę Wyświetlania baterii-nie napięcia. To jest dziwne, bo adc i reszta jest ok. Ale jek tylko dołożę obsługę wyświetlania ikonek IF-ELSE to procesor nie budzi się. Dodam że automatyczne wyłączanie zrealizowałem na transoptorze, bo inaczej miałem problemy z wybudzaniem.

    Program:

    Code: vbnet
    Log in, to see the code
  • #14
    User removed account
    User removed account  
  • #15
    inspector_electro
    Level 22  
    Zegar mozna było wyłączyć i włączyć tylko raz. Później już nie reagował. Więc w kodzie powerdown dodałem tylko: LOCK = 1

    Code: vbnet
    Log in, to see the code


    Po tym zabiegu włącza się i wyłącza za każdym razem. Był też problem z obsługą
    wyłączenia po określonych sekundach. Przeniosłem ją pod odczyt czasu, czyli :
    Call getdatetime: . Problemy które pozostały to:
    Wzrost poboru prądu o 200 mikroamper.
    Procesor nie wstaje po podpięciu zasilania, nic się nie wyświetla. Dopiero po resecie z Bascoma wstaje. Popróbuję jeszcze.
  • #16
    User removed account
    User removed account  
  • #17
    inspector_electro
    Level 22  
    Wyłączenie adc pomogło ograniczyć prąd w trybie powerdown, ale:

    Procesor nie wstaje po podpięciu zasilania. Jeśli włączam zegarek przyciskiem i wyłączam, ADC pracuje. Jednak jeśli wyłączy się po określonej sekundzie, to po włączeniu go przyciskiem ADC nie pracuje.
    Nie mam do tego g.... już siły.

    Code: vbnet
    Log in, to see the code



    Tutaj obsługa wyłacznia po określonej sekundzie. PORTD.4 zaświeca na chwilę diodę dransoptora, który oddziaływuje na switch wyłączający zegar.

    Code: vbnet
    Log in, to see the code
  • #18
    User removed account
    User removed account  
  • #19
    inspector_electro
    Level 22  
    A więc tak.
    Procesor nie chce wstawać lub oled po podpięciu zasilania. Pomaga reset z basoma. Odliczanie nie działa bo auto wyłączenie następuje po około minucie.
    Pobór prądu po wyłączeniu znowu wzrósł do 690 mikro amper. A mój najlepszy wynik był 460 po wyłaczeniu. Dodanie Disable ADC po wyłączeniu INT0 nic nie daje,
    pobór prądu się nie zmienia. Nie rozumiem też konfiguracji detekcji ładowarki.

    Code: vbnet
    Log in, to see the code


    Wiem że to portb.2 ale co dalej?
  • #20
    inspector_electro
    Level 22  
    Ogarnąłem PCINT2, ale dalej jest nie dobrze. Procesor nie chce wstawać lub oled po podpięciu zasilania. Pomaga reset z basoma. Odliczanie nie działa bo auto wyłączenie następuje po około minucie.
    Pobór prądu po wyłączeniu znowu wzrósł do 690 mikro amper.
  • #21
    User removed account
    User removed account  
  • #22
    inspector_electro
    Level 22  
    Sprawdzę to. A dla czego prąd przy uśpieniu jest znowu duży? Nie pomaga teraz wyłączenie adc. Próbowałem też wyłączenia przerwań, ale nic kurde nie pomaga na obniżenie poboru prądu po uśpieniu. Komenda odlicz była ustawiona na 5. Nie działało to. Gdy ustawię 50, wtedy działa 5 sekund i gaśnie czyli ok.
    No i w końcu, procesor startuje za każdym razem po podaniu zasilania, pod warunkiem że do flagi lock dodam 1.

    Code: vbnet
    Log in, to see the code



    Wklejam cały kod:


    Code: vbnet
    Log in, to see the code


    Dodano po 4 [minuty]:

    Aha. PCINT2 na razie zostawiłem, bo w zestawie testowym mam inny port do detekcji ładowarki.

    Dodano po 19 [godziny] 49 [minuty]:

    Są postępy :D Udało mi się zejść z poborem prądu do 430 mikro amper. Choć można pewnie jeszcase mniej. Pomogło powyłączanie niektórych portów:

    Code: vbnet
    Log in, to see the code


    Nie mogę sobie tylko poradzić z wyświetlaniem statusu baterii, tzn. wyświetla ok. ale przy przejściu z baterii naładowanej na baterię "naładuj" to wraz ze skokiem odczytu ADC skacze mi napis i ikonka baterii. Nie mogę tego ustabilizować. Jeśli uda się to ogarnąć, to praktycznie byłby to ko niec projektu.
    Chyba że coś dołożę.

    Obsługa wyświetlania statusu baterii:


    Code: vbnet
    Log in, to see the code




    Pokażę teraz zegarek który noszę już ze 2 miesiące i jest na starym, źle napisanym sofcie. Póki co testuję program w którym mi pomagasz Niveasoft, na innym zestawie, a docelowo dobry już program, wgram do gotowego zegarka.


    Bascom- znowu warunek IF-ELSE. Bascom- znowu warunek IF-ELSE. Bascom- znowu warunek IF-ELSE. Bascom- znowu warunek IF-ELSE. Bascom- znowu warunek IF-ELSE.
  • #23
    User removed account
    User removed account