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

BASCOM program nie działa zgodnie z założeniem

benek111 02 Maj 2015 20:24 531 2
  • #1 02 Maj 2015 20:24
    benek111
    Poziom 17  

    ATTiny13, do pinu 2 (PB3) podłączony jest dzielnik napięcia mierzący napięcie zasilania. Po spadku napięcia poniżej zadanej wartości powinna nastąpić sygnalizacja poprzez "wywołanie 3 mignięć" na pinie 5 (PB0). Poziom napięcia przy, którym ma nastąpić sygnalizacja ustalany jest przez zapis wartości napięcia zasiania do EEPROMu po zwarciu pinu 1 (PB%) do masy.
    Co się dzieje ? Po zwarciu pinu 1 do masy następują "3 mignięcia" i na pinie 5 zostaje stan wysoki. Po odłączeniu i załączeniu napięcia, niezależnie jakie by ono nie było następują 3 mignięcia i stan wysoki na pinie 5. Czyli tak jakby zawsze wartość odczytana z przetwornika ADC3 była zawsze mniejsza od wartości z EEPROMa. Coś skopałem, tylko co

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    $regfile = "attiny13.dat"
    $crystal = 4000000
    $hwstack = 32
    $swstack = 16
    $framesize = 8
    '$sim

    Config Pinb.0 = Output 'zalaczanie TLC3525 pin5
    Config Pinb.3 = Input 'Wejscie Adc3 pin2
    Config Pinb.5 = Input 'zapis do EEPROMA pin1

    Set Portb.0
    Set Portb.5

    Dim W As Word 'zmienna W przechowuje wartosc napiecia
    Dim C As Word 'zmienna pomocnicza nap rozladowania aku
    Dim A As Byte 'zmienna pomocnicz aby nie migalo w kolko

    Config Adc = Single , Prescaler = Auto , Reference = Internal 'konfiguracja przetwoenika ADC Vref=1.1V


    A = 0
    Start Adc
    Readeeprom C , 1 'odczyt napiecia z EEPROMa
    Do

    W = Getadc(3) 'odczyt napiecia na kanale 3 porcie PB3 czyli ADC3



    If W < C And A = 0 Then 'aku slabe 3 migniecia
    Reset Portb.0
    Waitms 400
    Set Portb.0
    Waitms 400
    Reset Portb.0
    Waitms 400
    Set Portb.0
    Waitms 400
    Reset Portb.0
    Waitms 400
    Set Portb.0
    A = 1
    End If

    If Pinb.5 = 0 Then
    Writeeeprom W , 1 ' zapis do eeprom poz napiecia rozladowania aku
    Waitms 100
    End If


    Loop

    End 'end program
    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod
    [/code]

    0 2
  • #2 02 Maj 2015 21:44
    373522
    Użytkownik usunął konto  
  • #3 02 Maj 2015 22:58
    benek111
    Poziom 17  

    Dzięki za odpowiedź !
    No fakt, wyzerowana pamięć ma same FF... Ale po zwarciu przycisku już nie.
    Co nie zmienia faktu, że trzeba dodać licznik pomiarów bo stan urządzenia musi się ustabilizować inaczej pierwsze odczyty napięcia będą "niskie" .Tego A nie muszę zerować przyciskiem to ma zamigać jeden raz.
    To jest (będzie) latarka i ma być sygnalizacja, że trzeba ładować przed następnym użyciem. Wartość przy, której ma być sygnalizacja ma być ustalona nie na podstawie obliczeń ( bo to i rezystory w dzielniku mają pewną tolerancję i napięcie odniesienia itp itd) więc lepiej zrobić pomiar i guziczkiem zapisać.
    żeby nie przeciągać ....poprawiłem i działa.Dziękuję za pomoc !
    Aha! Pin 1 wybrałem dlatego, że muszę zmieścić się na płytce, którą mam z oryginalnej latarki.

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    $regfile = "attiny13.dat"
    $crystal = 4000000
    $hwstack = 32
    $swstack = 16
    $framesize = 8
    '$sim

    Config Pinb.0 = Output 'zalaczanie TLC3525 pin5
    Config Pinb.3 = Input 'Wejscie Adc3 pin2
    Config Pinb.5 = Input 'zapis do EEPROMA pin1

    Set Portb.0
    Set Portb.5

    Dim W As Word 'zmienna W przechowuje wartosc napiecia
    Dim C As Word 'zmienna pomocnicza nap rozladowania aku
    Dim A As Byte 'zmienna pomocnicz aby nie migalo w kolko
    Dim I As Byte ' Licznik

    Config Adc = Single , Prescaler = Auto , Reference = Internal 'konfiguracja przetwoenika ADC Vref=1.1V


    I = 0
    C = 500
    A = 0
    Start Adc
    Readeeprom C , 1 'odczyt napiecia z EEPROMa
    Do

    W = Getadc(3) 'odczyt napiecia na kanale 3 porcie PB3 czyli ADC3
    If W < C Then Incr I


    If W < C And A = 0 And I > 20 Then 'aku slabe 3 migniecia
    Reset Portb.0
    Waitms 400
    Set Portb.0
    Waitms 400
    Reset Portb.0
    Waitms 400
    Set Portb.0
    Waitms 400
    Reset Portb.0
    Waitms 400
    Set Portb.0
    I = 0
    A = 1
    End If

    If Pinb.5 = 0 Then
    Writeeeprom W , 1 ' zapis do eeprom poz napiecia rozladowania aku
    Waitms 100
    End If


    Loop

    End 'end program

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    0