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

[bascom] [mega8] - zawieszanie procesora- dziwna sprawa

nouki 28 Cze 2008 11:43 1877 12
REKLAMA
  • #1 5293382
    nouki
    Poziom 25  
    Cześć napisałem program który działa ok ale tylko pozornie bo w symulacji.
    zawiesza mi sie na tej linijce jak go umieszcze w procku.
    
    ..
    ..
    Config Timer0 = Timer , Prescale = 64
    Config Adc = Free , Prescaler = Auto , Reference = Avcc
    Start Adc
    
    Dim Sek As Byte
    Dim Minuta As Byte
    Dim Godzina As Byte
    Dim Krok As Byte
    Dim A As Integer
    Dim B As Byte
    Dim C As Byte
    Dim D As Byte
    Dim E As Byte
    Dim F As Byte
    Dim G As Byte
    Dim X As Byte
    Dim Y As Byte
    Dim Warprad As Integer
    Dim Warnap As Integer
    Dim Warnapx As String * 3
    Dim Warpradx As String * 3
    Dim Ah As Word
    Dim Ogniwo As Word
    Dim Wartosc As Word
    Dim Wartosc1 As Single
    Dim P As Single
    Dim N As Single
    Dim Licznik As Integer
    
    ..
    ..
    
    Do
    
    If S4 = 0 Then
    Goto Na_czas:
    End If
    If S1 = 0 Then
    Waitms 500
    Goto Czas
    End If
    If S2 = 0 And S3 = 0 Then
    Goto Koniec2:
    End If
    
    Set Portd.5
    
    Warprad = Getadc(5)
    Warnap = Getadc(3)
    
    P = Warprad
    Warpradx = Fusing(p , "#.##")
    Locate 2 , 1
    Lcd "A = " ; Warpradx;
    
    N = Warnap * 0.032
    Warnapx = Fusing(n , "#.##")
    Locate 1 , 1
    Lcd "V = " ; Warnapx;
    
    Loop
    


    zawiesza się jak zaczyna pobierac" Warprad = Getadc(5)
    Warnap = Getadc(3) "
    stan portu sie jeszcze ustawia i koniec.
    jesli wyremuje "getadc " to to petla jest ok.

    Nic nie rozumię z tego i pierwszy raz się spotkałem z takim czymś
  • REKLAMA
  • REKLAMA
  • #3 5293408
    nouki
    Poziom 25  
    ale ja tam nie wchodzę
    jak wejde w "program" to ustawia port i zawiesza się

    If S1 = 0 Then
    Wait 1
    Goto Program
    End If
    Loop

    dlatego jest wait 1 by nie wszedł od razu, ale jeśli przytrzymam to wejdzie wyświetli co ma i wracajac zawiesza się tak samo:)

    Jeśli jest tylko pomiar bez całej reszty działa :) siedze nad tym juz 2 dzień więc może mało już widze. sądze że coś sie gryzie ale nie mam błędów i chodzi w symulacji więc sam nie wiem juz :)
  • REKLAMA
  • REKLAMA
  • #7 5293546
    nouki
    Poziom 25  
    zmieniłem config adc z takiego:

    
    Config Adc = Free , Prescaler = Auto , Reference = Avcc 
    Start Adc
    


    na taki:
    
    Config Adc = Single, Prescaler = Auto , Reference = Avcc 
    Start Adc
    


    Ale nie rozumie jakie ma znaczenie czy działa ciągle czy na żądanie

    Mam jeszcze jedno pytanie jak zmienić wynik by nie pokazywało po przecinku??
  • #8 5293564
    Balu
    Poziom 38  
    Fusing?

    Nie powinno być różnicy w "wykonywaniu" kodu jako takim:) Chyba, że akurat jak masz free to z jakiegoś powodu się jeden bajt na stos więcej odkłada:) I się przepełnia;D Albo sam nie wiem :)
  • #9 5293725
    ZbeeGin
    Poziom 39  
    nouki napisał:
    Ale nie rozumie jakie ma znaczenie czy działa ciągle czy na żądanie

    GETADC wymaga takiej a nie innej konfiguracji przetwornika. Pisze o tym w helpie. Trzeba było przeczytać...

    http://zbeegin.republika.pl/bashelp/s_config_adc.html
    http://zbeegin.republika.pl/bashelp/f_getadc.html

    nouki napisał:
    Mam jeszcze jedno pytanie jak zmienić wynik by nie pokazywało po przecinku??

    Po prostu usuń funkcję FUSING() z generowania wyniku.
  • Pomocny post
    #11 5293912
    ZbeeGin
    Poziom 39  
    Balu napisał:
    No i wszystko jasne:) W końcu kto wie lepiej niż autor tłumaczenia:)

    Człowiek jest istotą omylną, a BASCOM jeszcze pełen zagadek i błędów. Co będzie jak moje informacje - z bliżej niewiadomego powodu - nie będą prawdziwe? :D
  • #12 5293937
    Balu
    Poziom 38  
    Będzie wtedy na Ciebie :D :]
    Pozdrawiam :)
    Dla mnie bascom jest wciąż przerażający chociaż napisałem na nim kiedyś kilkudziesięcio kilowy (i nie było tam stosu ani niczego takiegi :P ) kod:]
    (I pamiętam jakie były cyrki a doskonale wiem czym się różni call od jmpa;])
  • #13 5295456
    nouki
    Poziom 25  
    a ja się nagłowiłem jeszcze nad sprawa liczenia:
    -co 5 sek na timerku napięcia ogniwa czyli wartości napięcia przez ilość ogniw
    co 5 sek napięcie jakie jest /12
    wynik wychodził taki że sam sie dziwiłem

    - co minutę prąd jaki jest dzielony na 60 i dodawany by osiągnąć ampero godziny
    czyli co 60 sek prąd/ 60 i dodawany do siebie który daje Ah. wynik wychodził taki że sam sie dziwiłem.

    Ale troszkę myślenia i zabiegów i normalnie działa. Jak na początek nauki to coś mi się zdaje że osiwieje nim coś stanie się jaśniejsze, ale człowiek jak małpa nauczy się wszystkiego :)

    p.s "fusing" zaokraglenie bez niego jest jeszcze wiecej po przecinku:)

    p.s
    jak robiłem sterownik na Pwm to było to obojętne jak ustawiałem i działało :) Więc dlatego mnie dopadła dziwota:p
    p.s 2

    Cytat:

    Należy upewnić się czy przetwornik ADC został wcześniej włączony instrukcją START ADC, lub też przez ustawienie odpowiednich bitów w rejestrze kontrolnym przetwornika.

    Uwaga! Instrukcji tej nie można użyć jeśli za pomocą CONFIG ADC skonfigurowano przetwornik do pracy w trybie FREE.


    teraz juz wiem czemu tam działało a tu nie:) Dziekuje za zainteresowanie i sukcesów w nauce:)
REKLAMA