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

[ATmega8][Bascom] Znikająca zmienna

elektor18 20 Paź 2011 18:03 1469 9
  • #1 10047302
    elektor18
    Poziom 18  
    Witam
    Przy pomiarze dwóch napięć z przetwornika (jeden kanał reprezentuje napięcie, drugi prąd) i późniejszym wymnożeniu tych wielkości jako moc, zmienna ta znika kiedy zakres przekroczy ponad 10W, natomiast wartość prądu i napięcia pokazuje w całym zakresie. O co biega? Przekroczony zakres zmiennej? Teraz jest typu single.[/i][/u]
  • #3 10047452
    M. S.
    Poziom 34  
    Jeśli możesz to unikaj zmiennych single. Przemnóż napięcie i prąd przez 10, 100, 1000 ... aby uzyskać wartość całkowitą, przemnóż, zmień otrzymaną wartość na string i sformatuj z przecinkiem we właściwym miejscu.

    Instrukcje:
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #4 10049347
    elektor18
    Poziom 18  
    Kod poniżej:
    Kod: text
    Zaloguj się, aby zobaczyć kod


    Po przekroczeniu 10W na LCD pokazuje sie: "Pwej=[W]", brak zmiennej Pwej
  • #5 10049494
    Mundi1970
    Poziom 24  
    Na początek zwiększyłbym stos ;) ($hwstack, $swstack i $framesize).
  • #6 10054120
    elektor18
    Poziom 18  
    Zmieniłem te parametry stosu ale nic to nie dało. Wciąż powyżej danej wartości następuje zanik zmiennej.
  • #7 10054184
    Mundi1970
    Poziom 24  
    Wygląda na to że któraś zmienna String jest za krótka i nadpisuje String Pwej.
    Uruchom w symulatorze ten programik to zrozumiesz o co mi chodzi :).

    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #8 10054449
    elektor18
    Poziom 18  
    To nie to. To wygląda na LCD tak:
    - do 10W : "Pwej=10[W]"
    - powyżej 10W: "Pwej=[W]"
  • Pomocny post
    #9 10054602
    Mundi1970
    Poziom 24  
    elektor18 napisał:
    - powyżej 10W: "Pwej=[W]"


    Tak będzie się wyświetlało jeżeli pierwszym bajtem zmiennej String Pwej będzie 0. Zero jest końcem łańcucha (dwie możliwości takiego błędu już podałem stos, albo nadpisanie przez inny łańcuch ;)). Nie piszesz też jaka wersja Bascoma to jest, może w którejś wersji był błąd z funkcją Fusing. Możesz podglądnąć co się dzieje z Pwej i wyświetlić w terminal lub na LCD. Jeżeli zmienna ma długość powiedzmy 5 bajtów to można zrobić to tak:

    Kod: text
    Zaloguj się, aby zobaczyć kod


    Przed zastosowaniem Fusing wyświetlić zmienną P1 i sprawdzić czy wynik poprawny.
  • #10 10062818
    elektor18
    Poziom 18  
    Zmienna P1 pokazywana jest poprawnie. Postanowiłem dokonać zmian w programie, przenieść w dalszą część programu funkcję Fusing i pomogło, teraz wyświetla poprawnie. Tak czy siak na dobrą sprawę nie zostało zmienione, to chyba wina Bascom'a. Dziękuję za pomoc i zainteresowanie, nagroda +pomógł :)
REKLAMA